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