1
__license__ = "MIT <http://www.opensource.org/licenses/mit-license.php>"
2
__author__ = "Tiago Cogumbreiro <cogumbreiro@users.sf.net>"
3
__copyright__ = "Copyright 2006, Tiago Cogumbreiro"
13
def _remove_all(widget):
14
map(widget.remove, widget.get_children())
16
# TODO: implement remove_{right,left}_widget
17
class ShiftPaned(gtk.VBox):
19
A ShiftPaned is a gtk.Paned that can hide one of its child widgets,
20
therefore hiding the pane division.
31
def has_both_widgets(self):
32
return self.right_widget is not None and self.left_widget is not None
34
def __init__(self, paned_factory=gtk.HPaned):
35
self.paned = paned_factory()
37
super(ShiftPaned, self).__init__()
39
def update_children(self):
40
if self.has_both_widgets():
42
_remove_all(self.paned)
43
if self._state == SHOW_BOTH:
56
elif self._state == SHOW_LEFT:
57
self.add(self.left_widget)
58
elif self._state == SHOW_RIGHT:
59
self.add(self.right_widget)
61
elif len(self.get_children()) >= 1:
62
self.remove(self.get_children()[0])
64
def pack1(self, widget, *args, **kwargs):
65
assert widget is not None
66
self._left_args = args
67
self._left_kwargs = kwargs
68
self.left_widget = widget
69
self.update_children()
71
def pack2(self, widget, *args, **kwargs):
72
assert widget is not None
73
self._right_args = args
74
self._right_kwargs = kwargs
75
self.right_widget = widget
76
self.update_children()
78
def set_state(self, state):
79
if state == self._state:
82
self.update_children()
87
def set_position(self, position):
88
self.paned.set_position(position)
90
def get_position(self):
91
return self.paned.get_position()
94
class ShiftPaned(gtk.VBox):
98
def __init__(self, paned_factory=gtk.HPaned, main_first=True):
99
self.paned = paned_factory()
101
self.main_first = main_first
102
super(ShiftPaned, self).__init__()
104
self.__nonmain = None
105
self.__nonmain_args = None
106
self.__nonmain_kw = None
108
def pack_main(self, widget, *args, **kw):
110
packer = self.paned.pack1
112
packer = self.paned.pack2
113
packer(widget, *args, **kw)
115
def pack_sub(self, widget, *args, **kw):
116
self.__nonmain = widget
117
self.__nonmain_args = args
118
self.__nonmain_kw = kw
119
self.update_children()
121
def update_children(self):
122
if self._state == SHOW_BOTH:
125
self.paned.pack2(self.__nonmain)
127
self.paned.pack1(self.__nonmain)
129
self.paned.remove(self.__nonmain)
131
def set_state(self, state):
132
if state == self._state:
135
self.update_children()
137
def set_position(self, position):
138
self.paned.set_position(position)
140
if __name__ == '__main__':
141
#p = ShiftPaned(gtk.VPaned)
142
p = ShiftPaned(gtk.HPaned)
143
btn1 = gtk.Label("Show right only")
144
btn2 = gtk.ToggleButton("Show left only")
149
p.set_state(SHOW_BOTH)
151
p.set_state(SHOW_LEFT)
152
btn2.connect("toggled", on_click)
158
w.connect("delete-event", gtk.main_quit)