Lightningbeam/GUI/GtkGI/CheckBoxes.py

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()