Changeset 1927 for trunk/gui/scripts


Ignore:
Timestamp:
Oct 19, 2010, 6:18:44 PM (14 years ago)
Author:
dkearney
Message:

fixed layout issues with minordial canvas.
added -minortick and -majortick options to control how tick marks were layed out.
updated marker placement estimation code to handle placement of marker when a tick for a frame does not exist.
added current marker flag.
updated dialdemo test code

File:
1 edited

Legend:

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

    r1926 r1927  
    3636    itk_option define -min min Min ""
    3737    itk_option define -max max Max ""
     38    itk_option define -minortick minortick Minortick 1
     39    itk_option define -majortick majortick Majortick 1
    3840    itk_option define -variable variable Variable ""
    3941    itk_option define -offset offset Offset 1
     
    7375    protected method _navigate {offset}
    7476    protected method _fixSize {}
     77    protected method _fixMinorSize {}
    7578    protected method _fixValue {args}
    7679    protected method _fixOffsets {}
     
    99102    public variable min 0.0
    100103    public variable max 1.0
     104    public variable minortick 1
     105    public variable majortick 5
    101106}
    102107
     
    154159
    155160    blt::table configure $itk_interior c* -resize both
    156     blt::table configure $itk_interior r0 -resize both -pady 1
    157     blt::table configure $itk_interior r1 -resize none -pady 1
     161    blt::table configure $itk_interior r0 -resize none
     162    blt::table configure $itk_interior r1 -resize none
    158163
    159164
    160165    eval itk_initialize $args
    161166
    162     $itk_component(majordial) configure -background red
    163     $itk_component(minordial) configure -background blue
     167#    $itk_component(majordial) configure -background green
     168#    $itk_component(minordial) configure -background cyan
    164169
    165170    _fixSize
     
    188193    }
    189194    _current [ms2rel $value]
    190     _see "frame[expr int($value)]"
     195    set framenum [expr int($value)]
     196    _see "frame$framenum"
     197    mark current $framenum
    191198    event generate $itk_component(hull) <<Value>>
    192199}
     
    293300            set where [expr int([rel2ms ${_current}])]
    294301        } elseif {[string is integer $where] == 0} {
    295             error "bad value \"$where\": <where> should be an integer value"
    296         }
    297         foreach {frx0 fry0 frx1 fry1} [$c coords "frame$where"] break
    298         set where "frame$where"
     302            error "bad value \"$where\": while trying to place marker \"$type\": <where> should be an integer value"
     303        }
     304        set coords [$c coords "frame$where"]
     305        if {![llength $coords]} {
     306            # frame marker does not exist
     307            # estimate where to put the marker
     308            # use frame0 marker as a x=0 point
     309            foreach {frx0 fry0 frx1 fry1} [$c coords "frame0"] break
     310            set frx0 [expr {$frx0 + ((1.0*$where/$minortick)*${_imspace})}]
     311        } else {
     312            foreach {frx0 fry0 frx1 fry1} $coords break
     313        }
     314        # where already contains the frame number
    299315    } elseif {$largs == 2} {
    300316        set flag [lindex $args 0]
     
    308324                foreach {frx0 fry0 frx1 fry1} [$c coords $id] break
    309325                # find the frame# tag to associate with the marker with
    310                 if {[regexp {frame[0-9]+} $id] == 0} {
     326                if {[regexp {frame([0-9]+)} $id] == 0} {
    311327                    foreach tags [$c gettags $id] {
    312328                        if {"" != [set tmp [lsearch -inline -regexp $tags {frame[0-9]+}]]} {
     
    318334                    set where $id
    319335                }
     336                # store the frame number in where
     337                regexp {frame([0-9]+)} $where match where
    320338            }
    321339            default {
     
    347365            set smy1 [expr {$smy0-10}]                  ;# triangle top y
    348366            set smx2 $smx1                              ;# stem bottom right x
    349             set smy2 [expr {$cy1+5}]                    ;# stem bottom right y
     367            set smy2 $cy1                               ;# stem bottom right y
    350368            set smx3 [expr {$smx0-1}]                   ;# stem bottom left x
    351369            set smy3 $smy2                              ;# stem bottom left y
     
    371389                set _marks($type) $where
    372390            }
     391
     392            _fixMinorSize
    373393        }
    374394        "end" {
     
    381401            set emy1 [expr {$emy0-10}]                  ;# triangle top y
    382402            set emx2 $emx1                              ;# stem bottom left x
    383             set emy2 [expr {$cy1+5}]                    ;# stem bottom left y
     403            set emy2 $cy1                               ;# stem bottom left y
    384404            set emx3 [expr {$emx0+1}]                   ;# stem bottom right x
    385405            set emy3 $emy2                              ;# stem bottom right y
     
    405425                set _marks($type) $where
    406426            }
     427
     428            _fixMinorSize
    407429        }
    408430        "particle*" {
     
    427449            }
    428450
     451            _fixMinorSize
     452
    429453        }
    430454        "arrow" {
     
    448472            }
    449473
     474            _fixMinorSize
     475        }
     476        "current" {
     477
     478            set cmx0 $frx0                              ;# current marker x0
     479            set cmy0 $cy0                               ;# current marker y0
     480
     481            set cmx1 [expr {$cmx0+5}]                   ;# lower right diagonal edge x
     482            set cmy1 [expr {$cmy0-5}]                   ;# lower right diagonal edge y
     483            set cmx2 $cmx1                              ;# right top x
     484            set cmy2 [expr {$cmy1-5}]                    ;# right top y
     485            set cmx3 [expr {$cmx0-5}]                   ;# left top x
     486            set cmy3 $cmy2                              ;# left top y
     487            set cmx4 $cmx3                              ;# lower left diagonal edge x
     488            set cmy4 $cmy1                              ;# lower left diagonal edge y
     489
     490            set tag $type
     491            $c delete $tag
     492            $c create polygon \
     493                $cmx0 $cmy0 \
     494                $cmx1 $cmy1 \
     495                $cmx2 $cmy2 \
     496                $cmx3 $cmy3 \
     497                $cmx4 $cmy4 \
     498                -outline black -fill red -tags $tag
     499            $c create line $cmx0 $cmy0 $cmx0 $cy1 -fill red -tags $tag
     500
     501            if {[string compare "" $where] != 0} {
     502                set _marks($type) $where
     503            }
     504
    450505        }
    451506        default {
     
    470525    set p [winfo pixels $c $itk_option(-padding)]
    471526    set t [expr {$itk_option(-thickness)+1}]
    472     set ay1 [expr {$h-5}]
     527    set ay1 [expr {$h-3}]
    473528
    474529    if {"" != $_knob} {
     
    583638    set p [winfo pixels $c $itk_option(-padding)]
    584639    set t [expr {$itk_option(-thickness)+1}]
    585     set cy1 [expr {$h-5}]
     640    set cy1 [expr {$h-1}]
    586641    set cy0 [expr {$cy1-$t}]
    587642    set cx0 [expr {$p+1}]
     
    608663    set imty [expr {$cy0-5}]                    ;# height of marker value
    609664
    610     set bw 70                                   ;# bracketwidth, number of imarks
    611     set _imspace 10                             ;# space between imarks
    612 
    613 
    614     for {set i [expr {int($min)}]; set imx $cx0} {$i <= $max} {incr i; set imx [expr $imx+${_imspace}]} {
    615         if {($i%5) == 0} {
     665#    set _imspace 10                             ;# space between imarks
     666
     667    if {$minortick == 0} {
     668        set majortick 5
     669    }
     670
     671    if {$minortick == 0} {
     672        set minortick 1
     673    }
     674
     675
     676    set imx $cx0
     677    for {set i [expr {int($min)}]} {$i <= $max} {incr i} {
     678        if {($i%$majortick) == 0} {
    616679            # draw major tick
    617680            $c create line $imx $imly0 $imx $imly1 \
     
    622685            $c create text $imx $imty -anchor center -text $i \
    623686                -font $itk_option(-font) -tags "frame$i"
    624         } else {
     687
     688            set imx [expr $imx+${_imspace}]
     689        } elseif {($i%$minortick) == 0 } {
    625690            # draw minor tick
    626691            $c create line $imx $imsy0 $imx $imsy1 \
     
    628693                -width $imw \
    629694                -tags [list shortmark-c imark-c "frame$i"]
    630         }
    631     }
     695
     696            set imx [expr $imx+${_imspace}]
     697        }
     698    }
     699
     700
     701    # calculate the height of the intermediate tick marks
     702    # and frame numbers on our canvas, resize the imbox
     703    # to include both of them.
     704    set box [$c bbox "all"]
     705    if {![llength $box]} {
     706        set box [list 0 0 0 0]
     707    }
     708    foreach {cx0 cy0 cx1 cy1} $box break
     709    $c coords "imbox" $box
    632710
    633711    # add any marks that the user previously specified
    634712    foreach n [array names _marks] {
    635         mark $n -tag $_marks($n)
    636     }
    637 
    638     foreach {cx0 cy0 cx1 cy1} [$c bbox "all"] break
    639     $c coords "imbox" [list $cx0 $cy0 $cx1 $cy1]
    640     $c configure \
    641         -scrollregion [list $cx0 $cy0 $cx1 $cy1] \
    642         -xscrollincrement 1p \
    643         -yscrollincrement 1p
    644     if 0 {
    645     }
    646 
     713        # mark $n -tag $_marks($n)
     714        mark $n $_marks($n)
     715    }
     716
     717    _fixMinorSize
     718}
     719
     720
     721# ----------------------------------------------------------------------
     722# USAGE: _fixMinorSize
     723#
     724# Used internally to compute the height of the minor dial based
     725# on the items placed on the canvas
     726#
     727# FIXME: instead of calling this in the mark command, figure out how to
     728#   make the canvas the correct size to start with
     729# ----------------------------------------------------------------------
     730itcl::body Rappture::Videodial::_fixMinorSize {} {
     731    # resize the height of the minor timeline canvas
     732    # to include everything we know about
     733
     734    set c $itk_component(minordial)
     735
     736    set box [$c bbox "all"]
     737    if {![llength $box]} {
     738        set box [list 0 0 0 0]
     739    }
     740
     741    foreach {x0 y0 x1 y1} $box break
     742    set h [expr $y1-$y0+1]                        ;# add a 1 pixel buffer
     743
     744    $c configure -height $h -scrollregion $box -xscrollincrement 1p
    647745}
    648746
     
    800898            {p q xmax ymax} [$c cget -scrollregion] {
    801899        set xpos [expr {(($x1+$x)/2.0)/$xmax - ($right-$left)/2.0}]
    802         set ypos [expr {(($y1+$y)/2.0)/$ymax - ($btm-$top)/2.0}]
     900        #set ypos [expr {(($y1+$y)/2.0)/$ymax - ($btm-$top)/2.0}]
    803901    }
    804902    $c xview moveto $xpos
     
    900998
    901999    $itk_component(majordial) configure -width $w -height $h
     1000
     1001#    # resize the height of the minor canvas to include everything we know about
     1002#    set box [$itk_component(minordial) bbox "all"]
     1003#    if {![llength $box]} {
     1004#        set box [list 0 0 0 0]
     1005#    }
     1006#    foreach {cx0 cy0 cx1 cy1} $box break
     1007#    set h [expr $cy1-$cy0+1]
     1008#    $itk_component(minordial) configure -height $h
    9021009}
    9031010
Note: See TracChangeset for help on using the changeset viewer.