~ubuntu-branches/ubuntu/jaunty/pida/jaunty

« back to all changes in this revision

Viewing changes to pida/utils/shiftpaned.py

  • Committer: Bazaar Package Importer
  • Author(s): Barry deFreese
  • Date: 2006-08-01 13:08:56 UTC
  • mfrom: (0.1.2 etch) (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20060801130856-v92ktopgdxc8rv7q
Tags: 0.3.1-2ubuntu1
* Re-sync with Debian
* Remove bashisms from debian/rules

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