123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- ###############################################################
- # maptext.tcl - TclTk canvas postscript text layer options file for GRASS GIS Manager
- # February 2006 Michael Barton, Arizona State University
- # COPYRIGHT: (C) 1999 - 2006 by the GRASS Development Team
- #
- # This program is free software under the GNU General Public
- # License (>=v2). Read the file COPYING that comes with GRASS
- # for details.
- #
- ##########################################################################
- namespace eval GmCtext {
- variable array opt # ctext options
- variable placement #entry widget for x,y coordinates
- variable count 1
- variable optlist
- }
- proc GmCtext::create { tree parent } {
- variable opt
- variable count
- variable dup
- variable optlist
- global iconpath
- global env
- set node "ctext:$count"
- set frm [ frame .ctexticon$count]
- set check [checkbutton $frm.check \
- -variable GmCtext::opt($count,1,_check) \
- -height 1 -padx 0 -width 0]
- image create photo ctico -file "$iconpath/gui-maptext.gif"
- set ico [label $frm.ico -image ctico -bd 1 -relief raised]
- bind $ico <ButtonPress-1> "GmTree::selectn $tree $node"
- pack $check $ico -side left
-
- #insert new layer
- if {[$tree selection get] != "" } {
- set sellayer [$tree index [$tree selection get]]
- } else {
- set sellayer "end"
- }
- $tree insert $sellayer $parent $node \
- -text "PS text layer $count"\
- -window $frm \
- -drawcross auto
-
- set opt($count,1,_check) 1
- set opt($count,1,opacity) 1.0
- set opt($count,1,text) ""
- set opt($count,1,at) "100,100"
- set opt($count,1,font) "times 12"
- set opt($count,1,fill) \#000000
- set opt($count,1,width) 100
- set opt($count,1,anchor) "center_left"
- set opt($count,1,justify) "left"
- set opt($count,1,coordinates) "pixels"
- set opt($count,1,mouseset) 0
-
- set optlist { _check opacity text at font fill width anchor justify coordinates mouseset}
-
- foreach key $optlist {
- set opt($count,0,$key) $opt($count,1,$key)
- }
- incr count
- return $node
- }
- ###############################################################################
- proc GmCtext::select_font { id frm } {
- global mon
- variable opt
-
- set fon [SelectFont $frm.fontset -type dialog -sampletext [G_msg "This is font sample text."] -title [G_msg "Select label font"]]
- if { $fon != "" } {set opt($id,1,font) $fon}
- }
- ###############################################################################
- proc GmCtext::set_option { node key value } {
- variable opt
-
- set id [GmTree::node_id $node]
- set opt($id,1,$key) $value
- }
- ###############################################################################
- proc GmCtext::mouseset { id } {
- # use mouse to set scalebar placement coordinates
- global mon pctentry pixelentry geogentry
- variable placement
- if { $GmCtext::opt($id,1,mouseset) == 1} {
- if {$GmCtext::opt($id,1,coordinates) == "pixels"} {
- set pixelentry $GmCtext::placement
- } else {
- set pixelentry ""
- }
- if {$GmCtext::opt($id,1,coordinates) == "percent"} {
- set pctentry $GmCtext::placement
- } else {
- set pctentry ""
- }
- if {$GmCtext::opt($id,1,coordinates) == "geographic"} {
- set geogentry $GmCtext::placement
- } else {
- set geogentry ""
- }
- }
- }
- ###############################################################################
- # ctext options
- proc GmCtext::options { id frm } {
- variable opt
- variable placement
- global iconpath
- # Panel heading
- set row [ frame $frm.heading ]
- Label $row.a -text [G_msg "Create postscript text object (for postscript eps, pdf, and print output only)"] \
- -fg MediumBlue
- pack $row.a -side left
- pack $row -side top -fill both -expand yes
- # text
- set row [ frame $frm.text ]
- Label $row.a -text [G_msg "Text to display:"]
- LabelEntry $row.b -textvariable GmCtext::opt($id,1,text) -width 45
- pack $row.a $row.b -side left
- pack $row -side top -fill both -expand yes
-
- # coordinates1
- set row [ frame $frm.east_north ]
- set placement [LabelEntry $row.a -label [G_msg "Text placement: x,y coordinates (from upper left) "] \
- -textvariable GmCtext::opt($id,1,at) -width 24]
- pack $row.a -side left
- pack $row -side top -fill both -expand yes
-
- # coordinates2
- set row [ frame $frm.textcoord2 ]
- Label $row.a -text [G_msg " coordinate type for text placement "]
- ComboBox $row.b -padx 2 -width 10 -textvariable GmCtext::opt($id,1,coordinates) \
- -values {"pixels" "percent" "geographic" } -modifycmd "GmCtext::mouseset $id"
- checkbutton $row.c -text [G_msg "place with mouse"] \
- -variable GmCtext::opt($id,1,mouseset) \
- -command "GmCtext::mouseset $id"
- pack $row.a $row.b $row.c -side left
- pack $row -side top -fill both -expand yes
-
- # text options1
- set row [ frame $frm.textopt1 ]
- Label $row.a -text [G_msg " align text with coordinate point "]
- ComboBox $row.b -padx 2 -width 12 -textvariable GmCtext::opt($id,1,anchor) \
- -values {"lower_left" "bottom_center" "lower_right" "center_left" "center"
- "center_right" "upper_left" "top_center" "upper_right" }
- pack $row.a $row.b -side left
- pack $row -side top -fill both -expand yes
- # text options2
- set row [ frame $frm.textopt2 ]
- Label $row.a -text [G_msg " justification"]
- ComboBox $row.b -padx 2 -width 7 -textvariable GmCtext::opt($id,1,justify) \
- -values {"left" "center" "right"}
- Label $row.c -text [G_msg " line width"]
- LabelEntry $row.d -textvariable GmCtext::opt($id,1,width) -width 5
- pack $row.a $row.b $row.c $row.d -side left
- pack $row -side top -fill both -expand yes
-
- # select font
- set row [ frame $frm.font ]
- Label $row.a -text [G_msg "Font:"]
- Button $row.b -image [image create photo -file "$iconpath/gui-font.gif"] \
- -highlightthickness 0 -takefocus 0 -relief raised -borderwidth 1 \
- -helptext [G_msg "select font for text"] \
- -command "GmCtext::select_font $id $frm"
- Entry $row.c -width 15 -text "$opt($id,1,font)" \
- -textvariable GmCtext::opt($id,1,font)
- Label $row.d -text [G_msg " color"]
- SelectColor $row.e -type menubutton -variable GmCtext::opt($id,1,fill)
- pack $row.a $row.b $row.c $row.d $row.e -side left
- pack $row -side top -fill both -expand yes
- }
- ###############################################################################
- proc GmCtext::save { tree depth node } {
- variable opt
- variable optlist
-
- set id [GmTree::node_id $node]
- foreach key $optlist {
- GmTree::rc_write $depth "$key $opt($id,1,$key)"
- }
- }
- ###############################################################################
- proc GmCtext::display { node } {
- variable opt
- variable tree
- variable can
- global mon
- set tree($mon) $GmTree::tree($mon)
- set id [GmTree::node_id $node]
- set canvas_w($mon) $MapCanvas::canvas_w($mon)
- set canvas_h($mon) $MapCanvas::canvas_h($mon)
-
- set can($mon) $MapCanvas::can($mon)
-
-
- if {$opt($id,1,_check) == 0 } { return }
- if { $opt($id,1,text) == "" } { return }
-
- switch $opt($id,1,anchor) {
- "lower_left" { set anchor "sw"}
- "bottom_center" { set anchor "s" }
- "lower_right" { set anchor "se"}
- "center_left" { set anchor "w" }
- "center" { set anchor "center" }
- "center_right" { set anchor "e" }
- "upper_left" { set anchor "nw"}
- "top_center" { set anchor "n" }
- "upper_right" { set anchor "ne"}
- }
-
- set xcoord [lindex [split $opt($id,1,at) ","] 0]
- set ycoord [lindex [split $opt($id,1,at) ","] 1]
-
- if {$opt($id,1,coordinates) == "geographic"} {
- set xcoord [MapCanvas::mape2scrx $mon $xcoord]
- set ycoord [MapCanvas::mapn2scry $mon $ycoord]
- $can($mon) create text $xcoord $ycoord \
- -anchor $anchor \
- -justify $opt($id,1,justify) \
- -width $opt($id,1,width) \
- -fill $opt($id,1,fill) \
- -font $opt($id,1,font) \
- -text $opt($id,1,text)
- } elseif {$opt($id,1,coordinates) == "percent"} {
- set xpct [expr ($xcoord/100.0) * $canvas_w($mon)]
- set ypct [expr ($ycoord/100.0) * $canvas_h($mon)]
- $can($mon) create text $xpct $ypct \
- -anchor $anchor \
- -justify $opt($id,1,justify) \
- -width $opt($id,1,width) \
- -fill $opt($id,1,fill) \
- -font $opt($id,1,font) \
- -text $opt($id,1,text)
- } else {
- $can($mon) create text $xcoord $ycoord \
- -anchor $anchor \
- -justify $opt($id,1,justify) \
- -width $opt($id,1,width) \
- -fill $opt($id,1,fill) \
- -font $opt($id,1,font) \
- -text $opt($id,1,text)
- }
- }
- ###############################################################################
- proc GmCtext::duplicate { tree parent node id } {
- variable opt
- variable count
- variable dup
- variable optlist
- global iconpath
- set node "ctext:$count"
- set frm [ frame .ctexticon$count]
- set check [checkbutton $frm.check \
- -variable GmCtext::opt($count,1,_check) \
- -height 1 -padx 0 -width 0]
- image create photo ctico -file "$iconpath/gui-maptext.gif"
- set ico [label $frm.ico -image ctico -bd 1 -relief raised]
- bind $ico <ButtonPress-1> "GmTree::selectn $tree $node"
- pack $check $ico -side left
-
- #insert new layer
- if {[$tree selection get] != "" } {
- set sellayer [$tree index [$tree selection get]]
- } else {
- set sellayer "end"
- }
- $tree insert $sellayer $parent $node \
- -text "PS text layer $count"\
- -window $frm \
- -drawcross auto
-
- set opt($count,1,opacity) $opt($id,1,opacity)
- set first 1
-
- foreach key $optlist {
- set opt($count,1,$key) $opt($id,1,$key)
- set opt($count,0,$key) $opt($count,1,$key)
- }
-
- incr count
- return $node
- }
|