00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "kmultitabbar.h"
00026 #include "kmultitabbar.moc"
00027 #include "kmultitabbar_p.h"
00028 #include "kmultitabbar_p.moc"
00029 #include <qbutton.h>
00030 #include <qpopupmenu.h>
00031 #include <qlayout.h>
00032 #include <qpainter.h>
00033 #include <qtooltip.h>
00034 #include <qfontmetrics.h>
00035 #include <qstyle.h>
00036
00037 #include <kiconloader.h>
00038 #include <kdebug.h>
00039
00040
00041 class KMultiTabBarTabPrivate {
00042 public:
00043 QPixmap pix;
00044 };
00045
00046
00047 KMultiTabBarInternal::KMultiTabBarInternal(QWidget *parent, KMultiTabBar::KMultiTabBarMode bm):QScrollView(parent)
00048 {
00049 m_expandedTabSize=-1;
00050 m_showActiveTabTexts=false;
00051 m_tabs.setAutoDelete(true);
00052 setHScrollBarMode(AlwaysOff);
00053 setVScrollBarMode(AlwaysOff);
00054 if (bm==KMultiTabBar::Vertical)
00055 {
00056 box=new QWidget(viewport());
00057 mainLayout=new QVBoxLayout(box);
00058 mainLayout->setAutoAdd(true);
00059 box->setFixedWidth(24);
00060 setFixedWidth(24);
00061 }
00062 else
00063 {
00064 box=new QWidget(viewport());
00065 mainLayout=new QHBoxLayout(box);
00066 mainLayout->setAutoAdd(true);
00067 box->setFixedHeight(24);
00068 setFixedHeight(24);
00069 }
00070 addChild(box);
00071 setFrameStyle(NoFrame);
00072 viewport()->setBackgroundMode(Qt::PaletteBackground);
00073 }
00074
00075 void KMultiTabBarInternal::setStyle(enum KMultiTabBar::KMultiTabBarStyle style)
00076 {
00077 m_style=style;
00078 for (uint i=0;i<m_tabs.count();i++)
00079 m_tabs.at(i)->setStyle(m_style);
00080
00081 if ( (m_style==KMultiTabBar::KDEV3) ||
00082 (m_style==KMultiTabBar::KDEV3ICON ) ) {
00083 resizeEvent(0);
00084 }
00085 viewport()->repaint();
00086 }
00087
00088 void KMultiTabBarInternal::drawContents ( QPainter * paint, int clipx, int clipy, int clipw, int cliph )
00089 {
00090 QScrollView::drawContents (paint , clipx, clipy, clipw, cliph );
00091
00092 if (m_position==KMultiTabBar::Right)
00093 {
00094
00095 paint->setPen(colorGroup().shadow());
00096 paint->drawLine(0,0,0,viewport()->height());
00097 paint->setPen(colorGroup().background().dark(120));
00098 paint->drawLine(1,0,1,viewport()->height());
00099
00100
00101 }
00102 else
00103 if (m_position==KMultiTabBar::Left)
00104 {
00105 paint->setPen(colorGroup().light());
00106 paint->drawLine(23,0,23,viewport()->height());
00107 paint->drawLine(22,0,22,viewport()->height());
00108
00109 paint->setPen(colorGroup().shadow());
00110 paint->drawLine(0,0,0,viewport()->height());
00111 }
00112 else
00113 if (m_position==KMultiTabBar::Bottom)
00114 {
00115 paint->setPen(colorGroup().shadow());
00116 paint->drawLine(0,0,viewport()->width(),0);
00117 paint->setPen(colorGroup().background().dark(120));
00118 paint->drawLine(0,1,viewport()->width(),1);
00119 }
00120 else
00121 {
00122 paint->setPen(colorGroup().light());
00123 paint->drawLine(0,23,viewport()->width(),23);
00124 paint->drawLine(0,22,viewport()->width(),22);
00125
00126
00127
00128
00129 }
00130
00131
00132 }
00133
00134 void KMultiTabBarInternal::contentsMousePressEvent(QMouseEvent *ev)
00135 {
00136 ev->ignore();
00137 }
00138
00139 void KMultiTabBarInternal::mousePressEvent(QMouseEvent *ev)
00140 {
00141 ev->ignore();
00142 }
00143
00144 void KMultiTabBarInternal::resizeEvent(QResizeEvent *ev) {
00145 kdDebug()<<"KMultiTabBarInternal::resizeEvent"<<endl;
00146 if ( (m_style==KMultiTabBar::KDEV3) ||
00147 (m_style==KMultiTabBar::KDEV3ICON) ){
00148 box->setGeometry(0,0,width(),height());
00149 int lines=1;
00150 int space;
00151 int tmp=0;
00152 if ((m_position==KMultiTabBar::Bottom) || (m_position==KMultiTabBar::Top))
00153 space=width();
00154 else
00155 space=height();
00156
00157 int cnt=0;
00158
00159 for (uint i=0;i<m_tabs.count();i++) {
00160 cnt++;
00161 tmp+=m_tabs.at(i)->neededSize();
00162 if (tmp>space) {
00163 if (cnt>1)i--;
00164 cnt=0;
00165 tmp=0;
00166 lines++;
00167 }
00168 }
00169
00170 if ((m_position==KMultiTabBar::Bottom) || (m_position==KMultiTabBar::Top)) {
00171 setFixedHeight(lines*24);
00172 box->setFixedHeight(lines*24);
00173 tmp=0;
00174 cnt=0;
00175 m_lines=lines;
00176 lines=0;
00177 for (uint i=0;i<m_tabs.count();i++) {
00178 cnt++;
00179 tmp+=m_tabs.at(i)->neededSize();
00180 if (tmp>space) {
00181 if (cnt>1) i--;
00182 else
00183 m_tabs.at(i)->move(tmp-m_tabs.at(i)->neededSize(),lines*24);
00184 cnt=0;
00185 tmp=0;
00186 lines++;
00187 } else m_tabs.at(i)->move(tmp-m_tabs.at(i)->neededSize(),lines*24);
00188 }
00189 }
00190 else {
00191 setFixedWidth(lines*24);
00192 box->setFixedWidth(lines*24);
00193 tmp=0;
00194 cnt=0;
00195 m_lines=lines;
00196 lines=0;
00197 for (uint i=0;i<m_tabs.count();i++) {
00198 cnt++;
00199 tmp+=m_tabs.at(i)->neededSize();
00200 if (tmp>space) {
00201 if (cnt>1) i--;
00202 else
00203 m_tabs.at(i)->move(lines*24,tmp-m_tabs.at(i)->neededSize());
00204 cnt=0;
00205 tmp=0;
00206 lines++;
00207 } else m_tabs.at(i)->move(lines*24,tmp-m_tabs.at(i)->neededSize());
00208 }
00209 }
00210
00211
00212 kdDebug()<<"needed lines:"<<m_lines<<endl;
00213 }
00214 if (ev) QScrollView::resizeEvent(ev);
00215 }
00216
00217
00218 void KMultiTabBarInternal::showActiveTabTexts(bool show)
00219 {
00220 m_showActiveTabTexts=show;
00221 }
00222
00223
00224 KMultiTabBarTab* KMultiTabBarInternal::tab(int id) const
00225 {
00226 for (QPtrListIterator<KMultiTabBarTab> it(m_tabs);it.current();++it){
00227 if (it.current()->id()==id) return it.current();
00228 }
00229 return 0;
00230 }
00231
00232
00233 int KMultiTabBarInternal::appendTab(const QPixmap &pic ,int id,const QString& text)
00234 {
00235 KMultiTabBarTab *tab;
00236 m_tabs.append(tab= new KMultiTabBarTab(pic,text,id,box,m_position,m_style));
00237 tab->showActiveTabText(m_showActiveTabTexts);
00238
00239 if (m_style==KMultiTabBar::KONQSBC)
00240 {
00241 if (m_expandedTabSize<tab->neededSize()) {
00242 m_expandedTabSize=tab->neededSize();
00243 for (uint i=0;i<m_tabs.count();i++)
00244 m_tabs.at(i)->setSize(m_expandedTabSize);
00245
00246 } else tab->setSize(m_expandedTabSize);
00247 } else tab->updateState();
00248 tab->show();
00249 return 0;
00250 }
00251
00252 void KMultiTabBarInternal::removeTab(int id)
00253 {
00254 for (uint pos=0;pos<m_tabs.count();pos++)
00255 {
00256 if (m_tabs.at(pos)->id()==id)
00257 {
00258 m_tabs.remove(pos);
00259 break;
00260 }
00261 }
00262 }
00263
00264 void KMultiTabBarInternal::setPosition(enum KMultiTabBar::KMultiTabBarPosition pos)
00265 {
00266 m_position=pos;
00267 for (uint i=0;i<m_tabs.count();i++)
00268 m_tabs.at(i)->setTabsPosition(m_position);
00269 viewport()->repaint();
00270 }
00271
00272
00273 KMultiTabBarButton::KMultiTabBarButton(const QPixmap& pic,const QString& text, QPopupMenu *popup,
00274 int id,QWidget *parent,KMultiTabBar::KMultiTabBarPosition pos,KMultiTabBar::KMultiTabBarStyle style)
00275 :QPushButton(QIconSet(),text,parent),m_style(style)
00276 {
00277 setIconSet(pic);
00278 setText(text);
00279 m_position=pos;
00280 if (popup) setPopup(popup);
00281 setFlat(true);
00282 setFixedHeight(24);
00283 setFixedWidth(24);
00284 m_id=id;
00285 QToolTip::add(this,text);
00286 connect(this,SIGNAL(clicked()),this,SLOT(slotClicked()));
00287 }
00288
00289 KMultiTabBarButton::KMultiTabBarButton(const QString& text, QPopupMenu *popup,
00290 int id,QWidget *parent,KMultiTabBar::KMultiTabBarPosition pos,KMultiTabBar::KMultiTabBarStyle style)
00291 :QPushButton(QIconSet(),text,parent),m_style(style)
00292 {
00293 setText(text);
00294 m_position=pos;
00295 if (popup) setPopup(popup);
00296 setFlat(true);
00297 setFixedHeight(24);
00298 setFixedWidth(24);
00299 m_id=id;
00300 QToolTip::add(this,text);
00301 connect(this,SIGNAL(clicked()),this,SLOT(slotClicked()));
00302 }
00303
00304 KMultiTabBarButton::~KMultiTabBarButton() {
00305 }
00306
00307 int KMultiTabBarButton::id() const{
00308 return m_id;
00309 }
00310
00311 void KMultiTabBarButton::setText(const QString& text)
00312 {
00313 QPushButton::setText(text);
00314 m_text=text;
00315 QToolTip::add(this,text);
00316 }
00317
00318 void KMultiTabBarButton::slotClicked()
00319 {
00320 emit clicked(m_id);
00321 }
00322
00323 void KMultiTabBarButton::setPosition(KMultiTabBar::KMultiTabBarPosition pos)
00324 {
00325 m_position=pos;
00326 repaint();
00327 }
00328
00329 void KMultiTabBarButton::setStyle(KMultiTabBar::KMultiTabBarStyle style)
00330 {
00331 m_style=style;
00332 repaint();
00333 }
00334
00335 void KMultiTabBarButton::hideEvent( QHideEvent* he) {
00336 QPushButton::hideEvent(he);
00337 KMultiTabBar *tb=dynamic_cast<KMultiTabBar*>(parentWidget());
00338 if (tb) tb->updateSeparator();
00339 }
00340
00341 void KMultiTabBarButton::showEvent( QShowEvent* he) {
00342 QPushButton::showEvent(he);
00343 KMultiTabBar *tb=dynamic_cast<KMultiTabBar*>(parentWidget());
00344 if (tb) tb->updateSeparator();
00345 }
00346
00347
00348 QSize KMultiTabBarButton::sizeHint() const
00349 {
00350 constPolish();
00351
00352 int w = 0, h = 0;
00353
00354
00355 #ifndef QT_NO_ICONSET
00356 if ( iconSet() && !iconSet()->isNull() ) {
00357 int iw = iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4;
00358 int ih = iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height();
00359 w += iw;
00360 h = QMAX( h, ih );
00361 }
00362 #endif
00363 if ( isMenuButton() )
00364 w += style().pixelMetric(QStyle::PM_MenuButtonIndicator, this);
00365
00366 if ( pixmap() ) {
00367 QPixmap *pm = (QPixmap *)pixmap();
00368 w += pm->width();
00369 h += pm->height();
00370 } else {
00371 QString s( text() );
00372 bool empty = s.isEmpty();
00373 if ( empty )
00374 s = QString::fromLatin1("XXXX");
00375 QFontMetrics fm = fontMetrics();
00376 QSize sz = fm.size( ShowPrefix, s );
00377 if(!empty || !w)
00378 w += sz.width();
00379 if(!empty || !h)
00380 h = QMAX(h, sz.height());
00381 }
00382
00383 return (style().sizeFromContents(QStyle::CT_ToolButton, this, QSize(w, h)).
00384 expandedTo(QApplication::globalStrut()));
00385 }
00386
00387
00388 KMultiTabBarTab::KMultiTabBarTab(const QPixmap& pic, const QString& text,
00389 int id,QWidget *parent,KMultiTabBar::KMultiTabBarPosition pos,
00390 KMultiTabBar::KMultiTabBarStyle style)
00391 :KMultiTabBarButton(text,0,id,parent,pos,style),
00392 m_showActiveTabText(false)
00393 {
00394 d=new KMultiTabBarTabPrivate();
00395 setIcon(pic);
00396 m_expandedSize=24;
00397 setToggleButton(true);
00398 }
00399
00400 KMultiTabBarTab::~KMultiTabBarTab() {
00401 delete d;
00402 }
00403
00404
00405 void KMultiTabBarTab::setTabsPosition(KMultiTabBar::KMultiTabBarPosition pos)
00406 {
00407 if ((pos!=m_position) && ((pos==KMultiTabBar::Left) || (pos==KMultiTabBar::Right))) {
00408 if (!d->pix.isNull()) {
00409 QWMatrix temp;
00410 temp.rotate(180);
00411 d->pix=d->pix.xForm(temp);
00412 setIconSet(d->pix);
00413 }
00414 }
00415
00416 setPosition(pos);
00417
00418 }
00419
00420 void KMultiTabBarTab::setIcon(const QString& icon)
00421 {
00422 QPixmap pic=SmallIcon(icon);
00423 setIcon(pic);
00424 }
00425
00426 void KMultiTabBarTab::setIcon(const QPixmap& icon)
00427 {
00428
00429 if (m_style!=KMultiTabBar::KDEV3) {
00430 if ((m_position==KMultiTabBar::Left) || (m_position==KMultiTabBar::Right)) {
00431 QWMatrix rotateMatrix;
00432 if (m_position==KMultiTabBar::Left)
00433 rotateMatrix.rotate(90);
00434 else
00435 rotateMatrix.rotate(-90);
00436 QPixmap pic=icon.xForm(rotateMatrix);
00437 d->pix=pic;
00438 setIconSet(pic);
00439 } else setIconSet(icon);
00440 }
00441 }
00442
00443 void KMultiTabBarTab::slotClicked()
00444 {
00445 updateState();
00446 KMultiTabBarButton::slotClicked();
00447 }
00448
00449 void KMultiTabBarTab::setState(bool b)
00450 {
00451 setOn(b);
00452 updateState();
00453 }
00454
00455 void KMultiTabBarTab::updateState()
00456 {
00457
00458 if (m_style!=KMultiTabBar::KONQSBC) {
00459 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn())) {
00460 QPushButton::setText(m_text);
00461 } else {
00462 kdDebug()<<"KMultiTabBarTab::updateState(): setting text to an empty QString***************"<<endl;
00463 QPushButton::setText(QString::null);
00464 }
00465
00466 if ((m_position==KMultiTabBar::Right || m_position==KMultiTabBar::Left)) {
00467 setFixedWidth(24);
00468 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn())) {
00469 setFixedHeight(KMultiTabBarButton::sizeHint().width());
00470 } else setFixedHeight(36);
00471 } else {
00472 setFixedHeight(24);
00473 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn())) {
00474 setFixedWidth(KMultiTabBarButton::sizeHint().width());
00475 } else setFixedWidth(36);
00476 }
00477 } else {
00478 if ((!isOn()) || (!m_showActiveTabText))
00479 {
00480 setFixedWidth(24);
00481 setFixedHeight(24);
00482 return;
00483 }
00484 if ((m_position==KMultiTabBar::Right || m_position==KMultiTabBar::Left))
00485 setFixedHeight(m_expandedSize);
00486 else
00487 setFixedWidth(m_expandedSize);
00488 }
00489
00490 }
00491
00492 int KMultiTabBarTab::neededSize()
00493 {
00494 return (((m_style!=KMultiTabBar::KDEV3)?24:0)+QFontMetrics(QFont()).width(m_text)+6);
00495 }
00496
00497 void KMultiTabBarTab::setSize(int size)
00498 {
00499 m_expandedSize=size;
00500 updateState();
00501 }
00502
00503 void KMultiTabBarTab::showActiveTabText(bool show)
00504 {
00505 m_showActiveTabText=show;
00506 }
00507
00508 void KMultiTabBarTab::drawButtonLabel(QPainter *p) {
00509 drawButton(p);
00510 }
00511 void KMultiTabBarTab::drawButton(QPainter *paint)
00512 {
00513 if (m_style!=KMultiTabBar::KONQSBC) drawButtonStyled(paint);
00514 else drawButtonClassic(paint);
00515 }
00516
00517 void KMultiTabBarTab::drawButtonStyled(QPainter *paint) {
00518
00519 QSize sh;
00520 const int width = 36;
00521 const int height = 24;
00522 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn()))
00523 sh=KMultiTabBarButton::sizeHint();
00524 else
00525 sh=QSize(width,height);
00526
00527 QPixmap pixmap( sh.width(),height);
00528 pixmap.fill(eraseColor());
00529 QPainter painter(&pixmap);
00530
00531
00532 QStyle::SFlags st=QStyle::Style_Default;
00533
00534 st|=QStyle::Style_Enabled;
00535
00536 if (isOn()) st|=QStyle::Style_On;
00537
00538 style().drawControl(QStyle::CE_PushButton,&painter,this, QRect(0,0,pixmap.width(),pixmap.height()), colorGroup(),st);
00539 style().drawControl(QStyle::CE_PushButtonLabel,&painter,this, QRect(0,0,pixmap.width(),pixmap.height()), colorGroup(),st);
00540
00541 switch (m_position) {
00542 case KMultiTabBar::Left:
00543 paint->rotate(-90);
00544 paint->drawPixmap(1-pixmap.width(),0,pixmap);
00545 break;
00546 case KMultiTabBar::Right:
00547 paint->rotate(90);
00548 paint->drawPixmap(0,1-pixmap.height(),pixmap);
00549 break;
00550
00551 default:
00552 paint->drawPixmap(0,0,pixmap);
00553 break;
00554 }
00555
00556
00557
00558
00559 }
00560
00561 void KMultiTabBarTab::drawButtonClassic(QPainter *paint)
00562 {
00563 QPixmap pixmap;
00564 if ( iconSet())
00565 pixmap = iconSet()->pixmap( QIconSet::Small, QIconSet::Normal );
00566 paint->fillRect(0, 0, 24, 24, colorGroup().background());
00567
00568 if (!isOn())
00569 {
00570
00571 if (m_position==KMultiTabBar::Right)
00572 {
00573 paint->fillRect(0,0,21,21,QBrush(colorGroup().background()));
00574
00575 paint->setPen(colorGroup().background().dark(150));
00576 paint->drawLine(0,22,23,22);
00577
00578 paint->drawPixmap(12-pixmap.width()/2,12-pixmap.height()/2,pixmap);
00579
00580 paint->setPen(colorGroup().shadow());
00581 paint->drawLine(0,0,0,23);
00582 paint->setPen(colorGroup().background().dark(120));
00583 paint->drawLine(1,0,1,23);
00584
00585 }
00586 else
00587 if ((m_position==KMultiTabBar::Bottom) || (m_position==KMultiTabBar::Top))
00588 {
00589 paint->fillRect(0,1,23,22,QBrush(colorGroup().background()));
00590
00591 paint->drawPixmap(12-pixmap.width()/2,12-pixmap.height()/2,pixmap);
00592
00593 paint->setPen(colorGroup().background().dark(120));
00594 paint->drawLine(23,0,23,23);
00595
00596
00597 paint->setPen(colorGroup().light());
00598 paint->drawLine(0,22,23,22);
00599 paint->drawLine(0,23,23,23);
00600 paint->setPen(colorGroup().shadow());
00601 paint->drawLine(0,0,23,0);
00602 paint->setPen(colorGroup().background().dark(120));
00603 paint->drawLine(0,1,23,1);
00604
00605 }
00606 else
00607 {
00608 paint->setPen(colorGroup().background().dark(120));
00609 paint->drawLine(0,23,23,23);
00610 paint->fillRect(0,0,23,21,QBrush(colorGroup().background()));
00611 paint->drawPixmap(12-pixmap.width()/2,12-pixmap.height()/2,pixmap);
00612
00613 paint->setPen(colorGroup().light());
00614 paint->drawLine(23,0,23,23);
00615 paint->drawLine(22,0,22,23);
00616
00617 paint->setPen(colorGroup().shadow());
00618 paint->drawLine(0,0,0,23);
00619
00620 }
00621
00622
00623 }
00624 else
00625 {
00626 if (m_position==KMultiTabBar::Right)
00627 {
00628 paint->setPen(colorGroup().shadow());
00629 paint->drawLine(0,height()-1,23,height()-1);
00630 paint->drawLine(0,height()-2,23,height()-2);
00631 paint->drawLine(23,0,23,height()-1);
00632 paint->drawLine(22,0,22,height()-1);
00633 paint->fillRect(0,0,21,height()-3,QBrush(colorGroup().light()));
00634 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap);
00635
00636 if (m_showActiveTabText)
00637 {
00638 if (height()<25+4) return;
00639
00640 QPixmap tpixmap(height()-25-3, width()-2);
00641 QPainter painter(&tpixmap);
00642
00643 painter.fillRect(0,0,tpixmap.width(),tpixmap.height(),QBrush(colorGroup().light()));
00644
00645 painter.setPen(colorGroup().text());
00646 painter.drawText(0,+width()/2+QFontMetrics(QFont()).height()/2,m_text);
00647
00648 paint->rotate(90);
00649 kdDebug()<<"tpixmap.width:"<<tpixmap.width()<<endl;
00650 paint->drawPixmap(25,-tpixmap.height()+1,tpixmap);
00651 }
00652
00653 }
00654 else
00655 if (m_position==KMultiTabBar::Top)
00656 {
00657 paint->fillRect(0,0,width()-1,23,QBrush(colorGroup().light()));
00658 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap);
00659 if (m_showActiveTabText)
00660 {
00661 paint->setPen(colorGroup().text());
00662 paint->drawText(25,height()/2+QFontMetrics(QFont()).height()/2,m_text);
00663 }
00664 }
00665 else
00666 if (m_position==KMultiTabBar::Bottom)
00667 {
00668 paint->setPen(colorGroup().shadow());
00669 paint->drawLine(0,23,width()-1,23);
00670 paint->drawLine(0,22,width()-1,22);
00671 paint->fillRect(0,0,width()-1,21,QBrush(colorGroup().light()));
00672 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap);
00673 if (m_showActiveTabText)
00674 {
00675 paint->setPen(colorGroup().text());
00676 paint->drawText(25,height()/2+QFontMetrics(QFont()).height()/2,m_text);
00677 }
00678
00679 }
00680 else
00681 {
00682
00683
00684 paint->setPen(colorGroup().shadow());
00685 paint->drawLine(0,height()-1,23,height()-1);
00686 paint->drawLine(0,height()-2,23,height()-2);
00687 paint->fillRect(0,0,23,height()-3,QBrush(colorGroup().light()));
00688 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap);
00689 if (m_showActiveTabText)
00690 {
00691
00692 if (height()<25+4) return;
00693
00694 QPixmap tpixmap(height()-25-3, width()-2);
00695 QPainter painter(&tpixmap);
00696
00697 painter.fillRect(0,0,tpixmap.width(),tpixmap.height(),QBrush(colorGroup().light()));
00698
00699 painter.setPen(colorGroup().text());
00700 painter.drawText(tpixmap.width()-QFontMetrics(QFont()).width(m_text),+width()/2+QFontMetrics(QFont()).height()/2,m_text);
00701
00702 paint->rotate(-90);
00703 kdDebug()<<"tpixmap.width:"<<tpixmap.width()<<endl;
00704
00705 paint->drawPixmap(-24-tpixmap.width(),2,tpixmap);
00706
00707 }
00708
00709 }
00710
00711 }
00712 }
00713
00714
00715
00716
00717
00718
00719
00720 KMultiTabBar::KMultiTabBar(KMultiTabBarMode bm, QWidget *parent,const char *name):QWidget(parent,name)
00721 {
00722 m_buttons.setAutoDelete(false);
00723 if (bm==Vertical)
00724 {
00725 m_l=new QVBoxLayout(this);
00726 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding, true);
00727
00728 }
00729 else
00730 {
00731 m_l=new QHBoxLayout(this);
00732 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed, true);
00733
00734 }
00735 m_l->setMargin(0);
00736 m_l->setAutoAdd(false);
00737
00738 m_internal=new KMultiTabBarInternal(this,bm);
00739 setPosition((bm==KMultiTabBar::Vertical)?KMultiTabBar::Right:KMultiTabBar::Bottom);
00740 setStyle(VSNET);
00741
00742
00743 m_l->insertWidget(0,m_internal);
00744 m_l->insertWidget(0,m_btnTabSep=new QFrame(this));
00745 m_btnTabSep->setFixedHeight(4);
00746 m_btnTabSep->setFrameStyle(QFrame::Panel | QFrame::Sunken);
00747 m_btnTabSep->setLineWidth(2);
00748 m_btnTabSep->hide();
00749
00750 updateGeometry();
00751 }
00752
00753 KMultiTabBar::~KMultiTabBar() {
00754 }
00755
00756
00757
00758
00759
00760
00761
00762 int KMultiTabBar::appendButton(const QPixmap &pic ,int id,QPopupMenu *popup,const QString&)
00763 {
00764 KMultiTabBarButton *btn;
00765 m_buttons.append(btn= new KMultiTabBarButton(pic,QString::null,
00766 popup,id,this,m_position,m_internal->m_style));
00767 m_l->insertWidget(0,btn);
00768 btn->show();
00769 m_btnTabSep->show();
00770 return 0;
00771 }
00772
00773 void KMultiTabBar::updateSeparator() {
00774 bool hideSep=true;
00775 for (QPtrListIterator<KMultiTabBarButton> it(m_buttons);it.current();++it){
00776 if (it.current()->isVisibleTo(this)) {
00777 hideSep=false;
00778 break;
00779 }
00780 }
00781 if (hideSep) m_btnTabSep->hide();
00782 else m_btnTabSep->show();
00783
00784 }
00785
00786 int KMultiTabBar::appendTab(const QPixmap &pic ,int id ,const QString& text)
00787 {
00788 m_internal->appendTab(pic,id,text);
00789 return 0;
00790 }
00791
00792 KMultiTabBarButton* KMultiTabBar::button(int id) const
00793 {
00794 for (QPtrListIterator<KMultiTabBarButton> it(m_buttons);it.current();++it){
00795 if (it.current()->id()==id) return it.current();
00796 }
00797 return 0;
00798 }
00799
00800 KMultiTabBarTab* KMultiTabBar::tab(int id) const
00801 {
00802 return m_internal->tab(id);
00803 }
00804
00805
00806
00807 void KMultiTabBar::removeButton(int id)
00808 {
00809 for (uint pos=0;pos<m_buttons.count();pos++)
00810 {
00811 if (m_buttons.at(pos)->id()==id)
00812 {
00813 m_buttons.take(pos)->deleteLater();
00814 break;
00815 }
00816 }
00817 if (m_buttons.count()==0) m_btnTabSep->hide();
00818 }
00819
00820 void KMultiTabBar::removeTab(int id)
00821 {
00822 m_internal->removeTab(id);
00823 }
00824
00825 void KMultiTabBar::setTab(int id,bool state)
00826 {
00827 KMultiTabBarTab *ttab=tab(id);
00828 if (ttab)
00829 {
00830 ttab->setState(state);
00831 }
00832 }
00833
00834 bool KMultiTabBar::isTabRaised(int id) const
00835 {
00836 KMultiTabBarTab *ttab=tab(id);
00837 if (ttab)
00838 {
00839 return ttab->isOn();
00840 }
00841
00842 return false;
00843 }
00844
00845
00846 void KMultiTabBar::showActiveTabTexts(bool show)
00847 {
00848 m_internal->showActiveTabTexts(show);
00849 }
00850
00851 void KMultiTabBar::setStyle(KMultiTabBarStyle style)
00852 {
00853 m_internal->setStyle(style);
00854 }
00855
00856 void KMultiTabBar::setPosition(KMultiTabBarPosition pos)
00857 {
00858 m_position=pos;
00859 m_internal->setPosition(pos);
00860 for (uint i=0;i<m_buttons.count();i++)
00861 m_buttons.at(i)->setPosition(pos);
00862 }
00863 void KMultiTabBar::fontChange(const QFont& )
00864 {
00865 for (uint i=0;i<tabs()->count();i++)
00866 tabs()->at(i)->resize();
00867 repaint();
00868 }
00869
00870 QPtrList<KMultiTabBarTab>* KMultiTabBar::tabs() {return m_internal->tabs();}
00871 QPtrList<KMultiTabBarButton>* KMultiTabBar::buttons() {return &m_buttons;}
00872