summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/widgets/tqtabwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqtabwidget.cpp')
-rw-r--r--tqtinterface/qt4/src/widgets/tqtabwidget.cpp1097
1 files changed, 0 insertions, 1097 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqtabwidget.cpp b/tqtinterface/qt4/src/widgets/tqtabwidget.cpp
deleted file mode 100644
index b4275db..0000000
--- a/tqtinterface/qt4/src/widgets/tqtabwidget.cpp
+++ /dev/null
@@ -1,1097 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQTabWidget class
-**
-** Created : 990318
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** This file is part of the widgets module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include "tqtabwidget.h"
-#ifndef TQT_NO_TABWIDGET
-#include "tqobjectlist.h"
-#include "tqtabbar.h"
-#include "tqapplication.h"
-#include "tqwidgetstack.h"
-#include "tqbitmap.h"
-#include "tqaccel.h"
-#include "tqstyle.h"
-#include "tqpainter.h"
-#include "tqtoolbutton.h"
-
-#ifdef TQ_OS_MACX
-#include <tqmacstyle_mac.h>
-#endif
-
-/*!
- \class TQTabWidget tqtabwidget.h
- \brief The TQTabWidget class provides a stack of tabbed widgets.
-
- \ingroup organizers
- \ingroup advanced
- \mainclass
-
- A tab widget provides a tab bar of tabs and a `page area' below
- (or above, see \l{TabPosition}) the tabs. Each tab is associated
- with a different widget (called a `page'). Only the current tab's
- page is shown in the page area; all the other tabs' pages are
- hidden. The user can show a different page by clicking on its tab
- or by pressing its Alt+\e{letter} accelerator if it has one.
-
- The normal way to use TQTabWidget is to do the following in the
- constructor:
- \list 1
- \i Create a TQTabWidget.
- \i Create a TQWidget for each of the pages in the tab dialog,
- insert tqchildren into it, set up tqgeometry management for it and use
- addTab() (or insertTab()) to set up a tab and keyboard accelerator
- for it.
- \i Connect to the Q_SIGNALS and Q_SLOTS.
- \endlist
-
- The position of the tabs is set with setTabPosition(), their tqshape
- with setTabShape(), and their margin with setMargin().
-
- If you don't call addTab() and the TQTabWidget is already visible,
- then the page you have created will not be visible. Don't
- confuse the object name you supply to the TQWidget constructor and
- the tab label you supply to addTab(). addTab() takes a name which
- indicates an accelerator and is meaningful and descriptive to the
- user, whereas the widget name is used primarily for debugging.
-
- The signal currentChanged() is emitted when the user selects a
- page.
-
- The current page is available as an index position with
- currentPageIndex() or as a wiget pointer with currentPage(). You
- can retrieve a pointer to a page with a given index using page(),
- and can find the index position of a page with indexOf(). Use
- setCurrentPage() to show a particular page by index, or showPage()
- to show a page by widget pointer.
-
- You can change a tab's label and iconset using changeTab() or
- setTabLabel() and setTabIconSet(). A tab page can be removed with
- removePage().
-
- Each tab is either enabled or disabled at any given time (see
- setTabEnabled()). If a tab is enabled, the tab text is drawn
- normally and the user can select that tab. If it is disabled, the
- tab is drawn in a different way and the user cannot select that
- tab. Note that even if a tab is disabled, the page can still be
- visible, for example if all of the tabs happen to be disabled.
-
- Although tab widgets can be a very good way to split up a complex
- dialog, it's also very easy to get into a mess. See TQTabDialog for
- some design hints. An alternative is to use a TQWidgetStack for
- which you provide some means of navigating between pages, for
- example, a TQToolBar or a TQListBox.
-
- Most of the functionality in TQTabWidget is provided by a TQTabBar
- (at the top, providing the tabs) and a TQWidgetStack (most of the
- area, organizing the individual pages).
-
- <img src=qtabwidget-m.png> <img src=qtabwidget-w.png>
-
- \sa TQTabDialog, TQToolBox
-*/
-
-/*!
- \enum TQt::Corner
- This enum type specifies a corner in a rectangle:
- \value TopLeft top left corner
- \value TopRight top right corner
- \value BottomLeft bottom left corner
- \value BottomRight bottom right corner
-*/
-
-/*!
- \enum TQTabWidget::TabPosition
-
- This enum type defines where TQTabWidget draws the tab row:
- \value Top above the pages
- \value Bottom below the pages
-*/
-
-/*!
- \enum TQTabWidget::TabShape
-
- This enum type defines the tqshape of the tabs:
- \value Rounded rounded look (normal)
- \value Triangular triangular look (very unusual, included for completeness)
-*/
-
-/* undocumented now
- \obsolete
-
- \fn void TQTabWidget::selected( const TQString &tabLabel );
-
- This signal is emitted whenever a tab is selected (raised),
- including during the first show().
-
- \sa raise()
-*/
-
-
-/*!
- \fn void TQTabWidget::currentChanged( TQWidget* );
-
- This signal is emitted whenever the current page changes. The
- parameter is the new current page.
-
- \sa currentPage(), showPage(), tabLabel()
-*/
-
-class TQTabBarBase : public TQWidget
-{
-public:
- TQTabBarBase( TQTabWidget* parent=0, const char* name=0 )
- : TQWidget( parent, name ) {};
-protected:
- void paintEvent( TQPaintEvent * )
- {
- TQObject * obj = parent();
- if( obj ){
- TQTabWidget * t = (TQTabWidget *) obj;
- TQPainter p( this );
- TQStyle::SFlags flags = TQStyle::Style_Default;
-
- if ( t->tabPosition() == TQTabWidget::Top )
- flags |= TQStyle::Style_Top;
- if ( t->tabPosition() == TQTabWidget::Bottom )
- flags |= TQStyle::Style_Bottom;
- if(parentWidget()->isEnabled())
- flags |= TQStyle::Style_Enabled;
-
- tqstyle().tqdrawPrimitive( TQStyle::PE_TabBarBase, &p, rect(),
- tqcolorGroup(), flags );
- }
- }
-};
-
-class TQTabWidgetData
-{
-public:
- TQTabWidgetData()
- : tabs(0), tabBase(0), stack(0), dirty( TRUE ),
- pos( TQTabWidget::Top ), tqshape( TQTabWidget::Rounded ),
- leftCornerWidget(0), rightCornerWidget(0) {};
- ~TQTabWidgetData(){};
- TQTabBar* tabs;
- TQTabBarBase* tabBase;
- TQWidgetStack* stack;
- bool dirty;
- TQTabWidget::TabPosition pos;
- TQTabWidget::TabShape tqshape;
- int tqalignment;
- TQWidget* leftCornerWidget;
- TQWidget* rightCornerWidget;
-};
-
-/*!
- Constructs a tabbed widget called \a name with parent \a parent,
- and widget flags \a f.
-*/
-TQTabWidget::TQTabWidget( TQWidget *parent, const char *name, WFlags f )
- : TQWidget( parent, name, f )
-{
- d = new TQTabWidgetData;
- d->stack = new TQWidgetStack( this, "tab pages" );
- d->stack->installEventFilter( this );
- d->tabBase = new TQTabBarBase( this, "tab base" );
- d->tabBase->resize( 1, 1 );
- setTabBar( new TQTabBar( this, "tab control" ) );
-
- d->stack->setFrameStyle( TQFrame::TabWidgetPanel | TQFrame::Raised );
-#ifdef TQ_OS_TEMP
- d->pos = Bottom;
-#endif
-
- tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Expanding ) );
- setFocusPolicy( Qt::TabFocus );
- setFocusProxy( d->tabs );
-
- installEventFilter( this );
-#ifdef TQ_OS_MACX
- if (::tqqt_cast<TQMacStyle*>(&tqstyle()))
- setMargin(10); // According to HIGuidelines at least.
-#endif
-}
-
-/*!
- \reimp
-*/
-TQTabWidget::~TQTabWidget()
-{
- delete d;
-}
-
-/*!
- Adds another tab and page to the tab view.
-
- The new page is \a child; the tab's label is \a label. Note the
- difference between the widget name (which you supply to widget
- constructors and to setTabEnabled(), for example) and the tab
- label. The name is internal to the program and invariant, whereas
- the label is shown on-screen and may vary according to language
- and other factors.
-
- If the tab's \a label contains an ampersand, the letter following
- the ampersand is used as an accelerator for the tab, e.g. if the
- label is "Bro\&wse" then Alt+W becomes an accelerator which will
- move the focus to this tab.
-
- If you call addTab() after show() the screen will flicker and the
- user may be confused.
-
- Adding the same child twice will have undefined behavior.
-
- \sa insertTab()
-*/
-void TQTabWidget::addTab( TQWidget *child, const TQString &label)
-{
- insertTab( child, label );
-}
-
-
-/*!
- \overload
-
- Adds another tab and page to the tab view.
-
- This function is the same as addTab(), but with an additional \a
- iconset.
-*/
-void TQTabWidget::addTab( TQWidget *child, const TQIconSet& iconset, const TQString &label )
-{
- insertTab( child, iconset, label );
-}
-
-/*!
- \overload
-
- This is a low-level function for adding tabs. It is useful if you
- are using setTabBar() to set a TQTabBar subclass with an overridden
- TQTabBar::paint() function for a subclass of TQTab. The \a child is
- the new page and \a tab is the tab to put the \a child on.
-*/
-void TQTabWidget::addTab( TQWidget *child, TQTab* tab )
-{
- insertTab( child, tab );
-}
-
-
-
-/*!
- Inserts another tab and page to the tab view.
-
- The new page is \a child; the tab's label is \a label. Note the
- difference between the widget name (which you supply to widget
- constructors and to setTabEnabled(), for example) and the tab
- label. The name is internal to the program and invariant, whereas
- the label is shown on-screen and may vary according to language
- and other factors.
-
- If the tab's \a label contains an ampersand, the letter following
- the ampersand is used as an accelerator for the tab, e.g. if the
- label is "Bro\&wse" then Alt+W becomes an accelerator which will
- move the focus to this tab.
-
- If \a index is not specified, the tab is simply appended.
- Otherwise it is inserted at the specified position.
-
- If you call insertTab() after show(), the screen will flicker and
- the user may be confused.
-
- \sa addTab()
-*/
-void TQTabWidget::insertTab( TQWidget *child, const TQString &label, int index)
-{
- TQTab * t = new TQTab();
- TQ_CHECK_PTR( t );
- t->label = label;
- insertTab( child, t, index );
-}
-
-
-/*!
- \overload
-
- Inserts another tab and page to the tab view.
-
- This function is the same as insertTab(), but with an additional
- \a iconset.
-*/
-void TQTabWidget::insertTab( TQWidget *child, const TQIconSet& iconset, const TQString &label, int index )
-{
- TQTab * t = new TQTab();
- TQ_CHECK_PTR( t );
- t->label = label;
- t->iconset = new TQIconSet( iconset );
- insertTab( child, t, index );
-}
-
-/*!
- \overload
-
- This is a lower-level method for inserting tabs, similar to the
- other insertTab() method. It is useful if you are using
- setTabBar() to set a TQTabBar subclass with an overridden
- TQTabBar::paint() function for a subclass of TQTab. The \a child is
- the new page, \a tab is the tab to put the \a child on and \a
- index is the position in the tab bar that this page should occupy.
-*/
-void TQTabWidget::insertTab( TQWidget *child, TQTab* tab, int index)
-{
- tab->enabled = TRUE;
- int id = d->tabs->insertTab( tab, index );
- d->stack->addWidget( child, id );
- if ( d->stack->frameStyle() != ( TQFrame::TabWidgetPanel | TQFrame::Raised ) )
- d->stack->setFrameStyle( TQFrame::TabWidgetPanel | TQFrame::Raised );
- setUpLayout();
-}
-
-
-/*!
- Defines a new \a label for page \a{w}'s tab.
-*/
-void TQTabWidget::changeTab( TQWidget *w, const TQString &label)
-{
- int id = d->stack->id( w );
- if ( id < 0 )
- return;
- TQTab* t = d->tabs->tab( id );
- if ( !t )
- return;
- // this will update the accelerators
- t->setText( label );
-
- d->tabs->layoutTabs();
- d->tabs->update();
- setUpLayout();
-}
-
-/*!
- \overload
-
- Defines a new \a iconset and a new \a label for page \a{w}'s tab.
-*/
-void TQTabWidget::changeTab( TQWidget *w, const TQIconSet& iconset, const TQString &label)
-{
- int id = d->stack->id( w );
- if ( id < 0 )
- return;
- TQTab* t = d->tabs->tab( id );
- if ( !t )
- return;
- if ( t->iconset ) {
- delete t->iconset;
- t->iconset = 0;
- }
- // this will update the accelerators
- t->iconset = new TQIconSet( iconset );
- t->setText( label );
-
- d->tabs->layoutTabs();
- d->tabs->update();
- setUpLayout();
-}
-
-/*!
- Returns TRUE if the page \a w is enabled; otherwise returns FALSE.
-
- \sa setTabEnabled(), TQWidget::isEnabled()
-*/
-
-bool TQTabWidget::isTabEnabled( TQWidget* w ) const
-{
- int id = d->stack->id( w );
- if ( id >= 0 )
- return w->isEnabled();
- else
- return FALSE;
-}
-
-/*!
- If \a enable is TRUE, page \a w is enabled; otherwise page \a w is
- disabled. The page's tab is redrawn appropriately.
-
- TQTabWidget uses TQWidget::setEnabled() internally, rather than
- keeping a separate flag.
-
- Note that even a disabled tab/page may be visible. If the page is
- visible already, TQTabWidget will not hide it; if all the pages are
- disabled, TQTabWidget will show one of them.
-
- \sa isTabEnabled(), TQWidget::setEnabled()
-*/
-
-void TQTabWidget::setTabEnabled( TQWidget* w, bool enable)
-{
- int id = d->stack->id( w );
- if ( id >= 0 ) {
- w->setEnabled( enable );
- d->tabs->setTabEnabled( id, enable );
- }
-}
-
-/*!
- Sets widget \a w to be the shown in the specified \a corner of the
- tab widget.
-
- Only the horizontal element of the \a corner will be used.
-
- \sa cornerWidget(), setTabPosition()
-*/
-void TQTabWidget::setCornerWidget( TQWidget * w, TQt::Corner corner )
-{
- if ( !w )
- return;
- if ( (uint)corner & 1 )
- d->rightCornerWidget = w;
- else
- d->leftCornerWidget = w;
-}
-
-/*!
- Returns the widget shown in the \a corner of the tab widget or 0.
-*/
-TQWidget * TQTabWidget::cornerWidget( TQt::Corner corner ) const
-{
- if ( (uint)corner & 1 )
- return d->rightCornerWidget;
- return d->leftCornerWidget;
-}
-
-/*!
- Ensures that page \a w is shown. This is useful mainly for
- accelerators.
-
- \warning Used carelessly, this function can easily surprise or
- confuse the user.
-
- \sa TQTabBar::setCurrentTab()
-*/
-void TQTabWidget::showPage( TQWidget * w)
-{
- int id = d->stack->id( w );
- if ( id >= 0 ) {
- d->stack->raiseWidget( w );
- d->tabs->setCurrentTab( id );
- // ### why overwrite the frame style?
- if ( d->stack->frameStyle() != ( TQFrame::TabWidgetPanel |TQFrame::Raised ) )
- d->stack->setFrameStyle( TQFrame::TabWidgetPanel | TQFrame::Raised );
- }
-}
-
-/*!
- Removes page \a w from this stack of widgets. Does not delete \a
- w.
-
- \sa addTab(), showPage(), TQWidgetStack::removeWidget()
-*/
-void TQTabWidget::removePage( TQWidget * w )
-{
- int id = d->stack->id( w );
- if ( id >= 0 ) {
- int oldId = d->stack->id(currentPage());
- bool fixCurrentTab = oldId == id;
- //switches to the next enabled tab
- d->tabs->setTabEnabled( id, FALSE );
- //if no next enabled page we fix the current page
- fixCurrentTab = fixCurrentTab && oldId == d->stack->id(currentPage());
-
- d->stack->removeWidget( w );
- d->tabs->removeTab( d->tabs->tab(id) );
- if ( fixCurrentTab )
- showTab( d->tabs->currentTab() );
- setUpLayout();
-
- if ( d->tabs->count() == 0 )
- d->stack->setFrameStyle( TQFrame::NoFrame );
- }
-}
-
-/*!
- Returns the label text for the tab on page \a w.
-*/
-
-TQString TQTabWidget::tabLabel( TQWidget * w ) const
-{
- TQTab * t = d->tabs->tab( d->stack->id( w ) );
- return t ? t->label : TQString::null;
-}
-
-/*!
- Sets the tab label for page \a w to \a l
-*/
-
-void TQTabWidget::setTabLabel( TQWidget * w, const TQString &l )
-{
- TQTab * t = d->tabs->tab( d->stack->id( w ) );
- if ( t )
- t->label = l;
- d->tabs->layoutTabs();
- d->tabs->update();
- setUpLayout();
-}
-
-/*!
- Returns a pointer to the page currently being displayed by the tab
- dialog. The tab dialog does its best to make sure that this value
- is never 0 (but if you try hard enough, it can be).
-*/
-
-TQWidget * TQTabWidget::currentPage() const
-{
- return page( currentPageIndex() );
-}
-
-/*!
- \property TQTabWidget::autoMask
- \brief whether the tab widget is automatically masked
-
- \sa TQWidget::setAutoMask()
-*/
-
-/*!
- \property TQTabWidget::currentPage
- \brief the index position of the current tab page
-
- \sa TQTabBar::currentTab()
-*/
-
-int TQTabWidget::currentPageIndex() const
-{
- return d->tabs->indexOf( d->tabs->currentTab() );
-}
-
-void TQTabWidget::setCurrentPage( int index )
-{
- d->tabs->setCurrentTab( d->tabs->tabAt( index ) );
- showTab( d->tabs->currentTab() );
-}
-
-
-/*!
- Returns the index position of page \a w, or -1 if the widget
- cannot be found.
-*/
-int TQTabWidget::indexOf( TQWidget* w ) const
-{
- return d->tabs->indexOf( d->stack->id( w ) );
-}
-
-
-/*!
- \reimp
-*/
-void TQTabWidget::resizeEvent( TQResizeEvent *e )
-{
- TQWidget::resizeEvent( e );
- setUpLayout();
-}
-
-/*!
- Replaces the dialog's TQTabBar heading with the tab bar \a tb. Note
- that this must be called \e before any tabs have been added, or
- the behavior is undefined.
-
- \sa tabBar()
-*/
-void TQTabWidget::setTabBar( TQTabBar* tb)
-{
- if ( tb->parentWidget() != this )
- tb->reparent( this, TQPoint(0,0), TRUE );
- delete d->tabs;
- d->tabs = tb;
- setFocusProxy( d->tabs );
- connect( d->tabs, TQT_SIGNAL(selected(int)),
- this, TQT_SLOT(showTab(int)) );
- setUpLayout();
-}
-
-
-/*!
- Returns the current TQTabBar.
-
- \sa setTabBar()
-*/
-TQTabBar* TQTabWidget::tabBar() const
-{
- return d->tabs;
-}
-
-/*!
- Ensures that the selected tab's page is visible and appropriately
- sized.
-*/
-
-void TQTabWidget::showTab( int i )
-{
- if ( d->stack->widget( i ) ) {
- d->stack->raiseWidget( i );
- emit selected( d->tabs->tab( i )->label );
- emit currentChanged( d->stack->widget( i ) );
- }
-}
-
-/*
- Set up the tqlayout.
-*/
-void TQTabWidget::setUpLayout( bool onlyCheck )
-{
- if ( onlyCheck && !d->dirty )
- return; // nothing to do
-
- if ( !isVisible() ) {
- d->dirty = TRUE;
- return; // we'll do it later
- }
-
- TQSize t( 0, d->stack->frameWidth() );
- if ( d->tabs->isVisibleTo(this) )
- t = d->tabs->tqsizeHint();
- int lcw = 0;
- if ( d->leftCornerWidget && d->leftCornerWidget->isVisible() ) {
- TQSize sz = d->leftCornerWidget->tqsizeHint();
- d->leftCornerWidget->resize(sz);
- lcw = sz.width();
- if ( t.height() > lcw )
- lcw = t.height();
- }
- int rcw = 0;
- if ( d->rightCornerWidget && d->rightCornerWidget->isVisible() ) {
- TQSize sz = d->rightCornerWidget->tqsizeHint();
- d->rightCornerWidget->resize(sz);
- rcw = sz.width();
- if ( t.height() > rcw )
- rcw = t.height();
- }
- int tw = width() - lcw - rcw;
- if ( t.width() > tw )
- t.setWidth( tw );
- int lw = d->stack->lineWidth();
- bool reverse = TQApplication::reverseLayout();
- int tabx, taby, stacky, exty, exth, overlap;
-
- exth = tqstyle().tqpixelMetric( TQStyle::PM_TabBarBaseHeight, this );
- overlap = tqstyle().tqpixelMetric( TQStyle::PM_TabBarBaseOverlap, this );
-
- if ( d->pos == Bottom ) {
- taby = height() - t.height() - lw;
- stacky = 0;
- exty = taby - (exth - overlap);
- } else { // Top
- taby = 0;
- stacky = t.height()-lw + (exth - overlap);
- exty = taby + t.height() - overlap;
- }
-
- int lhs = (TQMAX( 0, lw - 2 ) + lcw);
- int tqalignment = tqstyle().tqstyleHint( TQStyle::SH_TabBar_Alignment, this );
- if ( tqalignment == Qt::AlignHCenter && t.width() < width() )
- tabx = lhs + ((width()-(lcw+rcw))/2 - t.width()/2);
- else if(reverse || tqalignment == Qt::AlignRight)
- tabx = TQMIN( width() - t.width(), width() - t.width() - lw + 2 ) - lcw;
- else
- tabx = lhs;
-
- d->tabs->setGeometry( tabx, taby, t.width(), t.height() );
- d->tabBase->setGeometry( 0, exty, width(), exth );
- if ( exth == 0 )
- d->tabBase->hide();
- else
- d->tabBase->show();
-
- d->stack->setGeometry( 0, stacky, width(), height() - (exth-overlap) -
- t.height()+TQMAX(0, lw-2));
-
- d->dirty = FALSE;
-
- // move cornerwidgets
- if ( d->leftCornerWidget ) {
- int y = ( t.height() / 2 ) - ( d->leftCornerWidget->height() / 2 );
- int x = ( reverse ? width() - lcw + y : y );
- d->leftCornerWidget->move( x, y + taby );
- }
- if ( d->rightCornerWidget ) {
- int y = ( t.height() / 2 ) - ( d->rightCornerWidget->height() / 2 );
- int x = ( reverse ? y : width() - rcw + y );
- d->rightCornerWidget->move( x, y + taby );
- }
- if ( !onlyCheck )
- update();
- updateGeometry();
- if ( autoMask() )
- updateMask();
-}
-
-/*!
- \reimp
-*/
-TQSize TQTabWidget::tqsizeHint() const
-{
- TQSize lc(0, 0), rc(0, 0);
-
- if (d->leftCornerWidget)
- lc = d->leftCornerWidget->tqsizeHint();
- if(d->rightCornerWidget)
- rc = d->rightCornerWidget->tqsizeHint();
- if ( !d->dirty ) {
- TQTabWidget *that = (TQTabWidget*)this;
- that->setUpLayout( TRUE );
- }
- TQSize s( d->stack->tqsizeHint() );
- TQSize t( d->tabs->tqsizeHint() );
- if(!tqstyle().tqstyleHint(TQStyle::SH_TabBar_PreferNoArrows, d->tabs))
- t = t.boundedTo( TQSize(200,200) );
- else
- t = t.boundedTo( TQApplication::desktop()->size() );
-
- TQSize sz( TQMAX( s.width(), t.width() + rc.width() + lc.width() ),
- s.height() + (TQMAX( rc.height(), TQMAX(lc.height(), t.height()))) + ( d->tabBase->isVisible() ? d->tabBase->height() : 0 ) );
- return tqstyle().tqsizeFromContents(TQStyle::CT_TabWidget, this, sz).expandedTo(TQApplication::globalStrut());
-}
-
-
-/*!
- \reimp
-
- Returns a suitable minimum size for the tab widget.
-*/
-TQSize TQTabWidget::tqminimumSizeHint() const
-{
- TQSize lc(0, 0), rc(0, 0);
-
- if(d->leftCornerWidget)
- lc = d->leftCornerWidget->tqminimumSizeHint();
- if(d->rightCornerWidget)
- rc = d->rightCornerWidget->tqminimumSizeHint();
- if ( !d->dirty ) {
- TQTabWidget *that = (TQTabWidget*)this;
- that->setUpLayout( TRUE );
- }
- TQSize s( d->stack->tqminimumSizeHint() );
- TQSize t( d->tabs->tqminimumSizeHint() );
-
- TQSize sz( TQMAX( s.width(), t.width() + rc.width() + lc.width() ),
- s.height() + (TQMAX( rc.height(), TQMAX(lc.height(), t.height()))) + ( d->tabBase->isVisible() ? d->tabBase->height() : 0 ) );
- return tqstyle().tqsizeFromContents(TQStyle::CT_TabWidget, this, sz).expandedTo(TQApplication::globalStrut());
-}
-
-/*!
- \reimp
- */
-void TQTabWidget::showEvent( TQShowEvent * )
-{
- setUpLayout();
-}
-
-
-/*!
- \property TQTabWidget::tabPosition
- \brief the position of the tabs in this tab widget
-
- Possible values for this property are \c TQTabWidget::Top and \c
- TQTabWidget::Bottom.
-
- \sa TabPosition
-*/
-TQTabWidget::TabPosition TQTabWidget::tabPosition() const
-{
- return d->pos;
-}
-
-void TQTabWidget::setTabPosition( TabPosition pos)
-{
- if (d->pos == pos)
- return;
- d->pos = pos;
- if (d->tabs->tqshape() == TQTabBar::TriangularAbove || d->tabs->tqshape() == TQTabBar::TriangularBelow ) {
- if ( pos == Bottom )
- d->tabs->setShape( TQTabBar::TriangularBelow );
- else
- d->tabs->setShape( TQTabBar::TriangularAbove );
- }
- else {
- if ( pos == Bottom )
- d->tabs->setShape( TQTabBar::RoundedBelow );
- else
- d->tabs->setShape( TQTabBar::RoundedAbove );
- }
- d->tabs->layoutTabs();
- setUpLayout();
-}
-
-/*!
- \property TQTabWidget::tabShape
- \brief the tqshape of the tabs in this tab widget
-
- Possible values for this property are \c TQTabWidget::Rounded
- (default) or \c TQTabWidget::Triangular.
-
- \sa TabShape
-*/
-
-TQTabWidget::TabShape TQTabWidget::tabShape() const
-{
- return d->tqshape;
-}
-
-void TQTabWidget::setTabShape( TabShape s )
-{
- if ( d->tqshape == s )
- return;
- d->tqshape = s;
- if ( d->pos == Top ) {
- if ( s == Rounded )
- d->tabs->setShape( TQTabBar::RoundedAbove );
- else
- d->tabs->setShape( TQTabBar::TriangularAbove );
- } else {
- if ( s == Rounded )
- d->tabs->setShape( TQTabBar::RoundedBelow );
- else
- d->tabs->setShape( TQTabBar::TriangularBelow );
- }
- d->tabs->layoutTabs();
- setUpLayout();
-}
-
-
-/*!
- \property TQTabWidget::margin
- \brief the margin in this tab widget
-
- The margin is the distance between the innermost pixel of the
- frame and the outermost pixel of the pages.
-*/
-int TQTabWidget::margin() const
-{
- return d->stack->margin();
-}
-
-void TQTabWidget::setMargin( int w )
-{
- d->stack->setMargin( w );
- setUpLayout();
-}
-
-
-/*!
- \reimp
- */
-void TQTabWidget::styleChange( TQStyle& old )
-{
- TQWidget::styleChange( old );
- setUpLayout();
-}
-
-
-/*!
- \reimp
- */
-void TQTabWidget::updateMask()
-{
- if ( !autoMask() )
- return;
-
- TQRect r;
- TQRegion reg( r );
- reg += TQRegion( d->tabs->tqgeometry() );
- reg += TQRegion( d->stack->tqgeometry() );
- setMask( reg );
-}
-
-
-/*!
- \reimp
- */
-bool TQTabWidget::eventFilter( TQObject *o, TQEvent * e)
-{
- if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(this) ) {
- if ( e->type() == TQEvent::LanguageChange || e->type() == TQEvent::LayoutHint ) {
- d->dirty = TRUE;
- setUpLayout();
- updateGeometry();
- } else if ( e->type() == TQEvent::KeyPress ) {
- TQKeyEvent *ke = (TQKeyEvent*) e;
- if ( ( ke->key() == TQt::Key_Tab || ke->key() == TQt::Key_Backtab ) &&
- count() > 1 &&
- ke->state() & ControlButton ) {
- int page = currentPageIndex();
- if ( ke->key() == TQt::Key_Backtab || ke->state() & ShiftButton ) {
- page--;
- if ( page < 0 )
- page = count() - 1;
- } else {
- page++;
- if ( page >= count() )
- page = 0;
- }
- setCurrentPage( page );
- if ( !tqApp->tqfocusWidget() )
- d->tabs->setFocus();
- return TRUE;
- }
- }
-
- } else if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(d->stack) ) {
- if ( e->type() == TQEvent::ChildRemoved
- && ( (TQChildEvent*)e )->child()->isWidgetType() ) {
- removePage( (TQWidget*) ( (TQChildEvent*)e )->child() );
- return TRUE;
- } else if ( e->type() == TQEvent::LayoutHint ) {
- updateGeometry();
- }
- }
- return FALSE;
-}
-
-/*!
- Returns the tab page at index position \a index or 0 if the \a
- index is out of range.
-*/
-TQWidget *TQTabWidget::page( int index ) const
-{
- TQTab *t = d->tabs->tabAt(index);
- if ( t )
- return d->stack->widget( t->id );
- // else
- return 0;
-}
-
-/*!
- Returns the label of the tab at index position \a index or
- TQString::null if the \a index is out of range.
-*/
-TQString TQTabWidget::label( int index ) const
-{
- TQTab *t = d->tabs->tabAt( index );
- if ( t )
- return t->label;
- // else
- return TQString::null;
-}
-
-/*!
- \property TQTabWidget::count
- \brief the number of tabs in the tab bar
-*/
-int TQTabWidget::count() const
-{
- return d->tabs->count();
-}
-
-/*!
- Returns the iconset of page \a w or a \link TQIconSet::TQIconSet()
- null iconset\endlink if \a w is not a tab page or does not have an
- iconset.
-*/
-TQIconSet TQTabWidget::tabIconSet( TQWidget * w ) const
-{
- int id = d->stack->id( w );
- if ( id < 0 )
- return TQIconSet();
- TQTab* t = d->tabs->tab( id );
- if ( !t )
- return TQIconSet();
- if ( t->iconset )
- return TQIconSet( *t->iconset );
- else
- return TQIconSet();
-}
-
-/*!
- Sets the iconset for page \a w to \a iconset.
-*/
-void TQTabWidget::setTabIconSet( TQWidget * w, const TQIconSet & iconset )
-{
- int id = d->stack->id( w );
- if ( id < 0 )
- return;
- TQTab* t = d->tabs->tab( id );
- if ( !t )
- return;
- if ( t->iconset )
- delete t->iconset;
- t->iconset = new TQIconSet( iconset );
-
- d->tabs->layoutTabs();
- d->tabs->update();
- setUpLayout();
-}
-
-/*!
- Sets the tab tool tip for page \a w to \a tip.
-
- \sa removeTabToolTip(), tabToolTip()
-*/
-void TQTabWidget::setTabToolTip( TQWidget * w, const TQString & tip )
-{
- int index = d->tabs->indexOf( d->stack->id( w ) );
- if ( index < 0 )
- return;
- d->tabs->setToolTip( index, tip );
-}
-
-/*!
- Returns the tab tool tip for page \a w or TQString::null if no tool
- tip has been set.
-
- \sa setTabToolTip(), removeTabToolTip()
-*/
-TQString TQTabWidget::tabToolTip( TQWidget * w ) const
-{
- int index = d->tabs->indexOf( d->stack->id( w ) );
- if ( index < 0 )
- return TQString();
- return d->tabs->toolTip( index );
-}
-
-/*!
- Removes the tab tool tip for page \a w. If the page does not have
- a tip, nothing happens.
-
- \sa setTabToolTip(), tabToolTip()
-*/
-void TQTabWidget::removeTabToolTip( TQWidget * w )
-{
- int index = d->tabs->indexOf( d->stack->id( w ) );
- if ( index < 0 )
- return;
- d->tabs->removeToolTip( index );
-}
-
-#endif