Changeset 65 for trunk/gui/scripts


Ignore:
Timestamp:
Sep 25, 2005, 3:24:05 PM (19 years ago)
Author:
mmc
Message:

Fixed axes so you can click and drag to adjust limits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/gui/scripts/xyresult.tcl

    r64 r65  
    8585
    8686    private variable _hilite       ;# info for element currently highlighted
    87     private variable _axisPopup    ;# info for axis being edited
     87    private variable _axis         ;# info for axis manipulations
     88    private variable _axisPopup    ;# info for axis being edited in popup
    8889}
    8990                                                                               
     
    511512            [itcl::code $this _axis hilite $axis off]
    512513        $g axis bind $axis <ButtonPress> \
    513             [itcl::code $this _axis edit $axis]
     514            [itcl::code $this _axis click $axis %x %y]
     515        $g axis bind $axis <B1-Motion> \
     516            [itcl::code $this _axis drag $axis %x %y]
     517        $g axis bind $axis <ButtonRelease> \
     518            [itcl::code $this _axis release $axis %x %y]
    514519    }
    515520
     
    818823# ----------------------------------------------------------------------
    819824# USAGE: _axis hilite <axis> <state>
     825#
     826# USAGE: _axis click <axis> <x> <y>
     827# USAGE: _axis drag <axis> <x> <y>
     828# USAGE: _axis release <axis> <x> <y>
     829#
    820830# USAGE: _axis edit <axis>
    821831# USAGE: _axis changed <axis> <what>
     
    848858                    -titlecolor $itk_option(-foreground)
    849859            }
     860        }
     861        click {
     862            if {[llength $args] != 3} {
     863                error "wrong # args: should be \"_axis click axis x y\""
     864            }
     865            set axis [lindex $args 0]
     866            set x [lindex $args 1]
     867            set y [lindex $args 2]
     868            set g $itk_component(plot)
     869
     870            set _axis(moved) 0
     871            set _axis(click-x) $x
     872            set _axis(click-y) $y
     873            foreach {min max} [$g axis limits $axis] break
     874            set _axis(min0) $min
     875            set _axis(max0) $max
     876        }
     877        drag {
     878            if {[llength $args] != 3} {
     879                error "wrong # args: should be \"_axis drag axis x y\""
     880            }
     881            set axis [lindex $args 0]
     882            set x [lindex $args 1]
     883            set y [lindex $args 2]
     884            set g $itk_component(plot)
     885
     886            if {[info exists _axis(click-x)] && [info exists _axis(click-y)]} {
     887                foreach {x0 y0 pw ph} [$g extents plotarea] break
     888                switch -glob $axis {
     889                  x* {
     890                    set pix $x
     891                    set pix0 $_axis(click-x)
     892                    set pixmin $x0
     893                    set pixmax [expr {$x0+$pw}]
     894                  }
     895                  y* {
     896                    set pix $y
     897                    set pix0 $_axis(click-y)
     898                    set pixmin [expr {$y0+$ph}]
     899                    set pixmax $y0
     900                  }
     901                }
     902                set log [$g axis cget $axis -logscale]
     903                set min $_axis(min0)
     904                set max $_axis(max0)
     905                set dpix [expr {abs($pix-$pix0)}]
     906                set v0 [$g axis invtransform $axis $pixmin]
     907                set v1 [$g axis invtransform $axis [expr {$pixmin+$dpix}]]
     908                if {$log} {
     909                    set v0 [expr {log10($v0)}]
     910                    set v1 [expr {log10($v1)}]
     911                    set min [expr {log10($min)}]
     912                    set max [expr {log10($max)}]
     913                }
     914
     915                if {$pix > $pix0} {
     916                    set delta [expr {$v1-$v0}]
     917                } else {
     918                    set delta [expr {$v0-$v1}]
     919                }
     920                set min [expr {$min-$delta}]
     921                set max [expr {$max-$delta}]
     922                if {$log} {
     923                    set min [expr {pow(10.0,$min)}]
     924                    set max [expr {pow(10.0,$max)}]
     925                }
     926                $g axis configure $axis -min $min -max $max
     927
     928                # move axis, don't edit on release
     929                set _axis(move) 1
     930            }
     931        }
     932        release {
     933            if {[llength $args] != 3} {
     934                error "wrong # args: should be \"_axis release axis x y\""
     935            }
     936            set axis [lindex $args 0]
     937            set x [lindex $args 1]
     938            set y [lindex $args 2]
     939
     940            if {![info exists _axis(moved)] || !$_axis(moved)} {
     941                # small movement? then treat as click -- pop up axis editor
     942                set dx [expr {abs($x-$_axis(click-x))}]
     943                set dy [expr {abs($y-$_axis(click-y))}]
     944                if {$dx < 2 && $dy < 2} {
     945                    _axis edit $axis
     946                }
     947            } else {
     948                # one last movement
     949                _axis drag $axis $x $y
     950            }
     951            catch {unset _axis}
    850952        }
    851953        edit {
Note: See TracChangeset for help on using the changeset viewer.