kutils Library API Documentation

kmultitabbar.cpp

00001 /*************************************************************************** 00002 kmultitabbar.cpp - description 00003 ------------------- 00004 begin : 2001 00005 copyright : (C) 2001,2002,2003 by Joseph Wenninger <jowenn@kde.org> 00006 ***************************************************************************/ 00007 00008 /*************************************************************************** 00009 This library is free software; you can redistribute it and/or 00010 modify it under the terms of the GNU Library General Public 00011 License as published by the Free Software Foundation; either 00012 version 2 of the License, or (at your option) any later version. 00013 00014 This library is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 Library General Public License for more details. 00018 00019 You should have received a copy of the GNU Library General Public License 00020 along with this library; see the file COPYING.LIB. If not, write to 00021 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00022 Boston, MA 02111-1307, USA. 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 /* paint->setPen(colorGroup().shadow()); 00127 paint->drawLine(0,0,0,viewport()->height());*/ 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 //CALCULATE LINES 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 //SET SIZE & PLACE 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 // calculate contents size... 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;// (1.0F, 0.0F, 0.0F, -1.0F, 0.0F, 0.0F); 00410 temp.rotate(180); 00411 d->pix=d->pix.xForm(temp); 00412 setIconSet(d->pix); 00413 } 00414 } 00415 00416 setPosition(pos); 00417 // repaint(); 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; // rotated 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 // style().drawControl(QStyle::CE_PushButtonLabel,painter,this, QRect(0,0,pixmap.width(),pixmap.height()), 00556 // colorGroup(),QStyle::Style_Enabled); 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 // setFixedWidth(24); 00728 } 00729 else 00730 { 00731 m_l=new QHBoxLayout(this); 00732 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed, true); 00733 // setFixedHeight(24); 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 // setStyle(KDEV3); 00742 //setStyle(KONQSBC); 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 /*int KMultiTabBar::insertButton(QPixmap pic,int id ,const QString&) 00757 { 00758 (new KToolbarButton(pic,id,m_internal))->show(); 00759 return 0; 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& /* oldFont */) 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
KDE Logo
This file is part of the documentation for kutils Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Sep 29 09:41:34 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003