Dialog Boxes & AutoLISP - Part 3
Let us now add an Edit Box and a slider so that the user can enter the size of the slot, if a slotted hole is chosen. Note that the Edit Box and Slider only become active if the slotted bolt radio button is selected.
The DCL coding :
samp6 : dialog { //dialog name
label = "Structural Holes" ; //give it a label
: row { //define row
:boxed_radio_column { //define radio column
label = "Type" ; //give it a label
: radio_button { //define radion button
key = "rb1" ; //give it a name
label = "Bolt Holes &Site" ; //give it a label
value = "1" ; //switch it on
} //end definition
: radio_button { //define radio button
key = "rb2" ; //give it a name
label = "Bolt Holes Sho&p" ; //give it a label
} //end definition
: radio_button { //define radio button
key = "rb3" ; //give it a name
label = "Bolt Holes &Hidden" ; //give it a label
} //end definition
: radio_button { //define radio button
key = "rb4" ; //give it a name
label = "Bolt Holes &Ctsnk" ; //give it a label
} //end definition
: radio_button { //define radio button
key = "rb5" ; //give it a name
label = "Bolt Holes &Elevation" ; //give it a label
} //end definition
: radio_button { //define radion button
key = "rb6" ; //give it a name
label = "Bolt Holes &Slotted" ; //give it a label
} //end definition
} //end radio column
: boxed_column { //define boxed column
label = "&Size"; //give it a label
: popup_list { //define popup list
key = "selections"; //give it a name
value = "5" ; //initial value
} //end list
} //end boxed column
} //end row
: edit_box { //define edit box
key = "eb1" ; //give it a name
label = "Slot &Length (O/All Slot)" ; //give it a label
edit_width = 6 ; //6 characters only
} //end edit box
: slider { //defin slider
key = "myslider" ; //give it a name
max_value = 100; //upper value
min_value = 0; //lower value
value = "50"; //initial value
} //end slider
ok_cancel ; //predifined OK/Cancel
: row { //define row
: image { //define image tile
key = "im" ; //give it a name
height = 1.0 ; //and a height
width = 1.0 ; //and now a width
} //end image
: paragraph { //define paragraph
: text_part { //define text
label = "Designed and Created"; //give it some text
} //end text
: text_part { //define more text
label = "by Kenny Ramage"; //some more text
} //end text
} //end paragraph
} //end row
} //end dialog
And now the AutoLISP coding :
(defun C:samp6 () ;define function (setq lngth 50.0) ;preset slot length (setq hole "site") ;preset hole type (setq siz "M20") ;preset hole size (setq NAMES '("M6" "M8" "M10" "M12" "M16" "M20" "M24" "M30") ;define list );setq (setq dcl_id (load_dialog "samp6.dcl")) ;load dialog (if (not (new_dialog "samp6" dcl_id) ;test for dialog );not (exit) ;exit if no dialog );if (setq w (dimx_tile "im") ;get image tile width h (dimy_tile "im") ;get image tile height );setq (start_image "im") ;start the image (fill_image 0 0 w h 5) ;fill it with blue (end_image) ;end image (start_list "selections") ;start the list box (mapcar 'add_list NAMES) ;fill the list box (end_list) ;end list (set_tile "eb1" "50") ;put data into edit box (mode_tile "eb1" 1) ;disable edit box (mode_tile "myslider" 1) ;disable slider (action_tile "myslider" ;if user moves slider "(slider_action $value $reason)") ;pass arguments to slider_action (action_tile "eb1" ;is user enters slot length "(ebox_action $value $reason)") ;pass arguments to ebox_action (defun slider_action (val why) ;define function (if (or (= why 2) (= why 1)) ;check values (set_tile "eb1" val))) ;update edit box (defun ebox_action (val why) ;define function (if (or (= why 2) (= why 1)) ;check values (set_tile "myslider" val))) ;update slider (action_tile "rb1" "(setq hole \"site\")") ;store hole type (action_tile "rb2" "(setq hole \"shop\")") ;store hole type (action_tile "rb3" "(setq hole \"hid\")") ;store hole type (action_tile "rb4" "(setq hole \"ctsk\")") ;store hole type (action_tile "rb5" "(setq hole \"elev\")") ;store hole type (action_tile "rb6" "(setq hole \"slot\") ;store hole type (mode_tile \"eb1\" 0) ;enable edit box (mode_tile \"myslider\" 0) ;enable slider (mode_tile \"eb1\" 2)") ;switch focus to edit box (action_tile "cancel" ;if cancel button pressed "(done_dialog) (setq userclick nil)" ;close dialog, set flag );action_tile (action_tile "accept" ;if O.K. pressed (strcat ;string 'em together "(progn (setq SIZ (atof (get_tile \"selections\")))" ;get list selection "(setq lngth (atof (get_tile \"eb1\")))" ;get slot length " (done_dialog)(setq userclick T))" ;close dialog, set flag );strcat );action tile (start_dialog) ;start dialog (unload_dialog dcl_id) ;unload (if userclick ;check O.K. was selected (progn (setq SIZ (fix SIZ)) ;convert to integer (setq SIZ (nth SIZ NAMES)) ;get the size );progn );if userclick (princ) );defun C:samp (princ)
Now, for the fun of it, let's add some toggles :

Here is the DCL coding :
samp7 : dialog { //dialog name
label = "Structural Holes" ; //give it a label
: row { //define row
:boxed_radio_column { //define radio column
label = "Type" ; //give it a label
: radio_button { //define radion button
key = "rb1" ; //give it a name
label = "Bolt Holes &Site" ; //give it a label
value = "1" ; //switch it on
} //end definition
: radio_button { //define radio button
key = "rb2" ; //give it a name
label = "Bolt Holes Sho&p" ; //give it a label
} //end definition
: radio_button { //define radio button
key = "rb3" ; //give it a name
label = "Bolt Holes &Hidden" ; //give it a label
} //end definition
: radio_button { //define radio button
key = "rb4" ; //give it a name
label = "Bolt Holes &Ctsnk" ; //give it a label
} //end definition
: radio_button { //define radio button
key = "rb5" ; //give it a name
label = "Bolt Holes &Elevation" ; //give it a label
} //end definition
: radio_button { //define radion button
key = "rb6" ; //give it a name
label = "Bolt Holes &Slotted" ; //give it a label
} //end definition
} //end radio column
: boxed_column { //define boxed column
label = "&Size"; //give it a label
: popup_list { //define popup list
key = "selections"; //give it a name
value = "5" ; //initial value
} //end list
} //end boxed column
} //end row
: edit_box { //define edit box
key = "eb1" ; //give it a name
label = "Slot &Length (O/All Slot)" ; //give it a label
edit_width = 6 ; //6 characters only
} //end edit box
: slider { //defin slider
key = "myslider" ; //give it a name
max_value = 100; //upper value
min_value = 0; //lower value
value = "50"; //initial value
} //end slider
:boxed_row { //define boxed row
:toggle { //define toggle
key = "tog1"; //give it a name
label = "Ortho On/Off"; //give it a label
} //end toggle
:toggle { //define toggle
key = "tog2"; //give it a name
label = "Snap On/Off"; //give it a label
} //end definition
} //end boxed row
ok_cancel ; //predifined OK/Cancel
: row { //define row
: image { //define image tile
key = "im" ; //give it a name
height = 1.0 ; //and a height
width = 1.0 ; //and now a width
} //end image
: paragraph { //define paragraph
: text_part { //define text
label = "Designed and Created"; //give it some text
} //end text
: text_part { //define more text
label = "by Kenny Ramage"; //some more text
} //end text
} //end paragraph
} //end row
} //end dialog
And now the AutoLISP coding :
(defun C:samp7 () ;define function (setq lngth 50.0) ;preset slot length (setq hole "site") ;preset hole type (setq siz "M20") ;preset hole size (setq NAMES '("M6" "M8" "M10" "M12" "M16" "M20" "M24" "M30") ;define list );setq (setq dcl_id (load_dialog "samp7.dcl")) ;load dialog (if (not (new_dialog "samp7" dcl_id) ;test for dialog );not (exit) ;exit if no dialog );if (setq w (dimx_tile "im") ;get image tile width h (dimy_tile "im") ;get image tile height );setq (start_image "im") ;start the image (fill_image 0 0 w h 5) ;fill it with blue (end_image) ;end image (start_list "selections") ;start the list box (mapcar 'add_list NAMES) ;fill the list box (end_list) ;end list (set_tile "eb1" "50") ;put dat into edit box (mode_tile "eb1" 1) ;disable edit box (mode_tile "myslider" 1) ;disable slider (setq orth (itoa (getvar "orthomode"))) ;get orthomode value (set_tile "tog1" orth) ;switch toggle on or off (setq sna (itoa (getvar "snapmode"))) ;get snap value (set_tile "tog2" sna) ;switch toggle on or off (action_tile "myslider" ;if user moves slider "(slider_action $value $reason)") ;pass arguments to slider_action (action_tile "eb1" ;is user enters slot length "(ebox_action $value $reason)") ;pass arguments to ebox_action (defun slider_action (val why) ;define function (if (or (= why 2) (= why 1)) ;check values (set_tile "eb1" val))) ;update edit box (defun ebox_action (val why) ;define function (if (or (= why 2) (= why 1)) ;check values (set_tile "myslider" val))) ;update slider (action_tile "tog1" "(setq orth $value)") ;get ortho toggle value (action_tile "tog2" "(setq sna $value)") ;get snap toggle value (action_tile "rb1" "(setq hole \"site\")") ;store hole type (action_tile "rb2" "(setq hole \"shop\")") ;store hole type (action_tile "rb3" "(setq hole \"hid\")") ;store hole type (action_tile "rb4" "(setq hole \"ctsk\")") ;store hole type (action_tile "rb5" "(setq hole \"elev\")") ;store hole type (action_tile "rb6" "(setq hole \"slot\") ;store hole type (mode_tile \"eb1\" 0) ;enable edit box (mode_tile \"myslider\" 0) ;enable slider (mode_tile \"eb1\" 2)") ;switch focus to edit box (action_tile "cancel" ;if cancel button pressed "(done_dialog) (setq userclick nil)" ;close dialog, set flag );action_tile (action_tile "accept" ;if O.K. pressed (strcat ;string 'em together "(progn (setq SIZ (atof (get_tile \"selections\")))" ;get list selection "(setq lngth (atof (get_tile \"eb1\")))" ;get slot length "(setvar \"orthomode\" (atoi orth))" ;ortho on/off "(setvar \"snapmode\" (atoi sna))" ;snap on/off " (done_dialog)(setq userclick T))" ;close dialog, set flag );strcat );action tile (start_dialog) ;start dialog (unload_dialog dcl_id) ;unload (if userclick ;check O.K. was selected (progn (setq SIZ (fix SIZ)) ;convert to integer (setq SIZ (nth SIZ NAMES)) ;get the size );progn );if userclick (princ) );defun C:samp (princ)
This tutorial continues in Part 4.
