123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #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);
- }
|