Lightningbeam/PyGUI-2.5.3/GUI/Win32/CheckBox.py

79 lines
2.2 KiB
Python

#--------------------------------------------------------------------
#
# PyGUI - CheckBox - Win32
#
#--------------------------------------------------------------------
import win32con as wc, win32ui as ui
from GUI import export
from GUI.StdFonts import system_font
from GUI.ButtonBases import ButtonBase
from GUI.GCheckBoxes import CheckBox as GCheckBox
win_check_size = 13
win_hpad = 5
win_styles = (
[wc.BS_CHECKBOX, wc.BS_AUTOCHECKBOX],
[wc.BS_3STATE, wc.BS_AUTO3STATE],
)
win_states = (
[False, True],
[False, True, 'mixed'],
)
class CheckBox(ButtonBase, GCheckBox):
#_win_transparent = True
def __init__(self, title = "New Checkbox", **kwds):
font = self._win_predict_font(kwds)
self._auto_toggle = kwds.pop('auto_toggle', True)
self._mixed = kwds.get('mixed', False)
w = font.width(title) + win_hpad + win_check_size
h = max(self._calc_height(font), win_check_size)
win_style = self._win_button_style()
win = self._win_create_button(title, win_style, w, h)
GCheckBox.__init__(self, _win = win, **kwds)
def get_auto_toggle(self):
return win_styles[self._mixed].index(self._win.GetButtonStyle()) != 0
def set_auto_toggle(self, x):
self._auto_toggle = bool(x)
self._win_update_button_style()
def set_mixed(self, v):
GCheckBox.set_mixed(self, v)
self._win_update_button_style()
def get_on(self):
return win_states[self._mixed][self._win.GetCheck() & 0x3]
def set_on(self, x):
try:
state = win_states[self._mixed].index(x)
except ValueError:
raise ValueError("Invalid CheckBox state '%s'" % x)
self._win.SetCheck(state)
def _win_update_button_style(self):
self._win.SetButtonStyle(self._win_button_style())
def _win_button_style(self):
return win_styles[self._mixed][self._auto_toggle]
def _win_bn_clicked(self):
#print "CheckBox._win_bn_clicked:", self ###
self.do_action()
def _win_activate(self):
if self.auto_toggle:
states = win_states[self._mixed]
i = states.index(self.on)
self.on = states[(i+1) % len(states)]
self.do_action()
export(CheckBox)