The target options are now saved in the program settings.
[kdbg.git] / STabCtl / stabctl.cpp
blob1fd89198a45f50bd772e1c3db9205d46fc550d76
1 /***************************************************************************
2 STabCtl part of KDEStudio
3 -------------------
4 copyright : (C) 1999 by Judin Maximus
5 email : novaprint@mtu-net.ru
6 ***************************************************************************/
8 #include "stabctl.h"
9 #include <qapplication.h>
10 #include <qpushbutton.h>
11 #include <qpainter.h>
12 #include <qpixmap.h>
14 STabCtl::STabCtl(QWidget *parent, const char *name) : QWidget(parent, name)
16 tabPos = STabBar::TAB_TOP;
17 mainData = new QList<TabCtlData>;
18 mainData->setAutoDelete( true );
20 currentPage = 0L;
22 tabs = new STabBar( this );
23 tabs->hide();
24 connect( tabs, SIGNAL(tabSelected(int)), this, SLOT(setVisiblePage(int)) );
25 connect( tabs, SIGNAL(rightButtonPress(int,QPoint)), this, SLOT(rightButtonPress(int,QPoint)) );
26 tabs->move(0, 0);
29 STabCtl::~STabCtl()
31 delete mainData;
32 delete tabs;
35 int STabCtl::insertPage( QWidget* widget , const QString &label, int id )
37 if ( id == -1 ){
38 id = -1;
39 for ( uint k = 0; k < mainData->count(); k++ )
40 if ( mainData->at(k)->id > id ) id = mainData->at(k)->id;
41 id++;
43 TabCtlData* data = new TabCtlData( widget, id );
44 mainData->append( data );
45 tabs->insertTab( label, id );
46 if ( !tabs->isVisible() ) tabs->show();
47 // if its page first - this page become current
48 if ( mainData->count() == 1 ) setVisiblePage( widget );
49 return id;
53 void STabCtl::setPixmap( QWidget* widget, const QPixmap &pix )
55 TabCtlData* data = findData(widget);
56 if ( data != 0L ){
57 tabs->setPixmap( data->id, pix );
61 QWidget* STabCtl::getFirstPage()
63 return mainData->first() != 0L ? mainData->first()->widget:0L;
66 QWidget* STabCtl::getLastPage()
68 return mainData->last() != 0L ? mainData->last()->widget:0L;
71 QWidget* STabCtl::getNextPage( QWidget* widget )
73 if ( mainData->count() < 2 ) return 0L;
75 QWidget* found = 0L;
76 for ( uint k = 0; k < mainData->count() - 1; k++ )
77 if ( mainData->at(k)->widget == widget ){
78 found = mainData->at( k + 1 )->widget;
79 break;
81 return found;
84 QWidget* STabCtl::getPrevPage( QWidget* widget )
86 if ( mainData->count() < 2 ) return 0L;
88 QWidget* found = 0L;
89 for ( uint k = 1; k < mainData->count(); k++ )
90 if ( mainData->at(k)->widget == widget ){
91 found = mainData->at( k - 1 )->widget;
92 break;
94 return found;
98 TabCtlData* STabCtl::findData( QWidget* widget )
100 TabCtlData* data = 0L;
101 for ( uint k = 0; k < mainData->count(); k++ )
102 if ( mainData->at(k)->widget == widget ){
103 data = mainData->at(k);
104 break;
106 return data;
109 void STabCtl::showTabIcon( bool show )
111 tabs->showTabIcon( show );
112 QSize size( width(), height() );
113 qApp->notify( this, new QResizeEvent( size , size ) );
116 TabCtlData* STabCtl::findData( int id )
118 TabCtlData* data = 0L;
119 for ( uint k = 0; k < mainData->count(); k++ )
120 if ( mainData->at(k)->id == id ){
121 data = mainData->at(k);
122 break;
124 return data;
127 int STabCtl::id( QWidget* widget )
129 TabCtlData* data = findData(widget);
130 return data == 0L ? -1:data->id;
133 QWidget* STabCtl::page( int id )
135 TabCtlData* data = findData( id );
136 return data == 0L ? 0L:data->widget;
139 void STabCtl::removePage( QWidget* widget )
141 TabCtlData* data = findData(widget);
142 if ( data != 0L ){
143 if ( currentPage == widget ) currentPage = 0L;
144 tabs->removeTab( data->id );
145 data->widget->hide();
146 mainData->remove( data );
147 if ( mainData->count() == 0 ){
148 tabs->hide();
149 resizeEvent(0);
154 QWidget* STabCtl::visiblePage()
156 TabCtlData* data = findData( currentPage );
157 return data == 0L ? 0L:data->widget;
160 void STabCtl::setVisiblePage( QWidget* widget, bool allowDisable )
162 TabCtlData* data = findData( widget );
163 if ( data != 0L ){
164 if ( currentPage != widget ){
165 currentPage = widget;
166 showPage( widget, allowDisable );
171 void STabCtl::showPage( QWidget* widget, bool allowDisable )
173 widget->raise();
175 QSize s = QSize( width(), height() );
176 qApp->notify( this, new QResizeEvent(s,s) );
178 s = getChildRect().size();
179 qApp->notify( widget, new QResizeEvent(s,s) );
180 qApp->notify( widget, new QMoveEvent(QPoint(0,0),QPoint(0,0)) );
181 qApp->processEvents();
183 emit aboutToShow( widget );
185 TabCtlData* data = findData( widget );
186 if ( data != 0L ) tabs->setCurrentTab( data->id, allowDisable );
188 widget->show();
190 for ( uint k = 0; k < mainData->count(); k++ )
191 if ( mainData->at(k)->widget != widget ) mainData->at(k)->widget->hide();
193 emit pageSelected( widget );
196 bool STabCtl::isPageEnabled( QWidget* widget )
198 TabCtlData* data = findData( widget );
199 return data == 0L ? false:data->enabled;
202 void STabCtl::setPageEnabled( QWidget* widget, bool enabled )
204 TabCtlData* data = findData( widget );
205 if ( data != 0L )
206 if ( data->enabled != enabled ){
207 data->enabled = enabled;
208 tabs->setTabEnabled( data->id, enabled );
212 void STabCtl::show()
214 QWidget::show();
215 if ( currentPage == 0L )
216 if ( !mainData->isEmpty() )
217 currentPage = mainData->at(0)->widget;
219 if ( currentPage != 0L ){
220 showPage( currentPage );
224 void STabCtl::resizeEvent(QResizeEvent * )
226 QRect r = getChildRect();
228 if ( currentPage != 0L && pageCount() > 0 ){
229 currentPage->setGeometry(r);
231 switch ( tabPos )
232 case STabBar::TAB_TOP:{
233 tabs->resize( width(), tabs->height() );
234 break;
235 case STabBar::TAB_RIGHT:
236 tabs->resize( tabs->width(), height() );
237 break;
241 void STabCtl::setTabFont(const QFont & font)
243 QFont f(font);
244 tabs->setFont(f);
245 resizeEvent(0);
248 void STabCtl::paintEvent(QPaintEvent *)
250 QPainter paint;
251 paint.begin( this );
253 paint.setPen( white );
254 // top
255 paint.moveTo( 0, 0 );
256 paint.lineTo( 0, height() - 1 );
258 // left
259 paint.moveTo( width() -1, 0 );
260 paint.lineTo( 0, 0 );
262 paint.setPen( colorGroup().dark() );
263 // right
264 paint.moveTo( 0, height() - 1 );
265 paint.lineTo( width() -1, height() - 1 );
267 // botton
268 paint.moveTo( width() -1, height() - 1 );
269 paint.lineTo( width() -1, 0 );
271 paint.end();
274 QRect STabCtl::getChildRect() const
276 QRect r;
277 if ( !tabs->isVisible() )
278 r = QRect( 2, 2, width() - 4, height() - 4 );
279 else {
280 switch ( tabPos )
281 case STabBar::TAB_TOP:{
282 r = QRect( 2, tabs->height() + 2, width() - 4, height() - tabs->height() - 4 );
283 break;
284 case STabBar::TAB_RIGHT:
285 r = QRect( tabs->width() + 2, 2, width() - tabs->width() - 4, height() - 4 );
286 break;
289 return r;
292 void STabCtl::rightButtonPress( int id , QPoint pos )
294 emit tabShowPopup(id, pos);
297 void STabCtl::setTabTextColor( QWidget* widget, const QColor &color )
299 TabCtlData* data = findData( widget );
300 if ( data != 0L ){
301 tabs->setTextColor( data->id, color );
305 void STabCtl::setTabPos( STabBar::TabPos pos )
307 tabPos = pos;
308 tabs->setTabPos( pos );
309 resizeEvent(0);
312 bool STabCtl::isShowTabIcon()
314 return tabs->isShowTabIcon();
317 void STabCtl::setEnabled( bool enabled )
319 QWidget::setEnabled( enabled );
320 tabs->setEnabled( enabled );
323 QFont STabCtl::tabFont()
325 return tabs->font();
328 void STabCtl::setPageCaption( QWidget* widget, const QString &caption )
330 TabCtlData* data = findData( widget );
331 if ( data != 0L )
332 tabs->setTabCaption( data->id, caption );
335 QString STabCtl::pageCaption( QWidget* widget )
337 TabCtlData* data = findData( widget );
338 if ( data == 0L ) return "";
339 return tabs->tabCaption( data->id );
342 const QColor& STabCtl::tabTextColor( QWidget* widget )
344 TabCtlData* data = findData( widget );
345 if ( data == 0L ) return black;
346 return tabs->textColor( data->id );