aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pgaccess/lib/forms.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pgaccess/lib/forms.tcl')
-rw-r--r--src/bin/pgaccess/lib/forms.tcl1263
1 files changed, 1263 insertions, 0 deletions
diff --git a/src/bin/pgaccess/lib/forms.tcl b/src/bin/pgaccess/lib/forms.tcl
new file mode 100644
index 00000000000..631c3537c72
--- /dev/null
+++ b/src/bin/pgaccess/lib/forms.tcl
@@ -0,0 +1,1263 @@
+namespace eval Forms {
+
+proc {new} {} {
+global PgAcVar
+ Window show .pgaw:FormDesign:menu
+ tkwait visibility .pgaw:FormDesign:menu
+ Window show .pgaw:FormDesign:toolbar
+ tkwait visibility .pgaw:FormDesign:toolbar
+ Window show .pgaw:FormDesign:attributes
+ tkwait visibility .pgaw:FormDesign:attributes
+ Window show .pgaw:FormDesign:draft
+ design:init
+}
+
+
+proc {open} {formname} {
+ forms:load $formname run
+ design:run
+}
+
+proc {design} {formname} {
+ forms:load $formname design
+}
+
+
+proc {design:change_coords} {} {
+global PgAcVar
+ set PgAcVar(fdvar,dirty) 1
+ set i $PgAcVar(fdvar,attributeFrame)
+ if {$i == 0} {
+ # it's the form
+ set errmsg ""
+ if {[catch {wm geometry .pgaw:FormDesign:draft $PgAcVar(fdvar,c_width)x$PgAcVar(fdvar,c_height)+$PgAcVar(fdvar,c_left)+$PgAcVar(fdvar,c_top)} errmsg] != 0} {
+ showError $errmsg
+ }
+ return
+ }
+ set c [list $PgAcVar(fdvar,c_left) $PgAcVar(fdvar,c_top) [expr $PgAcVar(fdvar,c_left)+$PgAcVar(fdvar,c_width)] [expr $PgAcVar(fdvar,c_top)+$PgAcVar(fdvar,c_height)]]
+ set PgAcVar(fdobj,$i,coord) $c
+ .pgaw:FormDesign:draft.c delete o$i
+ design:draw_object $i
+ design:draw_hookers $i
+}
+
+
+proc {design:delete_object} {} {
+global PgAcVar
+ set i $PgAcVar(fdvar,moveitemobj)
+ .pgaw:FormDesign:draft.c delete o$i
+ .pgaw:FormDesign:draft.c delete hook
+ set j [lsearch $PgAcVar(fdvar,objlist) $i]
+ set PgAcVar(fdvar,objlist) [lreplace $PgAcVar(fdvar,objlist) $j $j]
+ set PgAcVar(fdvar,dirty) 1
+}
+
+
+proc {design:draw_hook} {x y} {
+ .pgaw:FormDesign:draft.c create rectangle [expr $x-2] [expr $y-2] [expr $x+2] [expr $y+2] -fill black -tags hook
+}
+
+
+proc {design:draw_hookers} {i} {
+global PgAcVar
+ foreach {x1 y1 x2 y2} $PgAcVar(fdobj,$i,coord) {}
+ .pgaw:FormDesign:draft.c delete hook
+ design:draw_hook $x1 $y1
+ design:draw_hook $x1 $y2
+ design:draw_hook $x2 $y1
+ design:draw_hook $x2 $y2
+}
+
+
+proc {design:draw_grid} {} {
+ for {set i 0} {$i<100} {incr i} {
+ .pgaw:FormDesign:draft.c create line 0 [expr {$i*6}] 1000 [expr {$i*6}] -fill #afafaf -tags grid
+ .pgaw:FormDesign:draft.c create line [expr {$i*6}] 0 [expr {$i*6}] 1000 -fill #afafaf -tags grid
+ }
+}
+
+
+proc {design:draw_object} {i} {
+global PgAcVar
+set c $PgAcVar(fdobj,$i,coord)
+foreach {x1 y1 x2 y2} $c {}
+.pgaw:FormDesign:draft.c delete o$i
+set wfont $PgAcVar(fdobj,$i,font)
+switch $wfont {
+ {} {set wfont $PgAcVar(pref,font_normal) ; set PgAcVar(fdobj,$i,font) normal}
+ normal {set wfont $PgAcVar(pref,font_normal)}
+ bold {set wfont $PgAcVar(pref,font_bold)}
+ italic {set wfont $PgAcVar(pref,font_italic)}
+ fixed {set wfont $PgAcVar(pref,font_fix)}
+}
+switch $PgAcVar(fdobj,$i,class) {
+ button {
+ design:draw_rectangle $x1 $y1 $x2 $y2 $PgAcVar(fdobj,$i,relief) $PgAcVar(fdobj,$i,bcolor) o$i
+ .pgaw:FormDesign:draft.c create text [expr ($x1+$x2)/2] [expr ($y1+$y2)/2] -fill $PgAcVar(fdobj,$i,fcolor) -text $PgAcVar(fdobj,$i,label) -font $wfont -tags o$i
+ }
+ text {
+ design:draw_rectangle $x1 $y1 $x2 $y2 $PgAcVar(fdobj,$i,relief) $PgAcVar(fdobj,$i,bcolor) o$i
+ }
+ entry {
+ design:draw_rectangle $x1 $y1 $x2 $y2 $PgAcVar(fdobj,$i,relief) $PgAcVar(fdobj,$i,bcolor) o$i
+ }
+ label {
+ set temp $PgAcVar(fdobj,$i,label)
+ if {$temp==""} {set temp "____"}
+ design:draw_rectangle $x1 $y1 $x2 $y2 $PgAcVar(fdobj,$i,relief) $PgAcVar(fdobj,$i,bcolor) o$i
+ .pgaw:FormDesign:draft.c create text [expr {$x1+1}] [expr {$y1+1}] -text $temp -fill $PgAcVar(fdobj,$i,fcolor) -font $wfont -anchor nw -tags o$i
+ }
+ checkbox {
+ design:draw_rectangle [expr $x1+2] [expr $y1+5] [expr $x1+12] [expr $y1+15] raised #a0a0a0 o$i
+ .pgaw:FormDesign:draft.c create text [expr $x1+20] [expr $y1+3] -text $PgAcVar(fdobj,$i,label) -anchor nw \
+ -fill $PgAcVar(fdobj,$i,fcolor) -font $wfont -tags o$i
+ }
+ radio {
+ .pgaw:FormDesign:draft.c create oval [expr $x1+4] [expr $y1+5] [expr $x1+14] [expr $y1+15] -fill white -tags o$i
+ .pgaw:FormDesign:draft.c create text [expr $x1+24] [expr $y1+3] -text $PgAcVar(fdobj,$i,label) -anchor nw \
+ -fill $PgAcVar(fdobj,$i,fcolor) -font $wfont -tags o$i
+ }
+ query {
+ .pgaw:FormDesign:draft.c create oval $x1 $y1 [expr $x1+20] [expr $y1+20] -fill white -tags o$i
+ .pgaw:FormDesign:draft.c create text [expr $x1+5] [expr $y1+4] -text Q -anchor nw -font $PgAcVar(pref,font_normal) -tags o$i
+ }
+ listbox {
+ design:draw_rectangle $x1 $y1 [expr $x2-12] $y2 sunken $PgAcVar(fdobj,$i,bcolor) o$i
+ design:draw_rectangle [expr $x2-11] $y1 $x2 $y2 sunken gray o$i
+ .pgaw:FormDesign:draft.c create line [expr $x2-5] $y1 $x2 [expr $y1+10] -fill #808080 -tags o$i
+ .pgaw:FormDesign:draft.c create line [expr $x2-10] [expr $y1+9] $x2 [expr $y1+9] -fill #808080 -tags o$i
+ .pgaw:FormDesign:draft.c create line [expr $x2-10] [expr $y1+9] [expr $x2-5] $y1 -fill white -tags o$i
+ .pgaw:FormDesign:draft.c create line [expr $x2-5] $y2 $x2 [expr $y2-10] -fill #808080 -tags o$i
+ .pgaw:FormDesign:draft.c create line [expr $x2-10] [expr $y2-9] $x2 [expr $y2-9] -fill white -tags o$i
+ .pgaw:FormDesign:draft.c create line [expr $x2-10] [expr $y2-9] [expr $x2-5] $y2 -fill white -tags o$i
+ }
+}
+.pgaw:FormDesign:draft.c raise hook
+}
+
+proc {design:draw_rectangle} {x1 y1 x2 y2 relief color tag} {
+ if {$relief=="raised"} {
+ set c1 white
+ set c2 #606060
+ }
+ if {$relief=="sunken"} {
+ set c1 #606060
+ set c2 white
+ }
+ if {$relief=="ridge"} {
+ design:draw_rectangle $x1 $y1 $x2 $y2 raised none $tag
+ design:draw_rectangle [expr {$x1+1}] [expr {$y1+1}] [expr {$x2+1}] [expr {$y2+1}] sunken none $tag
+ design:draw_rectangle [expr {$x1+2}] [expr {$y1+2}] $x2 $y2 flat $color $tag
+ return
+ }
+ if {$relief=="groove"} {
+ design:draw_rectangle $x1 $y1 $x2 $y2 sunken none $tag
+ design:draw_rectangle [expr {$x1+1}] [expr {$y1+1}] [expr {$x2+1}] [expr {$y2+1}] raised none $tag
+ design:draw_rectangle [expr {$x1+2}] [expr {$y1+2}] $x2 $y2 flat $color $tag
+ return
+ }
+ if {$color != "none"} {
+ .pgaw:FormDesign:draft.c create rectangle $x1 $y1 $x2 $y2 -outline "" -fill $color -tags $tag
+ }
+ if {$relief=="flat"} {
+ return
+ }
+ .pgaw:FormDesign:draft.c create line $x1 $y1 $x2 $y1 -fill $c1 -tags $tag
+ .pgaw:FormDesign:draft.c create line $x1 $y1 $x1 $y2 -fill $c1 -tags $tag
+ .pgaw:FormDesign:draft.c create line $x1 $y2 $x2 $y2 -fill $c2 -tags $tag
+ .pgaw:FormDesign:draft.c create line $x2 $y1 $x2 [expr 1+$y2] -fill $c2 -tags $tag
+}
+
+
+proc {design:init} {} {
+global PgAcVar
+ PgAcVar:clean fdvar,*
+ PgAcVar:clean fdobj,*
+ catch {.pgaw:FormDesign:draft.c delete all}
+ # design:draw_grid
+ set PgAcVar(fdobj,0,name) {f1}
+ set PgAcVar(fdobj,0,class) form
+ set PgAcVar(fdobj,0,command) {}
+ set PgAcVar(fdvar,formtitle) "New form"
+ set PgAcVar(fdvar,objnum) 0
+ set PgAcVar(fdvar,objlist) {}
+ set PgAcVar(fdvar,oper) none
+ set PgAcVar(fdvar,tool) point
+ set PgAcVar(fdvar,resizable) 1
+ set PgAcVar(fdvar,dirty) 0
+}
+
+
+proc {design:item_click} {x y} {
+global PgAcVar
+ set PgAcVar(fdvar,oper) none
+ set PgAcVar(fdvar,moveitemobj) {}
+ set il [.pgaw:FormDesign:draft.c find overlapping $x $y $x $y]
+ .pgaw:FormDesign:draft.c delete hook
+ if {[llength $il] == 0} {
+ design:show_attributes 0
+ return
+ }
+ set tl [.pgaw:FormDesign:draft.c gettags [lindex $il 0]]
+ set i [lsearch -glob $tl o*]
+ if {$i == -1} return
+ set objnum [string range [lindex $tl $i] 1 end]
+ set PgAcVar(fdvar,moveitemobj) $objnum
+ set PgAcVar(fdvar,moveitemx) $x
+ set PgAcVar(fdvar,moveitemy) $y
+ set PgAcVar(fdvar,oper) move
+ design:show_attributes $objnum
+ design:draw_hookers $objnum
+}
+
+
+proc {forms:load} {name mode} {
+global PgAcVar CurrentDB
+ design:init
+ set PgAcVar(fdvar,formtitle) $name
+ if {$mode=="design"} {
+ Window show .pgaw:FormDesign:draft
+ Window show .pgaw:FormDesign:menu
+ Window show .pgaw:FormDesign:attributes
+ Window show .pgaw:FormDesign:toolbar
+ }
+ set res [wpg_exec $CurrentDB "select * from pga_forms where formname='$PgAcVar(fdvar,formtitle)'"]
+ set info [lindex [pg_result $res -getTuple 0] 1]
+ pg_result $res -clear
+ set PgAcVar(fdobj,0,name) [lindex $info 0]
+ set PgAcVar(fdvar,objnum) [lindex $info 1]
+ # check for old format , prior to 0.97 that
+ # save here the objlist (deprecated)
+ set temp [lindex $info 2]
+ if {[lindex $temp 0] == "FS"} {
+ set PgAcVar(fdobj,0,command) [lindex $temp 1]
+ } else {
+ set PgAcVar(fdobj,0,command) {}
+ }
+ set PgAcVar(fdvar,objlist) {}
+ set PgAcVar(fdvar,geometry) [lindex $info 3]
+ set i 1
+ foreach objinfo [lrange $info 4 end] {
+ lappend PgAcVar(fdvar,objlist) $i
+ set PgAcVar(fdobj,$i,class) [lindex $objinfo 0]
+ set PgAcVar(fdobj,$i,name) [lindex $objinfo 1]
+ set PgAcVar(fdobj,$i,coord) [lindex $objinfo 2]
+ set PgAcVar(fdobj,$i,command) [lindex $objinfo 3]
+ set PgAcVar(fdobj,$i,label) [lindex $objinfo 4]
+ set PgAcVar(fdobj,$i,variable) [lindex $objinfo 5]
+ design:setDefaultReliefAndColor $i
+ set PgAcVar(fdobj,$i,value) $PgAcVar(fdobj,$i,name)
+ if {[llength $objinfo] > 6 } {
+ set PgAcVar(fdobj,$i,value) [lindex $objinfo 6]
+ set PgAcVar(fdobj,$i,relief) [lindex $objinfo 7]
+ set PgAcVar(fdobj,$i,fcolor) [lindex $objinfo 8]
+ set PgAcVar(fdobj,$i,bcolor) [lindex $objinfo 9]
+ set PgAcVar(fdobj,$i,borderwidth) [lindex $objinfo 10]
+ set PgAcVar(fdobj,$i,font) [lindex $objinfo 11]
+ # for space saving purposes we have saved onbly the first letter
+ switch $PgAcVar(fdobj,$i,font) {
+ n {set PgAcVar(fdobj,$i,font) normal}
+ i {set PgAcVar(fdobj,$i,font) italic}
+ b {set PgAcVar(fdobj,$i,font) bold}
+ f {set PgAcVar(fdobj,$i,font) fixed}
+ }
+ }
+ if {$mode=="design"} {design:draw_object $i}
+ incr i
+ }
+ if {$mode=="design"} {wm geometry .pgaw:FormDesign:draft $PgAcVar(fdvar,geometry)}
+}
+
+
+proc {design:mouse_down} {x y} {
+global PgAcVar
+ set x [expr 3*int($x/3)]
+ set y [expr 3*int($y/3)]
+ set PgAcVar(fdvar,xstart) $x
+ set PgAcVar(fdvar,ystart) $y
+ if {$PgAcVar(fdvar,tool)=="point"} {
+ design:item_click $x $y
+ return
+ }
+ set PgAcVar(fdvar,oper) draw
+}
+
+
+proc {design:mouse_move} {x y} {
+global PgAcVar
+ #set PgAcVar(fdvar,msg) "x=$x y=$y"
+ set x [expr 3*int($x/3)]
+ set y [expr 3*int($y/3)]
+ set oper ""
+ catch {set oper $PgAcVar(fdvar,oper)}
+ if {$oper=="draw"} {
+ catch {.pgaw:FormDesign:draft.c delete curdraw}
+ .pgaw:FormDesign:draft.c create rectangle $PgAcVar(fdvar,xstart) $PgAcVar(fdvar,ystart) $x $y -tags curdraw
+ return
+ }
+ if {$oper=="move"} {
+ set dx [expr $x-$PgAcVar(fdvar,moveitemx)]
+ set dy [expr $y-$PgAcVar(fdvar,moveitemy)]
+ .pgaw:FormDesign:draft.c move o$PgAcVar(fdvar,moveitemobj) $dx $dy
+ .pgaw:FormDesign:draft.c move hook $dx $dy
+ set PgAcVar(fdvar,moveitemx) $x
+ set PgAcVar(fdvar,moveitemy) $y
+ set PgAcVar(fdvar,dirty) 1
+ }
+}
+
+proc {design:setDefaultReliefAndColor} {i} {
+global PgAcVar
+ set PgAcVar(fdobj,$i,borderwidth) 1
+ set PgAcVar(fdobj,$i,relief) flat
+ set PgAcVar(fdobj,$i,fcolor) {}
+ set PgAcVar(fdobj,$i,bcolor) {}
+ set PgAcVar(fdobj,$i,font) normal
+ switch $PgAcVar(fdobj,$i,class) {
+ button {
+ set PgAcVar(fdobj,$i,fcolor) #000000
+ set PgAcVar(fdobj,$i,bcolor) #d9d9d9
+ set PgAcVar(fdobj,$i,relief) raised
+ }
+ text {
+ set PgAcVar(fdobj,$i,fcolor) #000000
+ set PgAcVar(fdobj,$i,bcolor) #fefefe
+ set PgAcVar(fdobj,$i,relief) sunken
+ }
+ entry {
+ set PgAcVar(fdobj,$i,fcolor) #000000
+ set PgAcVar(fdobj,$i,bcolor) #fefefe
+ set PgAcVar(fdobj,$i,relief) sunken
+ }
+ label {
+ set PgAcVar(fdobj,$i,fcolor) #000000
+ set PgAcVar(fdobj,$i,bcolor) #d9d9d9
+ set PgAcVar(fdobj,$i,relief) flat
+ }
+ checkbox {
+ set PgAcVar(fdobj,$i,fcolor) #000000
+ set PgAcVar(fdobj,$i,bcolor) #d9d9d9
+ set PgAcVar(fdobj,$i,relief) flat
+ }
+ radio {
+ set PgAcVar(fdobj,$i,fcolor) #000000
+ set PgAcVar(fdobj,$i,bcolor) #d9d9d9
+ set PgAcVar(fdobj,$i,relief) flat
+ }
+ listbox {
+ set PgAcVar(fdobj,$i,fcolor) #000000
+ set PgAcVar(fdobj,$i,bcolor) #fefefe
+ set PgAcVar(fdobj,$i,relief) sunken
+ }
+ }
+}
+
+proc {design:mouse_up} {x y} {
+global PgAcVar
+ set x [expr 3*int($x/3)]
+ set y [expr 3*int($y/3)]
+ if {$PgAcVar(fdvar,oper)=="move"} {
+ set PgAcVar(fdvar,moveitem) {}
+ set PgAcVar(fdvar,oper) none
+ set oc $PgAcVar(fdobj,$PgAcVar(fdvar,moveitemobj),coord)
+ set dx [expr $x - $PgAcVar(fdvar,xstart)]
+ set dy [expr $y - $PgAcVar(fdvar,ystart)]
+ set newcoord [list [expr $dx+[lindex $oc 0]] [expr $dy+[lindex $oc 1]] [expr $dx+[lindex $oc 2]] [expr $dy+[lindex $oc 3]]]
+ set PgAcVar(fdobj,$PgAcVar(fdvar,moveitemobj),coord) $newcoord
+ design:show_attributes $PgAcVar(fdvar,moveitemobj)
+ design:draw_hookers $PgAcVar(fdvar,moveitemobj)
+ return
+ }
+ if {$PgAcVar(fdvar,oper)!="draw"} return
+ set PgAcVar(fdvar,oper) none
+ .pgaw:FormDesign:draft.c delete curdraw
+ # Check for x2<x1 or y2<y1
+ if {$x<$PgAcVar(fdvar,xstart)} {set temp $x ; set x $PgAcVar(fdvar,xstart) ; set PgAcVar(fdvar,xstart) $temp}
+ if {$y<$PgAcVar(fdvar,ystart)} {set temp $y ; set y $PgAcVar(fdvar,ystart) ; set PgAcVar(fdvar,ystart) $temp}
+ # Check for too small sizes
+ if {[expr $x-$PgAcVar(fdvar,xstart)]<20} {set x [expr $PgAcVar(fdvar,xstart)+20]}
+ if {[expr $y-$PgAcVar(fdvar,ystart)]<10} {set y [expr $PgAcVar(fdvar,ystart)+10]}
+ incr PgAcVar(fdvar,objnum)
+ set i $PgAcVar(fdvar,objnum)
+ lappend PgAcVar(fdvar,objlist) $i
+
+ set PgAcVar(fdobj,$i,class) $PgAcVar(fdvar,tool)
+ set PgAcVar(fdobj,$i,coord) [list $PgAcVar(fdvar,xstart) $PgAcVar(fdvar,ystart) $x $y]
+ set PgAcVar(fdobj,$i,name) $PgAcVar(fdvar,tool)$i
+ set PgAcVar(fdobj,$i,label) $PgAcVar(fdvar,tool)$i
+ set PgAcVar(fdobj,$i,command) {}
+ set PgAcVar(fdobj,$i,variable) {}
+ set PgAcVar(fdobj,$i,value) {}
+
+ design:setDefaultReliefAndColor $i
+
+ design:draw_object $i
+ design:show_attributes $i
+ set PgAcVar(fdvar,moveitemobj) $i
+ design:draw_hookers $i
+ set PgAcVar(fdvar,tool) point
+ set PgAcVar(fdvar,dirty) 1
+}
+
+
+proc {design:save} {name} {
+global PgAcVar CurrentDB
+ if {[string length $PgAcVar(fdobj,0,name)]==0} {
+ tk_messageBox -title [intlmsg Warning] -message [intlmsg "Forms need an internal name, only literals, low case"]
+ return 0
+ }
+ if {[string length $PgAcVar(fdvar,formtitle)]==0} {
+ tk_messageBox -title [intlmsg Warning] -message [intlmsg "Form must have a name"]
+ return 0
+ }
+ set info [list $PgAcVar(fdobj,0,name) $PgAcVar(fdvar,objnum) [list FS $PgAcVar(fdobj,0,command)] [wm geometry .pgaw:FormDesign:draft]]
+ foreach i $PgAcVar(fdvar,objlist) {
+ set wfont $PgAcVar(fdobj,$i,font)
+ if {[lsearch {normal bold italic fixed} $wfont] != -1} {
+ set wfont [string range $wfont 0 0]
+ }
+ lappend info [list $PgAcVar(fdobj,$i,class) $PgAcVar(fdobj,$i,name) $PgAcVar(fdobj,$i,coord) $PgAcVar(fdobj,$i,command) $PgAcVar(fdobj,$i,label) $PgAcVar(fdobj,$i,variable) $PgAcVar(fdobj,$i,value) $PgAcVar(fdobj,$i,relief) $PgAcVar(fdobj,$i,fcolor) $PgAcVar(fdobj,$i,bcolor) $PgAcVar(fdobj,$i,borderwidth) $wfont]
+ }
+ sql_exec noquiet "delete from pga_forms where formname='$PgAcVar(fdvar,formtitle)'"
+ regsub -all "'" $info "''" info
+ sql_exec noquiet "insert into pga_forms values ('$PgAcVar(fdvar,formtitle)','$info')"
+ Mainlib::cmd_Forms
+ set PgAcVar(fdvar,dirty) 0
+ return 1
+}
+
+
+proc {design:set_name} {} {
+global PgAcVar
+ set i $PgAcVar(fdvar,moveitemobj)
+ foreach k $PgAcVar(fdvar,objlist) {
+ if {($PgAcVar(fdobj,$k,name)==$PgAcVar(fdvar,c_name)) && ($i!=$k)} {
+ tk_messageBox -title [intlmsg Warning] -message [format [intlmsg "There is another object (a %s) with the same name.\nPlease change it!"] $PgAcVar(fdobj,$k,class)]
+ return
+ }
+ }
+ set PgAcVar(fdobj,$i,name) $PgAcVar(fdvar,c_name)
+ design:show_attributes $i
+ set PgAcVar(fdvar,dirty) 1
+}
+
+
+proc {design:set_text} {} {
+global PgAcVar
+ design:draw_object $PgAcVar(fdvar,moveitemobj)
+ set PgAcVar(fdvar,dirty) 1
+}
+
+
+proc {design:createAttributesFrame} {i} {
+global PgAcVar
+ # Check if attributes frame is already created for that item
+
+ if {[info exists PgAcVar(fdvar,attributeFrame)]} {
+ if {$PgAcVar(fdvar,attributeFrame) == $i} return
+ }
+ set PgAcVar(fdvar,attributeFrame) $i
+
+ # Delete old widgets from the frame
+ foreach wid [winfo children .pgaw:FormDesign:attributes.f] {
+ destroy $wid
+ }
+
+ set row 0
+ set base .pgaw:FormDesign:attributes.f
+ grid columnconf $base 1 -weight 1
+
+ set objclass $PgAcVar(fdobj,$i,class)
+
+ # if i is zero, then the object is the form
+
+ if {$i == 0} {
+ label $base.l$row \
+ -borderwidth 0 -text [intlmsg {Startup script}]
+ entry $base.e$row -textvariable PgAcVar(fdobj,$i,command) \
+ -background #fefefe -borderwidth 1 -width 200
+ button $base.b$row \
+ -borderwidth 1 -padx 1 -pady 0 -text ... -command "
+ Window show .pgaw:FormDesign:commands
+ set PgAcVar(fdvar,commandFor) $i
+ .pgaw:FormDesign:commands.f.txt delete 1.0 end
+ .pgaw:FormDesign:commands.f.txt insert end \$PgAcVar(fdobj,$i,command)"
+ grid $base.l$row \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.e$row \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ grid $base.b$row \
+ -in $base -column 2 -row $row -columnspan 1 -rowspan 1
+ incr row
+ }
+
+ # does it have a text attribute ?
+ if {[lsearch {button label radio checkbox} $objclass] > -1} {
+ label $base.l$row \
+ -borderwidth 0 -text [intlmsg Text]
+ entry $base.e$row -textvariable PgAcVar(fdobj,$i,label) \
+ -background #fefefe -borderwidth 1 -width 200
+ bind $base.e$row <Key-Return> "Forms::design:set_text"
+ grid $base.l$row \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.e$row \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 -sticky w
+ incr row
+ }
+
+ # does it have a variable attribute ?
+ if {[lsearch {button label radio checkbox entry} $objclass] > -1} {
+ label $base.l$row \
+ -borderwidth 0 -text [intlmsg Variable]
+ entry $base.e$row -textvariable PgAcVar(fdobj,$i,variable) \
+ -background #fefefe -borderwidth 1 -width 200
+ grid $base.l$row \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.e$row \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ incr row
+ }
+
+ # does it have a Command attribute ?
+ if {[lsearch {button checkbox} $objclass] > -1} {
+ label $base.l$row \
+ -borderwidth 0 -text [intlmsg Command]
+ entry $base.e$row -textvariable PgAcVar(fdobj,$i,command) \
+ -background #fefefe -borderwidth 1 -width 200
+ button $base.b$row \
+ -borderwidth 1 -padx 1 -pady 0 -text ... -command "
+ Window show .pgaw:FormDesign:commands
+ set PgAcVar(fdvar,commandFor) $i
+ .pgaw:FormDesign:commands.f.txt delete 1.0 end
+ .pgaw:FormDesign:commands.f.txt insert end \$PgAcVar(fdobj,$i,command)"
+ grid $base.l$row \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.e$row \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ grid $base.b$row \
+ -in $base -column 2 -row $row -columnspan 1 -rowspan 1
+ incr row
+ }
+
+ # does it have a value attribute ?
+ if {[lsearch {radio checkbox} $objclass] > -1} {
+ label $base.l$row \
+ -borderwidth 0 -text [intlmsg Value]
+ entry $base.e$row -textvariable PgAcVar(fdobj,$i,value) \
+ -background #fefefe -borderwidth 1 -width 200
+ grid $base.l$row \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.e$row \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ incr row
+ }
+
+ # does it have fonts ?
+ if {[lsearch {label button entry listbox text checkbox radio} $objclass] > -1} {
+ label $base.lfont \
+ -borderwidth 0 -text [intlmsg Font]
+ grid $base.lfont \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -pady 2 -sticky w
+ entry $base.efont -textvariable PgAcVar(fdobj,$i,font) \
+ -background #fefefe -borderwidth 1 -width 200
+ bind $base.efont <Key-Return> "Forms::design:draw_object $i ; set PgAcVar(fdvar,dirty) 1"
+ grid $base.efont \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 -sticky w
+ menubutton $base.mbf \
+ -borderwidth 1 -menu $base.mbf.m -padx 2 -pady 0 \
+ -text {...} -font $PgAcVar(pref,font_normal) -relief raised
+ menu $base.mbf.m \
+ -borderwidth 1 -cursor {} -tearoff 0 -font $PgAcVar(pref,font_normal)
+ foreach font {normal bold italic fixed} {
+ $base.mbf.m add command \
+ -command "
+ set PgAcVar(fdobj,$i,font) $font
+ Forms::design:draw_object $i
+ set PgAcVar(fdvar,dirty) 1
+ " -label $font
+ }
+ grid $base.mbf \
+ -in $base -column 2 -row $row -columnspan 1 -rowspan 1 -pady 2 -padx 2 -sticky w
+ incr row
+ }
+
+ # does it have colors ?
+ if {[lsearch {label button radio checkbox entry listbox text} $objclass] > -1} {
+ label $base.lcf \
+ -borderwidth 0 -text [intlmsg Foreground]
+ label $base.scf \
+ -background $PgAcVar(fdobj,$i,fcolor) -borderwidth 1 -relief sunken -width 200
+ button $base.bcf \
+ -command "set tempcolor \[tk_chooseColor -initialcolor $PgAcVar(fdobj,$i,fcolor) -title {Choose color}\]
+ if {\$tempcolor != {}} {
+ set PgAcVar(fdobj,$i,fcolor) \$tempcolor
+ $base.scf configure -background \$PgAcVar(fdobj,$i,fcolor)
+ set PgAcVar(fdvar,dirty) 1
+ Forms::design:draw_object $i
+ }" \
+ -borderwidth 1 -padx 1 -pady 0 -text ...
+ grid $base.lcf \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.scf \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ grid $base.bcf \
+ -in $base -column 2 -row $row -columnspan 1 -rowspan 1
+ incr row
+ label $base.lcb \
+ -borderwidth 0 -text Background
+ label $base.scb \
+ -background $PgAcVar(fdobj,$i,bcolor) -borderwidth 1 -relief sunken -width 200
+ button $base.bcb \
+ -command "set tempcolor \[tk_chooseColor -initialcolor $PgAcVar(fdobj,$i,bcolor) -title {Choose color}\]
+ if {\$tempcolor != {}} {
+ set PgAcVar(fdobj,$i,bcolor) \$tempcolor
+ $base.scb configure -background \$PgAcVar(fdobj,$i,bcolor)
+ set PgAcVar(fdvar,dirty) 1
+ Forms::design:draw_object $i
+ }" \
+ -borderwidth 1 -padx 1 -pady 0 -text ...
+ grid $base.lcb \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.scb \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 -sticky w
+ grid $base.bcb \
+ -in $base -column 2 -row $row -columnspan 1 -rowspan 1
+ incr row
+ }
+
+ # does it have border types ?
+ if {[lsearch {label button entry listbox text} $objclass] > -1} {
+ label $base.lrelief \
+ -borderwidth 0 -text [intlmsg Relief]
+ grid $base.lrelief \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -pady 2 -sticky w
+ menubutton $base.mb \
+ -borderwidth 2 -menu $base.mb.m -padx 4 -pady 3 -width 100 -relief $PgAcVar(fdobj,$i,relief) \
+ -text groove -textvariable PgAcVar(fdobj,$i,relief) \
+ -font $PgAcVar(pref,font_normal)
+ menu $base.mb.m \
+ -borderwidth 1 -cursor {} -tearoff 0 -font $PgAcVar(pref,font_normal)
+ foreach brdtype {raised sunken ridge groove flat} {
+ $base.mb.m add command \
+ -command "
+ set PgAcVar(fdobj,$i,relief) $brdtype
+ $base.mb configure -relief \$PgAcVar(fdobj,$i,relief)
+ Forms::design:draw_object $i
+ " -label $brdtype
+ }
+ grid $base.mb \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -pady 2 -padx 2 -sticky w
+ incr row
+
+ }
+
+ # is it a DataControl ?
+ if {$objclass == "query"} {
+ label $base.l$row \
+ -borderwidth 0 -text [intlmsg SQL]
+ entry $base.e$row -textvariable PgAcVar(fdobj,$i,command) \
+ -background #fefefe -borderwidth 1 -width 200
+ grid $base.l$row \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.e$row \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ incr row
+ }
+
+ # does it have a borderwidth attribute ?
+ if {[lsearch {button label radio checkbox entry listbox text} $objclass] > -1} {
+ label $base.l$row \
+ -borderwidth 0 -text [intlmsg {Border width}]
+ entry $base.e$row -textvariable PgAcVar(fdobj,$i,borderwidth) \
+ -background #fefefe -borderwidth 1 -width 200
+ grid $base.l$row \
+ -in $base -column 0 -row $row -columnspan 1 -rowspan 1 -sticky w
+ grid $base.e$row \
+ -in $base -column 1 -row $row -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ incr row
+ }
+
+
+ # The last dummy label
+
+ label $base.ldummy -text {} -borderwidth 0
+ grid $base.ldummy -in $base -column 0 -row 100
+ grid rowconf $base 100 -weight 1
+
+}
+
+
+proc {design:show_attributes} {i} {
+global PgAcVar
+ set objclass $PgAcVar(fdobj,$i,class)
+ set PgAcVar(fdvar,c_class) $objclass
+ design:createAttributesFrame $i
+ set PgAcVar(fdvar,c_name) $PgAcVar(fdobj,$i,name)
+ if {$i == 0} {
+ # Object 0 is the form
+ set c [split [winfo geometry .pgaw:FormDesign:draft] x+]
+ set PgAcVar(fdvar,c_top) [lindex $c 3]
+ set PgAcVar(fdvar,c_left) [lindex $c 2]
+ set PgAcVar(fdvar,c_width) [lindex $c 0]
+ set PgAcVar(fdvar,c_height) [lindex $c 1]
+ return
+ }
+ set c $PgAcVar(fdobj,$i,coord)
+ set PgAcVar(fdvar,c_top) [lindex $c 1]
+ set PgAcVar(fdvar,c_left) [lindex $c 0]
+ set PgAcVar(fdvar,c_width) [expr [lindex $c 2]-[lindex $c 0]]
+ set PgAcVar(fdvar,c_height) [expr [lindex $c 3]-[lindex $c 1]]
+}
+
+
+proc {design:run} {} {
+global PgAcVar CurrentDB DataControlVar
+set base .$PgAcVar(fdobj,0,name)
+if {[winfo exists $base]} {
+ wm deiconify $base; return
+}
+toplevel $base -class Toplevel
+wm focusmodel $base passive
+wm geometry $base $PgAcVar(fdvar,geometry)
+wm maxsize $base 785 570
+wm minsize $base 1 1
+wm overrideredirect $base 0
+wm resizable $base 1 1
+wm deiconify $base
+wm title $base $PgAcVar(fdvar,formtitle)
+foreach item $PgAcVar(fdvar,objlist) {
+set coord $PgAcVar(fdobj,$item,coord)
+set name $PgAcVar(fdobj,$item,name)
+set wh "-width [expr 3+[lindex $coord 2]-[lindex $coord 0]] -height [expr 3+[lindex $coord 3]-[lindex $coord 1]]"
+set visual 1
+
+set wfont $PgAcVar(fdobj,$item,font)
+switch $wfont {
+ {} {set wfont $PgAcVar(pref,font_normal)}
+ normal {set wfont $PgAcVar(pref,font_normal)}
+ bold {set wfont $PgAcVar(pref,font_bold)}
+ italic {set wfont $PgAcVar(pref,font_italic)}
+ fixed {set wfont $PgAcVar(pref,font_fix)}
+}
+
+namespace forget ::DataControl($base.$name)
+
+# Checking if relief ridge or groove has borderwidth 2
+if {[lsearch {ridge groove} $PgAcVar(fdobj,$item,relief)] != -1} {
+ if {$PgAcVar(fdobj,$item,borderwidth) < 2} {
+ set PgAcVar(fdobj,$item,borderwidth) 2
+ }
+}
+
+# Checking if borderwidth is okay
+if {[lsearch {0 1 2 3 4 5} $PgAcVar(fdobj,$item,borderwidth)] == -1} {
+ set PgAcVar(fdobj,$item,borderwidth) 1
+}
+
+set cmd {}
+catch {set cmd $PgAcVar(fdobj,$item,command)}
+
+switch $PgAcVar(fdobj,$item,class) {
+ button {
+ button $base.$name -borderwidth 1 -padx 0 -pady 0 -text "$PgAcVar(fdobj,$item,label)" \
+ -fg $PgAcVar(fdobj,$item,fcolor) -bg $PgAcVar(fdobj,$item,bcolor) \
+ -borderwidth $PgAcVar(fdobj,$item,borderwidth) \
+ -relief $PgAcVar(fdobj,$item,relief) -font $wfont -command [subst {$cmd}]
+ if {$PgAcVar(fdobj,$item,variable) != ""} {
+ $base.$name configure -textvariable $PgAcVar(fdobj,$item,variable)
+ }
+ }
+ checkbox {
+ checkbutton $base.$name -onvalue t -offvalue f -font $wfont \
+ -fg $PgAcVar(fdobj,$item,fcolor) \
+ -borderwidth $PgAcVar(fdobj,$item,borderwidth) \
+ -command [subst {$cmd}] \
+ -text "$PgAcVar(fdobj,$item,label)" -variable "$PgAcVar(fdobj,$item,variable)" -borderwidth 1
+ set wh {}
+ }
+ query {
+ set visual 0
+ set DataControlVar($base.$name,sql) $PgAcVar(fdobj,$item,command)
+ namespace eval ::DataControl($base.$name) "proc open {} {
+ global CurrentDB DataControlVar
+ variable tuples
+ catch {unset tuples}
+ set wn \[focus\] ; setCursor CLOCK
+ set res \[wpg_exec \$CurrentDB \"\$DataControlVar($base.$name,sql)\"\]
+ pg_result \$res -assign tuples
+ set fl {}
+ foreach fd \[pg_result \$res -lAttributes\] {lappend fl \[lindex \$fd 0\]}
+ set DataControlVar($base.$name,fields) \$fl
+ set DataControlVar($base.$name,recno) 0
+ set DataControlVar($base.$name,nrecs) \[pg_result \$res -numTuples\]
+ setCursor NORMAL
+ }"
+ namespace eval ::DataControl($base.$name) "proc setSQL {sqlcmd} {
+ global DataControlVar
+ set DataControlVar($base.$name,sql) \$sqlcmd
+ }"
+ namespace eval ::DataControl($base.$name) "proc getRowCount {} {
+ global DataControlVar
+ return \$DataControlVar($base.$name,nrecs)
+ }"
+ namespace eval ::DataControl($base.$name) "proc getRowIndex {} {
+ global DataControlVar
+ return \$DataControlVar($base.$name,recno)
+ }"
+ namespace eval ::DataControl($base.$name) "proc moveTo {newrecno} {
+ global DataControlVar
+ set DataControlVar($base.$name,recno) \$newrecno
+ }"
+ namespace eval ::DataControl($base.$name) "proc close {} {
+ variable tuples
+ catch {unset tuples}
+ }"
+ namespace eval ::DataControl($base.$name) "proc getFieldList {} {
+ global DataControlVar
+ return \$DataControlVar($base.$name,fields)
+ }"
+ namespace eval ::DataControl($base.$name) "proc fill {lb fld} {
+ global DataControlVar
+ variable tuples
+ \$lb delete 0 end
+ for {set i 0} {\$i<\$DataControlVar($base.$name,nrecs)} {incr i} {
+ \$lb insert end \$tuples\(\$i,\$fld\)
+ }
+ }"
+ namespace eval ::DataControl($base.$name) "proc moveFirst {} {global DataControlVar ; set DataControlVar($base.$name,recno) 0}"
+ namespace eval ::DataControl($base.$name) "proc moveNext {} {global DataControlVar ; incr DataControlVar($base.$name,recno) ; if {\$DataControlVar($base.$name,recno)==\[getRowCount\]} {moveLast}}"
+ namespace eval ::DataControl($base.$name) "proc movePrevious {} {global DataControlVar ; incr DataControlVar($base.$name,recno) -1 ; if {\$DataControlVar($base.$name,recno)==-1} {moveFirst}}"
+ namespace eval ::DataControl($base.$name) "proc moveLast {} {global DataControlVar ; set DataControlVar($base.$name,recno) \[expr \[getRowCount\] -1\]}"
+ namespace eval ::DataControl($base.$name) "proc updateDataSet {} {\
+ global DataControlVar
+ global DataSet
+ variable tuples
+ set i \$DataControlVar($base.$name,recno)
+ foreach fld \$DataControlVar($base.$name,fields) {
+ catch {
+ upvar DataSet\($base.$name,\$fld\) dbvar
+ set dbvar \$tuples\(\$i,\$fld\)
+ }
+ }
+ }"
+ namespace eval ::DataControl($base.$name) "proc clearDataSet {} {
+ global DataControlVar
+ global DataSet
+ catch { foreach fld \$DataControlVar($base.$name,fields) {
+ catch {
+ upvar DataSet\($base.$name,\$fld\) dbvar
+ set dbvar {}
+ }
+ }}
+ }"
+ }
+ radio {
+ radiobutton $base.$name -font $wfont -text "$PgAcVar(fdobj,$item,label)" \
+ -fg $PgAcVar(fdobj,$item,fcolor) -bg $PgAcVar(fdobj,$item,bcolor) -variable $PgAcVar(fdobj,$item,variable) \
+ -value $PgAcVar(fdobj,$item,value) -borderwidth 1
+ set wh {}
+ }
+ entry {
+ set var {} ; catch {set var $PgAcVar(fdobj,$item,variable)}
+ entry $base.$name -bg $PgAcVar(fdobj,$item,bcolor) -fg $PgAcVar(fdobj,$item,fcolor) \
+ -borderwidth $PgAcVar(fdobj,$item,borderwidth) -font $wfont \
+ -relief $PgAcVar(fdobj,$item,relief) -selectborderwidth 0 -highlightthickness 0
+ if {$var!=""} {$base.$name configure -textvar $var}
+ }
+ text {
+ text $base.$name -fg $PgAcVar(fdobj,$item,fcolor) -bg $PgAcVar(fdobj,$item,bcolor) \
+ -relief $PgAcVar(fdobj,$item,relief) -borderwidth $PgAcVar(fdobj,$item,borderwidth) \
+ -font $wfont
+ }
+ label {
+ # set wh {}
+ label $base.$name -font $wfont -anchor nw -padx 0 -pady 0 -text $PgAcVar(fdobj,$item,label) \
+ -borderwidth $PgAcVar(fdobj,$item,borderwidth) \
+ -relief $PgAcVar(fdobj,$item,relief) -fg $PgAcVar(fdobj,$item,fcolor) -bg $PgAcVar(fdobj,$item,bcolor)
+ set var {} ; catch {set var $PgAcVar(fdobj,$item,variable)}
+ if {$var!=""} {$base.$name configure -textvar $var}
+ }
+ listbox {
+ listbox $base.$name -bg $PgAcVar(fdobj,$item,bcolor) -highlightthickness 0 -selectborderwidth 0 \
+ -borderwidth $PgAcVar(fdobj,$item,borderwidth) -relief $PgAcVar(fdobj,$item,relief) \
+ -fg $PgAcVar(fdobj,$item,fcolor) -bg $PgAcVar(fdobj,$item,bcolor) -font $wfont -yscrollcommand [subst {$base.sb$name set}]
+ scrollbar $base.sb$name -borderwidth 1 -command [subst {$base.$name yview}] -orient vert -highlightthickness 0
+ eval [subst "place $base.sb$name -x [expr [lindex $coord 2]-14] -y [expr [lindex $coord 1]-1] -width 16 -height [expr 3+[lindex $coord 3]-[lindex $coord 1]] -anchor nw -bordermode ignore"]
+ }
+}
+if $visual {eval [subst "place $base.$name -x [expr [lindex $coord 0]-1] -y [expr [lindex $coord 1]-1] -anchor nw $wh -bordermode ignore"]}
+}
+if {$PgAcVar(fdobj,0,command) != ""} {
+ uplevel #0 $PgAcVar(fdobj,0,command)
+}
+}
+
+proc {design:close} {} {
+global PgAcVar
+ if {$PgAcVar(fdvar,dirty)} {
+ if {[tk_messageBox -title [intlmsg Warning] -message [intlmsg "Do you want to save the form into the database?"] -type yesno -default yes]=="yes"} {
+ if {[design:save $PgAcVar(fdvar,formtitle)]==0} {return}
+ }
+ }
+ catch {Window destroy .pgaw:FormDesign:draft}
+ catch {Window destroy .pgaw:FormDesign:toolbar}
+ catch {Window destroy .pgaw:FormDesign:menu}
+ catch {Window destroy .pgaw:FormDesign:attributes}
+ catch {Window destroy .pgaw:FormDesign:commands}
+ catch {Window destroy .$PgAcVar(fdobj,0,name)}
+}
+
+}
+
+proc vTclWindow.pgaw:FormDesign:draft {base} {
+ if {$base == ""} {
+ set base .pgaw:FormDesign:draft
+ }
+ if {[winfo exists $base]} {
+ wm deiconify $base; return
+ }
+ toplevel $base -class Toplevel
+ wm focusmodel $base passive
+ wm geometry $base 377x315+50+130
+ wm maxsize $base 785 570
+ wm minsize $base 1 1
+ wm overrideredirect $base 0
+ wm resizable $base 1 1
+ wm deiconify $base
+ wm title $base [intlmsg "Form design"]
+ bind $base <Key-Delete> {
+ Forms::design:delete_object
+ }
+ bind $base <Key-F1> "Help::load form_design"
+ canvas $base.c \
+ -background #a0a0a0 -height 207 -highlightthickness 0 -relief ridge \
+ -selectborderwidth 0 -width 295
+ bind $base.c <Button-1> {
+ Forms::design:mouse_down %x %y
+ }
+ bind $base.c <ButtonRelease-1> {
+ Forms::design:mouse_up %x %y
+ }
+ bind $base.c <Motion> {
+ Forms::design:mouse_move %x %y
+ }
+ pack $base.c \
+ -in .pgaw:FormDesign:draft -anchor center -expand 1 -fill both -side top
+}
+
+proc vTclWindow.pgaw:FormDesign:attributes {base} {
+ if {$base == ""} {
+ set base .pgaw:FormDesign:attributes
+ }
+ if {[winfo exists $base]} {
+ wm deiconify $base; return
+ }
+ toplevel $base -class Toplevel
+ wm focusmodel $base passive
+ wm geometry $base 237x300+461+221
+ wm maxsize $base 785 570
+ wm minsize $base 1 1
+ wm overrideredirect $base 0
+ wm resizable $base 0 0
+ wm deiconify $base
+ wm title $base [intlmsg "Attributes"]
+
+ # The identification frame
+
+ frame $base.fi \
+ -borderwidth 2 -height 75 -relief groove -width 125
+ label $base.fi.lclass \
+ -borderwidth 0 -text [intlmsg Class]
+ entry $base.fi.eclass -textvariable PgAcVar(fdvar,c_class) \
+ -borderwidth 1 -width 200
+ label $base.fi.lname \
+ -borderwidth 0 -text [intlmsg Name]
+ entry $base.fi.ename -textvariable PgAcVar(fdvar,c_name) \
+ -background #fefefe -borderwidth 1 -width 200
+ bind $base.fi.ename <Key-Return> {
+ Forms::design:set_name
+ }
+
+
+ # The geometry frame
+
+ frame $base.fg \
+ -borderwidth 2 -height 75 -relief groove -width 125
+ entry $base.fg.e1 -textvariable PgAcVar(fdvar,c_width) \
+ -background #fefefe -borderwidth 1 -width 5
+ entry $base.fg.e2 -textvariable PgAcVar(fdvar,c_height) \
+ -background #fefefe -borderwidth 1 -width 5
+ entry $base.fg.e3 -textvariable PgAcVar(fdvar,c_left) \
+ -background #fefefe -borderwidth 1 -width 5
+ entry $base.fg.e4 -textvariable PgAcVar(fdvar,c_top) \
+ -background #fefefe -borderwidth 1 -width 5
+ bind $base.fg.e1 <Key-Return> {
+ Forms::design:change_coords
+ }
+ bind $base.fg.e2 <Key-Return> {
+ Forms::design:change_coords
+ }
+ bind $base.fg.e3 <Key-Return> {
+ Forms::design:change_coords
+ }
+ bind $base.fg.e4 <Key-Return> {
+ Forms::design:change_coords
+ }
+ label $base.fg.l1 \
+ -borderwidth 0 -text Width
+ label $base.fg.l2 \
+ -borderwidth 0 -text Height
+ label $base.fg.l3 \
+ -borderwidth 0 -text Left
+ label $base.fg.l4 \
+ -borderwidth 0 -text Top
+ label $base.fg.lx1 \
+ -borderwidth 0 -text x
+ label $base.fg.lp1 \
+ -borderwidth 0 -text +
+ label $base.fg.lp2 \
+ -borderwidth 0 -text +
+
+ # The frame for the rest of the attributes (dynamically generated)
+
+
+ frame $base.f \
+ -borderwidth 2 -height 75 -relief groove -width 125
+
+
+ # Geometry for "identification frame"
+
+
+ place $base.fi \
+ -x 5 -y 5 -width 230 -height 55 -anchor nw -bordermode ignore
+ grid columnconf $base.fi 1 -weight 1
+ grid $base.fi.lclass \
+ -in $base.fi -column 0 -row 0 -columnspan 1 -rowspan 1 -sticky w
+ grid $base.fi.eclass \
+ -in $base.fi -column 1 -row 0 -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+ grid $base.fi.lname \
+ -in $base.fi -column 0 -row 1 -columnspan 1 -rowspan 1 -sticky w
+ grid $base.fi.ename \
+ -in $base.fi -column 1 -row 1 -columnspan 1 -rowspan 1 -padx 2 \
+ -sticky w
+
+
+
+ # Geometry for "geometry frame"
+
+ place $base.fg \
+ -x 5 -y 60 -width 230 -height 45 -anchor nw -bordermode ignore
+ grid $base.fg.e1 \
+ -in $base.fg -column 0 -row 0 -columnspan 1 -rowspan 1
+ grid $base.fg.e2 \
+ -in $base.fg -column 2 -row 0 -columnspan 1 -rowspan 1
+ grid $base.fg.e3 \
+ -in $base.fg -column 4 -row 0 -columnspan 1 -rowspan 1
+ grid $base.fg.e4 \
+ -in $base.fg -column 6 -row 0 -columnspan 1 -rowspan 1
+ grid $base.fg.l1 \
+ -in $base.fg -column 0 -row 1 -columnspan 1 -rowspan 1
+ grid $base.fg.l2 \
+ -in $base.fg -column 2 -row 1 -columnspan 1 -rowspan 1
+ grid $base.fg.l3 \
+ -in $base.fg -column 4 -row 1 -columnspan 1 -rowspan 1
+ grid $base.fg.l4 \
+ -in $base.fg -column 6 -row 1 -columnspan 1 -rowspan 1
+ grid $base.fg.lx1 \
+ -in $base.fg -column 1 -row 0 -columnspan 1 -rowspan 1
+ grid $base.fg.lp1 \
+ -in $base.fg -column 5 -row 0 -columnspan 1 -rowspan 1
+ grid $base.fg.lp2 \
+ -in $base.fg -column 3 -row 0 -columnspan 1 -rowspan 1
+
+ place $base.f -x 5 -y 105 -width 230 -height 190 -anchor nw
+
+}
+
+
+proc vTclWindow.pgaw:FormDesign:commands {base} {
+global PgAcVar
+ if {$base == ""} {
+ set base .pgaw:FormDesign:commands
+ }
+ if {[winfo exists $base]} {
+ wm deiconify $base; return
+ }
+ toplevel $base -class Toplevel
+ wm focusmodel $base passive
+ wm geometry $base 640x480+120+100
+ wm maxsize $base 785 570
+ wm minsize $base 1 19
+ wm overrideredirect $base 0
+ wm resizable $base 1 1
+ wm title $base [intlmsg "Command"]
+ frame $base.f \
+ -borderwidth 2 -height 75 -relief groove -width 125
+ scrollbar $base.f.sb \
+ -borderwidth 1 -command {.pgaw:FormDesign:commands.f.txt yview} -orient vert -width 12
+ text $base.f.txt \
+ -font $PgAcVar(pref,font_fix) -height 1 -tabs {20 40 60 80 100 120 140 160 180 200} \
+ -width 200 -yscrollcommand {.pgaw:FormDesign:commands.f.sb set}
+ frame $base.fb \
+ -height 75 -width 125
+ button $base.fb.b1 \
+ -borderwidth 1 \
+ -command {
+ set PgAcVar(fdobj,$PgAcVar(fdvar,commandFor),command) [.pgaw:FormDesign:commands.f.txt get 1.0 "end - 1 chars"]
+ Window hide .pgaw:FormDesign:commands
+ set PgAcVar(fdvar,dirty) 1
+ } -text [intlmsg Save] -width 5
+ button $base.fb.b2 \
+ -borderwidth 1 -command {Window hide .pgaw:FormDesign:commands} \
+ -text [intlmsg Cancel]
+ pack $base.f \
+ -in .pgaw:FormDesign:commands -anchor center -expand 1 -fill both -side top
+ pack $base.f.sb \
+ -in .pgaw:FormDesign:commands.f -anchor e -expand 1 -fill y -side right
+ pack $base.f.txt \
+ -in .pgaw:FormDesign:commands.f -anchor center -expand 1 -fill both -side top
+ pack $base.fb \
+ -in .pgaw:FormDesign:commands -anchor center -expand 0 -fill none -side top
+ pack $base.fb.b1 \
+ -in .pgaw:FormDesign:commands.fb -anchor center -expand 0 -fill none -side left
+ pack $base.fb.b2 \
+ -in .pgaw:FormDesign:commands.fb -anchor center -expand 0 -fill none -side top
+}
+
+proc vTclWindow.pgaw:FormDesign:menu {base} {
+ if {$base == ""} {
+ set base .pgaw:FormDesign:menu
+ }
+ if {[winfo exists $base]} {
+ wm deiconify $base; return
+ }
+ toplevel $base -class Toplevel
+ wm focusmodel $base passive
+ wm geometry $base 432x74+0+0
+ wm maxsize $base 1009 738
+ wm minsize $base 1 1
+ wm overrideredirect $base 0
+ wm resizable $base 0 0
+ wm deiconify $base
+ wm title $base [intlmsg "Form designer"]
+ frame $base.f1 \
+ -height 75 -relief groove -width 125
+ label $base.f1.l1 \
+ -borderwidth 0 -text "[intlmsg {Form name}] "
+ entry $base.f1.e1 \
+ -background #fefefe -borderwidth 1 -textvariable PgAcVar(fdvar,formtitle)
+ frame $base.f2 \
+ -height 75 -relief groove -width 125
+ label $base.f2.l \
+ -borderwidth 0 -text "[intlmsg {Form's window internal name}] "
+ entry $base.f2.e \
+ -background #fefefe -borderwidth 1 -textvariable PgAcVar(fdobj,0,name)
+ frame $base.f3 \
+ -height 1 -width 125
+ button $base.f3.b1 \
+ -command {set PgAcVar(fdvar,geometry) [wm geometry .pgaw:FormDesign:draft] ; Forms::design:run} -padx 1 \
+ -text [intlmsg {Test form}]
+ button $base.f3.b2 \
+ -command {destroy .$PgAcVar(fdobj,0,name)} -padx 1 \
+ -text [intlmsg {Close test form}]
+ button $base.f3.b3 \
+ -command {Forms::design:save nimic} -padx 1 -text [intlmsg Save]
+ button $base.f3.b4 \
+ -command {Forms::design:close} \
+ -padx 1 -text [intlmsg Close]
+ pack $base.f1 \
+ -in .pgaw:FormDesign:menu -anchor center -expand 0 -fill x -pady 2 -side top
+ pack $base.f1.l1 \
+ -in .pgaw:FormDesign:menu.f1 -anchor center -expand 0 -fill none -side left
+ pack $base.f1.e1 \
+ -in .pgaw:FormDesign:menu.f1 -anchor center -expand 1 -fill x -side left
+ pack $base.f2 \
+ -in .pgaw:FormDesign:menu -anchor center -expand 0 -fill x -pady 1 -side top
+ pack $base.f2.l \
+ -in .pgaw:FormDesign:menu.f2 -anchor center -expand 0 -fill none -side left
+ pack $base.f2.e \
+ -in .pgaw:FormDesign:menu.f2 -anchor center -expand 1 -fill x -side left
+ pack $base.f3 \
+ -in .pgaw:FormDesign:menu -anchor center -expand 0 -fill x -pady 2 -side bottom
+ pack $base.f3.b1 \
+ -in .pgaw:FormDesign:menu.f3 -anchor center -expand 0 -fill none -side left
+ pack $base.f3.b2 \
+ -in .pgaw:FormDesign:menu.f3 -anchor center -expand 0 -fill none -side left
+ pack $base.f3.b3 \
+ -in .pgaw:FormDesign:menu.f3 -anchor center -expand 0 -fill none -side left
+ pack $base.f3.b4 \
+ -in .pgaw:FormDesign:menu.f3 -anchor center -expand 0 -fill none -side right
+}
+
+
+proc vTclWindow.pgaw:FormDesign:toolbar {base} {
+global PgAcVar
+ foreach wid {button frame radiobutton checkbutton label text entry listbox query} {
+ image create photo "icon_$wid" -file [file join $PgAcVar(PGACCESS_HOME) images icon_$wid.gif]
+ }
+ if {$base == ""} {
+ set base .pgaw:FormDesign:toolbar
+ }
+ if {[winfo exists $base]} {
+ wm deiconify $base; return
+ }
+ toplevel $base -class Toplevel -menu .pgaw:FormDesign:toolbar.m17
+ wm focusmodel $base passive
+ wm geometry $base 29x235+1+130
+ wm maxsize $base 1009 738
+ wm minsize $base 1 1
+ wm overrideredirect $base 0
+ wm resizable $base 0 0
+ wm deiconify $base
+ wm title $base [intlmsg "Toolbar"]
+ button $base.b1 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) button} -image icon_button \
+ -padx 9 -pady 3
+ button $base.b3 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) radio} \
+ -image icon_radiobutton -padx 9 -pady 3
+ button $base.b4 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) checkbox} \
+ -image icon_checkbutton -padx 9 -pady 3
+ button $base.b5 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) label} -image icon_label \
+ -padx 9 -pady 3
+ button $base.b6 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) text} -image icon_text \
+ -padx 9 -pady 3
+ button $base.b7 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) entry} -image icon_entry \
+ -padx 9 -pady 3
+ button $base.b8 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) listbox} -image icon_listbox \
+ -padx 9 -pady 3
+ button $base.b9 \
+ -borderwidth 1 -command {set PgAcVar(fdvar,tool) query} -height 21 \
+ -image icon_query -padx 9 -pady 3 -width 20
+ grid $base.b1 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 2 -columnspan 1 -rowspan 1
+ grid $base.b3 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 4 -columnspan 1 -rowspan 1
+ grid $base.b4 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 5 -columnspan 1 -rowspan 1
+ grid $base.b5 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 0 -columnspan 1 -rowspan 1
+ grid $base.b6 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 6 -columnspan 1 -rowspan 1
+ grid $base.b7 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 1 -columnspan 1 -rowspan 1
+ grid $base.b8 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 7 -columnspan 1 -rowspan 1
+ grid $base.b9 \
+ -in .pgaw:FormDesign:toolbar -column 0 -row 8 -columnspan 2 -rowspan 3
+}
+