Statalist The Stata Listserver


[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: Re: Re: using dynamic_list_control class


From   Kevin Crow <kcrow@stata.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Re: Re: using dynamic_list_control class
Date   Thu, 15 Mar 2007 17:52:05 -0500

Zurab,

What you need to do is create an empty object when the dialog is loaded and then append to that object onpush(). For example,


**************************d1.dlg****************************
/*

*! VERSION 1.0.0 15mar2007

*/

VERSION 9
SYNCHRONOUS_ONLY
POSITION . . 400 300
OK ok1, label("OK")
CANCEL can1, label("Cancel")
SUBMIT sub1, label("Submit")
RESET res1

SCRIPT POSTINIT
BEGIN program setup
END


DIALOG main, label("Test EDIT control as varlist")
BEGIN
TEXT tx_var 10 10 100 ., ///
label("Variable:") right
EDIT ed_var +105 @ 100 .,

BUTTON bu_add @ 50 100 ., ///
label("Add Variable") onpush(program getVar)


TEXT tx_vlist 10 90 100 ., ///
label("Variable list:") right

LISTBOX lb_vlist +105 @ 100 ., ///
contents(variables)
END

LIST variables
BEGIN
// intentionally empty
// this list will be populated by d1_work.ado
END

PROGRAM setup
BEGIN put "d1_work Init"
stata hidden
END



PROGRAM getVar
BEGIN put "d1_work addVar " main.ed_var
stata hidden
END
*********************************************************

******************d1_work.ado*****************************
program d1_work
version 9
gettoken subcmd 0 : 0
`subcmd' `0'
end

program Init
.dlist = .dynamic_list_control.new , ///
dialogname(d1) controlname(main.lb_vlist)

end


program addVar
syntax [anything]
.dlist.appendItem, item("`anything'") end

*********************************************************





Kevin




Zurab Sajaia wrote:

Thanks a lot Sergiy,

It's not quite what I meant, perhaps I should have been clearer in my question:

Lets consider this setup, there is an editbox, button and a listbox, user adds items to the list by typing into the editbox and then pushing the button. So if we link a code similar to yours to the -onpush- event of the button then everytime we push the button ".dlist=.dynamic_list_control.new, dialogname(mydlg2) controlname(tabby2.lb1)" line will clear the list ...

I "fixed" the problem by rewriting my own apenditem / removeitem programs (mostly taken from dynamic_list_control.class) but posted the question to make sure there is no easier way to use already existing tool.

best,
zurab


----- Original Message ----- From: "Sergiy Radyakin" <Radyakin@aoek.uni-hannover.de>
To: <statalist@hsphsun2.harvard.edu>
Sent: Thursday, March 15, 2007 3:53 PM
Subject: st: Re: using dynamic_list_control class



Hello Zurab,

I am using the file dynamic_list_control.class from Stata's base ADO directory as a hint on your question.
Notice comments

// WE MUST KEEP THE GUI CONTROL AND THE CLASS SYSTEM IN SYNC

throughout.

So if I wanted to add an item to a dynamic list I do it like this:

.dlist=.dynamic_list_control.new, dialogname(mydlg2) controlname(tabby2.lb1)
.dlist.setList, newlist(`"`vars'"')
.dlist.print

.mydlg2_dlg.Vars1.Arrpush "Something"
.mydlg2_dlg.tabby2.lb1.additem "Something"

.`.dlist.fullListReference'.Arrpush "Something2"
.`.dlist.fullObjectReference'.additem "Something2"

classutil drop .dlist


Notice that Vars1 is defined as a dummy list in the dialog file.
You can either address the list directly (as in "Something"), or refer to it's fields, containing the full references (as in "Something2").
.dlist.print will display the contents of these fields.

In short, the above code will create a dynamic list object with items from local macro vars, and then append two items to the end of the list.

Question to all dialog programmers. What references/tutorials on dialog programming and controls are available in the Internet? Google search yields hardly a handfull of links :(


Best Regards, Sergiy Radyakin



----- Original Message ----- From: "Zurab Sajaia" <zsajaia@hotmail.com>
To: "statalist" <statalist@hsphsun2.harvard.edu>
Sent: Thursday, March 15, 2007 5:35 PM
Subject: st: using dynamic_list_control class



Dear all,

I'm building a dialog with dynamically changed content and based on earlier discussions on the Statalist came to use dynamic_list_control class.

James Hassell kindly showed how to set the list interactively, and now I'm trying to use other methods of the class, namely appending or deleting an item.

My problem is that whenever the new instant is created and linked to the listbox, contents of the list are cleared:

dlist = .dynamic_list_control.new , dialogname(d1) controlname(main.lb_level)

.set method (which is called by .new) has "._clearList" at the end that clears the list. This was not an issue in the example given by James because he was then redefining the new list by:

.dlist.setList, newlist(`levels')

but if I need to add (or drop) one item only this seems to be a problem:
.dlist.appendItem, item("something") will result in list containing just "something".

I'd appreciate much any advice what to change (if Im doing something wrong)

Thanks,
Zurab



*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/
*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/



© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index