aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pgaccess/lib/schema.tcl
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pgaccess/lib/schema.tcl')
-rw-r--r--src/bin/pgaccess/lib/schema.tcl700
1 files changed, 0 insertions, 700 deletions
diff --git a/src/bin/pgaccess/lib/schema.tcl b/src/bin/pgaccess/lib/schema.tcl
deleted file mode 100644
index 292a29de4f9..00000000000
--- a/src/bin/pgaccess/lib/schema.tcl
+++ /dev/null
@@ -1,700 +0,0 @@
-namespace eval Schema {
-
-proc {clm_rename} {{tbl_name} {old_name} {new_name}} {
- global PgAcVar CurrentDB
- catch {
- wpg_select $CurrentDB "select schemaname from pga_schema where (schematables like '%$tbl_name %') order by schemaname" rec {
- set Names $rec(schemaname)
- do_clm_rename $tbl_name $old_name $new_name $Names
- }
- }
-}
-
-proc {do_clm_rename} {{tbl_name} {old_name} {new_name} {schema}} {
- global PgAcVar CurrentDB
- init
- set PgAcVar(schema,name) $schema
- if {[set pgres [wpg_exec $CurrentDB "select schematables,schemalinks,oid from pga_schema where schemaname='$PgAcVar(schema,name)'"]]==0} then {
- showError [intlmsg "Error retrieving schema definition"]
- return
- }
- if {[pg_result $pgres -numTuples]==0} {
- showError [format [intlmsg "Schema '%s' was not found!"] $PgAcVar(schema,name)]
- pg_result $pgres -clear
- return
- }
- set tuple [pg_result $pgres -getTuple 0]
- set links [lindex $tuple 1]
- pg_result $pgres -clear
- set linkslist {}
- set PgAcVar(schema,links) $links
- foreach link $PgAcVar(schema,links) {
- set linklist { }
- foreach {tbl fld} $link {
- if {$tbl==$tbl_name} {
- if {$fld==$old_name} { set fld $new_name}
- }
- lappend linklist $tbl $fld
- }
- lappend linkslist $linklist
- }
- sql_exec noquiet "update pga_schema set schemalinks='$linkslist' where schemaname='$schema'"
-}
-
-proc {tbl_rename} {{old_name} {new_name}} {
- global PgAcVar CurrentDB
- catch {
- wpg_select $CurrentDB "select schemaname from pga_schema where (schematables like '$old_name %') or (schematables like '% $old_name %') order by schemaname" rec {
- set Names $rec(schemaname)
- do_tbl_rename $old_name $new_name $Names
- }
- }
-}
-
-proc {do_tbl_rename} {{old_name} {new_name} {schema}} {
- global PgAcVar CurrentDB
- init
- set PgAcVar(schema,name) $schema
- if {[set pgres [wpg_exec $CurrentDB "select schematables,schemalinks,oid from pga_schema where schemaname='$PgAcVar(schema,name)'"]]==0} then {
- showError [intlmsg "Error retrieving schema definition"]
- return
- }
- if {[pg_result $pgres -numTuples]==0} {
- showError [format [intlmsg "Schema '%s' was not found!"] $PgAcVar(schema,name)]
- pg_result $pgres -clear
- return
- }
- set tuple [pg_result $pgres -getTuple 0]
- set tables [lindex $tuple 0]
- set links [lindex $tuple 1]
- pg_result $pgres -clear
- set tablelist {}
- foreach {t x y} $tables {
- if {$t==$old_name} { set t $new_name}
- lappend tablelist $t $x $y
- }
- set linkslist {}
-
- set PgAcVar(schema,links) $links
- foreach link $PgAcVar(schema,links) {
- set linklist { }
- foreach {tbl fld} $link {
- if {$tbl==$old_name} { set tbl $new_name}
- lappend linklist $tbl $fld
- }
- lappend linkslist $linklist
- }
- sql_exec noquiet "update pga_schema set schematables='$tablelist', schemalinks='$linkslist' where schemaname='$schema'"
-}
-
-proc {new} {} {
-global PgAcVar
- init
- Window show .pgaw:Schema
- set PgAcVar(schema,oid) 0
- set PgAcVar(schema,name) {}
- set PgAcVar(schema,tables) {}
- set PgAcVar(schema,links) {}
- set PgAcVar(schema,results) {}
- focus .pgaw:Schema.f.e
-}
-
-
-proc {open} {obj} {
-global PgAcVar CurrentDB
- init
- set PgAcVar(schema,name) $obj
- if {[set pgres [wpg_exec $CurrentDB "select schematables,schemalinks,oid from pga_schema where schemaname='$PgAcVar(schema,name)'"]]==0} then {
- showError [intlmsg "Error retrieving schema definition"]
- return
- }
- if {[pg_result $pgres -numTuples]==0} {
- showError [format [intlmsg "Schema '%s' was not found!"] $PgAcVar(schema,name)]
- pg_result $pgres -clear
- return
- }
- set tuple [pg_result $pgres -getTuple 0]
- set tables [lindex $tuple 0]
- set links [lindex $tuple 1]
- set PgAcVar(schema,oid) [lindex $tuple 2]
- pg_result $pgres -clear
- Window show .pgaw:Schema
- foreach {t x y} $tables {
- set PgAcVar(schema,newtablename) $t
- addNewTable $x $y
- }
- set PgAcVar(schema,links) $links
- drawLinks
- drawCoord
-#### This makes new page size
- foreach {ulx uly lrx lry} [.pgaw:Schema.c bbox all] {
-# wm geometry .pgaw:Schema [expr $lrx+30]x[expr $lry+30]
- }
-}
-
-
-proc {addNewTable} {{tabx 0} {taby 0}} {
-global PgAcVar CurrentDB
-
-if {$PgAcVar(schema,newtablename)==""} return
-if {$PgAcVar(schema,newtablename)=="*"} {
- set tbllist [Database::getTablesList]
- foreach tn [array names PgAcVar schema,tablename*] {
- if { [set linkid [lsearch $tbllist $PgAcVar($tn)]] != -1 } {
- set tbllist [lreplace $tbllist $linkid $linkid]
- }
- }
- foreach t $tbllist {
- set PgAcVar(schema,newtablename) $t
- addNewTable
- }
- return
-}
-
-foreach tn [array names PgAcVar schema,tablename*] {
- if {$PgAcVar(schema,newtablename)==$PgAcVar($tn)} {
- showError [format [intlmsg "Table '%s' already in schema"] $PgAcVar($tn)]
- return
- }
-}
-set fldlist {}
-setCursor CLOCK
-wpg_select $CurrentDB "select attnum,attname,typname from pg_class,pg_attribute,pg_type where (pg_class.relname='$PgAcVar(schema,newtablename)') and (pg_class.oid=pg_attribute.attrelid) and (attnum>0) and (atttypid=pg_type.oid) order by attnum" rec {
- lappend fldlist $rec(attname) $rec(typname)
-}
-setCursor DEFAULT
-if {$fldlist==""} {
- showError [format [intlmsg "Table '%s' not found!"] $PgAcVar(schema,newtablename)]
- return
-}
-set PgAcVar(schema,tablename$PgAcVar(schema,ntables)) $PgAcVar(schema,newtablename)
-set PgAcVar(schema,tablestruct$PgAcVar(schema,ntables)) $fldlist
-set PgAcVar(schema,tablex$PgAcVar(schema,ntables)) $tabx
-set PgAcVar(schema,tabley$PgAcVar(schema,ntables)) $taby
-incr PgAcVar(schema,ntables)
-if {$PgAcVar(schema,ntables)==1} {
- drawAll
-} else {
- drawTable [expr $PgAcVar(schema,ntables)-1]
-}
-#lappend PgAcVar(schema,tables) $PgAcVar(schema,newtablename) $PgAcVar(schema,tablex[expr $PgAcVar(schema,ntables)-1]) $PgAcVar(schema,tabley[expr $PgAcVar(schema,ntables)-1])
-lappend PgAcVar(schema,tables) $PgAcVar(schema,newtablename) $PgAcVar(schema,tablex[expr $PgAcVar(schema,ntables)-1]) $PgAcVar(schema,tabley[expr $PgAcVar(schema,ntables)-1])
-set PgAcVar(schema,newtablename) {}
-focus .pgaw:Schema.f.e
-}
-
-proc {drawAll} {} {
-global PgAcVar
- .pgaw:Schema.c delete all
- for {set it 0} {$it<$PgAcVar(schema,ntables)} {incr it} {
- drawTable $it
- }
- .pgaw:Schema.c lower rect
- drawLinks
-
- .pgaw:Schema.c bind mov <Button-1> {Schema::dragStart %W %x %y %s}
- .pgaw:Schema.c bind mov <B1-Motion> {Schema::dragMove %W %x %y}
- bind .pgaw:Schema.c <ButtonRelease-1> {Schema::dragStop %x %y}
- bind .pgaw:Schema <Button-1> {Schema::canvasClick %x %y %W}
- bind .pgaw:Schema <B1-Motion> {Schema::canvasPanning %x %y}
- bind .pgaw:Schema <Key-Delete> {Schema::deleteObject}
-}
-
-
-proc {drawTable} {it} {
-global PgAcVar
-
-if {$PgAcVar(schema,tablex$it)==0} {
- set posx 380
- set posy 265
-
-# set posy $PgAcVar(schema,nexty)
-# set posx $PgAcVar(schema,nextx)
- set PgAcVar(schema,tablex$it) $posx
- set PgAcVar(schema,tabley$it) $posy
-} else {
- set posx [expr int($PgAcVar(schema,tablex$it))]
- set posy [expr int($PgAcVar(schema,tabley$it))]
-}
-set tablename $PgAcVar(schema,tablename$it)
-.pgaw:Schema.c create text $posx $posy -text "$tablename" -anchor nw -tags [subst {tab$it f-oid mov tableheader}] -font $PgAcVar(pref,font_bold)
-incr posy 16
-foreach {fld ftype} $PgAcVar(schema,tablestruct$it) {
- if {[set cindex [lsearch $PgAcVar(pref,typelist) $ftype]] == -1} {set cindex 1}
- .pgaw:Schema.c create text $posx $posy -text $fld -fill [lindex $PgAcVar(pref,typecolors) $cindex] -anchor nw -tags [subst {f-$fld tab$it mov}] -font $PgAcVar(pref,font_normal)
- incr posy 14
-}
-set reg [.pgaw:Schema.c bbox tab$it]
-.pgaw:Schema.c create rectangle [lindex $reg 0] [lindex $reg 1] [lindex $reg 2] [lindex $reg 3] -fill #EEEEEE -tags [subst {rect outer tab$it}]
-.pgaw:Schema.c create line [lindex $reg 0] [expr [lindex $reg 1]+15] [lindex $reg 2] [expr [lindex $reg 1]+15] -tags [subst {rect tab$it}]
-.pgaw:Schema.c lower tab$it
-.pgaw:Schema.c lower rect
-set reg [.pgaw:Schema.c bbox tab$it]
-
-
-set nexty [lindex $reg 1]
-set nextx [expr 20+[lindex $reg 2]]
-if {$nextx > [winfo width .pgaw:Schema.c] } {
- set nextx 10
- set allbox [.pgaw:Schema.c bbox rect]
- set nexty [expr 20 + [lindex $allbox 3]]
-}
-set PgAcVar(schema,nextx) $nextx
-set PgAcVar(schema,nexty) $nexty
-}
-proc {drawCoord} {} {
- global PgAcVar
- .pgaw:Schema.c create line 365 265 395 265 -fill "#ff0000" -width "1.0" -tags .pgaw:Schema.c
- .pgaw:Schema.c create line 380 250 380 280 -fill "#ff0000" -width "1.0" -tags .pgaw:Schema.c
-}
-
-proc {deleteObject} {} {
-global PgAcVar
-# Checking if there
-set objs [.pgaw:Schema.c find withtag hili]
-set numobj [llength $objs]
-if {$numobj == 0 } return
-# Is object a link ?
-foreach obj $objs {
- if {[getTagInfo $obj link]=="s"} {
- if {[tk_messageBox -title [intlmsg Warning] -icon question -parent .pgaw:Schema -message [intlmsg "Remove link ?"] -type yesno -default no]=="no"} return
- set linkid [getTagInfo $obj lkid]
- set PgAcVar(schema,links) [lreplace $PgAcVar(schema,links) $linkid $linkid]
- .pgaw:Schema.c delete links
- drawLinks
- return
- }
- # Is object a table ?
- set tablealias [getTagInfo $obj tab]
- set tablename $PgAcVar(schema,tablename$tablealias)
- if {"$tablename"==""} return
- if {[tk_messageBox -title [intlmsg Warning] -icon question -parent .pgaw:Schema -message [format [intlmsg "Remove table %s from schema?"] $tablename] -type yesno -default no]=="no"} return
- for {set i [expr [llength $PgAcVar(schema,links)]-1]} {$i>=0} {incr i -1} {
- set thelink [lindex $PgAcVar(schema,links) $i]
- if {($tablename==[lindex $thelink 0]) || ($tablename==[lindex $thelink 2])} {
- set PgAcVar(schema,links) [lreplace $PgAcVar(schema,links) $i $i]
- }
- }
- for {set i 0} {$i<$PgAcVar(schema,ntables)} {incr i} {
- set temp {}
- catch {set temp $PgAcVar(schema,tablename$i)}
- if {"$temp"=="$tablename"} {
- unset PgAcVar(schema,tablename$i)
- unset PgAcVar(schema,tablestruct$i)
- break
- }
- }
- #incr PgAcVar(schema,ntables) -1
- .pgaw:Schema.c delete tab$tablealias
- .pgaw:Schema.c delete links
- drawLinks
- }
-}
-
-
-proc {dragMove} {w x y} {
-global PgAcVar
- if {"$PgAcVar(draginfo,obj)" == ""} {return}
- set dx [expr $x - $PgAcVar(draginfo,x)]
- set dy [expr $y - $PgAcVar(draginfo,y)]
- if {$PgAcVar(draginfo,is_a_table)} {
- $w move dragme $dx $dy
- drawLinks
- } else {
- $w move $PgAcVar(draginfo,obj) $dx $dy
- }
-# showError [intlmsg "$dx\n$dy"]
- set PgAcVar(draginfo,x) $x
- set PgAcVar(draginfo,y) $y
-}
-
-
-proc {dragStart} {w x y state} {
-global PgAcVar
-PgAcVar:clean draginfo,*
-set PgAcVar(draginfo,obj) [$w find closest $x $y]
-if {[getTagInfo $PgAcVar(draginfo,obj) r]=="ect"} {
- # If it'a a rectangle, exit
- set PgAcVar(draginfo,obj) {}
- return
-}
-.pgaw:Schema configure -cursor hand1
-.pgaw:Schema.c raise $PgAcVar(draginfo,obj)
-set PgAcVar(draginfo,table) 0
-if {[getTagInfo $PgAcVar(draginfo,obj) table]=="header"} {
- set PgAcVar(draginfo,is_a_table) 1
- set taglist [.pgaw:Schema.c gettags $PgAcVar(draginfo,obj)]
- set PgAcVar(draginfo,tabletag) [lindex $taglist [lsearch -regexp $taglist "^tab\[0-9\]*"]]
- .pgaw:Schema.c raise $PgAcVar(draginfo,tabletag)
- if {$state == 0} {
- .pgaw:Schema.c itemconfigure hili -fill black
- .pgaw:Schema.c dtag hili
- .pgaw:Schema.c dtag dragme
- }
- .pgaw:Schema.c addtag dragme withtag $PgAcVar(draginfo,tabletag)
- .pgaw:Schema.c addtag hili withtag $PgAcVar(draginfo,obj)
- .pgaw:Schema.c itemconfigure hili -fill blue
-} else {
- set PgAcVar(draginfo,is_a_table) 0
-}
-set PgAcVar(draginfo,x) $x
-set PgAcVar(draginfo,y) $y
-set PgAcVar(draginfo,sx) $x
-set PgAcVar(draginfo,sy) $y
-}
-
-proc {dragStop} {x y} {
-global PgAcVar
-# when click Close, schema window is destroyed but event ButtonRelease-1 is fired
-if {![winfo exists .pgaw:Schema]} return;
-.pgaw:Schema configure -cursor left_ptr
-set este {}
-catch {set este $PgAcVar(draginfo,obj)}
-if {$este==""} return
-# Re-establish the normal paint order so
-# information won't be overlapped by table rectangles
-# or link lines
-if {$PgAcVar(draginfo,is_a_table)} {
- .pgaw:Schema.c lower $PgAcVar(draginfo,tabletag)
-} else {
- .pgaw:Schema.c lower $PgAcVar(draginfo,obj)
-}
-.pgaw:Schema.c lower rect
-.pgaw:Schema.c lower links
-set PgAcVar(schema,panstarted) 0
-if {$PgAcVar(draginfo,is_a_table)} {
- set tabnum [getTagInfo $PgAcVar(draginfo,obj) tab]
- foreach w [.pgaw:Schema.c find withtag $PgAcVar(draginfo,tabletag)] {
-# $PgAcVar(schema,coordx)\n$PgAcVar(schema,coordy)
- if {[lsearch [.pgaw:Schema.c gettags $w] outer] != -1} {
- foreach [list PgAcVar(schema,tablex$tabnum) PgAcVar(schema,tabley$tabnum) x1 y1] [.pgaw:Schema.c coords $w] {}
- set PgAcVar(schema,tablex$tabnum) [expr $PgAcVar(schema,tablex$tabnum)+$PgAcVar(schema,coordx)+1]
- set PgAcVar(schema,tabley$tabnum) [expr $PgAcVar(schema,tabley$tabnum)+$PgAcVar(schema,coordy)-1]
- break
- }
- }
- set PgAcVar(draginfo,obj) {}
- .pgaw:Schema.c delete links
- drawLinks
- return
-}
-# not a table
-.pgaw:Schema.c move $PgAcVar(draginfo,obj) [expr $PgAcVar(draginfo,sx)-$x] [expr $PgAcVar(draginfo,sy)-$y]
-set droptarget [.pgaw:Schema.c find overlapping $x $y $x $y]
-set targettable {}
-foreach item $droptarget {
- set targettable $PgAcVar(schema,tablename[getTagInfo $item tab])
- set targetfield [getTagInfo $item f-]
- if {($targettable!="") && ($targetfield!="")} {
- set droptarget $item
- break
- }
-}
-# check if target object isn't a rectangle
-if {[getTagInfo $droptarget rec]=="t"} {set targettable {}}
-if {$targettable!=""} {
- # Target has a table
- # See about originate table
- set sourcetable $PgAcVar(schema,tablename[getTagInfo $PgAcVar(draginfo,obj) tab])
- if {$sourcetable!=""} {
- # Source has also a tab .. tag
- set sourcefield [getTagInfo $PgAcVar(draginfo,obj) f-]
- if {$sourcetable!=$targettable} {
- lappend PgAcVar(schema,links) [list $sourcetable $sourcefield $targettable $targetfield]
- drawLinks
- }
- }
-}
-# Erase information about object beeing dragged
-set PgAcVar(draginfo,obj) {}
-}
-
-proc {drawLinks} {} {
-global PgAcVar
-.pgaw:Schema.c delete links
-set i 0
-foreach link $PgAcVar(schema,links) {
- set sourcenum -1
- set targetnum -1
- # Compute the source and destination right edge
- foreach t [array names PgAcVar schema,tablename*] {
- if {[regexp "^$PgAcVar($t)$" [lindex $link 0] ]} {
- set sourcenum [string range $t 16 end]
- } elseif {[regexp "^$PgAcVar($t)$" [lindex $link 2] ]} {
- set targetnum [string range $t 16 end]
- }
- }
- set sb [findField $sourcenum [lindex $link 1]]
- set db [findField $targetnum [lindex $link 3]]
- if {($sourcenum == -1 )||($targetnum == -1)||($sb ==-1)||($db==-1)} {
- set PgAcVar(schema,links) [lreplace $PgAcVar(schema,links) $i $i]
- showError "Link from [lindex $link 0].[lindex $link 1] to [lindex $link 2].[lindex $link 3] not found!"
- } else {
-
- set sre [lindex [.pgaw:Schema.c bbox tab$sourcenum] 2]
- set dre [lindex [.pgaw:Schema.c bbox tab$targetnum] 2]
- # Compute field bound boxes
- set sbbox [.pgaw:Schema.c bbox $sb]
- set dbbox [.pgaw:Schema.c bbox $db]
- # Compute the auxiliary lines
- if {[lindex $sbbox 2] < [lindex $dbbox 0]} {
- # Source object is on the left of target object
- set x1 $sre
- set y1 [expr ([lindex $sbbox 1]+[lindex $sbbox 3])/2]
- set x2 [lindex $dbbox 0]
- set y2 [expr ([lindex $dbbox 1]+[lindex $dbbox 3])/2]
- .pgaw:Schema.c create line $x1 $y1 [expr $x1+10] $y1 \
- [expr $x1+10] $y1 [expr $x2-10] $y2 \
- [expr $x2-10] $y2 $x2 $y2 \
- -tags [subst {links lkid$i}] -width 2
- } else {
- # source object is on the right of target object
- set x1 [lindex $sbbox 0]
- set y1 [expr ([lindex $sbbox 1]+[lindex $sbbox 3])/2]
- set x2 $dre
- set y2 [expr ([lindex $dbbox 1]+[lindex $dbbox 3])/2]
- .pgaw:Schema.c create line $x1 $y1 [expr $x1-10] $y1 \
- [expr $x1-10] $y1 [expr $x2+10] $y2 \
- $x2 $y2 [expr $x2+10] $y2 \
- -tags [subst {links lkid$i}] -width 2
- }
- incr i
- }
-}
-.pgaw:Schema.c lower links
-.pgaw:Schema.c bind links <Button-1> {Schema::linkClick %x %y}
-}
-
-
-proc {getSchemaTabless} {} {
-global PgAcVar
- set tablelist {}
- foreach key [array names PgAcVar schema,tablename*] {
- regsub schema,tablename $key "" num
- lappend tablelist $PgAcVar($key) $PgAcVar(schema,tablex$num) $PgAcVar(schema,tabley$num)
- }
- return $tablelist
-}
-
-
-proc {findField} {alias field} {
-foreach obj [.pgaw:Schema.c find withtag f-${field}] {
- if {[lsearch [.pgaw:Schema.c gettags $obj] tab$alias] != -1} {return $obj}
- }
-return -1
-}
-
-
-proc {addLink} {sourcetable sourcefield targettable targetfield} {
-global PgAcVar
- lappend PgAcVar(schema,links) [list $sourcetable $sourcefield $targettable $targetfield]
-}
-
-
-proc {getTagInfo} {obj prefix} {
- set taglist [.pgaw:Schema.c gettags $obj]
- set tagpos [lsearch -regexp $taglist "^$prefix"]
- if {$tagpos==-1} {return ""}
- set thattag [lindex $taglist $tagpos]
- return [string range $thattag [string length $prefix] end]
-}
-
-
-proc {init} {} {
-global PgAcVar
- PgAcVar:clean schema,*
- set PgAcVar(schema,nexty) 10
- set PgAcVar(schema,nextx) 10
- set PgAcVar(schema,links) {}
- set PgAcVar(schema,ntables) 0
- set PgAcVar(schema,newtablename) {}
- set PgAcVar(schema,coordx) 0
- set PgAcVar(schema,coordy) 0
-}
-
-
-proc {linkClick} {x y} {
-global PgAcVar
- set obj [.pgaw:Schema.c find closest $x $y 1 links]
- if {[getTagInfo $obj link]!="s"} return
- .pgaw:Schema.c itemconfigure hili -fill black
- .pgaw:Schema.c dtag hili
- .pgaw:Schema.c addtag hili withtag $obj
- .pgaw:Schema.c itemconfigure $obj -fill blue
-}
-
-
-proc {canvasPanning} {x y} {
-global PgAcVar
- set panstarted 0
- catch {set panstarted $PgAcVar(schema,panstarted) }
- if {!$panstarted} return
- set dx [expr $x-$PgAcVar(schema,panstartx)]
- set dy [expr $y-$PgAcVar(schema,panstarty)]
- set PgAcVar(schema,panstartx) $x
- set PgAcVar(schema,panstarty) $y
- set PgAcVar(schema,coordx) [expr $PgAcVar(schema,coordx)-$dx]
- set PgAcVar(schema,coordy) [expr $PgAcVar(schema,coordy)-$dy]
- if {$PgAcVar(schema,panobject)=="tables"} {
- .pgaw:Schema.c move mov $dx $dy
- .pgaw:Schema.c move links $dx $dy
- .pgaw:Schema.c move rect $dx $dy
- } else {
- .pgaw:Schema.c move resp $dx 0
- .pgaw:Schema.c move resgrid $dx 0
- .pgaw:Schema.c raise reshdr
- }
-}
-
-
-proc print {c} {
- set types {
- {{Postscript Files} {.ps}}
- {{All Files} *}
- }
- if {[catch {tk_getSaveFile -defaultextension .ps -filetypes $types \
- -title "Print to Postscript"} fn] || [string match {} $fn]} return
- if {[catch {::open $fn "w" } fid]} {
- return -code error "Save Error: Unable to open '$fn' for writing\n$fid"
- }
- puts $fid [$c postscript -rotate 1]
- close $fid
-}
-
-
-proc {canvasClick} {x y w} {
-global PgAcVar
-set PgAcVar(schema,panstarted) 0
- if {$w==".pgaw:Schema.c"} {
- set canpan 1
- if {[llength [.pgaw:Schema.c find overlapping $x $y $x $y]]!=0} {set canpan 0}
- set PgAcVar(schema,panobject) tables
- if {$canpan} {
- if {[.pgaw:Schema.c find withtag hili]!=""} {
- .pgaw:Schema.c itemconfigure hili -fill black
- .pgaw:Schema.c dtag hili
- .pgaw:Schema.c dtag dragme
-
- }
-
- .pgaw:Schema configure -cursor hand1
- set PgAcVar(schema,panstartx) $x
- set PgAcVar(schema,panstarty) $y
- set PgAcVar(schema,panstarted) 1
- }
- }
-}
-
-}
-
-proc vTclWindow.pgaw:Schema {base} {
-global PgAcVar
- if {$base == ""} {
- set base .pgaw:Schema
- }
- if {[winfo exists $base]} {
- wm deiconify $base; return
- }
- toplevel $base -class Toplevel
- wm focusmodel $base passive
- wm geometry $base 760x530+10+13
- wm maxsize $base [winfo screenwidth .] [winfo screenheight .]
- wm minsize $base 1 1
- wm overrideredirect $base 0
- wm resizable $base 1 1
- wm title $base [intlmsg "Visual schema designer"]
-
-
- canvas $base.c -background #fefefe -borderwidth 2 -relief ridge -takefocus 0 -width 295 -height 300
- bind $base.c <B1-Motion> {
- Schema::canvasPanning %x %y
- }
- bind $base.c <Button-1> {
- Schema::canvasClick %x %y %W
- }
- bind $base.c <ButtonRelease-1> {
- Schema::dragStop %x %y
- }
- bind $base.c <Key-Delete> {
- Schema::deleteObject
- }
- frame $base.f \
- -height 75 -relief groove -width 125
- label $base.f.l -text [intlmsg {Add table}]
- entry $base.f.e \
- -background #fefefe -borderwidth 1
- bind $base.f.e <Key-Return> {
- Schema::addNewTable
- }
- button $base.f.bdd \
- -image dnarw \
- -command {if {[winfo exists .pgaw:Schema.ddf]} {
- destroy .pgaw:Schema.ddf
-} else {
- create_drop_down .pgaw:Schema 50 27 200
- focus .pgaw:Schema.ddf.sb
- foreach tbl [Database::getTablesList] {.pgaw:Schema.ddf.lb insert end $tbl}
- bind .pgaw:Schema.ddf.lb <ButtonRelease-1> {
- set i [.pgaw:Schema.ddf.lb curselection]
- if {$i!=""} {
- set PgAcVar(schema,newtablename) [.pgaw:Schema.ddf.lb get $i]
- Schema::addNewTable
- }
- destroy .pgaw:Schema.ddf
- break
- }
-}} \
- -padx 1 -pady 1
- button $base.f.btnclose \
- -command {Schema::init
-Window destroy .pgaw:Schema} -padx 2 -pady 3 -text [intlmsg Close]
- button $base.f.printbtn \
- -command {Schema::print .pgaw:Schema.c} -padx 1 -pady 3 -text [intlmsg Print]
- button $base.f.btnsave \
- -command {if {$PgAcVar(schema,name)==""} then {
- showError [intlmsg "You have to supply a name for this schema!"]
- focus .pgaw:Schema.f.esn
-} else {
- setCursor CLOCK
- set tables [Schema::getSchemaTabless]
- if {$PgAcVar(schema,oid)==0} then {
- set pgres [wpg_exec $CurrentDB "insert into pga_schema values ('$PgAcVar(schema,name)','$tables','$PgAcVar(schema,links)')"]
- } else {
- set pgres [wpg_exec $CurrentDB "update pga_schema set schemaname='$PgAcVar(schema,name)',schematables='$tables',schemalinks='$PgAcVar(schema,links)' where oid=$PgAcVar(schema,oid)"]
-# showError [intlmsg "$tables"]
- }
- setCursor DEFAULT
- if {$PgAcVar(pgsql,status)!="PGRES_COMMAND_OK"} then {
- showError "[intlmsg {Error executing query}]\n$PgAcVar(pgsql,errmsg)"
- } else {
- Mainlib::tab_click Schema
- if {$PgAcVar(schema,oid)==0} {set PgAcVar(schema,oid) [pg_result $pgres -oid]}
- }
- catch {pg_result $pgres -clear}
-}} \
- -padx 2 -pady 3 -text [intlmsg {Save schema}]
- label $base.f.ls1 -text { }
- entry $base.f.esn \
- -background #fefefe -borderwidth 1 -textvariable PgAcVar(schema,name)
- label $base.f.lsn -text [intlmsg {Schema name}]
- pack $base.f.l \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side left
- pack $base.f.e \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side left
- pack $base.f.bdd \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side left
- pack $base.f.btnclose \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side right
- pack $base.f.printbtn \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side right
- pack $base.f.btnsave \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side right
- pack $base.f.ls1 \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side right
- pack $base.f.esn \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side right
- pack $base.f.lsn \
- -in .pgaw:Schema.f -anchor center -expand 0 -fill none -side right
- pack $base.f -side top -anchor ne -expand 0 -fill x
- pack $base.c -side bottom -fill both -expand 1
-}