diff options
Diffstat (limited to 'Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp')
-rw-r--r-- | Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp b/Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp new file mode 100644 index 00000000..f31dbc73 --- /dev/null +++ b/Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp @@ -0,0 +1,130 @@ +#include "precomp.h" +#include "tabsheetbar.h" +#include "tabsheet.h" +#include "../notifmsg.h" + +TabSheetBar::TabSheetBar() { + margin = 0; + spacing = -4; + maxheightsofar = 0; + bottombar.setParent(this); +} + +TabSheetBar::~TabSheetBar() +{ + btns.deleteAll(); +} + +int TabSheetBar::onInit() { + int rt = TABSHEETBAR_PARENT::onInit(); + + bottombar.setContent(L"wasabi.tabsheet.nobutton.group"); + bottombar.init(this); + + foreach(btns) + GroupTabButton *gtb = btns.getfor(); + gtb->setParent(this); + if (!gtb->isInited()) { + gtb->init(this); + } + if (foreach_index == 0) + gtb->setStatus(STATUS_ON); + else + gtb->setStatus(STATUS_OFF); + int h = gtb->getPreferences(SUGGESTED_H); + if (h == AUTOWH) h = maxheightsofar; + maxheightsofar = MAX(maxheightsofar, h); + endfor; + + return rt; +} + +void TabSheetBar::addChild(GroupTabButton *child) { + ASSERT(!btns.haveItem(child)); + btns.addItem(child); + if (isInited()) { + child->setParent(this); + if (!child->isInited()) { + child->init(this); + } + int h = child->getPreferences(SUGGESTED_H); + if (h == AUTOWH) h = maxheightsofar; + maxheightsofar = MAX(maxheightsofar, h); + onResize(); + } + if (btns.getNumItems() == 1) + child->setStatus(STATUS_ON); + else + child->setStatus(STATUS_OFF); +} + +int TabSheetBar::getHeight() { + return maxheightsofar; +} + +int TabSheetBar::onResize() { + int rt = TABSHEETBAR_PARENT::onResize(); + GroupTabButton *selected=NULL; + foreach(btns) + if (btns.getfor()->getStatus() == STATUS_ON) { + selected = btns.getfor(); + break; + } + endfor; + if (selected == NULL) selected = btns.getFirst(); + + RECT r; + getClientRect(&r); + + int x = margin; + + foreach(btns) + GroupTabButton *gtb = btns.getfor(); + + int w = gtb->getPreferences(SUGGESTED_W); + if (w == AUTOWH) w = 66; + + RECT dr; + dr.left = r.left + x; + dr.top = r.top; + dr.right = dr.left + w; + dr.bottom = dr.top + getHeight(); + + gtb->resize(&dr); + + x += w + spacing; + endfor; + + x -= spacing; + RECT dr; + dr.left = r.left + x; + dr.top = r.top; + dr.right = r.right; + dr.bottom = r.top + getHeight(); + bottombar.resize(&dr); + + if (selected != NULL) + selected->bringToFront(); + + return rt; +} + +int TabSheetBar::childNotify(ifc_window *child, int msg, intptr_t param1/* =0 */, intptr_t param2/* =0 */) { + if (msg == ChildNotify::GROUPCLICKTGBUTTON_CLICKED && btns.haveItem(static_cast<GroupTabButton *>(child))) { + GroupToggleButton *but = NULL; + foreach(btns) + if (btns.getfor() != child) + btns.getfor()->setStatus(STATUS_OFF); + else + but = btns.getfor(); + endfor; + if (but != NULL) + but->setStatus(STATUS_ON); + else + (static_cast<GroupToggleButton *>(child))->setStatus(STATUS_ON); + onResize(); + } + if (msg == ChildNotify::AUTOWHCHANGED && btns.haveItem(static_cast<GroupTabButton *>(child)) && isPostOnInit()) + onResize(); + return TABSHEETBAR_PARENT::childNotify(child, msg, param1, param2); +}
\ No newline at end of file |