kdeui
ktabctl.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00027 #include <qtabbar.h>
00028 #include <qpushbutton.h>
00029 #include <qpainter.h>
00030 #include <qpixmap.h>
00031
00032 #include "ktabctl.h"
00033
00034 KTabCtl::KTabCtl(QWidget *parent, const char *name)
00035 : QWidget(parent, name)
00036 {
00037 tabs = new QTabBar(this, "_tabbar");
00038 connect(tabs, SIGNAL(selected(int)), this, SLOT(showTab(int)));
00039 tabs->move(2, 1);
00040
00041 blBorder = true;
00042
00043 }
00044
00045 KTabCtl::~KTabCtl()
00046 {
00047 delete tabs;
00048 }
00049
00050 void KTabCtl::resizeEvent(QResizeEvent *)
00051 {
00052 int i;
00053 QRect r = getChildRect();
00054
00055 if (tabs) {
00056 for (i=0; i<(int)pages.size(); i++) {
00057 pages[i]->setGeometry(r);
00058 }
00059 if( ( tabs->shape() == QTabBar::RoundedBelow ) ||
00060 ( tabs->shape() == QTabBar::TriangularBelow ) ) {
00061 tabs->move( 0, height()-tabs->height()-4 );
00062 }
00063 }
00064 }
00065
00066 void KTabCtl::setFont(const QFont & font)
00067 {
00068 QFont f(font);
00069 f.setWeight(QFont::Light);
00070 QWidget::setFont(f);
00071
00072 setSizes();
00073 }
00074
00075 void KTabCtl::setTabFont(const QFont & font)
00076 {
00077 QFont f(font);
00078
00079 tabs->setFont(f);
00080
00081 setSizes();
00082 }
00083
00084 void KTabCtl::show()
00085 {
00086 unsigned int i;
00087
00088 if(isVisible())
00089 return;
00090
00091 setSizes();
00092
00093 for(i = 0; i < pages.size(); i++)
00094 pages[i]->hide();
00095
00096 QResizeEvent r(size(), size());
00097 resizeEvent(&r);
00098
00099 QWidget::show();
00100 }
00101
00102 bool KTabCtl::isTabEnabled(const QString& name)
00103 {
00104 unsigned int i;
00105
00106 for(i = 0; i < pages.size(); i++)
00107 if (QString::fromLatin1(pages[i]->name()) == name)
00108 return tabs->isTabEnabled(i);
00109 return false;
00110 }
00111
00112 void KTabCtl::setTabEnabled(const QString& name, bool state)
00113 {
00114 unsigned i;
00115
00116 if (name.isEmpty())
00117 return;
00118
00119 for (i = 0; i < pages.size(); i++)
00120 if (QString::fromLatin1(pages[i]->name()) == name)
00121 tabs->setTabEnabled(i, state);
00122 }
00123
00124 void KTabCtl::setSizes()
00125 {
00126 unsigned i;
00127
00128 QSize min(tabs->sizeHint());
00129 tabs->resize(min);
00130
00131
00132 QSize max(QCOORD_MAX,QCOORD_MAX);
00133
00134
00135 for (i = 0; i < pages.size(); i++) {
00136
00137
00138
00139
00140
00141 if (pages[i]->maximumSize().height() < max.height())
00142 max.setHeight(pages[i]->maximumSize().height());
00143 if (pages[i]->maximumSize().width() < max.width())
00144 max.setWidth( pages[i]->maximumSize().width());
00145 if ( pages[i]->minimumSize().height() > min.height())
00146 min.setHeight( pages[i]->minimumSize().height());
00147 if ( pages[i]->minimumSize().width() > min.width())
00148 min.setWidth( pages[i]->minimumSize().width());
00149 }
00150
00151
00152
00153
00154 if (max.width() < min.width())
00155 max.setWidth(min.width());
00156 if (max.height() < min.height())
00157 max.setHeight(min.height());
00158
00159
00160
00161
00162
00163 for( i=0; i<(uint)pages.size(); i++ ) {
00164 pages[i]->setMinimumSize(min);
00165 pages[i]->setMaximumSize(max);
00166 }
00167
00168
00169
00170 setMinimumSize(min.width()+4, min.height()+tabs->height()+4);
00171
00172
00173
00174
00175
00176 if(isVisible()) {
00177 QResizeEvent r(size(), size());
00178 resizeEvent(&r);
00179 }
00180 }
00181
00182 void KTabCtl::setBorder( bool state )
00183 {
00184 blBorder = state;
00185 }
00186
00187 void KTabCtl::setShape( QTabBar::Shape shape )
00188 {
00189 tabs->setShape( shape );
00190 }
00191
00192 QSize
00193 KTabCtl::sizeHint() const
00194 {
00195
00196 QSize hint(tabs->sizeHint());
00197
00198
00199 QSize pageHint;
00200 for (unsigned int i = 0; i < pages.size(); i++)
00201 {
00202 QSize sizeI(pages[i]->sizeHint());
00203
00204 if (sizeI.isValid())
00205 {
00206
00207 if (sizeI.width() > pageHint.width())
00208 pageHint.setWidth(sizeI.width());
00209
00210 if (sizeI.height() > pageHint.height())
00211 pageHint.setHeight(sizeI.height());
00212 }
00213 }
00214
00215 if (pageHint.isValid())
00216 {
00217
00218 if (pageHint.width() > hint.width())
00219 hint.setWidth(pageHint.width());
00220
00221
00222 hint.setHeight(hint.height() + pageHint.height());
00223
00224
00225
00226
00227
00228 return (hint + QSize(4,4));
00229 }
00230
00231
00232
00233
00234
00235 return (pageHint);
00236 }
00237
00238 void KTabCtl::paintEvent(QPaintEvent *)
00239 {
00240 if (!tabs)
00241 return;
00242
00243 if( !blBorder )
00244 return;
00245
00246 QPainter p;
00247 p.begin(this);
00248
00249 int y0 = getChildRect().top() - 1;
00250 int y1 = getChildRect().bottom() + 2;
00251 int x1 = getChildRect().right() + 2;
00252 int x0 = getChildRect().left() - 1;
00253
00254 p.setPen(colorGroup().light());
00255 p.drawLine(x0, y0 - 1, x1 - 1, y0 - 1);
00256 p.setPen(colorGroup().midlight());
00257 p.drawLine(x0, y0, x1 - 1, y0);
00258 p.setPen(colorGroup().light());
00259 p.drawLine(x0, y0 + 1, x0, y1);
00260 p.setPen(black);
00261 p.drawLine(x1, y1, x0, y1);
00262 p.drawLine(x1, y1 - 1, x1, y0);
00263 p.setPen(colorGroup().dark());
00264 p.drawLine(x0 + 1, y1 - 1, x1 - 1, y1 - 1);
00265 p.drawLine(x1 - 1, y1 - 2, x1 - 1, y0 + 1);
00266 p.end();
00267 }
00268
00269
00270
00271
00272
00273
00274 QRect KTabCtl::getChildRect() const
00275 {
00276 if( ( tabs->shape() == QTabBar::RoundedBelow ) ||
00277 ( tabs->shape() == QTabBar::TriangularBelow ) ) {
00278 return QRect(2, 1, width() - 4,
00279 height() - tabs->height() - 4);
00280 } else {
00281 return QRect(2, tabs->height() + 1, width() - 4,
00282 height() - tabs->height() - 4);
00283 }
00284 }
00285
00286
00287
00288
00289
00290
00291 void KTabCtl::showTab(int i)
00292 {
00293 unsigned int j;
00294 for (j = 0; j < pages.size(); j++) {
00295 if (j != (unsigned)i) {
00296 pages[j]->hide();
00297 }
00298 }
00299
00300 if((unsigned)i < pages.size()) {
00301 emit(tabSelected(i));
00302 if( pages.size() >= 2 ) {
00303 pages[i]->raise();
00304 }
00305 tabs->setCurrentTab(i);
00306 pages[i]->setGeometry(getChildRect());
00307 pages[i]->show();
00308 }
00309 }
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319 void KTabCtl::addTab(QWidget *w, const QString& name)
00320 {
00321 QTab *t = new QTab();
00322 t->setText( name );
00323 t->setEnabled( true );
00324 int id = tabs->addTab(t);
00325 if (id == (int)pages.size()) {
00326 pages.resize(id + 1);
00327 pages[id] = w;
00328 }
00329
00330 setSizes();
00331 }
00332
00333 void KTabCtl::virtual_hook( int, void* )
00334 { }
00335
00336 #include "ktabctl.moc"