summaryrefslogtreecommitdiffstats
path: root/tcllib/examples/tepam/2_argument_dialogbox_introduction.demo
blob: ee75d8bb684b60e992b8cc5194940ab357e0c43e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
##########################################################################
# TEPAM - Tcl's Enhanced Procedure and Argument Manager
##########################################################################
#
# 2_argument_dialogbox_introduction.demo: This file is part of the TEPAM demo
#
# Copyright (C) 2009, 2010 Andreas Drollinger
# 
# Id: 2_argument_dialogbox_introduction.demo
##########################################################################
# See the file "license.terms" for information on usage and redistribution
# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
##########################################################################

#### Initialization ####

DemoControl(Initialization) 1
DemoControl(IsExecutable) {0}

# TEPAM provides the flexible entry form generator argument_dialogbox. A first 
# example of this demo shows the simplicity of building composed entry forms with
# argument_dialogbox. A second example provides an overview of the entry types, 
# features and options that are available with argument_dialogbox.

   package require Tk
   package require tepam
   namespace import -force tepam::*; # Import tepam::procedure and tepam::argument_dialogbox

#### Argument dialogbox - Simple example ####

DemoControl(IsExecutable) {1}

# This first example illustrates the simplicity to create complex data entry 
# forms. It creates an input mask that allows specifying a file to copy, a 
# destination folder as well as a checkbox that allows specifying if an 
# eventual existing file can be overwritten. Comfortable browsers can be used 
# to select files and directories. And finally, the form offers also the 
# possibility to accept and decline the selection.

# The argument_dialogbox returns 0 when the entered data are validated and 1 
# when the data entry is canceled. After the validation of the entered data, the 
# argument_dialogbox defines all the specified variables with the entered data 
# inside the calling context.

# A pair of arguments has to be provided to argument_dialogbox for each variable 
# that has to be specified by this last one. The first argument defines the entry 
# widget type to use to select the variable's data and the second one is a lists 
# of attributes related to the variable and the entry widget.

   set Result [tepam::argument_dialogbox \
      -existingfile {-label "Source file" -variable SourceFile} \
      -existingdirectory {-label "Destination folder" -variable DestDir} \
      -checkbutton {-label "Overwrite existing file" -variable Overwrite}]

   if {$Result=="ok"} {
      puts "Copy $SourceFile to $DestDir"
      if {$Overwrite} {
         puts "Overwrite an eventual existing file"
      }
   } else {
      puts "Canceled"
   }

#### Argument dialogbox - Comprehensive example ####

DemoControl(IsExecutable) {1}

# Many entry widget types are available: Beside the simple generic entries, 
# there are different kinds of list and combo boxes available, browsers for 
# existing and new files and directories, check and radio boxes and buttons, as 
# well as color and font pickers. If necessary, additional entry widget types 
# can be defined.

# The attribute list contains pairs of attribute names and attribute data. The 
# primary attribute is -variable used to specify the variable in the calling 
# context into which the entered data has to be stored. Another often used 
# attribute is -label that allows adding a label to the data entry widget. Other 
# attributes are available that allows specifying default values, the expected 
# data types, valid data ranges, etc.

# The next example of a more complex argument dialog box provides a good overview 
# about the different available entry widget types and parameter attributes. The 
# example contains also some formatting instructions like -frame and -sep which 
# allows organizing the different entry widgets in frames and sections:

   set ChoiceList {"Choice 1" "Choice 2" "Choice 3" "Choice 4" "Choice 5" "Choice 6"}
 
   set Result [tepam::argument_dialogbox \
      -title "System configuration" \
      -context test_1 \
      -frame {-label "Text entries"} \
         -entry {-label Entry1 -variable Entry1} \
         -entry {-label Entry2 -variable Entry2 -default "my default"} \
         -text {-label Text1 -variable Text1 -height 3 -wrap none -default "Start here: "} \
      -frame {-label "Listbox & combobox"} \
         -listbox {-label "Listbox, single selection" -variable Listbox1 \
                   -choices {1 2 3 4 5 6 7 8} -default 1 -height 3} \
         -listbox {-label "Listbox, multiple selection" -variable Listbox2 \
                   -choicevariable ChoiceList -default {"Choice 2" "Choice 3"} \
                   -multiple_selection 1 -height 3} \
         -disjointlistbox {-label "Disjoined listbox" -variable DisJntListbox \
                           -choicevariable ChoiceList \
                           -default {"Choice 3" "Choice 5"} -height 3} \
         -combobox {-label "Combobox" -variable Combobox \
                    -choices {1 2 3 4 5 6 7 8} -default 3} \
      -frame {-label "Checkbox, radiobox and checkbutton"} \
         -checkbox {-label Checkbox -variable Checkbox \
                    -choices {bold italic underline} -choicelabels {Bold Italic Underline} \
                    -default italic} \
         -radiobox {-label Radiobox -variable Radiobox \
                    -choices {bold italic underline} -choicelabels {Bold Italic Underline} \
                    -default underline} \
         -checkbutton {-label CheckButton -variable Checkbutton -default 1} \
      -frame {-label "Files & directories"} \
         -existingfile {-label "Input file" -variable InputFile} \
         -file {-label "Output file" -variable OutputFile} \
         -sep {} \
         -existingdirectory {-label "Input directory" -variable InputDirectory} \
         -directory {-label "Output irectory" -variable OutputDirectory} \
      -frame {-label "Colors and fonts"} \
         -color {-label "Background color" -variable Color -default red} \
         -sep {} \
         -font {-label "Font" -variable Font -default {Courier 12 italic}}]
 
   if {$Result=="ok"} {
      puts "Arguments: "
      foreach Var {
         Entry1 Entry2
         Listbox1 Listbox2 Listbox3 
         Combobox1 Checkbox Radiobox Checkbutton
         InputFile OutputFile InputDirectory OutputDirectory
         Color Font
      } {
         puts "  $Var: '[set $Var]'"
      }
   } else {
      puts "Canceled"
   }

##########################################################################
# Id: 2_argument_dialogbox_introduction.demo
# Modifications:
#
# Revision 1.3  2012/05/07 20:27:26  droll
# * TEPAM version 0.4.0
# * Add the new text procedure argument type and the text multi line data
#   entry widget.
#
# Revision 1.2  2012/03/26 20:58:15  droll
#
# Revision 1.1  2010/02/11 21:54:38  droll
# * TEPAM module checkin
##########################################################################