diff options
Diffstat (limited to 'Src/Wasabi/api/skin/widgets/grouptgbutton.cpp')
-rw-r--r-- | Src/Wasabi/api/skin/widgets/grouptgbutton.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/Src/Wasabi/api/skin/widgets/grouptgbutton.cpp b/Src/Wasabi/api/skin/widgets/grouptgbutton.cpp new file mode 100644 index 00000000..b0f22430 --- /dev/null +++ b/Src/Wasabi/api/skin/widgets/grouptgbutton.cpp @@ -0,0 +1,109 @@ +#include <precomp.h> +#include "grouptgbutton.h" +#include <api/script/objects/guiobject.h> +#include <api/wnd/notifmsg.h> + +GroupToggleButton::GroupToggleButton() { + status = STATUS_OFF; +} + +GroupToggleButton::~GroupToggleButton() { +} + +void GroupToggleButton::setGroups(const wchar_t *_on, const wchar_t *_off) { + on_id = _on; + on.setContent(on_id); + off_id = _off; + off.setContent(off_id); +} + +int GroupToggleButton::onInit() { + int rt = GROUPTOGGLEBUTTON_PARENT::onInit(); + initGroups(); + return rt; +} + +void GroupToggleButton::initGroups() { + on.setStartHidden(status == STATUS_ON ? 0 : 1); off.setStartHidden(status == STATUS_ON ? 1 : 0); + on.setContent(on_id); + off.setContent(off_id); + on.setParent(this); off.setParent(this); + on.init(this); off.init(this); + rootwndholder_setRootWnd(status == STATUS_ON ? &on : &off); +} + +int GroupToggleButton::childNotify(ifc_window *child, int msg, intptr_t param1, intptr_t param2) { + if (child == &on || child == &off) { + switch (msg) { + case ChildNotify::BUTTON_LEFTPUSH: { + if (wantFullClick()) grouptoggle_onLeftPush(); + return 1; + } + case ChildNotify::BUTTON_RIGHTPUSH: { + if (wantFullClick()) grouptoggle_onRightPush(); + return 1; + } + case ChildNotify::CLICKWND_LEFTDOWN: { + if (!wantFullClick()) grouptoggle_onLeftPush(); + return 1; + } + case ChildNotify::CLICKWND_RIGHTDOWN: { + if (!wantFullClick()) grouptoggle_onRightPush(); + return 1; + } + } + } + return GROUPTOGGLEBUTTON_PARENT::childNotify(child, msg, param1, param2); +} + +void GroupToggleButton::toggle() { + if (status == STATUS_OFF) { + if (isInited()) { + off.setVisible(0); + on.setVisible(1); + rootwndholder_setRootWnd(&on); + } + status = STATUS_ON; + } else { + if (isInited()) { + on.setVisible(0); + off.setVisible(1); + rootwndholder_setRootWnd(&off); + } + status = STATUS_OFF; + } + notifyParent(ChildNotify::GROUPCLICKTGBUTTON_TOGGLE, status); +} + +void GroupToggleButton::setStatus(int s) { + if (s != status) + toggle(); +} + +int GroupToggleButton::wantFullClick() { + return 0; +} + +void GroupToggleButton::grouptoggle_onLeftPush() { + notifyParent(ChildNotify::GROUPCLICKTGBUTTON_CLICKED); + if (!wantAutoToggle()) return; + if (status == STATUS_ON && !off_id.isempty() || status == STATUS_OFF && !on_id.isempty()) + toggle(); +} + +void GroupToggleButton::grouptoggle_onRightPush() { +} + +GroupClickWnd *GroupToggleButton::enumGroups(int n) { + if (n == 0) return &on; + if (n == 1) return &off; + return NULL; +} + +int GroupToggleButton::getNumGroups() { + int i=0; + i++; + i++; + return i; +} + |