#include namespace icl{ const int OSDNavBar::s_iGap; const int OSDNavBar::s_iMargin; OSDNavBar::OSDNavBar(int id, Rect r,ImageWidget* poIW , OSDWidget *poParent,svec vecNames, svec vecShortNames, ivec vecIDs, int selectedIndex): OSDWidget(id,r,poIW,poParent),m_iCurrIndex(-1),m_vecNames(vecNames),m_vecShortNames(vecShortNames){ m_iSmallW = (r.width-r.width/4)/vecNames.size(); int n = (int)vecNames.size(); int h = r.height-2*s_iMargin; int curr_x = s_iMargin+x(); for(int i=0;i= 0 && idx < (int)m_vecNames.size()){ m_vecNames[idx]= longName; m_vecShortNames[idx]= shortName; OSDButton *p = reinterpret_cast(m_vecChilds[idx]); p->setText(p->isToggled() ? longName : shortName); } } void OSDNavBar::selectIndex(int index){ if(index == m_iCurrIndex) return; m_iCurrIndex = index; int n = (int)m_vecChilds.size(); int w = m_oRect.width-2*s_iMargin; int h = m_oRect.height-2*s_iMargin; int curr_x = s_iMargin+x(); for(int i=0;i(m_vecChilds[i]); if(i==index){ int iWideWidth = w-(n-1)*m_iSmallW-(n-2)*s_iGap; b->setRect(Rect(curr_x,s_iMargin+y(),iWideWidth-1,h)); curr_x += iWideWidth+s_iGap; b->setText(m_vecNames[i]); b->setToggled(1); }else{ m_vecChilds[i]->setRect(Rect(curr_x,s_iMargin+y(),m_iSmallW-1,h)); curr_x += m_iSmallW+s_iGap; b->setText(m_vecShortNames[i]); b->setToggled(0); } } } void OSDNavBar::mousePressed(int _x, int _y, int button){ (void)button; for(uint i = 0; icontains(_x,_y)){ selectIndex(i); return; } } } }// namespace icl