winamp/Src/Wasabi/api/wnd/wndclass/tabsheetbar.cpp

130 lines
2.9 KiB
C++

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