5 assert gtk
.pygtk_version
>= (2, 8)
10 from pysize
.ui
.gtk
.gazpacho_loader
.loader
import ObjectBuilder
12 from pysize
.ui
.gtk
.pysize_widget
import PysizeWidget
13 from pysize
.ui
.utils
import human_unit
14 from pysize
.core
.compute_size
import size_observable
15 from pysize
.core
import history
17 def hover_changed(main_widget
, hover_node
, status_bar
):
19 node
= hover_node
or main_widget
.tree
.root
20 label
= human_unit(node
.size
) + ' | ' + node
.get_fullname()
21 status_bar
.push(0, label
)
23 def size_observer(progress_bar
):
25 if now
- size_observer
.last_pulse
> 0.04:
26 size_observer
.last_pulse
= now
27 gobject
.idle_add(lambda: progress_bar
.pulse())
28 size_observer
.last_pulse
= time
.time()
30 def hide_pbar(progress_bar
, visible
):
36 def update_action(zoom_fit_action
, main_widget
):
37 zoom_fit_action
.set_sensitive(main_widget
.options
.min_size
!= 'auto')
39 def update_title(window
, main_widget
):
40 root
= main_widget
.tree
.root
41 window
.set_title('Pysize - %s | %s' %
42 (human_unit(root
.size
), root
.get_name()))
44 def update_back_action(back_action
, next_insertion_index
, history
):
45 back_action
.set_sensitive(next_insertion_index
> 1)
47 def update_forward_action(forward_action
, next_insertion_index
, history
):
48 forward_action
.set_sensitive(next_insertion_index
< len(history
))
50 class PysizeWindow(object):
51 def __init__(self
, options
, args
):
52 create_widget
= lambda **unused_kwargs
: PysizeWidget(options
, args
)
53 glade_filename
= os
.path
.join(os
.path
.dirname(__file__
),
55 builder
= ObjectBuilder(glade_filename
,
56 custom
= {'pysize_widget': create_widget
})
58 main_widget
= builder
.get_widget('main_widget')
59 status_bar
= builder
.get_widget('status_bar')
60 main_widget
.connect('hover_changed', hover_changed
, status_bar
)
62 progress_bar
= builder
.get_widget('progress_bar')
63 size_observable
.add_observer(lambda: size_observer(progress_bar
))
64 pbar_hider
= lambda w
, building
: hide_pbar(progress_bar
, building
)
65 main_widget
.connect('building-tree-state-changed', pbar_hider
)
67 max_depth
= builder
.get_widget('max_depth')
68 spin_init
= lambda w
: max_depth
.set_value(main_widget
.options
.max_depth
)
69 main_widget
.connect('realize', spin_init
)
71 ui_manager
= builder
.get_widget('uimanager')
72 zoom_fit_action
= ui_manager
.get_action('ui/toolbar/ZoomFit')
73 action_updater
= lambda w
, building
: update_action(zoom_fit_action
, w
)
74 main_widget
.connect('building-tree-state-changed', action_updater
)
76 back_action
= ui_manager
.get_action('ui/toolbar/Back')
77 back_action
.set_sensitive(False)
78 update_back
= lambda n
, h
: update_back_action(back_action
, n
, h
)
79 history
.history_observable
.add_observer(update_back
)
81 forward_action
= ui_manager
.get_action('ui/toolbar/Forward')
82 forward_action
.set_sensitive(False)
83 update_forw
= lambda n
, h
: update_forward_action(forward_action
, n
, h
)
84 history
.history_observable
.add_observer(update_forw
)
86 toolbar
= builder
.get_widget('toolbar')
87 toolbar_remaining
= builder
.get_widget('toolbar_remaining')
88 toolbar_remaining
.unparent()
89 tool_item
= gtk
.ToolItem()
90 tool_item
.add(toolbar_remaining
)
91 toolbar
.insert(tool_item
, -1)
94 'quit_action': lambda w
: gtk
.main_quit(),
95 'refresh_tree_action': lambda w
: main_widget
.refresh_tree(),
96 'zoom_fit_action': lambda w
: main_widget
.zoom_fit(),
97 'zoom_in_action': lambda w
: main_widget
.zoom_in(),
98 'zoom_out_action': lambda w
: main_widget
.zoom_out(),
99 'parent_directory_action': lambda w
: main_widget
.parent_directory(),
100 'open_action': lambda w
: main_widget
.open(),
101 'back_action': lambda w
: main_widget
.move_history(history
.back
),
102 'forw_action': lambda w
: main_widget
.move_history(history
.forward
),
103 'max_depth_changed': main_widget
.max_depth_changed
105 builder
.signal_autoconnect(callbacks
)
107 window
= builder
.get_widget('main_window')
108 title_updater
= lambda w
, tree
: update_title(window
, main_widget
)
109 main_widget
.connect('building-tree-state-changed', title_updater
)