void TabbedArea::widgetResized(const gcn::Event &event) { int width = getWidth() - 2 * getFrameSize() - 2 * mWidgetContainer->getFrameSize(); int height = getHeight() - 2 * getFrameSize() - mWidgetContainer->getY() - 2 * mWidgetContainer->getFrameSize(); mWidgetContainer->setSize(width, height); gcn::Widget *w = getCurrentWidget(); if (w) w->setSize(width, height); // Check whether there is room to show more tabs now. int innerWidth = getWidth() - 4 - mArrowButton[0]->getWidth() - mArrowButton[1]->getWidth(); int newWidth = mVisibleTabsWidth; while (mTabScrollIndex && newWidth < innerWidth) { newWidth += mTabs[mTabScrollIndex - 1].first->getWidth(); if (newWidth < innerWidth) --mTabScrollIndex; } // Move the right arrow to fit the windows content. mArrowButton[1]->setPosition(width - mArrowButton[1]->getWidth(), 0); updateArrowEnableState(); adjustTabPositions(); }
void TabbedArea::action(const gcn::ActionEvent& actionEvent) { Widget* source = actionEvent.getSource(); Tab* tab = dynamic_cast<Tab*>(source); if (tab) { setSelectedTab(tab); } else { if (actionEvent.getId() == "shift_left") { if (mTabScrollIndex) --mTabScrollIndex; } else if (actionEvent.getId() == "shift_right") { if (mTabScrollIndex < mTabs.size() - 1) ++mTabScrollIndex; } adjustTabPositions(); updateArrowEnableState(); } }
void TabbedArea::fontChanged() { gcn::BasicContainer::fontChanged(); adjustTabPositions(); adjustSize(); }
void TabbedArea::removeTab(Tab* tab) { int tabIndexToBeSelected = - 1; if (tab == mSelectedTab) { int index = getSelectedTabIndex(); if (index == (int)mTabs.size() - 1 && mTabs.size() >= 2) { tabIndexToBeSelected = index--; } else if (index == (int)mTabs.size() - 1 && mTabs.size() == 1) { tabIndexToBeSelected = -1; } else { tabIndexToBeSelected = index; } } std::vector<std::pair<Tab*, Widget*> >::iterator iter; for (iter = mTabs.begin(); iter != mTabs.end(); iter++) { if (iter->first == tab) { mTabContainer->remove(tab); mTabs.erase(iter); break; } } std::vector<Tab*>::iterator iter2; for (iter2 = mTabsToDelete.begin(); iter2 != mTabsToDelete.end(); iter2++) { if (*iter2 == tab) { mTabsToDelete.erase(iter2); delete tab; break; } } if (tabIndexToBeSelected == -1) { mSelectedTab = NULL; mWidgetContainer->clear(); } else { setSelectedTab(tabIndexToBeSelected); } adjustSize(); adjustTabPositions(); }
void TabbedArea::addTab(Tab *tab, gcn::Widget *widget) { tab->setTabbedArea(this); tab->addActionListener(this); mTabContainer->add(tab); mTabs.push_back(std::pair<Tab*, gcn::Widget*>(tab, widget)); if (!mSelectedTab) setSelectedTab(tab); adjustTabPositions(); adjustSize(); }
void TabbedArea::removeTab(Tab *tab) { if (tab == mSelectedTab) { if (getNumberOfTabs() > 1) setSelectedTab(std::max(0, getSelectedTabIndex() - 1)); else mSelectedTab = 0; } TabContainer::iterator iter; for (iter = mTabs.begin(); iter != mTabs.end(); iter++) { if (iter->first == tab) { mTabContainer->remove(tab); mTabs.erase(iter); break; } } std::vector<gcn::Tab*>::iterator iter2; for (iter2 = mTabsToDelete.begin(); iter2 != mTabsToDelete.end(); iter2++) { if (*iter2 == tab) { mTabsToDelete.erase(iter2); delete tab; break; } } adjustSize(); updateTabsWidth(); adjustTabPositions(); }
void GlassTabbedContainer::logic() { adjustTabPositions(); logicChildren(); }