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;
}
Exemplo n.º 2
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);
                }
            }