gswax 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. data/bin/gswax +4 -0
  2. data/lib/gswax.rb +306 -0
  3. data/lib/gswax/Wax.rb +273 -0
  4. data/lib/gswax/browser.rb +224 -0
  5. data/lib/gswax/images/arm.png +0 -0
  6. data/lib/gswax/images/default.png +0 -0
  7. data/lib/gswax/images/defaultHOVER.png +0 -0
  8. data/lib/gswax/images/dugout.png +0 -0
  9. data/lib/gswax/images/dugoutHOVER.png +0 -0
  10. data/lib/gswax/images/info.png +0 -0
  11. data/lib/gswax/images/infoHOVER.png +0 -0
  12. data/lib/gswax/images/next.png +0 -0
  13. data/lib/gswax/images/nextHOVER.png +0 -0
  14. data/lib/gswax/images/no_cover.png +0 -0
  15. data/lib/gswax/images/pause.png +0 -0
  16. data/lib/gswax/images/pauseHOVER.png +0 -0
  17. data/lib/gswax/images/play.png +0 -0
  18. data/lib/gswax/images/playHOVER.png +0 -0
  19. data/lib/gswax/images/playlist.png +0 -0
  20. data/lib/gswax/images/playlistHOVER.png +0 -0
  21. data/lib/gswax/images/prev.png +0 -0
  22. data/lib/gswax/images/prevHOVER.png +0 -0
  23. data/lib/gswax/images/settings.png +0 -0
  24. data/lib/gswax/images/settingsHOVER.png +0 -0
  25. data/lib/gswax/images/shuffle.png +0 -0
  26. data/lib/gswax/images/shuffleHOVER.png +0 -0
  27. data/lib/gswax/images/stanton.png +0 -0
  28. data/lib/gswax/images/stanton1.png +0 -0
  29. data/lib/gswax/images/vol.png +0 -0
  30. data/lib/gswax/images/volslider.png +0 -0
  31. data/lib/gswax/playlist.rb +182 -0
  32. data/lib/gswax/playlists/default +0 -0
  33. data/lib/gswax/scrollbox.rb +100 -0
  34. data/lib/gswax/settings/settings.yml +16 -0
  35. data/lib/gswax/settings_manager.rb +284 -0
  36. data/lib/gswax/shared.rb +206 -0
  37. data/lib/gswax/turntable.rb +251 -0
  38. data/lib/gswax/version.rb +3 -0
  39. metadata +107 -0
File without changes
@@ -0,0 +1,100 @@
1
+ =begin
2
+
3
+ this file is part of: gsWax v. 0.12.01
4
+
5
+ You should have received a copy of the GNU General Public License
6
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
7
+ =end
8
+
9
+
10
+ class ScrollBox
11
+ attr_accessor :main
12
+
13
+ def initialize(txt)
14
+ @txt = txt
15
+ @scroll_text = txt + " "
16
+ bgc = Settings.bg_color
17
+ @bg_color = Gdk::Color.new(bgc[0], bgc[1], bgc[2])
18
+
19
+ @main = Gtk::EventBox.new()
20
+ @main.set_size_request(727 * Settings.scale, 75 * Settings.scale)
21
+ @main.signal_connect("enter_notify_event"){hover_toggle}###
22
+ @main.signal_connect("leave_notify_event"){@left = true}###
23
+ @main.modify_bg(Gtk::STATE_NORMAL, @bg_color)
24
+ frame = Gtk::HBox.new(false, 0)
25
+ @text_label = Gtk::Label.new
26
+ @text_label.justify=(Gtk::JUSTIFY_CENTER)
27
+ @text_label.ellipsize = Pango::Layout::ELLIPSIZE_END
28
+ frame.pack_start(@text_label, true, true, 10)
29
+ @main.add(frame)
30
+ show_text(@txt)
31
+ end
32
+
33
+ def show_text(txt)
34
+ if @text_label
35
+ txc = Settings.text_color
36
+ txt_color = Gdk::Color.new(txc[0], txc[1], txc[2])
37
+ @text_label.set_markup(
38
+ %Q[<span font_desc="#{Settings.font_desc}"foreground="#{txt_color}">#{CGI.escape_html(txt)}</span>]
39
+ )
40
+ end
41
+ end
42
+
43
+ def set_text(txt)
44
+ stop_scroll if @scrolling
45
+ @scroll_text = txt + " "
46
+ @text_label.text = @scroll_text
47
+ @text_label.justify=(Gtk::JUSTIFY_CENTER)
48
+ show_text(@scroll_text)
49
+ end
50
+
51
+ def hover_toggle
52
+ @left = false
53
+ timer = GLib::Timer.new
54
+ GLib::Timeout.add(100){
55
+ if timer.elapsed[0].round(1) > 0.3
56
+ unless @left
57
+ if @scrolling
58
+ stop_scroll
59
+ else
60
+ start_scroll
61
+ end
62
+ timer.stop
63
+ end
64
+ false
65
+ else
66
+ true
67
+ end
68
+ }
69
+
70
+ end
71
+
72
+ def start_scroll
73
+ @scrolling = true
74
+ @text_label.justify=(Gtk::JUSTIFY_LEFT)
75
+ @timer = GLib::Timeout.add(100){
76
+ if @scrolling
77
+ first = @scroll_text.slice!(0)
78
+ @scroll_text << first
79
+ show_text(@scroll_text)
80
+ else
81
+ false
82
+ end
83
+ }
84
+ end
85
+
86
+ def stop_scroll
87
+ @scrolling = false; @timer = nil
88
+ end
89
+
90
+ def set_text(txt)
91
+ stop_scroll if @scrolling
92
+ @scroll_text = txt + " "
93
+ show_text(@scroll_text)
94
+ end
95
+
96
+ def resize
97
+ @main.set_size_request(727.0 * Settings.scale, 75.0 * Settings.scale)
98
+ end
99
+
100
+ end
@@ -0,0 +1,16 @@
1
+ ---
2
+ -
3
+ - false
4
+ -
5
+ - ! '#title# - #artist# - #album#'
6
+ - 0.65
7
+ - Impact 13
8
+ - - 65000
9
+ - 65000
10
+ - 65000
11
+ - - 0
12
+ - 0
13
+ - 0
14
+ -
15
+ - 0.5
16
+ - []
@@ -0,0 +1,284 @@
1
+ =begin
2
+
3
+ this file is part of: gsWax v. 0.12.01
4
+
5
+ You should have received a copy of the GNU General Public License
6
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
7
+ =end
8
+
9
+
10
+ class SettingsCell < Gtk::Frame
11
+ attr_accessor :label
12
+
13
+ def set(label_text, label_pos, width, height)
14
+ @label = Gtk::Label.new(label_text)
15
+ self.label_widget = @label
16
+ self.set_width_request(width) if width
17
+ self.set_height_request(height) if height
18
+ self.label_xalign = label_pos if label_pos
19
+ end
20
+
21
+ def hover
22
+ @label.state = Gtk::StateType::SELECTED
23
+ end
24
+
25
+ def leave
26
+ @label.state = Gtk::StateType::NORMAL
27
+ end
28
+
29
+ end
30
+
31
+
32
+ class SettingsManager
33
+ include Observable
34
+
35
+ def initialize
36
+ Settings.read
37
+ bga = Settings.bg_color
38
+ @bg_color = Gdk::Color.new(bga[0], bga[1], bga[2])
39
+ tca = Settings.text_color
40
+ @text_color = Gdk::Color.new(tca[0], tca[1], tca[2])
41
+ @font_desc = Pango::FontDescription.new(Settings.font_desc)
42
+ init_ui
43
+ end
44
+
45
+ def init_ui
46
+ @win = Gtk::Window.new
47
+ @win.title = "gsWax Settings"
48
+ @win.icon = Gdk::Pixbuf.new File.join(DIR, '../static/gshoes-icon.png')
49
+ @win.set_size_request(400, 400)
50
+ @win.signal_connect("destroy"){
51
+ changed; notify_observers("SETTINGS_CLOSED")
52
+ }
53
+ nb = Gtk::Notebook.new
54
+ page1 = Gtk::VBox.new(false, 2)
55
+
56
+ mdir_frame = SettingsCell.new
57
+ mdir_frame.set("music library directory:", 0.95, nil, 50)
58
+ mdir_btn = Gtk::EventBox.new()
59
+ @mdir_text = Gtk::Label.new(Settings.music_dir)
60
+ @mdir_text.set_alignment(0.05, 0.3)
61
+ @mdir_text.set_wrap(true)
62
+ @mdir_text.justify = Gtk::JUSTIFY_LEFT
63
+ mdir_btn.add(@mdir_text)
64
+ mdir_btn.signal_connect("button_press_event"){music_dir_select}
65
+ mdir_btn.signal_connect("enter_notify_event"){mdir_frame.hover}
66
+ mdir_btn.signal_connect("leave_notify_event"){mdir_frame.leave}
67
+ mdir_frame.add(mdir_btn)
68
+
69
+ hbox1 = Gtk::HBox.new(false, 5)
70
+ hbox1.set_height_request(50)
71
+ scale_frame = SettingsCell.new
72
+ scale_frame.set("scale: [0.35 - 1.0]", 0.05, 193, nil)
73
+ scale_btn = Gtk::EventBox.new()
74
+ @scale_text = Gtk::Entry.new
75
+ @scale_text.text = Settings.scale.to_s
76
+ @scale_text.xalign = 0.95
77
+ @scale_text.signal_connect("enter_notify_event"){scale_frame.hover}
78
+ @scale_text.signal_connect("leave_notify_event"){scale_frame.leave}
79
+ scale_btn.add(@scale_text)
80
+ scale_frame.add(scale_btn)
81
+
82
+ bg_frame = SettingsCell.new
83
+ bg_frame.set("background color:", 0.95, nil, nil)
84
+ @bg_btn = Gtk::EventBox.new()
85
+ @bg_btn.modify_bg(Gtk::STATE_NORMAL, @bg_color)
86
+ @bg_btn.signal_connect("button_press_event"){bg_color_select}
87
+ @bg_btn.signal_connect("enter_notify_event"){bg_frame.hover}
88
+ @bg_btn.signal_connect("leave_notify_event"){bg_frame.leave}
89
+ bg_frame.add(@bg_btn)
90
+ hbox1.pack_start(scale_frame, false, false, 0)
91
+ hbox1.pack_start(bg_frame, true, true, 2)
92
+
93
+ hbox2 = Gtk::HBox.new(false, 5)
94
+ hbox2.set_height_request(50)
95
+ font_frame = SettingsCell.new
96
+ font_frame.set("text font:", 0.05, 193, nil)
97
+ font_btn = Gtk::EventBox.new()
98
+ @font_text = Gtk::Label.new(@font_desc)
99
+ @font_text.modify_font(@font_desc)
100
+ @font_text.xalign = 0.95
101
+ @font_text.justify = Gtk::JUSTIFY_RIGHT
102
+ font_btn.add(@font_text)
103
+ font_btn.signal_connect("button_press_event"){font_select}
104
+ font_btn.signal_connect("enter_notify_event"){font_frame.hover}
105
+ font_btn.signal_connect("leave_notify_event"){font_frame.leave}
106
+ font_frame.add(font_btn)
107
+
108
+ txtclr_frame = SettingsCell.new
109
+ txtclr_frame.set("text color:", 0.95, nil, nil)
110
+ @txtclr_btn = Gtk::EventBox.new()
111
+ @txtclr_btn.modify_bg(Gtk::STATE_NORMAL, @text_color)
112
+ @txtclr_btn.modify_fg(Gtk::STATE_SELECTED, @text_color)
113
+ @txtclr_btn.signal_connect("button_press_event"){text_color_select}
114
+ @txtclr_btn.signal_connect("enter_notify_event"){txtclr_frame.hover}
115
+ @txtclr_btn.signal_connect("leave_notify_event"){txtclr_frame.leave}
116
+ txtclr_frame.add(@txtclr_btn)
117
+ hbox2.pack_start(font_frame, false, false, 0)
118
+ hbox2.pack_start(txtclr_frame, true, true, 2)
119
+
120
+ format_frame = SettingsCell.new
121
+ format_frame.set("title format:", 0.05, nil, nil)
122
+ format_box = Gtk::EventBox.new
123
+ vbox = Gtk::VBox.new(false, 5)
124
+
125
+ valign = Gtk::Alignment.new(0.05, 0.15, 0, 0)
126
+ @format_text = Gtk::TextView.new
127
+ @format_text.set_size_request(390, 200)
128
+ @format_text.wrap_mode = Gtk::TextTag::WRAP_WORD
129
+ @format_text.justification = Gtk::JUSTIFY_LEFT
130
+ @format_text.editable = true
131
+ @format_text.cursor_visible = true
132
+ @format_text.pixels_above_lines = 5
133
+ @format_text.pixels_below_lines = 5
134
+ @format_text.pixels_inside_wrap = 5
135
+ @format_text.left_margin = 10
136
+ @format_text.right_margin = 10
137
+ @format_text.buffer.text = Settings.title_format
138
+ valign.add(@format_text)
139
+
140
+ halign = Gtk::Alignment.new(0.01, 0, 1, 0)
141
+ add_field = Gtk::ComboBox.new
142
+ fields = ["add field", "#track-number#", "#title#", "#album#",
143
+ "#artist#", "#album-artist#", "#genre#", "#comments#"
144
+ ]
145
+ fields.each{|field| add_field.append_text(field)}
146
+ add_field.active = 0
147
+ add_field.signal_connect("changed"){
148
+ @format_text.buffer.insert(
149
+ @format_text.buffer.end_iter, add_field.active_iter[0]
150
+ )
151
+ }
152
+ halign.add(add_field)
153
+
154
+ vbox.pack_start(valign, true, true, 2)
155
+ vbox.pack_start(halign, false, false, 2)
156
+ format_box.add(vbox)
157
+ format_box.signal_connect("enter_notify_event"){format_frame.hover}
158
+ format_box.signal_connect("leave_notify_event"){format_frame.leave}
159
+ format_frame.add(format_box)
160
+
161
+ btn_box = Gtk::HBox.new(false, 2)
162
+ save_btn = Gtk::Button.new(" save settings ")
163
+ save_btn.signal_connect("clicked"){save_settings}
164
+ close_btn = Gtk::Button.new(" close ")
165
+ close_btn.signal_connect("clicked"){@win.destroy}
166
+
167
+ btn_box.pack_end(close_btn, false, false, 2)
168
+ btn_box.pack_end(save_btn, false, false, 2)
169
+
170
+ page1.pack_start(mdir_frame, false, false, 10)
171
+ page1.pack_start(hbox1, false, false, 2)
172
+ page1.pack_start(hbox2, false, false, 2)
173
+ page1.pack_start(format_frame, true, true, 12)
174
+ page1.pack_start(btn_box, false, false, 0)
175
+
176
+ page2 = Gtk::VBox.new(false, 2)
177
+ about_frame = Gtk::Frame.new()
178
+ about = "gsWax version 0.12.1\nhttps://github.com/lljk/shoeWax/tree/onGreenShoes"
179
+ about_text = Gtk::Label.new(about)
180
+ about_text.set_alignment(0.05, 0.5)
181
+ about_text.set_wrap(true)
182
+ about_text.justify = Gtk::JUSTIFY_CENTER
183
+ about_frame.add(about_text)
184
+ page2.pack_start(about_frame, true, true, 2)
185
+
186
+ label1 = Gtk::Label.new(" general ")
187
+ label2 = Gtk::Label.new(" about ")
188
+
189
+ nb.append_page(page1, label1)
190
+ nb.append_page(page2, label2)
191
+ @win.add(nb)
192
+ @win.show_all
193
+ end #init_ui
194
+
195
+ def music_dir_select
196
+ if Settings.music_dir
197
+ open_dir = Settings.music_dir if File.exists?(Settings.music_dir)
198
+ else
199
+ open_dir = Settings.brains_dir
200
+ end
201
+ dialog = Gtk::FileChooserDialog.new(
202
+ nil,nil,
203
+ Gtk::FileChooser::ACTION_SELECT_FOLDER,
204
+ nil,
205
+ ["Cancel", Gtk::Dialog::RESPONSE_CANCEL],
206
+ ["Select", Gtk::Dialog::RESPONSE_ACCEPT]
207
+ )
208
+ dialog.current_folder = (open_dir)
209
+ dialog.signal_connect("delete_event"){dialog.destroy}
210
+ if dialog.run == Gtk::Dialog::RESPONSE_ACCEPT
211
+ Settings.music_dir = dialog.filename
212
+ @mdir_text.text = Settings.music_dir
213
+ dialog.destroy
214
+ end
215
+ end
216
+
217
+ def bg_color_select
218
+ d = Gtk::ColorSelectionDialog.new
219
+ sel = d.colorsel
220
+ sel.set_previous_color(@bg_color)
221
+ sel.set_current_color(@bg_color)
222
+ sel.set_has_palette(true)
223
+ response = d.run
224
+
225
+ if response == Gtk::Dialog::RESPONSE_OK
226
+ bgR = sel.current_color.red
227
+ bgG = sel.current_color.green
228
+ bgB = sel.current_color.blue
229
+ Settings.bg_color = [bgR, bgG, bgB]
230
+ @bg_color = Gdk::Color.new(bgR, bgG, bgB)
231
+ @bg_btn.modify_bg(Gtk::STATE_NORMAL, @bg_color)
232
+ end
233
+ d.destroy
234
+ end
235
+
236
+ def text_color_select
237
+ d = Gtk::ColorSelectionDialog.new
238
+ sel = d.colorsel
239
+ sel.set_previous_color(@text_color)
240
+ sel.set_current_color(@text_color)
241
+ sel.set_has_palette(true)
242
+ response = d.run
243
+
244
+ if response == Gtk::Dialog::RESPONSE_OK
245
+ tR = sel.current_color.red
246
+ tG = sel.current_color.green
247
+ tB = sel.current_color.blue
248
+ Settings.text_color = [tR, tG, tB]
249
+ @text_color = Gdk::Color.new(tR, tG, tB)
250
+ @txtclr_btn.modify_bg(Gtk::STATE_NORMAL, @text_color)
251
+ end
252
+ d.destroy
253
+ end
254
+
255
+ def font_select
256
+ d = Gtk::FontSelectionDialog.new
257
+ d.set_font_name(Settings.font_desc)
258
+ response = d.run
259
+
260
+ if response == Gtk::Dialog::RESPONSE_OK
261
+ font = d.font_name
262
+ Settings.font_desc = font
263
+ @font_desc = Pango::FontDescription.new(font)
264
+ @font_text.text = font
265
+ @font_text.modify_font(@font_desc)
266
+ end
267
+ d.destroy
268
+ end
269
+
270
+ def save_settings
271
+ scale = @scale_text.text.to_f
272
+ scale = 0.35 if scale < 0.35; scale = 1.0 if scale > 1.0
273
+ Settings.scale = scale
274
+ Settings.title_format = @format_text.buffer.text
275
+ Settings.save
276
+ changed; notify_observers("UPDATE_SETTINGS")
277
+ @win.destroy
278
+ end
279
+
280
+ def close_window
281
+ @win.destroy
282
+ end
283
+
284
+ end #class SettingsManager
@@ -0,0 +1,206 @@
1
+ =begin
2
+
3
+ this file is part of: gsWax v. 0.12.01
4
+
5
+ You should have received a copy of the GNU General Public License
6
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
7
+ =end
8
+
9
+
10
+ require 'yaml'
11
+
12
+ module Settings
13
+
14
+ def self.read
15
+ @brains_dir = File.join(File.dirname(File.expand_path(__FILE__)))
16
+ @settings_file = File.join(@brains_dir, "settings", "settings.yml")
17
+ if File.exists?(@settings_file)
18
+ @settings = begin
19
+ YAML.load(File.open(@settings_file))
20
+ rescue ArgumentError => e
21
+ puts "Unable to parse YAML: #{e.message}"
22
+ end
23
+ else
24
+ @settings = [
25
+ nil,
26
+ false,
27
+ nil,
28
+ "#title# - #artist# - #album#",
29
+ 0.65,
30
+ "Impact 13",
31
+ [65000, 65000, 65000],
32
+ [0, 0, 0],
33
+ nil,
34
+ 0.5,
35
+ []
36
+ ]
37
+ self.save
38
+ end
39
+ end
40
+
41
+ def self.save
42
+ #unless File.exists?(@settings_file)
43
+ # Dir.mkdir(File.join(@brains_dir, "settings"), 0777)
44
+ # File.new(@settings_file, "w")
45
+ #end
46
+ File.open(@settings_file, "w"){|file|
47
+ file.write(@settings.to_yaml)
48
+ }
49
+ end
50
+
51
+ def self.brains_dir
52
+ @brains_dir
53
+ end
54
+
55
+ def self.settings
56
+ @settings
57
+ end
58
+
59
+ def self.playlist_file
60
+ @settings[0]
61
+ end
62
+ def self.playlist_file= (file)
63
+ @settings[0] = file
64
+ end
65
+
66
+ def self.shuffle
67
+ @settings[1]
68
+ end
69
+ def self.shuffle= (tof)
70
+ @settings[1] = tof
71
+ end
72
+
73
+ def self.at_bat
74
+ @settings[2]
75
+ end
76
+ def self.at_bat= (atbat)
77
+ @settings[2] = atbat
78
+ end
79
+
80
+ def self.title_format
81
+ @settings[3]
82
+ end
83
+ def self.title_format= (format)
84
+ @settings[3] = format
85
+ end
86
+
87
+ def self.scale
88
+ @settings[4]
89
+ end
90
+ def self.scale= (int)
91
+ @settings[4] = int
92
+ end
93
+
94
+ def self.font_desc
95
+ @settings[5]
96
+ end
97
+ def self.font_desc= (desc)
98
+ @settings[5] = desc
99
+ end
100
+
101
+ def self.text_color
102
+ @settings[6]
103
+ end
104
+ def self.text_color= (rgb_array)
105
+ @settings[6] = rgb_array
106
+ end
107
+
108
+ def self.bg_color
109
+ @settings[7]
110
+ end
111
+ def self.bg_color= (rgb_array)
112
+ @settings[7] = rgb_array
113
+ end
114
+
115
+ def self.music_dir
116
+ @settings[8]
117
+ end
118
+ def self.music_dir= (dir)
119
+ @settings[8] = dir
120
+ end
121
+
122
+ def self.volume
123
+ @settings[9]
124
+ end
125
+ def self.volume= (vol)
126
+ @settings[9] = vol
127
+ end
128
+
129
+ def self.line_up
130
+ @settings[10]
131
+ end
132
+ def self.line_up= (line_up)
133
+ @settings[10] = line_up
134
+ end
135
+
136
+ end #Settings
137
+
138
+
139
+ class ImageButton < Gtk::EventBox
140
+ attr_accessor :image, :cold_pix, :hot_pix
141
+
142
+ def initialize
143
+ super
144
+ self.set_visible_window(false)
145
+ self.signal_connect("enter_notify_event"){enter_event}
146
+ self.signal_connect("leave_notify_event"){leave_event}
147
+ self.signal_connect("button_press_event"){yield if block_given?}
148
+ end
149
+
150
+ def set_images(img_file, hov_file, width, height= width)
151
+ self.remove(@image) if @image
152
+ @cold_pix = Gdk::Pixbuf.new(img_file, width, height)
153
+ @hot_pix = Gdk::Pixbuf.new(hov_file, width, height)
154
+ @image = Gtk::Image.new(@cold_pix)
155
+ self.add(@image)
156
+
157
+ end
158
+
159
+ def enter_event
160
+ @image.pixbuf = @hot_pix if @image
161
+ end
162
+
163
+ def leave_event
164
+ @image.pixbuf = @cold_pix if @image
165
+ end
166
+
167
+ end
168
+
169
+
170
+ class ListView
171
+ include Observable
172
+ attr_accessor :store, :list, :list_selection
173
+
174
+ def initialize
175
+ @store = Gtk::ListStore.new(String, String)
176
+ @list = Gtk::TreeView.new(@store)
177
+ @list.enable_search=(true)
178
+ @list.headers_visible=(false)
179
+ renderer = Gtk::CellRendererText.new
180
+ column = Gtk::TreeViewColumn.new("", renderer, :text => 0)
181
+ @list.append_column(column)
182
+ @list_selection = @list.selection
183
+ @list_selection.mode=(Gtk::SELECTION_MULTIPLE)
184
+ @list.signal_connect("row-activated"){|view, path, column|
185
+ emit_signal("row-activated", view, path, column)
186
+ }
187
+ @list_selection.signal_connect("changed"){|view, path, column|
188
+ emit_signal("changed", view, path, column)
189
+ }
190
+ end
191
+
192
+ def add_to_list(entry, position = "append")
193
+ if position == "append"
194
+ iter = @store.append
195
+ else
196
+ iter = @store.prepend
197
+ end
198
+ @store.set_value(iter, 0, File.basename(entry))
199
+ @store.set_value(iter, 1, entry)
200
+ end
201
+
202
+ def emit_signal(*args)
203
+ changed; notify_observers(*args)
204
+ end
205
+
206
+ end #ListView