~ubuntu-branches/ubuntu/precise/pida/precise

« back to all changes in this revision

Viewing changes to pida/utils/shiftpaned.py

  • Committer: Bazaar Package Importer
  • Author(s): Jan Luebbe
  • Date: 2007-04-17 16:08:06 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20070417160806-3ttlb6igf94x9i03
Tags: 0.4.4-1
* New upstream release (closes: #419129)
* Add dependency on python-glade2 (closes: #418716)
* Update copyright

Show diffs side-by-side

added added

removed removed

Lines of Context:
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"
4
 
 
5
 
import gtk
6
 
 
7
 
(
8
 
SHOW_LEFT,
9
 
SHOW_RIGHT,
10
 
SHOW_BOTH,
11
 
) = range(3)
12
 
 
13
 
def _remove_all(widget):
14
 
    map(widget.remove, widget.get_children())
15
 
 
16
 
# TODO: implement remove_{right,left}_widget
17
 
class ShiftPaned(gtk.VBox):
18
 
    """
19
 
    A ShiftPaned is a gtk.Paned that can hide one of its child widgets,
20
 
    therefore hiding the pane division.
21
 
    
22
 
    """
23
 
    _state = SHOW_BOTH
24
 
    _left_args = ()
25
 
    _left_kwargs = {}
26
 
    _right_args = ()
27
 
    _right_kwargs = {}
28
 
    left_widget = None
29
 
    right_widget = None
30
 
    
31
 
    def has_both_widgets(self):
32
 
        return self.right_widget is not None and self.left_widget is not None
33
 
    
34
 
    def __init__(self, paned_factory=gtk.HPaned):
35
 
        self.paned = paned_factory()
36
 
        self.paned.show()
37
 
        super(ShiftPaned, self).__init__()
38
 
    
39
 
    def update_children(self):
40
 
        if self.has_both_widgets():
41
 
            _remove_all(self)
42
 
            _remove_all(self.paned)
43
 
            if self._state == SHOW_BOTH:
44
 
                self.add(self.paned)
45
 
                self.paned.pack1(
46
 
                    self.left_widget,
47
 
                    *self._left_args,
48
 
                    **self._left_kwargs
49
 
                )
50
 
                
51
 
                self.paned.pack2(
52
 
                    self.right_widget,
53
 
                    *self._right_args,
54
 
                    **self._right_kwargs
55
 
                )
56
 
            elif self._state == SHOW_LEFT:
57
 
                self.add(self.left_widget)
58
 
            elif self._state == SHOW_RIGHT:
59
 
                self.add(self.right_widget)
60
 
                
61
 
        elif len(self.get_children()) >= 1:
62
 
            self.remove(self.get_children()[0])
63
 
    
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()
70
 
    
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()
77
 
        
78
 
    def set_state(self, state):
79
 
        if state == self._state:
80
 
            return
81
 
        self._state = state
82
 
        self.update_children()
83
 
 
84
 
    def get_state(self):
85
 
        return self._state
86
 
 
87
 
    def set_position(self, position):
88
 
        self.paned.set_position(position)
89
 
    
90
 
    def get_position(self):
91
 
        return self.paned.get_position()
92
 
 
93
 
 
94
 
class ShiftPaned(gtk.VBox):
95
 
 
96
 
    _state = SHOW_BOTH
97
 
 
98
 
    def __init__(self, paned_factory=gtk.HPaned, main_first=True):
99
 
        self.paned = paned_factory()
100
 
        self.paned.show()
101
 
        self.main_first = main_first
102
 
        super(ShiftPaned, self).__init__()
103
 
        self.add(self.paned)
104
 
        self.__nonmain = None
105
 
        self.__nonmain_args = None
106
 
        self.__nonmain_kw = None
107
 
 
108
 
    def pack_main(self, widget, *args, **kw):
109
 
        if self.main_first:
110
 
            packer = self.paned.pack1
111
 
        else:
112
 
            packer = self.paned.pack2
113
 
        packer(widget, *args, **kw)
114
 
 
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()
120
 
 
121
 
    def update_children(self):
122
 
        if self._state == SHOW_BOTH:
123
 
            if self.__nonmain:
124
 
                if self.main_first:
125
 
                    self.paned.pack2(self.__nonmain)
126
 
                else:
127
 
                    self.paned.pack1(self.__nonmain)
128
 
        else:
129
 
            self.paned.remove(self.__nonmain)
130
 
 
131
 
    def set_state(self, state):
132
 
        if state == self._state:
133
 
            return
134
 
        self._state = state
135
 
        self.update_children()
136
 
 
137
 
    def set_position(self, position):
138
 
        self.paned.set_position(position)
139
 
 
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")
145
 
    p.pack_sub(btn1)
146
 
    p.pack_main(btn2)
147
 
    def on_click(btn):
148
 
        if btn.get_active():
149
 
            p.set_state(SHOW_BOTH)
150
 
        else:
151
 
            p.set_state(SHOW_LEFT)
152
 
    btn2.connect("toggled", on_click)
153
 
    btn1.show()
154
 
    btn2.show()
155
 
    w = gtk.Window()
156
 
    w.add(p)
157
 
    w.show_all()
158
 
    w.connect("delete-event", gtk.main_quit)
159
 
    gtk.main()
160
 
 
161