218
223
def __init__(self, applet, standalone_window=None):
219
224
self.applet = applet
220
225
self.applet.ts = self # Needed for standalone
221
self.applet.connect("change_background", self.do_change_background)
227
self.applet.set_flags(gnomeapplet.EXPAND_MAJOR) # TODO: Needed?
223
229
self.standalone_window = standalone_window
225
231
self.window = None
227
233
self.pressed = False
228
self.resizing = False
230
self.panel_pb = gtk.gdk.pixbuf_new_from_file("/usr/share/pixmaps/topshelf-24.png")
231
self.panel_off_pb = gtk.gdk.pixbuf_new_from_file("/usr/share/pixmaps/topshelf-24-off.png")
233
235
self.panel_image = gtk.Image()
234
self.panel_image.set_from_pixbuf(self.panel_pb)
236
self.panel_image.set_tooltip_text("TopShelf")
237
self.applet.set_tooltip_text("TopShelf")
237
238
except AttributeError:
238
239
pass # No tooltips, not the end of the world. Only python-gtk2 2.12 has them, i.e., Gutsy and above
239
self.eventbox = gtk.EventBox()
240
self.eventbox.connect("button-press-event", self.do_button_press)
241
self.eventbox.drag_dest_set(gtk.DEST_DEFAULT_ALL, [('text/uri-list', 0, 81)], gtk.gdk.ACTION_LINK)
242
self.eventbox.connect("drag-data-received", self.do_drag_data_received)
243
self.eventbox.connect("key-press-event", self.do_key_press)
240
self.applet.connect("button_press_event", self.on_button_press)
241
self.applet.drag_dest_set(gtk.DEST_DEFAULT_ALL, [('text/uri-list', 0, 81)], gtk.gdk.ACTION_LINK)
242
self.applet.connect("drag_data_received", self.on_drag_data_received)
243
self.applet.connect("key_press_event", self.on_key_press)
244
self.applet.connect("change_background", self.on_change_background)
245
self.applet.connect("change-size", self.on_change_size)
245
self.eventbox.add(self.panel_image)
246
self.applet.add(self.eventbox)
247
self.applet.add(self.panel_image)
247
248
self.applet.show_all()
249
250
# full-path, position, short-filename, mime-type-icon, color, strikethrough
259
260
self.standalone_window.connect("configure-event", self.standalone_window_configure_event)
260
261
self.standalone_window.set_keep_above(True)
264
def do_change_background(self, applet, backgroundtype, color, pixmap):
265
update_background(applet, backgroundtype, color, pixmap)
266
update_background(self.eventbox, backgroundtype, color, pixmap)
268
def do_button_toggle(self, param1=None):
263
self.size = self.applet.get_size()
264
self.on_change_size(self.applet, self.size)
266
# self.applet.get_parent().child_set_property(applet, "fill", True)
270
def get_pixbufs(self, size):
272
for pb_type in ["", "-off"]: # On, then off
273
# With help from the Deskbar applet. Thanks!
274
image_name = "/usr/share/pixmaps/topshelf-"
276
image_name += "24" + pb_type + ".png"
279
image_name += "svg" + pb_type + ".svg"
282
self.panel_pbs.append(gtk.gdk.pixbuf_new_from_file(image_name))
284
for i in range(len(self.panel_pbs)):
285
self.panel_pbs[i] = self.panel_pbs[i].scale_simple(size, size, gtk.gdk.INTERP_HYPER)
289
self.panel_image.set_from_pixbuf(self.panel_pbs[0])
291
self.panel_image.set_from_pixbuf(self.panel_pbs[1])
293
# print "Setting image to want size", self.size
294
# self.panel_image.set_size_request(self.size, self.size)
299
def on_change_background(self, applet, backgroundtype, color, pixmap):
300
update_background(applet, backgroundtype, color, pixmap)
302
def on_change_size(self, applet, size):
303
print "Changing size to ", size
305
f = open("/media/sda2/Bzr-external/topshelf/outt3", "w")
306
f.write(str(applet) + "," + str(size) + "\r\n")
309
self.get_pixbufs(size)
310
self.applet.set_size_request(size, size)
318
def on_button_toggle(self, param1=None):
269
319
if not self.pressed:
270
320
self.show_window()
272
322
self.hide_window()
274
def do_button_press(self, btn, event):
324
def on_button_press(self, btn, event):
325
print self.applet.get_size(), event.type, event.button
326
self.on_change_size(self.applet, self.applet.get_size())
275
327
if event.type == gtk.gdk.BUTTON_PRESS and event.button == 1:
276
if not self.resizing:
277
self.do_button_toggle()
279
self.do_stop_resizing()
328
self.on_button_toggle()
280
330
elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 3:
281
btn.emit_stop_by_name("button_press_event")
331
# btn.emit_stop_by_name("button_press_event") # TODO: Once this was needed
283
333
<popup name="button3">
284
334
<menuitem name="Item 3" verb="Help" label="_Help" pixtype="stock" pixname="gtk-help"/>
285
335
<menuitem name="Item 4" verb="About" label="_About" pixtype="stock" pixname="gtk-about"/>
287
verbs = [("About", self.do_about),
288
("Help", self.do_help) ]
337
verbs = [("About", self.on_about),
338
("Help", self.on_help) ]
289
339
self.applet.setup_menu(propxml, verbs, None)
291
def do_files_button_press(self, btn, event):
341
def on_files_button_press(self, btn, event):
292
342
if event.button == 3:
293
343
model, iters = self.get_selected()
294
344
if len(iters) > 0:
321
def do_cursor_change(self, param1):
371
def on_cursor_change(self, param1):
322
372
model, iters = self.get_selected()
323
373
for iter in iters:
324
374
self.check_file(iter)
328
def do_about(self, param1=None, param2=None):
329
self.window.set_keep_above(False) # So we are not concealed!
378
def on_about(self, param1=None, param2=None):
379
if self.window is not None:
380
self.window.set_keep_above(False) # So we are not concealed!
331
382
logo_pb = gtk.gdk.pixbuf_new_from_file("/usr/share/pixmaps/topshelf-64.png")
443
def do_drag_data_received(self, widget, drag_context, x, y, selection_data, info, timestamp):
495
def on_drag_data_received(self, widget, drag_context, x, y, selection_data, info, timestamp):
444
496
uris = selection_data.data.strip().split()
446
498
filename = urllib.url2pathname(uri)
447
499
self.add_file(filename)
449
def do_package(self, param1=None):
501
def on_package(self, param1=None):
450
502
if self.get_n_files() == 0:
581
630
self.window.connect("delete-event", self.hide_window)
582
631
self.window.connect("window-state-event", self.window_state_event)
583
632
self.window.connect("configure-event", self.configure_event)
584
self.window.connect("key-press-event", self.do_key_press)
633
self.window.connect("key-press-event", self.on_key_press)
586
635
self.window.set_keep_above(True)
587
636
self.window.resize(self.persistent_data.get('w'), self.persistent_data.get('h'))
589
638
self.window.drag_dest_set(gtk.DEST_DEFAULT_ALL, [('text/uri-list', 0, 81)], gtk.gdk.ACTION_LINK)
590
self.window.connect("drag-data-received", self.do_drag_data_received)
639
self.window.connect("drag-data-received", self.on_drag_data_received)
604
653
col.clicked() # Set default sort
606
self.treeview.connect("row-activated" , self.do_open)
607
self.treeview.connect("cursor-changed", self.do_cursor_change)
608
self.treeview.connect("button-press-event", self.do_files_button_press)
655
self.treeview.connect("row-activated" , self.on_open)
656
self.treeview.connect("cursor-changed", self.on_cursor_change)
657
self.treeview.connect("button-press-event", self.on_files_button_press)
610
659
scrolled_window = gtk.ScrolledWindow()
611
660
scrolled_window.add(self.treeview)
616
665
toolbar = gtk.Toolbar()
618
self.add_stock_button (toolbar, gtk.STOCK_OPEN, self.do_open , "Open file")
619
self.add_altstock_button (toolbar, gtk.STOCK_DIRECTORY, "Open Folder", self.do_open_folder, "Open folder containing file")
620
toolbar.add(gtk.SeparatorToolItem())
621
self.add_stock_button (toolbar, gtk.STOCK_GO_UP, self.do_move_up , "Move file up in order")
622
self.add_stock_button (toolbar, gtk.STOCK_GO_DOWN, self.do_move_down , "Move file down in order")
623
toolbar.add(gtk.SeparatorToolItem())
624
self.add_stock_button (toolbar, gtk.STOCK_ADD, self.do_add , "Add a file to the list")
625
self.add_stock_button (toolbar, gtk.STOCK_REMOVE, self.do_remove , "Remove file from the list")
626
toolbar.add(gtk.SeparatorToolItem())
627
self.add_stock_button (toolbar, gtk.STOCK_HELP, self.do_help , "Show help")
628
self.add_stock_button (toolbar, gtk.STOCK_ABOUT, self.do_about , "About TopShelf")
629
# self.add_pixbuf_button (toolbar, guess_mime_icon("a.zip"), "Package Files", self.do_package)
667
self.add_stock_button (toolbar, gtk.STOCK_OPEN, self.on_open , "Open file")
668
self.add_altstock_button (toolbar, gtk.STOCK_DIRECTORY, "Open Folder", self.on_open_folder, "Open folder containing file")
669
toolbar.add(gtk.SeparatorToolItem())
670
self.add_stock_button (toolbar, gtk.STOCK_GO_UP, self.on_move_up , "Move file up in order")
671
self.add_stock_button (toolbar, gtk.STOCK_GO_DOWN, self.on_move_down , "Move file down in order")
672
toolbar.add(gtk.SeparatorToolItem())
673
self.add_stock_button (toolbar, gtk.STOCK_ADD, self.on_add , "Add a file to the list")
674
self.add_stock_button (toolbar, gtk.STOCK_REMOVE, self.on_remove , "Remove file from the list")
675
toolbar.add(gtk.SeparatorToolItem())
676
self.add_stock_button (toolbar, gtk.STOCK_HELP, self.on_help , "Show help")
677
self.add_stock_button (toolbar, gtk.STOCK_ABOUT, self.on_about , "About TopShelf")
678
# self.add_pixbuf_button (toolbar, guess_mime_icon("a.zip"), "Package Files", self.on_package)
643
692
self.popup_menu = gtk.Menu()
644
self.add_menuitem (self.popup_menu, gtk.STOCK_OPEN, self.do_open)
645
self.add_altmenuitem(self.popup_menu, gtk.STOCK_DIRECTORY, "Open Folder", self.do_open_folder)
646
self.popup_menu.add(gtk.SeparatorMenuItem())
647
self.add_menuitem (self.popup_menu, gtk.STOCK_GO_UP, self.do_move_up)
648
self.add_menuitem (self.popup_menu, gtk.STOCK_GO_DOWN, self.do_move_down)
649
self.popup_menu.add(gtk.SeparatorMenuItem())
650
self.add_menuitem (self.popup_menu, gtk.STOCK_REMOVE, self.do_remove)
693
self.add_menuitem (self.popup_menu, gtk.STOCK_OPEN, self.on_open)
694
self.add_altmenuitem(self.popup_menu, gtk.STOCK_DIRECTORY, "Open Folder", self.on_open_folder)
695
self.popup_menu.add(gtk.SeparatorMenuItem())
696
self.add_menuitem (self.popup_menu, gtk.STOCK_GO_UP, self.on_move_up)
697
self.add_menuitem (self.popup_menu, gtk.STOCK_GO_DOWN, self.on_move_down)
698
self.popup_menu.add(gtk.SeparatorMenuItem())
699
self.add_menuitem (self.popup_menu, gtk.STOCK_REMOVE, self.on_remove)
651
700
self.popup_menu.show_all()
653
702
# Finalize main window