1 /***************************************************************************
2 STabCtl part of KDEStudio
4 copyright : (C) 1999 by Judin Maximus
5 email : novaprint@mtu-net.ru
6 ***************************************************************************/
9 #include <qapplication.h>
10 #include <qpushbutton.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 );
22 tabs
= new STabBar( this );
24 connect( tabs
, SIGNAL(tabSelected(int)), this, SLOT(setVisiblePage(int)) );
25 connect( tabs
, SIGNAL(rightButtonPress(int,QPoint
)), this, SLOT(rightButtonPress(int,QPoint
)) );
35 int STabCtl::insertPage( QWidget
* widget
, const QString
&label
, int id
)
39 for ( uint k
= 0; k
< mainData
->count(); k
++ )
40 if ( mainData
->at(k
)->id
> id
) id
= mainData
->at(k
)->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
);
53 void STabCtl::setPixmap( QWidget
* widget
, const QPixmap
&pix
)
55 TabCtlData
* data
= findData(widget
);
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;
76 for ( uint k
= 0; k
< mainData
->count() - 1; k
++ )
77 if ( mainData
->at(k
)->widget
== widget
){
78 found
= mainData
->at( k
+ 1 )->widget
;
84 QWidget
* STabCtl::getPrevPage( QWidget
* widget
)
86 if ( mainData
->count() < 2 ) return 0L;
89 for ( uint k
= 1; k
< mainData
->count(); k
++ )
90 if ( mainData
->at(k
)->widget
== widget
){
91 found
= mainData
->at( k
- 1 )->widget
;
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
);
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
);
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
);
143 if ( currentPage
== widget
) currentPage
= 0L;
144 tabs
->removeTab( data
->id
);
145 data
->widget
->hide();
146 mainData
->remove( data
);
147 if ( mainData
->count() == 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
);
164 if ( currentPage
!= widget
){
165 currentPage
= widget
;
166 showPage( widget
, allowDisable
);
171 void STabCtl::showPage( QWidget
* widget
, bool allowDisable
)
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
);
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
);
206 if ( data
->enabled
!= enabled
){
207 data
->enabled
= enabled
;
208 tabs
->setTabEnabled( data
->id
, enabled
);
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
);
232 case STabBar::TAB_TOP
:{
233 tabs
->resize( width(), tabs
->height() );
235 case STabBar::TAB_RIGHT
:
236 tabs
->resize( tabs
->width(), height() );
241 void STabCtl::setTabFont(const QFont
& font
)
248 void STabCtl::paintEvent(QPaintEvent
*)
253 paint
.setPen( white
);
255 paint
.moveTo( 0, 0 );
256 paint
.lineTo( 0, height() - 1 );
259 paint
.moveTo( width() -1, 0 );
260 paint
.lineTo( 0, 0 );
262 paint
.setPen( colorGroup().dark() );
264 paint
.moveTo( 0, height() - 1 );
265 paint
.lineTo( width() -1, height() - 1 );
268 paint
.moveTo( width() -1, height() - 1 );
269 paint
.lineTo( width() -1, 0 );
274 QRect
STabCtl::getChildRect() const
277 if ( !tabs
->isVisible() )
278 r
= QRect( 2, 2, width() - 4, height() - 4 );
281 case STabBar::TAB_TOP
:{
282 r
= QRect( 2, tabs
->height() + 2, width() - 4, height() - tabs
->height() - 4 );
284 case STabBar::TAB_RIGHT
:
285 r
= QRect( tabs
->width() + 2, 2, width() - tabs
->width() - 4, height() - 4 );
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
);
301 tabs
->setTextColor( data
->id
, color
);
305 void STabCtl::setTabPos( STabBar::TabPos pos
)
308 tabs
->setTabPos( pos
);
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()
328 void STabCtl::setPageCaption( QWidget
* widget
, const QString
&caption
)
330 TabCtlData
* data
= findData( widget
);
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
);