Dialogue Boxes - Step by Step - Page III.
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)
|