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 resizeEvent(0); 00260 break; 00261 } 00262 } 00263 } 00264 00265 void KMultiTabBarInternal::setPosition(enum KMultiTabBar::KMultiTabBarPosition pos) 00266 { 00267 m_position=pos; 00268 for (uint i=0;i<m_tabs.count();i++) 00269 m_tabs.at(i)->setTabsPosition(m_position); 00270 viewport()->repaint(); 00271 } 00272 00273 00274 KMultiTabBarButton::KMultiTabBarButton(const QPixmap& pic,const QString& text, QPopupMenu *popup, 00275 int id,QWidget *parent,KMultiTabBar::KMultiTabBarPosition pos,KMultiTabBar::KMultiTabBarStyle style) 00276 :QPushButton(QIconSet(),text,parent),m_style(style) 00277 { 00278 setIconSet(pic); 00279 setText(text); 00280 m_position=pos; 00281 if (popup) setPopup(popup); 00282 setFlat(true); 00283 setFixedHeight(24); 00284 setFixedWidth(24); 00285 m_id=id; 00286 QToolTip::add(this,text); 00287 connect(this,SIGNAL(clicked()),this,SLOT(slotClicked())); 00288 } 00289 00290 KMultiTabBarButton::KMultiTabBarButton(const QString& text, QPopupMenu *popup, 00291 int id,QWidget *parent,KMultiTabBar::KMultiTabBarPosition pos,KMultiTabBar::KMultiTabBarStyle style) 00292 :QPushButton(QIconSet(),text,parent),m_style(style) 00293 { 00294 setText(text); 00295 m_position=pos; 00296 if (popup) setPopup(popup); 00297 setFlat(true); 00298 setFixedHeight(24); 00299 setFixedWidth(24); 00300 m_id=id; 00301 QToolTip::add(this,text); 00302 connect(this,SIGNAL(clicked()),this,SLOT(slotClicked())); 00303 } 00304 00305 KMultiTabBarButton::~KMultiTabBarButton() { 00306 } 00307 00308 int KMultiTabBarButton::id() const{ 00309 return m_id; 00310 } 00311 00312 void KMultiTabBarButton::setText(const QString& text) 00313 { 00314 QPushButton::setText(text); 00315 m_text=text; 00316 QToolTip::add(this,text); 00317 } 00318 00319 void KMultiTabBarButton::slotClicked() 00320 { 00321 emit clicked(m_id); 00322 } 00323 00324 void KMultiTabBarButton::setPosition(KMultiTabBar::KMultiTabBarPosition pos) 00325 { 00326 m_position=pos; 00327 repaint(); 00328 } 00329 00330 void KMultiTabBarButton::setStyle(KMultiTabBar::KMultiTabBarStyle style) 00331 { 00332 m_style=style; 00333 repaint(); 00334 } 00335 00336 void KMultiTabBarButton::hideEvent( QHideEvent* he) { 00337 QPushButton::hideEvent(he); 00338 KMultiTabBar *tb=dynamic_cast<KMultiTabBar*>(parentWidget()); 00339 if (tb) tb->updateSeparator(); 00340 } 00341 00342 void KMultiTabBarButton::showEvent( QShowEvent* he) { 00343 QPushButton::showEvent(he); 00344 KMultiTabBar *tb=dynamic_cast<KMultiTabBar*>(parentWidget()); 00345 if (tb) tb->updateSeparator(); 00346 } 00347 00348 00349 QSize KMultiTabBarButton::sizeHint() const 00350 { 00351 constPolish(); 00352 00353 int w = 0, h = 0; 00354 00355 // calculate contents size... 00356 #ifndef QT_NO_ICONSET 00357 if ( iconSet() && !iconSet()->isNull() ) { 00358 int iw = iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4; 00359 int ih = iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).height(); 00360 w += iw; 00361 h = QMAX( h, ih ); 00362 } 00363 #endif 00364 if ( isMenuButton() ) 00365 w += style().pixelMetric(QStyle::PM_MenuButtonIndicator, this); 00366 00367 if ( pixmap() ) { 00368 QPixmap *pm = (QPixmap *)pixmap(); 00369 w += pm->width(); 00370 h += pm->height(); 00371 } else { 00372 QString s( text() ); 00373 bool empty = s.isEmpty(); 00374 if ( empty ) 00375 s = QString::fromLatin1("XXXX"); 00376 QFontMetrics fm = fontMetrics(); 00377 QSize sz = fm.size( ShowPrefix, s ); 00378 if(!empty || !w) 00379 w += sz.width(); 00380 if(!empty || !h) 00381 h = QMAX(h, sz.height()); 00382 } 00383 00384 return (style().sizeFromContents(QStyle::CT_ToolButton, this, QSize(w, h)). 00385 expandedTo(QApplication::globalStrut())); 00386 } 00387 00388 00389 KMultiTabBarTab::KMultiTabBarTab(const QPixmap& pic, const QString& text, 00390 int id,QWidget *parent,KMultiTabBar::KMultiTabBarPosition pos, 00391 KMultiTabBar::KMultiTabBarStyle style) 00392 :KMultiTabBarButton(text,0,id,parent,pos,style), 00393 m_showActiveTabText(false) 00394 { 00395 d=new KMultiTabBarTabPrivate(); 00396 setIcon(pic); 00397 m_expandedSize=24; 00398 setToggleButton(true); 00399 } 00400 00401 KMultiTabBarTab::~KMultiTabBarTab() { 00402 delete d; 00403 } 00404 00405 00406 void KMultiTabBarTab::setTabsPosition(KMultiTabBar::KMultiTabBarPosition pos) 00407 { 00408 if ((pos!=m_position) && ((pos==KMultiTabBar::Left) || (pos==KMultiTabBar::Right))) { 00409 if (!d->pix.isNull()) { 00410 QWMatrix temp;// (1.0F, 0.0F, 0.0F, -1.0F, 0.0F, 0.0F); 00411 temp.rotate(180); 00412 d->pix=d->pix.xForm(temp); 00413 setIconSet(d->pix); 00414 } 00415 } 00416 00417 setPosition(pos); 00418 // repaint(); 00419 } 00420 00421 void KMultiTabBarTab::setIcon(const QString& icon) 00422 { 00423 QPixmap pic=SmallIcon(icon); 00424 setIcon(pic); 00425 } 00426 00427 void KMultiTabBarTab::setIcon(const QPixmap& icon) 00428 { 00429 00430 if (m_style!=KMultiTabBar::KDEV3) { 00431 if ((m_position==KMultiTabBar::Left) || (m_position==KMultiTabBar::Right)) { 00432 QWMatrix rotateMatrix; 00433 if (m_position==KMultiTabBar::Left) 00434 rotateMatrix.rotate(90); 00435 else 00436 rotateMatrix.rotate(-90); 00437 QPixmap pic=icon.xForm(rotateMatrix); 00438 d->pix=pic; 00439 setIconSet(pic); 00440 } else setIconSet(icon); 00441 } 00442 } 00443 00444 void KMultiTabBarTab::slotClicked() 00445 { 00446 updateState(); 00447 KMultiTabBarButton::slotClicked(); 00448 } 00449 00450 void KMultiTabBarTab::setState(bool b) 00451 { 00452 setOn(b); 00453 updateState(); 00454 } 00455 00456 void KMultiTabBarTab::updateState() 00457 { 00458 00459 if (m_style!=KMultiTabBar::KONQSBC) { 00460 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn())) { 00461 QPushButton::setText(m_text); 00462 } else { 00463 kdDebug()<<"KMultiTabBarTab::updateState(): setting text to an empty QString***************"<<endl; 00464 QPushButton::setText(QString::null); 00465 } 00466 00467 if ((m_position==KMultiTabBar::Right || m_position==KMultiTabBar::Left)) { 00468 setFixedWidth(24); 00469 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn())) { 00470 setFixedHeight(KMultiTabBarButton::sizeHint().width()); 00471 } else setFixedHeight(36); 00472 } else { 00473 setFixedHeight(24); 00474 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn())) { 00475 setFixedWidth(KMultiTabBarButton::sizeHint().width()); 00476 } else setFixedWidth(36); 00477 } 00478 } else { 00479 if ((!isOn()) || (!m_showActiveTabText)) 00480 { 00481 setFixedWidth(24); 00482 setFixedHeight(24); 00483 return; 00484 } 00485 if ((m_position==KMultiTabBar::Right || m_position==KMultiTabBar::Left)) 00486 setFixedHeight(m_expandedSize); 00487 else 00488 setFixedWidth(m_expandedSize); 00489 } 00490 00491 } 00492 00493 int KMultiTabBarTab::neededSize() 00494 { 00495 return (((m_style!=KMultiTabBar::KDEV3)?24:0)+QFontMetrics(QFont()).width(m_text)+6); 00496 } 00497 00498 void KMultiTabBarTab::setSize(int size) 00499 { 00500 m_expandedSize=size; 00501 updateState(); 00502 } 00503 00504 void KMultiTabBarTab::showActiveTabText(bool show) 00505 { 00506 m_showActiveTabText=show; 00507 } 00508 00509 void KMultiTabBarTab::drawButtonLabel(QPainter *p) { 00510 drawButton(p); 00511 } 00512 void KMultiTabBarTab::drawButton(QPainter *paint) 00513 { 00514 if (m_style!=KMultiTabBar::KONQSBC) drawButtonStyled(paint); 00515 else drawButtonClassic(paint); 00516 } 00517 00518 void KMultiTabBarTab::drawButtonStyled(QPainter *paint) { 00519 00520 QSize sh; 00521 const int width = 36; // rotated 00522 const int height = 24; 00523 if ((m_style==KMultiTabBar::KDEV3) || (m_style==KMultiTabBar::KDEV3ICON) || (isOn())) 00524 sh=KMultiTabBarButton::sizeHint(); 00525 else 00526 sh=QSize(width,height); 00527 00528 QPixmap pixmap( sh.width(),height); 00529 pixmap.fill(eraseColor()); 00530 QPainter painter(&pixmap); 00531 00532 00533 QStyle::SFlags st=QStyle::Style_Default; 00534 00535 st|=QStyle::Style_Enabled; 00536 00537 if (isOn()) st|=QStyle::Style_On; 00538 00539 style().drawControl(QStyle::CE_PushButton,&painter,this, QRect(0,0,pixmap.width(),pixmap.height()), colorGroup(),st); 00540 style().drawControl(QStyle::CE_PushButtonLabel,&painter,this, QRect(0,0,pixmap.width(),pixmap.height()), colorGroup(),st); 00541 00542 switch (m_position) { 00543 case KMultiTabBar::Left: 00544 paint->rotate(-90); 00545 paint->drawPixmap(1-pixmap.width(),0,pixmap); 00546 break; 00547 case KMultiTabBar::Right: 00548 paint->rotate(90); 00549 paint->drawPixmap(0,1-pixmap.height(),pixmap); 00550 break; 00551 00552 default: 00553 paint->drawPixmap(0,0,pixmap); 00554 break; 00555 } 00556 // style().drawControl(QStyle::CE_PushButtonLabel,painter,this, QRect(0,0,pixmap.width(),pixmap.height()), 00557 // colorGroup(),QStyle::Style_Enabled); 00558 00559 00560 } 00561 00562 void KMultiTabBarTab::drawButtonClassic(QPainter *paint) 00563 { 00564 QPixmap pixmap; 00565 if ( iconSet()) 00566 pixmap = iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ); 00567 paint->fillRect(0, 0, 24, 24, colorGroup().background()); 00568 00569 if (!isOn()) 00570 { 00571 00572 if (m_position==KMultiTabBar::Right) 00573 { 00574 paint->fillRect(0,0,21,21,QBrush(colorGroup().background())); 00575 00576 paint->setPen(colorGroup().background().dark(150)); 00577 paint->drawLine(0,22,23,22); 00578 00579 paint->drawPixmap(12-pixmap.width()/2,12-pixmap.height()/2,pixmap); 00580 00581 paint->setPen(colorGroup().shadow()); 00582 paint->drawLine(0,0,0,23); 00583 paint->setPen(colorGroup().background().dark(120)); 00584 paint->drawLine(1,0,1,23); 00585 00586 } 00587 else 00588 if ((m_position==KMultiTabBar::Bottom) || (m_position==KMultiTabBar::Top)) 00589 { 00590 paint->fillRect(0,1,23,22,QBrush(colorGroup().background())); 00591 00592 paint->drawPixmap(12-pixmap.width()/2,12-pixmap.height()/2,pixmap); 00593 00594 paint->setPen(colorGroup().background().dark(120)); 00595 paint->drawLine(23,0,23,23); 00596 00597 00598 paint->setPen(colorGroup().light()); 00599 paint->drawLine(0,22,23,22); 00600 paint->drawLine(0,23,23,23); 00601 paint->setPen(colorGroup().shadow()); 00602 paint->drawLine(0,0,23,0); 00603 paint->setPen(colorGroup().background().dark(120)); 00604 paint->drawLine(0,1,23,1); 00605 00606 } 00607 else 00608 { 00609 paint->setPen(colorGroup().background().dark(120)); 00610 paint->drawLine(0,23,23,23); 00611 paint->fillRect(0,0,23,21,QBrush(colorGroup().background())); 00612 paint->drawPixmap(12-pixmap.width()/2,12-pixmap.height()/2,pixmap); 00613 00614 paint->setPen(colorGroup().light()); 00615 paint->drawLine(23,0,23,23); 00616 paint->drawLine(22,0,22,23); 00617 00618 paint->setPen(colorGroup().shadow()); 00619 paint->drawLine(0,0,0,23); 00620 00621 } 00622 00623 00624 } 00625 else 00626 { 00627 if (m_position==KMultiTabBar::Right) 00628 { 00629 paint->setPen(colorGroup().shadow()); 00630 paint->drawLine(0,height()-1,23,height()-1); 00631 paint->drawLine(0,height()-2,23,height()-2); 00632 paint->drawLine(23,0,23,height()-1); 00633 paint->drawLine(22,0,22,height()-1); 00634 paint->fillRect(0,0,21,height()-3,QBrush(colorGroup().light())); 00635 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap); 00636 00637 if (m_showActiveTabText) 00638 { 00639 if (height()<25+4) return; 00640 00641 QPixmap tpixmap(height()-25-3, width()-2); 00642 QPainter painter(&tpixmap); 00643 00644 painter.fillRect(0,0,tpixmap.width(),tpixmap.height(),QBrush(colorGroup().light())); 00645 00646 painter.setPen(colorGroup().text()); 00647 painter.drawText(0,+width()/2+QFontMetrics(QFont()).height()/2,m_text); 00648 00649 paint->rotate(90); 00650 kdDebug()<<"tpixmap.width:"<<tpixmap.width()<<endl; 00651 paint->drawPixmap(25,-tpixmap.height()+1,tpixmap); 00652 } 00653 00654 } 00655 else 00656 if (m_position==KMultiTabBar::Top) 00657 { 00658 paint->fillRect(0,0,width()-1,23,QBrush(colorGroup().light())); 00659 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap); 00660 if (m_showActiveTabText) 00661 { 00662 paint->setPen(colorGroup().text()); 00663 paint->drawText(25,height()/2+QFontMetrics(QFont()).height()/2,m_text); 00664 } 00665 } 00666 else 00667 if (m_position==KMultiTabBar::Bottom) 00668 { 00669 paint->setPen(colorGroup().shadow()); 00670 paint->drawLine(0,23,width()-1,23); 00671 paint->drawLine(0,22,width()-1,22); 00672 paint->fillRect(0,0,width()-1,21,QBrush(colorGroup().light())); 00673 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap); 00674 if (m_showActiveTabText) 00675 { 00676 paint->setPen(colorGroup().text()); 00677 paint->drawText(25,height()/2+QFontMetrics(QFont()).height()/2,m_text); 00678 } 00679 00680 } 00681 else 00682 { 00683 00684 00685 paint->setPen(colorGroup().shadow()); 00686 paint->drawLine(0,height()-1,23,height()-1); 00687 paint->drawLine(0,height()-2,23,height()-2); 00688 paint->fillRect(0,0,23,height()-3,QBrush(colorGroup().light())); 00689 paint->drawPixmap(10-pixmap.width()/2,10-pixmap.height()/2,pixmap); 00690 if (m_showActiveTabText) 00691 { 00692 00693 if (height()<25+4) return; 00694 00695 QPixmap tpixmap(height()-25-3, width()-2); 00696 QPainter painter(&tpixmap); 00697 00698 painter.fillRect(0,0,tpixmap.width(),tpixmap.height(),QBrush(colorGroup().light())); 00699 00700 painter.setPen(colorGroup().text()); 00701 painter.drawText(tpixmap.width()-QFontMetrics(QFont()).width(m_text),+width()/2+QFontMetrics(QFont()).height()/2,m_text); 00702 00703 paint->rotate(-90); 00704 kdDebug()<<"tpixmap.width:"<<tpixmap.width()<<endl; 00705 00706 paint->drawPixmap(-24-tpixmap.width(),2,tpixmap); 00707 00708 } 00709 00710 } 00711 00712 } 00713 } 00714 00715 00716 00717 00718 00719 00720 00721 KMultiTabBar::KMultiTabBar(KMultiTabBarMode bm, QWidget *parent,const char *name):QWidget(parent,name) 00722 { 00723 m_buttons.setAutoDelete(false); 00724 if (bm==Vertical) 00725 { 00726 m_l=new QVBoxLayout(this); 00727 setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding, true); 00728 // setFixedWidth(24); 00729 } 00730 else 00731 { 00732 m_l=new QHBoxLayout(this); 00733 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed, true); 00734 // setFixedHeight(24); 00735 } 00736 m_l->setMargin(0); 00737 m_l->setAutoAdd(false); 00738 00739 m_internal=new KMultiTabBarInternal(this,bm); 00740 setPosition((bm==KMultiTabBar::Vertical)?KMultiTabBar::Right:KMultiTabBar::Bottom); 00741 setStyle(VSNET); 00742 // setStyle(KDEV3); 00743 //setStyle(KONQSBC); 00744 m_l->insertWidget(0,m_internal); 00745 m_l->insertWidget(0,m_btnTabSep=new QFrame(this)); 00746 m_btnTabSep->setFixedHeight(4); 00747 m_btnTabSep->setFrameStyle(QFrame::Panel | QFrame::Sunken); 00748 m_btnTabSep->setLineWidth(2); 00749 m_btnTabSep->hide(); 00750 00751 updateGeometry(); 00752 } 00753 00754 KMultiTabBar::~KMultiTabBar() { 00755 } 00756 00757 /*int KMultiTabBar::insertButton(QPixmap pic,int id ,const QString&) 00758 { 00759 (new KToolbarButton(pic,id,m_internal))->show(); 00760 return 0; 00761 }*/ 00762 00763 int KMultiTabBar::appendButton(const QPixmap &pic ,int id,QPopupMenu *popup,const QString&) 00764 { 00765 KMultiTabBarButton *btn; 00766 m_buttons.append(btn= new KMultiTabBarButton(pic,QString::null, 00767 popup,id,this,m_position,m_internal->m_style)); 00768 m_l->insertWidget(0,btn); 00769 btn->show(); 00770 m_btnTabSep->show(); 00771 return 0; 00772 } 00773 00774 void KMultiTabBar::updateSeparator() { 00775 bool hideSep=true; 00776 for (QPtrListIterator<KMultiTabBarButton> it(m_buttons);it.current();++it){ 00777 if (it.current()->isVisibleTo(this)) { 00778 hideSep=false; 00779 break; 00780 } 00781 } 00782 if (hideSep) m_btnTabSep->hide(); 00783 else m_btnTabSep->show(); 00784 00785 } 00786 00787 int KMultiTabBar::appendTab(const QPixmap &pic ,int id ,const QString& text) 00788 { 00789 m_internal->appendTab(pic,id,text); 00790 return 0; 00791 } 00792 00793 KMultiTabBarButton* KMultiTabBar::button(int id) const 00794 { 00795 for (QPtrListIterator<KMultiTabBarButton> it(m_buttons);it.current();++it){ 00796 if (it.current()->id()==id) return it.current(); 00797 } 00798 return 0; 00799 } 00800 00801 KMultiTabBarTab* KMultiTabBar::tab(int id) const 00802 { 00803 return m_internal->tab(id); 00804 } 00805 00806 00807 00808 void KMultiTabBar::removeButton(int id) 00809 { 00810 for (uint pos=0;pos<m_buttons.count();pos++) 00811 { 00812 if (m_buttons.at(pos)->id()==id) 00813 { 00814 m_buttons.take(pos)->deleteLater(); 00815 break; 00816 } 00817 } 00818 if (m_buttons.count()==0) m_btnTabSep->hide(); 00819 } 00820 00821 void KMultiTabBar::removeTab(int id) 00822 { 00823 m_internal->removeTab(id); 00824 } 00825 00826 void KMultiTabBar::setTab(int id,bool state) 00827 { 00828 KMultiTabBarTab *ttab=tab(id); 00829 if (ttab) 00830 { 00831 ttab->setState(state); 00832 } 00833 } 00834 00835 bool KMultiTabBar::isTabRaised(int id) const 00836 { 00837 KMultiTabBarTab *ttab=tab(id); 00838 if (ttab) 00839 { 00840 return ttab->isOn(); 00841 } 00842 00843 return false; 00844 } 00845 00846 00847 void KMultiTabBar::showActiveTabTexts(bool show) 00848 { 00849 m_internal->showActiveTabTexts(show); 00850 } 00851 00852 void KMultiTabBar::setStyle(KMultiTabBarStyle style) 00853 { 00854 m_internal->setStyle(style); 00855 } 00856 00857 void KMultiTabBar::setPosition(KMultiTabBarPosition pos) 00858 { 00859 m_position=pos; 00860 m_internal->setPosition(pos); 00861 for (uint i=0;i<m_buttons.count();i++) 00862 m_buttons.at(i)->setPosition(pos); 00863 } 00864 void KMultiTabBar::fontChange(const QFont& /* oldFont */) 00865 { 00866 for (uint i=0;i<tabs()->count();i++) 00867 tabs()->at(i)->resize(); 00868 repaint(); 00869 } 00870 00871 QPtrList<KMultiTabBarTab>* KMultiTabBar::tabs() {return m_internal->tabs();} 00872 QPtrList<KMultiTabBarButton>* KMultiTabBar::buttons() {return &m_buttons;} 00873
KDE Logo
This file is part of the documentation for kutils Library Version 3.3.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 17 11:31:54 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003