79 lines
2.2 KiB
Python
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)
|