int KMultiTabBarInternal::appendTab(const QPixmap &pic ,int id,const QString& text) { KMultiTabBarTab *tab; m_tabs.append(tab= new KMultiTabBarTab(pic,text,id,box,m_position,m_style)); tab->showActiveTabText(m_showActiveTabTexts); if (m_style==KMultiTabBar::KONQSBC) { if (m_expandedTabSize<tab->neededSize()) { m_expandedTabSize=tab->neededSize(); for (uint i=0;i<m_tabs.count();i++) m_tabs.at(i)->setSize(m_expandedTabSize); } else tab->setSize(m_expandedTabSize); } else tab->updateState(); tab->show(); return 0; }
void KMultiTabBarInternal::resizeEvent(QResizeEvent *ev) { /* kdDebug()<<"KMultiTabBarInternal::resizeEvent"<<endl; kdDebug()<<"KMultiTabBarInternal::resizeEvent - box geometry"<<box->geometry()<<endl; kdDebug()<<"KMultiTabBarInternal::resizeEvent - geometry"<<geometry()<<endl;*/ if(ev) QScrollView::resizeEvent(ev); if((m_style == KMultiTabBar::KDEV3) || (m_style == KMultiTabBar::KDEV3ICON)) { box->setGeometry(0, 0, width(), height()); int lines = 1; uint space; float tmp = 0; if((m_position == KMultiTabBar::Bottom) || (m_position == KMultiTabBar::Top)) space = width(); else space = height(); int cnt = 0; // CALCULATE LINES const uint tabCount = m_tabs.count(); for(uint i = 0; i < tabCount; i++) { cnt++; tmp += m_tabs.at(i)->neededSize(); if(tmp > space) { if(cnt > 1) i--; else if(i == (tabCount - 1)) break; cnt = 0; tmp = 0; lines++; } } // SET SIZE & PLACE float diff = 0; cnt = 0; if((m_position == KMultiTabBar::Bottom) || (m_position == KMultiTabBar::Top)) { setFixedHeight(lines * 24); box->setFixedHeight(lines * 24); m_lines = height() / 24 - 1; lines = 0; CALCDIFF(m_tabs, diff, 0) tmp = -diff; // kdDebug()<<"m_lines recalculated="<<m_lines<<endl; for(uint i = 0; i < tabCount; i++) { KMultiTabBarTab *tab = m_tabs.at(i); cnt++; tmp += tab->neededSize() + diff; if(tmp > space) { // kdDebug()<<"about to start new line"<<endl; if(cnt > 1) { CALCDIFF(m_tabs, diff, i) i--; } else { // kdDebug()<<"placing line on old line"<<endl; kdDebug() << "diff=" << diff << endl; tab->removeEventFilter(this); tab->move(NEARBYINT(tmp - tab->neededSize()), lines * 24); // tab->setFixedWidth(tab->neededSize()+diff); tab->setFixedWidth(NEARBYINT(tmp + diff) - tab->x()); ; tab->installEventFilter(this); CALCDIFF(m_tabs, diff, (i + 1)) } tmp = -diff; cnt = 0; lines++; // kdDebug()<<"starting new line:"<<lines<<endl; } else { // kdDebug()<<"Placing line on line:"<<lines<<" pos: (x/y)=("<<tmp-m_tabs.at(i)->neededSize()<<"/"<<lines*24<<")"<<endl; // kdDebug()<<"diff="<<diff<<endl; tab->removeEventFilter(this); tab->move(NEARBYINT(tmp - tab->neededSize()), lines * 24); tab->setFixedWidth(NEARBYINT(tmp + diff) - tab->x()); ; // tab->setFixedWidth(tab->neededSize()+diff); tab->installEventFilter(this); } }