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 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
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;
00411 temp.rotate(180);
00412 d->pix=d->pix.xForm(temp);
00413 setIconSet(d->pix);
00414 }
00415 }
00416
00417
setPosition(pos);
00418
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;
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
00557
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
00729 }
00730
else
00731 {
00732 m_l=
new QHBoxLayout(
this);
00733 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed,
true);
00734
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
00743
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
00758
00759
00760
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& )
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