5
# -- Display icons from icon library.
7
# -- Copy the clicked icon data (command string of creating
8
# a TkPhotoImage instance) to the clipboard.
11
require 'tkextlib/ICONS'
14
#####################################
16
#####################################
18
@controls = base = TkFrame.new
19
columns = TkFrame.new(base)
20
line1 = TkFrame.new(base, :height=>2, :borderwidth=>1, :relief=>:sunken)
21
line2 = TkFrame.new(base, :height=>2, :borderwidth=>1, :relief=>:sunken)
23
lbl_library = TkLabel.new(base, :font=>@boldfont, :text=>'Library')
24
lbl_groups = TkLabel.new(base, :font=>@boldfont, :text=>'Groups')
25
lbl_columns = TkLabel.new(base, :font=>@boldfont, :text=>'Columns')
27
ent_library = TkEntry.new(base, :width=>50, :textvariable=>@library)
28
ent_groups = TkEntry.new(base, :width=>50, :textvariable=>@groups)
30
btn_browse = TkButton.new(base, :text=>'Browse',
31
:command=>method(:select_icons))
32
btn_view = TkButton.new(base, :text=>'View',
33
:command=>method(:display_icons))
34
btn_exit = TkButton.new(base, :text=>'Exit', :command=>proc{exit})
38
@column_btns[i] = TkButton.new(columns,
39
:text=>i.to_s, :width=>2,
40
:command=>proc{set_columns(i)}
43
@column_btns[@columns][:relief] = :sunken
45
lbl_library.grid(:row=>0, :column=>0, :padx=>4)
46
ent_library.grid(:row=>0, :column=>1)
47
btn_browse.grid(:row=>0, :column=>2, :padx=>4, :pady=>2, :sticky=>:ew)
49
line1.grid(:row=>1, :column=>0, :pady=>2, :columnspan=>3, :sticky=>:ew)
51
lbl_groups.grid(:row=>2, :column=>0, :padx=>4)
52
ent_groups.grid(:row=>2, :column=>1)
53
btn_view.grid(:row=>2, :column=>2, :padx=>4, :pady=>2, :sticky=>:ew)
55
line1.grid(:row=>3, :column=>0, :pady=>2, :columnspan=>3, :sticky=>:ew)
57
lbl_columns.grid(:row=>4, :column=>0, :padx=>4)
58
columns.grid(:row=>4, :column=>1, :padx=>2, :sticky=>:ew)
59
btn_exit.grid(:row=>4, :column=>2, :padx=>4, :pady=>2, :sticky=>:ew)
63
ent_library.bind('Return', method(:display_icons), '')
64
ent_groups.bind('Return', method(:display_icons), '')
68
base = TkFrame.new(:borderwidth=>2, :relief=>:sunken)
70
@icons_window = icons = TkCanvas.new(base)
71
xscr = icons.xscrollbar(TkScrollbar.new(base))
72
yscr = icons.yscrollbar(TkScrollbar.new(base))
74
icons.grid(:row=>0, :column=>0, :sticky=>:news)
75
yscr.grid(:row=>0, :column=>1, :sticky=>:ns)
76
xscr.grid(:row=>1, :column=>0, :sticky=>:ew)
77
base.grid_columnconfigure(0, :weight=>1)
78
base.grid_columnconfigure(1, :weight=>0)
79
base.grid_rowconfigure(0, :weight=>1)
80
base.grid_rowconfigure(1, :weight=>0)
81
# yscr.pack(:side=>:right, :fill=>:y)
82
# xscr.pack(:side=>:bottom, :fill=>:x)
83
# icons.pack(:side=>:left, :fill=>:both, :expand=>true)
85
@icons_layout = TkFrame.new(icons).pack
86
TkcWindow.create(icons, 0, 0, :anchor=>:nw, :window=>@icons_layout)
87
@icons_layout.bind('Configure', method(:layout_resize), '')
89
base.pack(:expand=>true, :fill=>:both)
92
def _create_info_window
93
@info_window = TkToplevel.new(:background=>'lightyellow', :borderwidth=>1,
95
lbl_name = TkLabel.new(w, :text=>'Name', :background=>'lightyellow',
96
:font=>@boldfont, :justify=>:left)
97
lbl_grps = TkLabel.new(w, :text=>'Groups', :background=>'lightyellow',
98
:font=>@boldfont, :justify=>:left)
99
lbl_type = TkLabel.new(w, :text=>'Type', :background=>'lightyellow',
100
:font=>@boldfont, :justify=>:left)
101
lbl_size = TkLabel.new(w, :text=>'Size', :background=>'lightyellow',
102
:font=>@boldfont, :justify=>:left)
104
lbl_name.grid(:row=>0, :column=>0, :sticky=>:w)
105
lbl_grps.grid(:row=>1, :column=>0, :sticky=>:w)
106
lbl_type.grid(:row=>2, :column=>0, :sticky=>:w)
107
lbl_size.grid(:row=>3, :column=>0, :sticky=>:w)
109
@name = TkLabel.new(w, :background=>'lightyellow', :justify=>:left)
110
@grps = TkLabel.new(w, :background=>'lightyellow', :justify=>:left)
111
@type = TkLabel.new(w, :background=>'lightyellow', :justify=>:left)
112
@size = TkLabel.new(w, :background=>'lightyellow', :justify=>:left)
114
@name.grid(:row=>0, :column=>1, :sticky=>:w)
115
@grps.grid(:row=>1, :column=>1, :sticky=>:w)
116
@type.grid(:row=>2, :column=>1, :sticky=>:w)
117
@size.grid(:row=>3, :column=>1, :sticky=>:w)
132
overrideredirect(true)
137
def initialize(init_path = Tk::LIBRARY)
138
init_path = Tk::LIBRARY unless init_path
139
init_path = File.expand_path(init_path)
140
if File.directory?(init_path)
141
@initial_dir = init_path
142
@initial_file = 'tkIcons'
144
@initial_dir = File.dirname(init_path)
145
@initial_file = File.basename(init_path)
148
if Tk::PLATFORM['platform'] == 'unix'
149
TkOption.add('*HighlightThickness', 0)
159
@boldfont = TkFont.new(@font, :weight=>:bold)
164
@library = TkVariable.new(File.join(@initial_dir, @initial_file))
165
@groups = TkVariable.new('*')
173
Tk.root.title('viewIcons')
175
Tk.root.resizable(false, true)
180
def init_info(item, name)
181
@icon_name[item] = name
183
item.bind('Button-1', method(:clip_info), '%W')
184
item.bind('Enter', method(:delay_info), '%W')
185
item.bind('Leave', method(:cancel_info), '')
190
@delay_timer = TkTimer.new(200, 1, proc{ show_info(item) }).start
198
@info_window.withdraw
202
name, groups, type, size = @icon_info[@icon_name[item]]
203
@info_window.name(name)
204
@info_window.groups(groups)
205
@info_window.type(type)
206
@info_window.size(size)
208
info_x = item.winfo_rootx + 10
209
info_y = item.winfo_rooty + item.winfo_height
211
@info_window.geometry("+#{info_x}+#{info_y}")
212
@info_window.deiconify
219
def primary_transfer(offset, max_chars)
228
name = @icon_name[item]
231
cmd = "#{name} = TkPhotoImage.new(:data=><<'EOD')\n"
233
icon_data = Tk::ICONS.query(name, :file=>@library.value, :items=>'d')[0][0]
235
icon_data.scan(/.{1,#{data_width}}/m){|s| cmd << ' ' << s << "\n"}
242
TkClipboard.append(@command)
244
if Tk::PLATFORM['platform'] == 'unix'
245
TkSelection.handle(Tk.root, method(:primary_transfer),
246
:selection=>'PRIMARY')
247
TkSelection.set_owner(Tk.root, :selection=>'PRIMARY',
248
:command=>method(:lost_selection))
256
bbox = @icons_window.bbox('all')
257
width = @controls.winfo_width - @icons_window.yscrollbar.winfo_width - 8
259
@icons_window.configure(:width=>width, :scrollregion=>bbox,
260
:xscrollincrement=>'0.1i',
261
:yscrollincrement=>'0.1i')
265
new_lib = Tk.getOpenFile(:initialdir=>@initial_dir,
266
:initialfile=>'tkIcons',
267
:title=>'Select Icon Library',
269
['Icon Libraries', ['tkIcons*']],
273
@library.value = new_lib if new_lib.length != 0
282
unless File.exist?(@library.value)
283
Tk.messageBox(:icon=>'warning', :message=>'File does not exist',
288
cursor = Tk.root[:cursor]
289
Tk.root[:cursor] = 'watch'
291
Tk::ICONS.delete(@icons)
293
@icons_frame.destroy if @icons_frame
294
@icons_frame = TkFrame.new(@icons_layout).pack
296
@icons = Tk::ICONS.create(:file=>@library.value, :group=>@groups.value)
298
Tk::ICONS.query(:file=>@library.value, :group=>@groups.value).each{|inf|
300
@icon_info[name] = inf
302
lbl = TkLabel.new(@icons_frame, :image=>"::icon::#{name}")
303
lbl.grid(:column=>column, :row=>row, :padx=>3, :pady=>3)
304
# lbl.grid_columnconfigure column
316
Tk.root[:cursor] = cursor
319
def set_columns(columns)
321
6.step(20, 2){|i| @column_btns[i][:relief] = :raised }
322
@column_btns[@columns][:relief] = :sunken
327
ViewIcons.new(ARGV[0])