"Show properties..." dialog
[pysize.git] / pysize / ui / gtk / pysize_widget_menu.py
blobd2fd5b0bc0258c202618f006e625a08e9d46124a
1 import pygtk
2 pygtk.require('2.0')
3 import gtk
4 assert gtk.pygtk_version >= (2, 8)
6 from pysize.core import compute_size
7 from pysize.ui.utils import human_unit
9 class PysizeWidget_Menu(object):
10 def __init__(self, options, args):
11 self.connect('popup-menu', type(self)._pop_menu)
12 self.connect('button-press-event', type(self)._menu_mouse_button)
14 @staticmethod
15 def _add_menu_item(menu, name, action):
16 item = gtk.MenuItem(name)
17 item.connect('activate', action)
18 item.show()
19 menu.append(item)
21 def _pop_menu(self, event=None):
22 if self.cursor_node:
23 menu = gtk.Menu()
25 props = lambda item: self.show_properties(self.cursor_node)
26 self._add_menu_item(menu, 'Show properties...', props)
28 if event:
29 button = event.button
30 event_time = event.time
31 else:
32 button = 0
33 event_time = gtk.get_current_event_time()
34 menu.attach_to_widget(self, None)
35 menu.popup(None, None, None, button, event_time)
36 return True
38 def _menu_mouse_button(self, event):
39 if event.button == 3 and event.type == gtk.gdk.BUTTON_PRESS:
40 return self._pop_menu(event)
41 return False
43 def show_properties(self, item):
44 fullpaths = item.get_fullpaths()
45 human_size = lambda fp: human_unit(compute_size.slow(fp))
46 size_fullpaths = [human_size(fp) + " | " + fp for fp in fullpaths]
47 dialog = gtk.Dialog('Properties for ' + item.get_name(), None, 0,
48 (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE))
49 label = gtk.Label('\n'.join(size_fullpaths))
50 label.set_selectable(True)
51 label.show()
52 dialog.vbox.add(label)
53 dialog.run()
54 dialog.destroy()