54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
#
|
|
# Python GUI - Check boxes - Gtk
|
|
#
|
|
|
|
from gi.repository import Gtk
|
|
from GUI.GCheckBoxes import CheckBox as GCheckBox
|
|
|
|
class CheckBox(GCheckBox):
|
|
|
|
def __init__(self, title = "New Control", **kwds):
|
|
gtk_checkbox = Gtk.CheckButton(title)
|
|
gtk_checkbox.show()
|
|
self._gtk_connect(gtk_checkbox, 'clicked', self._gtk_clicked_signal)
|
|
self._gtk_inhibit_action = 0
|
|
GCheckBox.__init__(self, _gtk_outer = gtk_checkbox, **kwds)
|
|
|
|
def get_on(self):
|
|
gtk_checkbox = self._gtk_outer_widget
|
|
if gtk_checkbox.get_inconsistent():
|
|
return 'mixed'
|
|
else:
|
|
return gtk_checkbox.get_active()
|
|
|
|
def set_on(self, state):
|
|
mixed = state == 'mixed'
|
|
if mixed:
|
|
if not self._mixed:
|
|
raise ValueError("CheckBox state cannot be 'mixed'")
|
|
active = False
|
|
else:
|
|
active = bool(state)
|
|
save = self._gtk_inhibit_action
|
|
self._gtk_inhibit_action = 1
|
|
try:
|
|
gtk_checkbox = self._gtk_outer_widget
|
|
gtk_checkbox.set_active(active)
|
|
gtk_checkbox.set_inconsistent(mixed)
|
|
finally:
|
|
self._gtk_inhibit_action = save
|
|
|
|
def _gtk_clicked_signal(self):
|
|
gtk_checkbox = self._gtk_outer_widget
|
|
if not self._gtk_inhibit_action:
|
|
if self._auto_toggle:
|
|
gtk_checkbox.set_inconsistent(False)
|
|
else:
|
|
save = self._gtk_inhibit_action
|
|
self._gtk_inhibit_action = 1
|
|
try:
|
|
gtk_checkbox.set_active(not gtk_checkbox.get_active())
|
|
finally:
|
|
self._gtk_inhibit_action = save
|
|
self.do_action()
|