Beginning of navigation: double click, and parent directory button
[pysize.git] / ui / gtk / pysize_window.py
blob72aa3803881aaef99b425bcb3416621eab170853
1 import os
2 import pygtk
3 pygtk.require('2.0')
4 import gtk
5 assert gtk.pygtk_version >= (2, 8)
6 import gobject
7 import pango
8 import time
10 from gazpacho.loader.loader import ObjectBuilder
12 from ui.gtk.pysize_widget import PysizeWidget
13 from ui.utils import human_unit
14 from core.compute_size import size_observable
16 def hover_changed(main_widget, hover_node, status_bar):
17 status_bar.pop(0)
18 node = hover_node or main_widget.tree.root
19 label = human_unit(node.size) + ' | ' + node.get_fullpath()
20 status_bar.push(0, label)
22 def size_observer(progress_bar):
23 now = time.time()
24 if now - size_observer.last_pulse > 0.04:
25 size_observer.last_pulse = now
26 gobject.idle_add(lambda: progress_bar.pulse())
27 size_observer.last_pulse = time.time()
29 def hide_pbar(progress_bar, visible):
30 if visible:
31 progress_bar.show()
32 else:
33 progress_bar.hide()
35 def update_action(zoom_fit_action, main_widget):
36 zoom_fit_action.set_sensitive(main_widget.options.min_size != 'auto')
38 class PysizeWindow:
39 def __init__(self, options, args):
40 create_widget = lambda **unused_kwargs: PysizeWidget(options, args)
41 glade_filename = os.path.join(os.path.dirname(__file__),
42 'main_window.glade')
43 builder = ObjectBuilder(glade_filename,
44 custom = {'pysize_widget': create_widget})
46 main_widget = builder.get_widget('main_widget')
47 status_bar = builder.get_widget('status_bar')
48 main_widget.connect('hover_changed', hover_changed, status_bar)
50 progress_bar = builder.get_widget('progress_bar')
51 size_observable.add_observer(lambda: size_observer(progress_bar))
52 pbar_hider = lambda w, building: hide_pbar(progress_bar, building)
53 main_widget.connect('building-tree-state-changed', pbar_hider)
55 ui_manager = builder.get_widget('uimanager')
56 zoom_fit_action = ui_manager.get_action('ui/toolbar/ZoomFit')
57 action_updater = lambda w, building: update_action(zoom_fit_action, w)
58 main_widget.connect('building-tree-state-changed', action_updater)
60 callbacks = {
61 'quit_action': lambda w: gtk.main_quit(),
62 'refresh_tree_action': lambda w: main_widget.refresh_tree(),
63 'zoom_fit_action': lambda w: main_widget.zoom_fit(),
64 'zoom_in_action': lambda w: main_widget.zoom_in(),
65 'zoom_out_action': lambda w: main_widget.zoom_out(),
66 'parent_directory_action': lambda w: main_widget.parent_directory()
68 builder.signal_autoconnect(callbacks)
70 window = builder.get_widget('main_window')
71 window.set_title('Pysize - ' + args[0])
72 window.show_all()
74 gtk.main()