Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
130
Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp
Normal file
130
Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp
Normal file
|
@ -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);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue