1# 2# Demo: iMovie 3# 4def demoIMovie(t) 5 t.configure(:showroot=>false, :showbuttons=>false, :showlines=>false, 6 :selectmode=>:browse, :orient=>:horizontal, :wrap=>:window, 7 :showheader=>false, :background=>'#dcdcdc') 8 9 if $HasColumnCreate 10 t.column_create 11 end 12 13 init_pics('imovie-*') 14 15 case @thisPlatform 16 when 'macintosh', 'macosx' 17 font1 = TkFont.new(['Geneva', 9]) 18 font2 = TkFont.new(['Geneva', 10]) 19 when 'unix' 20 font1 = TkFont.new(['Helvetica', -12]) 21 font2 = TkFont.new(['Helvetica', -14]) 22 else 23 font1 = TkFont.new(['Helvetica', 8]) 24 font2 = TkFont.new(['Helvetica', 10]) 25 end 26 27 t.element_create('elemTime', :text, :font=>font1) 28 t.element_create('elemName', :text, :font=>font2, :lines=>1, :width=>80) 29 t.element_create('elemRect', :rect, :outline=>'#827878', :outlinewidth=>1, 30 :fill=>['#ffdc5a', ['selected'], 'white', []]) 31 t.element_create('elemImg', :image) 32 t.element_create('elemShadow', :rect, :outline=>'gray', :outlinewidth=>1, 33 :open=>:wn) 34 35 s = t.style_create('STYLE', :orient=>:vertical) 36 t.style_elements(s, [ 37 'elemShadow', 'elemRect', 'elemTime', 38 'elemImg', 'elemName' 39 ]) 40 t.style_layout(s, 'elemShadow', :detach=>true, 41 :padx=>[1,2], :pady=>[1,2], :iexpand=>:es) 42 t.style_layout(s, 'elemTime', :padx=>[2,0]) 43 t.style_layout(s, 'elemImg', :pady=>[0,1]) 44 t.style_layout(s, 'elemName', :expand=>:we, :ipady=>[0,2], :padx=>[0,3], 45 :squeeze=>:x) 46 t.style_layout(s, 'elemRect', :union=>['elemTime', 'elemImg', 'elemName'], 47 :ipadx=>6, :padx=>[0,3], :pady=>[0,3]) 48 49 # Set default item style 50 if $Version_1_1_OrLater 51 t.defaultstyle([s]) 52 end 53 54 (0..4).each{|i| 55 [ 56 ['15:20', 'Clip 1', @images['imovie-01']], 57 ['19:18', 'Clip 2', @images['imovie-02']], 58 ['07:20', 'Clip 3', @images['imovie-03']], 59 ['07:20', 'Clip 4', @images['imovie-04']], 60 ['07:20', 'Clip 5', @images['imovie-05']], 61 ['07:20', 'Clip 6', @images['imovie-06']], 62 ['07:20', 'Clip 7', @images['imovie-07']] 63 ].each{|time, name, image| 64 item = t.item_create 65 unless $Version_1_1_OrLater 66 t.item_style_set(item, 0, s) 67 end 68 t.item_element_configure(item, 0, 'elemTime', :text=>time) 69 t.item_element_configure(item, 0, 'elemName', :text=>name) 70 t.item_element_configure(item, 0, 'elemImg', :image=>image) 71 t.item_lastchild(:root, item) 72 } 73 } 74 75 t.notify_bind(t, 'Edit-accept', proc{|w, i, c, e, tt| 76 w.item_element_configure(i, c, e, :text=>tt) 77 }, '%T %I %C %E %t') 78 79 iMovie = TkBindTag.new 80 iMovie.bind('ButtonPress-1', proc{|w, x, y| 81 iMovieButton1(w, x, y) 82 }, '%W %x %y') 83 84 t.bindtags = [t, iMovie, Tk::TreeCtrl, t.winfo_toplevel, TkBindTag::ALL] 85end 86 87def iMovieButton1(w, x, y) 88 w.set_focus 89 id = w.identify(x,y) 90 91 if id.empty? 92 # Click outside any item 93 94 elsif id[0] == 'header' 95 # Click in header 96 Tk::TreeCtrl::BindCallback.buttonPress1(w, x, y) 97 98 elsif id[0] == 'item' 99 # Click in item 100 Tk::TreeCtrl::BindCallback.buttonPress1(w, x, y) 101 Tk.update 102 where, item, arg1, arg2, arg3, arg4 = id 103 case arg1 104 when 'column' 105 i = id[1] 106 if id.length == 6 107 e = id[-1] 108 if e == 'elemName' 109 exists = TkWinfo.exist?(w.path + '.entry') 110 Tk::TreeCtrl::BindCallback.entryOpen(w, i, 0, e) 111 ent = TkComm.window(w.path + '.entry') 112 unless exists 113 ent.configure(:borderwidth=>0, :justify=>:center, 114 :background=>'#ffdc5a') 115 x1, y1, x2, y2 = w.item_bbox(i, 0, e) 116 ent.place(:y=>y1 - 1) 117 end 118 ent.selection_clear 119 x1, y1, x2, y2 = w.item_bbox(i) 120 ent.place(:x=>x1 + 1, :width=>x2 - x1 - 5) 121 puts "@#{x - (x1 + 1)}" 122 # ent.icursor = ent.index("@#{x - (x1 + 1)}") 123 ent.icursor = ent.index(TkComm._at(x - (x1 + 1))) 124 end 125 end 126 end 127 end 128 129 Tk.callback_break 130end 131