treectrl

namespace eval DemoIMovie {}
treectrl .t  -height 900 -width 900
pack .t
set ScriptDir [file normalize [file dirname [info script]]]
set ::thisPlatform unix
proc Path {args} {
    return [file normalize [eval [list file join $::ScriptDir] $args]]
}
proc DemoIMovie::Button1 {T x y} {
    focus $T
    set id [$T identify $x $y]

    # Click outside any item
    if {$id eq ""} {

    # Click in header
    } elseif {[lindex $id 0] eq "header"} {
 ::TreeCtrl::ButtonPress1 $T $x $y

    # Click in item
    } elseif {[lindex $id 0] eq "item"} {
 ::TreeCtrl::ButtonPress1 $T $x $y
 update
 lassign $id where item arg1 arg2 arg3 arg4
 switch $arg1 {
     column {
  set I [lindex $id 1]
  if {[llength $id] == 6} {
      set E [lindex $id end]
      if {$E eq "elemName"} {
   set exists [winfo exists $T.entry]
   ::TreeCtrl::EntryOpen $T $I C0 $E
   if {!$exists} {
       $T.entry configure -borderwidth 0 -justify center \
    -background #ffdc5a
       scan [$T item bbox $I C0 $E] "%d %d %d %d" x1 y1 x2 y2
       place $T.entry -y [expr {$y1 - 1}]
   }
   $T.entry selection clear
   scan [$T item bbox $I C0 elemImg] "%d %d %d %d" x1 y1 x2 y2
   set left $x1
   set right $x2
   place $T.entry -x $left -width [expr {$right - $left}]
   $T.entry icursor [$T.entry index @[expr {$x - ($x1 + 1)}]]
   # Disable mouse tracking
   unset ::TreeCtrl::Priv(buttonMode)
      }
  }
     }
 }
    }
    return -code break
}

 


proc InitPics {args} {
    foreach pattern $args {
 if {[lsearch [image names] $pattern] == -1} {
     foreach file [glob -directory [Path pics] $pattern.gif] {
  set imageName [file root [file tail $file]]
  # I created an image called "file", which clobbered the
  # original Tcl command "file". Then I got confused.
  if {[llength [info commands $imageName]]} {
      error "don't want to create image called \"$imageName\""
  }
  image create photo $imageName -file $file

  # Hack -- Create a "selected" version too
  image create photo ${imageName}Sel
  ${imageName}Sel copy $imageName
 # imagetint ${imageName}Sel $::SystemHighlight 128
     }
 }
    }
    return
}

 

.t configure -showroot no -showbuttons no -showlines no \
-selectmode browse -orient horizontal -wrap window \
-showheader no -background #dcdcdc -yscrollsmoothing yes

.t configure -canvaspadx 8 -canvaspady 8 \
-itemgapx 8 -itemgapy 8

.t column create -tags C0

InitPics imovie-*

set font1 {Helvetica 12}
set font2 {Helvetica 14}

.t element create elemTime text -font [list $font1]
.t element create elemName text -font [list $font2] -lines 1 -width 80
.t element create elemRect rect -fill {#ffdc5a {selected} white {}} \
    -outline #827878 -outlinewidth 1
.t element create elemImg image
.t element create elemShadow rect -outline gray -outlinewidth 1 -open wn


set S [.t style create STYLE -orient vertical]
.t style elements $S {elemShadow elemRect elemTime elemImg elemName}
.t style layout $S elemShadow -detach yes -padx {1 0} -pady {1 0} -iexpand xy
.t style layout $S elemTime -padx {2 0}
.t style layout $S elemImg -pady {0 1}
.t style layout $S elemName -expand we -ipady {0 2} -padx {0 3} -squeeze x
.t style layout $S elemRect -union {elemTime elemImg elemName} \
    -ipadx 6 -padx {0 1} -pady {0 1}

    # Set default item style
.t column configure C0 -itemstyle $S
    bind DemoIMovie <ButtonPress-1> {
 DemoIMovie::Button1 %W %x %y
    }

    for {set i 0} {$i < 5} {incr i} {
  foreach {time name image} {
      15:20 "Clip 1" imovie-01
      19:18 "Clip 2" imovie-02
      07:20 "Clip 3" imovie-03
      07:20 "Clip 4" imovie-04
      07:20 "Clip 5" imovie-05
      07:20 "Clip 6" imovie-06
      07:20 "Clip 7" imovie-07
  } {
      set I [.t item create]
 #   $T item style set $I C0 $S
      .t item element configure $I C0 \
   elemTime -text $time + \
   elemImg -image $image + \
   elemName -text $name
      .t item lastchild root $I
  }
     }
 
bindtags .t [list .t DemoIMovie  TreeCtrl [winfo toplevel .t] all]

 

posted @ 2011-09-18 21:28  greencolor  阅读(223)  评论(0编辑  收藏  举报