-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhide_control.py
131 lines (116 loc) · 5.56 KB
/
hide_control.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/env python
# -*- coding: utf-8 -*-
import gtk
class hide_control(object):
"""
\~russian
\brief Контрол, управляет видимостью виджетов
В зависимости от чекбуттона показывает или скрывает группу виджетов, либо делает виджеты неактивными
\todo Экземпляры класса ничего не делают когда их собирает GC. Нужно отработать удаление обекта и снять обработчик
события "toggled" с виджета \c checkbutton
"""
def __init__(self, checkbutton, hide_widgets, hide = False, reverse = False):
"""
\~russian
\param checkbutton Gtk виджет с методом get_active и сигналом "toggled"
\param hide_widgets список с виджетами которые будут отображаться или скрываться в зависимости от состояния
виджета \c checkbutton
\param hide Если \c True то виджеты из списка \c hide_widgets будут скрываться, в противном случае
будет переключаться свойство \c "sensitive" и виджет будет становится "серым" или неактивным для пользователя
\param reverse если \c True то виджеты будут скрываться когда метод get_active() виджета \c checkbutton наоборот возвращает \c True
"""
self.checkbutton = checkbutton
self.hide_widgets = hide_widgets
self.hide = hide
self.reverse = reverse
self.checkbutton.connect("toggled", self.toggled)
for w in self.hide_widgets:
w.connect("show", self.toggled)
self.toggled(None)
def hide_all(self):
for w in self.hide_widgets:
w.hide()
def show_all(self):
for w in self.hide_widgets:
w.show()
def set_sensitive_all(self, sens):
for w in self.hide_widgets:
w.set_sensitive(sens)
def toggled(self, something):
p = self.checkbutton.get_active()
if self.reverse:
p = not p
if p:
if self.hide:
self.show_all()
else:
self.set_sensitive_all(True)
else:
if self.hide:
self.hide_all()
else:
self.set_sensitive_all(False)
class all_checked_control(object):
"""
\~russian
\brief Управляет наследниками TobbleButton
Используется для создания зависимых галочек или кнопок, когда выбранная родительская галочка
не имеет смысла если все дочерние галочки сняты. Этот контрол снимает родительскую галочк
когда все дочерние галочки сняты
\todo Экземпляры долджны снимать обработку сигнала "toggled" с виджетов \c child_checkbuttons перед GC.
"""
def __init__(self, parent_checkbutton, child_checkbuttons):
"""
\~russian
\param parent_checkbutton виджет наследник ToggleButton
\param child_checkbuttons список наследников ToggleButton
Когда все виджеты из списка \c child_checkbuttons будут сняты (\c get_active() вернет \c False) то \c parent_checkbutton также будет снята.
"""
self.parent_checkbutton = parent_checkbutton
self.child_checkbuttons = child_checkbuttons
for w in self.child_checkbuttons:
w.connect("toggled", self.toggled)
self.toggled(None)
def toggled(self, something):
for w in self.child_checkbuttons:
if w.get_active():
return
self.parent_checkbutton.set_active(False)
class value_returner_control(object):
"""
\~russian
\brief Контрол возвращающий значение
"""
def return_value(self, value):
"""
\~russian
\param value значение для возврата
\retval None Если у экземпляра есть атрибут \c checkbutton и у этого атрибута метод \c get_active не вернет \c True
\retval value в том случае если у экземпляра нет атрибута \c checkbutton или метод \c get_active этого свойства вернул \c True
"""
if self.checkbutton:
if self.checkbutton.get_active():
return value
else:
return value
return None
if __name__ == "__main__":
w = gtk.Dialog(buttons = (gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
p = w.get_content_area()
c = gtk.CheckButton("eijeifj")
b = gtk.Button("eifjefij")
p.pack_start(c, False)
p.pack_start(b)
hide_control(c, [b])
cc = gtk.ToggleButton("yayaya")
bb = gtk.Label("super yagoo")
bbb = gtk.Label("another super")
p.pack_start(cc)
p.pack_start(bb, False)
p.pack_start(bbb, False)
hide_control(cc, [bb, bbb], hide = True)
pc = gtk.CheckButton("Dady")
all_checked_control(pc, [c, cc])
p.pack_start(pc, False)
w.show_all()
w.run()