diff options
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqabstractlayout.cpp')
-rw-r--r-- | tqtinterface/qt4/src/kernel/tqabstractlayout.cpp | 2108 |
1 files changed, 0 insertions, 2108 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqabstractlayout.cpp b/tqtinterface/qt4/src/kernel/tqabstractlayout.cpp deleted file mode 100644 index 6be7f97..0000000 --- a/tqtinterface/qt4/src/kernel/tqabstractlayout.cpp +++ /dev/null @@ -1,2108 +0,0 @@ -/**************************************************************************** -** -** Implementation of the abstract tqlayout base class -** -** Created : 960416 -** -** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. -** -** This file is part of the kernel 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 "tqlayout.h" - -#ifndef TQT_NO_LAYOUT -#include "tqapplication.h" -#include "tqlayoutengine_p.h" -#include "tqmenubar.h" -#include "tqtoolbar.h" - -#ifdef USE_QT4 - -/*! - Sets the value returned by supportsMargin(). If \a b is TRUE, - margin() handling is implemented by the subclass. If \a b is - FALSE (the default), TQLayout will add margin() around top-level - layouts. - - If \a b is TRUE, margin handling needs to be implemented in - setGeometry(), tqmaximumSize(), tqminimumSize(), tqsizeHint() and - heightForWidth(). - - \sa supportsMargin() -*/ -void TQLayout::setSupportsMargin( bool b ) -{ - printf("[FIXME] void TQLayout::setSupportsMargin( bool b ) unimplemented!\n\r"); -} - -/*! - Removes and deletes all items in this tqlayout. -*/ -void TQLayout::deleteAllItems() -{ - TQLayoutIterator it = iterator(); - TQLayoutItem *l; - while ( (l = it.takeCurrent()) ) - delete l; -} - -#else // USE_QT4 - -static int menuBarHeightForWidth( TQMenuBar *menubar, int w ) -{ -#ifndef TQT_NO_MENUBAR - if ( menubar && !menubar->isHidden() && !menubar->isTopLevel() ) - return menubar->heightForWidth( TQMAX(w, menubar->minimumWidth()) ); - else -#endif - return 0; -} - -#endif // USE_QT4 - -/*! - \class TQLayoutItem - \ingroup appearance - \ingroup geomanagement - \brief The TQLayoutItem class provides an abstract item that a - TQLayout manipulates. - - This is used by custom layouts. - - Pure virtual functions are provided to return information about - the tqlayout, including, tqsizeHint(), tqminimumSize(), tqmaximumSize() - and expandingDirections(). - - The tqlayout's tqgeometry can be set and retrieved with setGeometry() - and tqgeometry(), and its tqalignment with tqsetAlignment() and - tqalignment(). - - isEmpty() returns whether the tqlayout is empty. iterator() returns - an iterator for the tqlayout's tqchildren. If the concrete item is a - TQWidget, it can be retrieved using widget(). Similarly for - tqlayout() and tqspacerItem(). - - \sa TQLayout -*/ - -/*! - \class TQSpacerItem - \ingroup appearance - \ingroup geomanagement - \brief The TQSpacerItem class provides blank space in a tqlayout. - - This class is used by custom layouts. - - \sa TQLayout TQLayout::tqspacerItem() -*/ - -/*! - \class TQWidgetItem - \ingroup appearance - \ingroup geomanagement - \brief The TQWidgetItem class is a tqlayout item that represents a widget. - - This is used by custom layouts. - - \sa TQLayout TQLayout::widget() -*/ - -/*! - \fn TQLayoutItem::TQLayoutItem( int tqalignment ) - - Constructs a tqlayout item with an \a tqalignment that is a bitwise OR - of the \l{TQt::AlignmentFlags}. Not all subclasses support - tqalignment. -*/ - -/*! - \fn int TQLayoutItem::tqalignment() const - - Returns the tqalignment of this item. -*/ - -/*! - Sets the tqalignment of this item to \a a, which is a bitwise OR of - the \l{TQt::AlignmentFlags}. Not all subclasses support tqalignment. -*/ -// void TQLayoutItem::tqsetAlignment( int a ) -// { -// align = (Qt::AlignmentFlag)a; -// } - -/*! - \fn TQSize TQLayoutItem::tqmaximumSize() const - - Implemented in subclasses to return the maximum size of this item. -*/ - -/*! - \fn TQSize TQLayoutItem::tqminimumSize() const - - Implemented in subclasses to return the minimum size of this item. -*/ - -/*! - \fn TQSize TQLayoutItem::tqsizeHint() const - - Implemented in subclasses to return the preferred size of this item. -*/ - -/*! - \fn TQ_SPExpandData TQLayoutItem::expandingDirections() const - - Implemented in subclasses to return the direction(s) this item - "wants" to expand in (if any). -*/ - -/*! - \fn void TQLayoutItem::setGeometry( const TQRect &r ) - - Implemented in subclasses to set this item's tqgeometry to \a r. -*/ - -/*! - \fn TQRect TQLayoutItem::tqgeometry() const - - Returns the rectangle covered by this tqlayout item. -*/ - -/*! - \fn virtual bool TQLayoutItem::isEmpty() const - - Implemented in subclasses to return whether this item is empty, - i.e. whether it contains any widgets. -*/ - -/*! - \fn TQSpacerItem::TQSpacerItem( int w, int h, TQSizePolicy::SizeType hData, TQSizePolicy::SizeType vData ) - - Constructs a spacer item with preferred width \a w, preferred - height \a h, horizontal size policy \a hData and vertical size - policy \a vData. - - The default values provide a gap that is able to stretch if - nothing else wants the space. -*/ - -#ifdef USE_QT4 - -#else // USE_QT4 - -/*! - Changes this spacer item to have preferred width \a w, preferred - height \a h, horizontal size policy \a hData and vertical size - policy \a vData. - - The default values provide a gap that is able to stretch if - nothing else wants the space. -*/ -void TQSpacerItem::changeSize( int w, int h, TQSizePolicy::SizeType hData, - TQSizePolicy::SizeType vData ) -{ - width = w; - height = h; - sizeP = TQSizePolicy( hData, vData ); -} - -#endif // USE_QT4 - -/*! - \fn TQWidgetItem::TQWidgetItem (TQWidget * w) - - Creates an item containing widget \a w. -*/ - -/*! - Destroys the TQLayoutItem. -*/ -// TQLayoutItem::~TQLayoutItem() -// { -// } - -/*! - Invalidates any cached information in this tqlayout item. -*/ -// void TQLayoutItem::tqinvalidate() -// { -// } - -/*! - If this item is a TQLayout, it is returned as a TQLayout; otherwise - 0 is returned. This function provides type-safe casting. -*/ -// TQLayout * TQLayoutItem::tqlayout() -// { -// return 0; -// } - -/*! - If this item is a TQSpacerItem, it is returned as a TQSpacerItem; - otherwise 0 is returned. This function provides type-safe casting. -*/ -// TQSpacerItem * TQLayoutItem::tqspacerItem() -// { -// return 0; -// } - -/*! - \reimp -*/ -// TQLayout * TQLayout::tqlayout() -// { -// return this; -// } - -/*! - \reimp -*/ -TQSpacerItem * TQSpacerItem::tqspacerItem() -{ - return this; -} - -/*! - If this item is a TQWidget, it is returned as a TQWidget; otherwise - 0 is returned. This function provides type-safe casting. -*/ -// TQWidget * TQLayoutItem::widget() -// { -// return 0; -// } - -/*! - Returns the widget managed by this item. -*/ -TQWidget * TQWidgetItem::widget() -{ - return wid; -} - -/*! - Returns TRUE if this tqlayout's preferred height depends on its - width; otherwise returns FALSE. The default implementation returns - FALSE. - - Reimplement this function in tqlayout managers that support height - for width. - - \sa heightForWidth(), TQWidget::heightForWidth() -*/ -// bool TQLayoutItem::hasHeightForWidth() const -// { -// return FALSE; -// } - -/*! - Returns an iterator over this item's TQLayoutItem tqchildren. The - default implementation returns an empty iterator. - - Reimplement this function in subclasses that can have tqchildren. -*/ -// TQLayoutIterator TQLayoutItem::iterator() -// { -// return TQLayoutIterator( 0 ); -// } - -/*! - Returns the preferred height for this tqlayout item, given the width - \a w. - - The default implementation returns -1, indicating that the - preferred height is independent of the width of the item. Using - the function hasHeightForWidth() will typically be much faster - than calling this function and testing for -1. - - Reimplement this function in tqlayout managers that support height - for width. A typical implementation will look like this: - \code - int MyLayout::heightForWidth( int w ) const - { - if ( cache_dirty || cached_width != w ) { - // not all C++ compilers support "mutable" - MyLayout *that = (MyLayout*)this; - int h = calculateHeightForWidth( w ); - that->cached_hfw = h; - return h; - } - return cached_hfw; - } - \endcode - - Caching is strongly recommended; without it tqlayout will take - exponential time. - - \sa hasHeightForWidth() -*/ -// int TQLayoutItem::heightForWidth( int /* w */ ) const -// { -// return -1; -// } - -#ifdef USE_QT4 - -/*! - Stores the spacer item's rect \a r so that it can be returned by - tqgeometry(). -*/ -void TQSpacerItem::setGeometry( const TQRect &r ) -{ - QSpacerItem::setGeometry(r); -} - -#else // USE_QT4 - -/*! - Stores the spacer item's rect \a r so that it can be returned by - tqgeometry(). -*/ -void TQSpacerItem::setGeometry( const TQRect &r ) -{ - rect = r; -} - -#endif // USE_QT4 - -/*! - Sets the tqgeometry of this item's widget to be contained within - rect \a r, taking tqalignment and maximum size into account. -*/ -void TQWidgetItem::setGeometry( const TQRect &r ) -{ - TQSize s = r.size().boundedTo( tqSmartMaxSize( this ) ); - int x = r.x(); - int y = r.y(); - if ( align & (TQt::AlignHorizontal_Mask | TQt::AlignVertical_Mask) ) { - TQSize pref = wid->tqsizeHint().expandedTo( wid->tqminimumSize() ); //### - if ( align & TQt::AlignHorizontal_Mask ) - s.setWidth( TQMIN( s.width(), pref.width() ) ); - if ( align & TQt::AlignVertical_Mask ) { - if ( hasHeightForWidth() ) - s.setHeight( TQMIN( s.height(), heightForWidth(s.width()) ) ); - else - s.setHeight( TQMIN( s.height(), pref.height() ) ); - } - } - int alignHoriz = TQApplication::horizontalAlignment( align ); - if ( alignHoriz & TQt::AlignRight ) - x = x + ( r.width() - s.width() ); - else if ( !(alignHoriz & TQt::AlignLeft) ) - x = x + ( r.width() - s.width() ) / 2; - - if ( align & TQt::AlignBottom ) - y = y + ( r.height() - s.height() ); - else if ( !(align & TQt::AlignTop) ) - y = y + ( r.height() - s.height() ) / 2; - - if ( !isEmpty() ) { - wid->setGeometry( x, y, s.width(), s.height() ); - } -} - -#ifdef USE_QT4 - -/*! - \reimp -*/ -TQRect TQSpacerItem::tqgeometry() const -{ - return QSpacerItem::geometry(); -} - -#else // USE_QT4 - -/*! - \reimp -*/ -TQRect TQSpacerItem::tqgeometry() const -{ - return rect; -} - -#endif // USE_QT4 - -/*! - \reimp -*/ -TQRect TQWidgetItem::tqgeometry() const -{ - return wid->tqgeometry(); -} - -#ifdef USE_QT4 - -#else // USE_QT4 - -/*! - \reimp -*/ -TQRect TQLayout::tqgeometry() const -{ - return rect; -} - -#endif // USE_QT4 - -/*! - \reimp -*/ -bool TQWidgetItem::hasHeightForWidth() const -{ - if ( isEmpty() ) - return FALSE; - if ( wid->tqlayout() ) - return wid->tqlayout()->hasHeightForWidth(); - return wid->sizePolicy().hasHeightForWidth(); -} - -/*! - \reimp -*/ -int TQWidgetItem::heightForWidth( int w ) const -{ - if ( isEmpty() ) - return -1; - int hfw; - if ( wid->tqlayout() ) - hfw = wid->tqlayout()->totalHeightForWidth( w ); - else - hfw = wid->heightForWidth( w ); - - if ( hfw > wid->maximumHeight() ) - hfw = wid->maximumHeight(); - if ( hfw < wid->minimumHeight() ) - hfw = wid->minimumHeight(); - if ( hfw < 1 ) - hfw = 1; - return hfw; -} - -#ifdef USE_QT4 - -/*! - Returns the direction in which this spacer item will expand. - - \sa TQ_SPExpandData -*/ -TQ_SPExpandData TQSpacerItem::expandingDirections() const -{ - return QSpacerItem::expandingDirections(); -} - -#else // USE_QT4 - -/*! - Returns the direction in which this spacer item will expand. - - \sa TQ_SPExpandData -*/ -TQ_SPExpandData TQSpacerItem::expandingDirections() const -{ - return sizeP.expandingDirections(); -} - -#endif - -/*! - Returns whether this item's widget can make use of more space than - tqsizeHint(). A value of \c Vertical or \c Horizontal means that it wants - to grow in only one dimension, whereas \c BothDirections means that - it wants to grow in both dimensions and \c NoDirection means that - it doesn't want to grow at all. -*/ -TQ_SPExpandData TQWidgetItem::expandingDirections() const -{ - if ( isEmpty() ) - return (TQ_SPExpandData)TQSizePolicy::NoDirection; - - int e = TQT_TQSIZEPOLICY_OBJECT(wid->sizePolicy()).expandingDirections(); - /* - If the tqlayout is expanding, we make the widget expanding, even if - its own size policy isn't expanding. This behavior should be - reconsidered in TQt 4.0. (###) - */ -#ifdef USE_QT4 - if ( wid->layout() ) { - if ( TQT_TQSIZEPOLICY_OBJECT(wid->sizePolicy()).mayGrowHorizontally() - && (wid->layout()->expandingDirections() & TQSizePolicy::Horizontally) ) - e |= TQSizePolicy::Horizontally; - if ( TQT_TQSIZEPOLICY_OBJECT(wid->sizePolicy()).mayGrowVertically() - && (wid->layout()->expandingDirections() & TQSizePolicy::Vertically) ) - e |= TQSizePolicy::Vertically; - } -#else // USE_QT4 - if ( wid->tqlayout() ) { - if ( TQT_TQSIZEPOLICY_OBJECT(wid->sizePolicy()).mayGrowHorizontally() - && (wid->tqlayout()->expandingDirections() & TQSizePolicy::Horizontally) ) - e |= TQSizePolicy::Horizontally; - if ( TQT_TQSIZEPOLICY_OBJECT(wid->sizePolicy()).mayGrowVertically() - && (wid->tqlayout()->expandingDirections() & TQSizePolicy::Vertically) ) - e |= TQSizePolicy::Vertically; - } -#endif // USE_QT4 - - if ( align & TQt::AlignHorizontal_Mask ) - e &= ~TQSizePolicy::Horizontally; - if ( align & TQt::AlignVertical_Mask) - e &= ~TQSizePolicy::Vertically; - -// [FIXME] -// For some reason, the above (commented out) code causes a weird crash that currupts the stack or heap, making debugging extremely difficult -// printf("[WARNING] TQ_SPExpandData TQWidgetItem::expandingDirections() const partially implemented\n\r"); - - return (TQ_SPExpandData)e; -} - -#ifdef USE_QT4 - -/*! - Returns the minimum size of this spacer item. -*/ -TQSize TQSpacerItem::tqminimumSize() const -{ - - return QSpacerItem::minimumSize(); -} - -#else // USE_QT4 - -/*! - Returns the minimum size of this spacer item. -*/ -TQSize TQSpacerItem::tqminimumSize() const -{ - return TQSize( sizeP.mayShrinkHorizontally() ? 0 : width, - sizeP.mayShrinkVertically() ? 0 : height ); -} - -#endif // USE_QT4 - -/*! - Returns the minimum size of this item. -*/ -TQSize TQWidgetItem::tqminimumSize() const -{ - if ( isEmpty() ) - return TQSize( 0, 0 ); - return tqSmartMinSize( this ); -} - -#ifdef USE_QT4 - -/*! - Returns the maximum size of this spacer item. -*/ -TQSize TQSpacerItem::tqmaximumSize() const -{ - return QSpacerItem::maximumSize(); -} - -#else // USE_QT4 - -/*! - Returns the maximum size of this spacer item. -*/ -TQSize TQSpacerItem::tqmaximumSize() const -{ - return TQSize( sizeP.mayGrowHorizontally() ? TQLAYOUTSIZE_MAX : width, - sizeP.mayGrowVertically() ? TQLAYOUTSIZE_MAX : height ); -} - -#endif // USE_QT4 - -/*! - Returns the maximum size of this item. -*/ -TQSize TQWidgetItem::tqmaximumSize() const -{ - if ( isEmpty() ) { - return TQSize( 0, 0 ); - } else { - return tqSmartMaxSize( this, align ); - } -} - -#ifdef USE_QT4 - -/*! - Returns the preferred size of this spacer item. -*/ -TQSize TQSpacerItem::tqsizeHint() const -{ - return QSpacerItem::sizeHint(); -} - - -#else // USE_QT4 - -/*! - Returns the preferred size of this spacer item. -*/ -TQSize TQSpacerItem::tqsizeHint() const -{ - return TQSize( width, height ); -} - -#endif - -/*! - Returns the preferred size of this item. -*/ -TQSize TQWidgetItem::tqsizeHint() const -{ - TQSize s; - if ( isEmpty() ) { - s = TQSize( 0, 0 ); - } else { - s = wid->tqsizeHint(); - if ( TQT_TQSIZEPOLICY_OBJECT(wid->sizePolicy()).horData() == TQSizePolicy::Ignored ) - s.setWidth( 1 ); - if ( TQT_TQSIZEPOLICY_OBJECT(wid->sizePolicy()).verData() == TQSizePolicy::Ignored ) - s.setHeight( 1 ); - s = s.boundedTo( wid->tqmaximumSize() ) - .expandedTo( wid->tqminimumSize() ).expandedTo( TQSize(1, 1) ); - } - return s; -} - -/*! - Returns TRUE because a spacer item never contains widgets. -*/ -bool TQSpacerItem::isEmpty() const -{ - return TRUE; -} - -/*! - Returns TRUE if the widget has been hidden; otherwise returns - FALSE. -*/ -bool TQWidgetItem::isEmpty() const -{ - return wid->isHidden() || wid->isTopLevel(); -} - -#ifdef USE_QT4 - -#else // USE_QT4 - -/*! - \class TQLayout - \brief The TQLayout class is the base class of tqgeometry managers. - - \ingroup appearance - \ingroup geomanagement - - This is an abstract base class inherited by the concrete classes, - TQBoxLayout and TQGridLayout. - - For users of TQLayout subclasses or of TQMainWindow there is seldom - any need to use the basic functions provided by TQLayout, such as - \l setResizeMode() or setMenuBar(). See the \link tqlayout.html tqlayout - overview page \endlink for more information. - - To make your own tqlayout manager, subclass TQGLayoutIterator and - implement the functions addItem(), tqsizeHint(), setGeometry(), and - iterator(). You should also implement tqminimumSize() to ensure your - tqlayout isn't resized to zero size if there is too little space. To - support tqchildren whose heights depend on their widths, implement - hasHeightForWidth() and heightForWidth(). See the \link - customtqlayout.html custom tqlayout page \endlink for an in-depth - description. - - Geometry management stops when the tqlayout manager is deleted. -*/ - -/*! - Constructs a new top-level TQLayout called \a name, with main - widget \a parent. \a parent may not be 0. - - The \a margin is the number of pixels between the edge of the - widget and the managed tqchildren. The \a spacing sets the value of - spacing(), which gives the spacing between the managed widgets. If - \a spacing is -1 (the default), spacing is set to the value of \a - margin. - - There can be only one top-level tqlayout for a widget. It is - returned by TQWidget::tqlayout() -*/ -TQLayout::TQLayout( QWidget *parent, int margin, int spacing, const char *name ) - : TQObject( parent, name ) -{ - init(); - if ( parent ) { - if ( parent->tqlayout() ) { - qWarning( "TQLayout \"%s\" added to %s \"%s\", which already has a" - " tqlayout", TQObject::name(), parent->className(), - parent->name() ); - parent->removeChild( this ); - } else { - topLevel = TRUE; - parent->installEventFilter( this ); - setWidgetLayout( parent, this ); - } - } - outsideBorder = margin; - if ( spacing < 0 ) - insideSpacing = margin; - else - insideSpacing = spacing; -} - -void TQLayout::init() -{ - insideSpacing = 0; - outsideBorder = 0; - topLevel = FALSE; - enabled = TRUE; - autoNewChild = FALSE; - frozen = FALSE; - activated = FALSE; - marginImpl = FALSE; - autoMinimum = FALSE; - autoResizeMode = TRUE; - extraData = 0; -#ifndef TQT_NO_MENUBAR - menubar = 0; -#endif -} - -/*! - Constructs a new child TQLayout called \a name, and places it - inside \a parentLayout by using the default placement defined by - addItem(). - - If \a spacing is -1, this TQLayout inherits \a parentLayout's - spacing(), otherwise the value of \a spacing is used. -*/ -TQLayout::TQLayout( QLayout *parentLayout, int spacing, const char *name ) - : TQObject( parentLayout, name ) - -{ - init(); - insideSpacing = spacing < 0 ? parentLayout->insideSpacing : spacing; - parentLayout->addItem( this ); -} - -/*! - Constructs a new child TQLayout called \a name. If \a spacing is - -1, this TQLayout inherits its parent's spacing(); otherwise the - value of \a spacing is used. - - This tqlayout has to be inserted into another tqlayout before tqgeometry - management will work. -*/ -TQLayout::TQLayout( int spacing, const char *name ) - : TQObject( 0, name ) -{ - init(); - insideSpacing = spacing; -} - -/*! - \fn void TQLayout::addItem( TQLayoutItem *item ) - - Implemented in subclasses to add an \a item. How it is added is - specific to each subclass. - - The ownership of \a item is transferred to the tqlayout, and it's - the tqlayout's responsibility to delete it. -*/ - -/*! - \fn TQLayoutIterator TQLayout::iterator() - - Implemented in subclasses to return an iterator that iterates over - this tqlayout's tqchildren. - - A typical implementation will be: - \code - TQLayoutIterator MyLayout::iterator() - { - TQGLayoutIterator *i = new MyLayoutIterator( internal_data ); - return TQLayoutIterator( i ); - } - \endcode - where MyLayoutIterator is a subclass of TQGLayoutIterator. -*/ - -/*! - \fn void TQLayout::add( TQWidget *w ) - - Adds widget \a w to this tqlayout in a manner specific to the - tqlayout. This function uses addItem(). -*/ - -/*! - \fn TQMenuBar* TQLayout::menuBar () const - - Returns the menu bar set for this tqlayout, or 0 if no menu bar is - set. -*/ - -/*! - \fn bool TQLayout::isTopLevel () const - - Returns TRUE if this tqlayout is a top-level tqlayout, i.e. not a - child of another tqlayout; otherwise returns FALSE. -*/ - -/*! - \property TQLayout::margin - \brief the width of the outside border of the tqlayout - - For some tqlayout classes this property has an effect only on - top-level layouts; TQBoxLayout and TQGridLayout support margins for - child layouts. The default value is 0. - - \sa spacing -*/ - -/*! - \property TQLayout::spacing - \brief the spacing between widgets inside the tqlayout - - The default value is -1, which signifies that the tqlayout's spacing - should not override the widget's spacing. - - \sa margin -*/ -void TQLayout::setMargin( int margin ) -{ - outsideBorder = margin; - tqinvalidate(); - if ( mainWidget() ) { - TQEvent *lh = new TQEvent( TQEvent::LayoutHint ); - TQApplication::postEvent( mainWidget(), lh ); - } -} - -void TQLayout::setSpacing( int spacing ) -{ - insideSpacing = spacing; - if ( spacing >= 0 ) - propagateSpacing( this ); - tqinvalidate(); - if ( mainWidget() ) { - TQEvent *lh = new TQEvent( TQEvent::LayoutHint ); - TQApplication::postEvent( mainWidget(), lh ); - } -} - -/*! - Returns the main widget (parent widget) of this tqlayout, or 0 if - this tqlayout is a sub-tqlayout that is not yet inserted. -*/ -TQWidget *TQLayout::mainWidget() -{ - if ( !topLevel ) { - if ( parent() ) { - TQLayout *parentLayout = ::tqqt_cast<TQLayout*>(parent()); - TQ_ASSERT(parentLayout); - return parentLayout->mainWidget(); - } else { - return 0; - } - } else { - TQ_ASSERT(parent() && parent()->isWidgetType()); - return (TQWidget*)parent(); - } -} - -/*! - Returns TRUE if this tqlayout is empty. The default implementation - returns FALSE. -*/ -bool TQLayout::isEmpty() const -{ - return FALSE; //### should check -} - -/*! - Sets widget \a w's tqlayout to tqlayout \a l. -*/ -void TQLayout::setWidgetLayout( TQWidget *w, TQLayout *l ) -{ - w->setLayout( l ); -} - -/*! - This function is reimplemented in subclasses to perform tqlayout. - - The default implementation maintains the tqgeometry() information - given by rect \a r. Reimplementors must call this function. -*/ -void TQLayout::setGeometry( const TQRect &r ) -{ - rect = r; -} - -/*! - Invalidates cached information. Reimplementations must call this. -*/ -void TQLayout::tqinvalidate() -{ - rect = TQRect(); -} - -static bool removeWidgetRecursively( TQLayoutItem *lay, TQWidget *w ) -{ - bool didSomething = FALSE; - TQLayoutIterator it = lay->iterator(); - TQLayoutItem *child; - while ( (child = it.current()) != 0 ) { - if ( child->widget() == w ) { - it.deleteCurrent(); - lay->tqinvalidate(); // maybe redundant - didSomething = TRUE; - } else if ( removeWidgetRecursively(child, w) ) { - lay->tqinvalidate(); // maybe redundant - didSomething = TRUE; - } else { - ++it; - } - } - return didSomething; -} - -/*! - \reimp - Performs child widget tqlayout when the parent widget is resized. - Also handles removal of widgets and child layouts. \a e is the - event the occurred on object \a o. -*/ -bool TQLayout::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( !enabled ) - return FALSE; - - if ( !o->isWidgetType() ) - return FALSE; - - switch ( e->type() ) { - case TQEvent::Resize: - if ( activated ) { - TQResizeEvent *r = (TQResizeEvent *)e; - int mbh = 0; -#ifndef TQT_NO_MENUBAR - mbh = menuBarHeightForWidth( menubar, r->size().width() ); -#endif - int b = marginImpl ? 0 : outsideBorder; - setGeometry( TQRect( b, mbh + b, r->size().width() - 2 * b, - r->size().height() - mbh - 2 * b ) ); - } else { - activate(); - } - break; - case TQEvent::ChildRemoved: - { - TQChildEvent *c = (TQChildEvent *)e; - if ( c->child()->isWidgetType() ) { - TQWidget *w = (TQWidget *)c->child(); -#ifndef TQT_NO_MENUBAR - if ( w == menubar ) - menubar = 0; -#endif - if ( removeWidgetRecursively( this, w ) ) { - TQEvent *lh = new TQEvent( TQEvent::LayoutHint ); - TQApplication::postEvent( o, lh ); - } - } - } - break; - case TQEvent::ChildInserted: - if ( topLevel && autoNewChild ) { - TQChildEvent *c = (TQChildEvent *)e; - if ( c->child()->isWidgetType() ) { - TQWidget *w = (TQWidget *)c->child(); - if ( !w->isTopLevel() ) { -#if !defined(TQT_NO_MENUBAR) && !defined(TQT_NO_TOOLBAR) - if ( ::tqqt_cast<TQMenuBar*>(w) && !::tqqt_cast<TQToolBar*>(w->parentWidget()) ) - menubar = (TQMenuBar *)w; - else -#endif - addItem( new TQWidgetItem( w ) ); - TQEvent *lh = new TQEvent( TQEvent::LayoutHint ); - TQApplication::postEvent( o, lh ); - } - } - } - break; - case TQEvent::LayoutHint: - activate(); - break; - default: - break; - } - return TQObject::eventFilter( o, e ); -} - -/*! - \reimp -*/ -void TQLayout::childEvent( TQChildEvent *e ) -{ - if ( !enabled ) - return; - - if ( e->type() == TQEvent::ChildRemoved ) { - TQChildEvent *c = (TQChildEvent*)e; - TQLayoutIterator it = iterator(); - TQLayoutItem *item; - while ( (item = it.current() ) ) { - if ( item == (TQLayout*)c->child() ) { - it.takeCurrent(); - tqinvalidate(); - break; - } else { - ++it; - } - } - } -} - -/*! - \internal - Also takes margin() and menu bar into account. -*/ -int TQLayout::totalHeightForWidth( int w ) const -{ - if ( topLevel ) { - TQWidget *mw = (TQWidget*)parent(); - if ( mw && !mw->testWState(WState_Polished) ) { - mw->polish(); - } - } - int b = ( topLevel && !marginImpl ) ? 2 * outsideBorder : 0; - int h = heightForWidth( w - b ) + b; -#ifndef TQT_NO_MENUBAR - h += menuBarHeightForWidth( menubar, w ); -#endif - return h; -} - -/*! - \internal - Also takes margin() and menu bar into account. -*/ -TQSize TQLayout::totalMinimumSize() const -{ - if ( topLevel ) { - TQWidget *mw = (TQWidget*)parent(); - if ( mw && !mw->testWState(WState_Polished) ) - mw->polish(); - } - int b = ( topLevel && !marginImpl ) ? 2 * outsideBorder : 0; - - TQSize s = tqminimumSize(); - int h = b; -#ifndef TQT_NO_MENUBAR - h += menuBarHeightForWidth( menubar, s.width() ); -#endif - return s + TQSize( b, h ); -} - -/*! - \internal - Also takes margin() and menu bar into account. -*/ -TQSize TQLayout::totalSizeHint() const -{ - if ( topLevel ) { - TQWidget *mw = (TQWidget*)parent(); - if ( mw && !mw->testWState(WState_Polished) ) - mw->polish(); - } - int b = ( topLevel && !marginImpl ) ? 2 * outsideBorder : 0; - - TQSize s = tqsizeHint(); - if ( hasHeightForWidth() ) - s.setHeight( heightForWidth(s.width()) ); - int h = b; -#ifndef TQT_NO_MENUBAR - h += menuBarHeightForWidth( menubar, s.width() ); -#endif - return s + TQSize( b, h ); -} - -/*! - \internal - Also takes margin() and menu bar into account. -*/ -TQSize TQLayout::totalMaximumSize() const -{ - if ( topLevel ) { - TQWidget *mw = (TQWidget*)parent(); - if ( mw && !mw->testWState(WState_Polished) ) { - mw->polish(); - } - } - int b = ( topLevel && !marginImpl ) ? 2 * outsideBorder : 0; - - TQSize s = tqmaximumSize(); - int h = b; -#ifndef TQT_NO_MENUBAR - h += menuBarHeightForWidth( menubar, s.width() ); -#endif - - if ( isTopLevel() ) - s = TQSize( TQMIN( s.width() + b, TQLAYOUTSIZE_MAX ), - TQMIN( s.height() + h, TQLAYOUTSIZE_MAX ) ); - return s; -} - -/*! - \internal - Destroys the tqlayout, deleting all child layouts. - Geometry management stops when a top-level tqlayout is deleted. - - The tqlayout classes will probably be fatally confused if you delete - a subtqlayout. -*/ -TQLayout::~TQLayout() -{ - /* - This function may be called during the TQObject destructor, - when the parent no longer is a TQWidget. - */ - if ( isTopLevel() && parent() && parent()->isWidgetType() && - ((TQWidget*)parent())->tqlayout() == this ) - setWidgetLayout( (TQWidget*)parent(), 0 ); -} - -/*! - Removes and deletes all items in this tqlayout. -*/ -void TQLayout::deleteAllItems() -{ - TQLayoutIterator it = iterator(); - TQLayoutItem *l; - while ( (l = it.takeCurrent()) ) - delete l; -} - -/*! - This function is called from addLayout() functions in subclasses - to add tqlayout \a l as a sub-tqlayout. -*/ -void TQLayout::addChildLayout( TQLayout *l ) -{ - if ( l->parent() ) { -#if defined(TQT_CHECK_NULL) - qWarning( "TQLayout::addChildLayout: tqlayout already has a parent" ); -#endif - return; - } - insertChild( l ); - if ( l->insideSpacing < 0 ) { - l->insideSpacing = insideSpacing; - propagateSpacing( l ); - } -} - -/*! \fn int TQLayout::defaultBorder() const - - \internal -*/ - -/*! \fn void TQLayout::freeze() - - \internal -*/ - -/*! - \internal - Fixes the size of the main widget and distributes the available - space to the child widgets. For widgets which should not be - resizable, but where a TQLayout subclass is used to set up the initial - tqgeometry. - - As a special case, freeze(0, 0) is equivalent to setResizeMode(Fixed). -*/ -void TQLayout::freeze( int w, int h ) -{ - if ( w <= 0 || h <= 0 ) { - setResizeMode( Fixed ); - } else { - setResizeMode( FreeResize ); // tqlayout will not change min/max size - mainWidget()->setFixedSize( w, h ); - } -} - -#ifndef TQT_NO_MENUBAR - -/*! - Makes the tqgeometry manager take account of the menu bar \a w. All - child widgets are placed below the bottom edge of the menu bar. - - A menu bar does its own tqgeometry management: never do addWidget() - on a TQMenuBar. -*/ -void TQLayout::setMenuBar( TQMenuBar *w ) -{ - menubar = w; -} - -#endif - -/*! - Returns the minimum size of this tqlayout. This is the smallest size - that the tqlayout can have while still respecting the - specifications. Does not include what's needed by margin() or - menuBar(). - - The default implementation allows unlimited resizing. -*/ -TQSize TQLayout::tqminimumSize() const -{ - return TQSize( 0, 0 ); -} - -/*! - Returns the maximum size of this tqlayout. This is the largest size - that the tqlayout can have while still respecting the - specifications. Does not include what's needed by margin() or - menuBar(). - - The default implementation allows unlimited resizing. -*/ -TQSize TQLayout::tqmaximumSize() const -{ - return TQSize( TQLAYOUTSIZE_MAX, TQLAYOUTSIZE_MAX ); -} - -/*! - Returns whether this tqlayout can make use of more space than - tqsizeHint(). A value of \c Vertical or \c Horizontal means that it wants - to grow in only one dimension, whereas \c BothDirections means that - it wants to grow in both dimensions. - - The default implementation returns \c BothDirections. -*/ -TQ_SPExpandData TQLayout::expandingDirections() const -{ - return TQSizePolicy::BothDirections; -} - -static void invalidateRecursive( TQLayoutItem *lay ) -{ - lay->tqinvalidate(); - TQLayoutIterator it = lay->iterator(); - TQLayoutItem *child; - while ( (child = it.current()) != 0 ) { - invalidateRecursive( child ); - ++it; - } -} - -/*! - Redoes the tqlayout for mainWidget(). You should generally not need - to call this because it is automatically called at the most - appropriate times. - - However, if you set up a TQLayout for a visible widget without - resizing that widget, you will need to call this function in order - to lay it out. - - \sa TQWidget::updateGeometry() -*/ -bool TQLayout::activate() -{ - invalidateRecursive( this ); - if ( !topLevel ) - return FALSE; - - TQWidget *mw = mainWidget(); - if (!mw) { -#if defined( TQT_CHECK_NULL ) - qWarning( "TQLayout::activate: %s \"%s\" does not have a main widget", - TQObject::className(), TQObject::name() ); -#endif - return FALSE; - } - activated = TRUE; - TQSize s = mw->size(); - TQSize ms; - int mbh = 0; -#ifndef TQT_NO_MENUBAR - mbh = menuBarHeightForWidth( menubar, s.width() ); -#endif - int b = marginImpl ? 0 : outsideBorder; - setGeometry(TQRect(b, mbh + b, s.width() - 2 * b, s.height() - mbh - 2 * b)); - if ( frozen ) { - // will trigger resize - mw->setFixedSize( totalSizeHint() ); - } else if ( autoMinimum ) { - ms = totalMinimumSize(); - } else if ( autoResizeMode && topLevel && mw->isTopLevel() ) { - ms = totalMinimumSize(); - if ( hasHeightForWidth() ) { - int h; - int mmbh = menuBarHeightForWidth( menubar, ms.width() ); - // ### 4.0: remove this 'if' when minimumHeightForWidth() is virtual - if ( inherits("TQBoxLayout") ) - h = ((TQBoxLayout *) this)->minimumHeightForWidth( ms.width() ); - else if ( inherits("TQGridLayout") ) - h = ((TQGridLayout *) this)->minimumHeightForWidth( ms.width() ); - else - h = heightForWidth( ms.width() ); - if ( h + mmbh > ms.height() ) -#if 1 - //old behaviour: - ms = TQSize( 0, 0 ); -#else - //better, but too big a change for a patch release in a stable branch: - ms.setHeight( 0 ); -#endif - } - } - - if (ms.isValid()) - mw->setMinimumSize( ms ); - - // ideally only if tqsizeHint() or sizePolicy() has changed - mw->updateGeometry(); - return TRUE; -} - -#endif // USE_QT4 - -/*! - \class TQSizePolicy - \brief The TQSizePolicy class is a tqlayout attribute describing horizontal - and vertical resizing policy. - - \ingroup appearance - \ingroup geomanagement - - The size policy of a widget is an expression of its willingness to - be resized in various ways. - - Widgets that reimplement TQWidget::sizePolicy() return a TQSizePolicy - that describes the horizontal and vertical resizing policy they - prefer when being laid out. Only \link #interesting one of the - constructors\endlink is of interest in most applications. - - TQSizePolicy contains two independent SizeType objects; one describes - the widgets's horizontal size policy, and the other describes its - vertical size policy. It also contains a flag to indicate whether the - height and width of its preferred size are related. - - The horizontal and vertical \l{SizeType}s are set in the usual constructor - and can be queried using a variety of functions. - - The hasHeightForWidth() flag indicates whether the widget's tqsizeHint() - is width-dependent (such as a word-wrapping label) or not. - - \sa TQSizePolicy::SizeType -*/ - -/*! - \enum TQSizePolicy::SizeType - - The per-dimension sizing types used when constructing a - TQSizePolicy are: - - \value Fixed The TQWidget::tqsizeHint() is the only acceptable - alternative, so the widget can never grow or shrink (e.g. the - vertical direction of a push button). - - \value Minimum The tqsizeHint() is minimal, and sufficient. The - widget can be expanded, but there is no advantage to it being - larger (e.g. the horizontal direction of a push button). - It cannot be smaller than the size provided by tqsizeHint(). - - \value Maximum The tqsizeHint() is a maximum. The widget can be - shrunk any amount without detriment if other widgets need the - space (e.g. a separator line). - It cannot be larger than the size provided by tqsizeHint(). - - \value Preferred The tqsizeHint() is best, but the widget can be - shrunk and still be useful. The widget can be expanded, but there - is no advantage to it being larger than tqsizeHint() (the default - TQWidget policy). - - \value Expanding The tqsizeHint() is a sensible size, but the - widget can be shrunk and still be useful. The widget can make use - of extra space, so it should get as much space as possible (e.g. - the horizontal direction of a slider). - - \value MinimumExpanding The tqsizeHint() is minimal, and sufficient. - The widget can make use of extra space, so it should get as much - space as possible (e.g. the horizontal direction of a slider). - - \value Ignored the tqsizeHint() is ignored. The widget will get as - much space as possible. -*/ - -/*! - \enum TQ_SPExpandData - - This enum type describes in which directions a widget can make use - of extra space. There are four possible values: - - \value NoDirection the widget cannot make use of extra space in - any direction. - - \value Horizontally the widget can usefully be wider than the - tqsizeHint(). - - \value Vertically the widget can usefully be taller than the - tqsizeHint(). - - \value BothDirections the widget can usefully be both wider and - taller than the tqsizeHint(). -*/ - -/*! - \fn TQSizePolicy::TQSizePolicy() - - Constructs a minimally initialized TQSizePolicy. -*/ - -/*! - \fn TQSizePolicy::TQSizePolicy( SizeType hor, SizeType ver, bool hfw ) - - \target interesting - This is the constructor normally used to return a value in the - overridden \l TQWidget::sizePolicy() function of a TQWidget - subclass. - - It constructs a TQSizePolicy with independent horizontal and - vertical sizing types, \a hor and \a ver respectively. These \link - TQSizePolicy::SizeType sizing types\endlink affect how the widget - is treated by the \link TQLayout tqlayout engine\endlink. - - If \a hfw is TRUE, the preferred height of the widget is dependent - on the width of the widget (for example, a TQLabel with line - wrapping). - - \sa horData() verData() hasHeightForWidth() -*/ - -/*! - \fn TQSizePolicy::TQSizePolicy( SizeType hor, SizeType ver, uchar horStretch, uchar verStretch, bool hfw ) - - Constructs a TQSizePolicy with independent horizontal and vertical - sizing types \a hor and \a ver, and stretch factors \a horStretch - and \a verStretch. - - If \a hfw is TRUE, the preferred height of the widget is dependent on the - width of the widget. - - \sa horStretch() verStretch() -*/ - -/*! - \fn TQSizePolicy::SizeType TQSizePolicy::horData() const - - Returns the horizontal component of the size policy. - - \sa setHorData() verData() horStretch() -*/ - -/*! - \fn TQSizePolicy::SizeType TQSizePolicy::verData() const - - Returns the vertical component of the size policy. - - \sa setVerData() horData() verStretch() -*/ - -/*! - \fn bool TQSizePolicy::mayShrinkHorizontally() const - - Returns TRUE if the widget can sensibly be narrower than its - tqsizeHint(); otherwise returns FALSE. - - \sa mayShrinkVertically() mayGrowHorizontally() -*/ - -/*! - \fn bool TQSizePolicy::mayShrinkVertically() const - - Returns TRUE if the widget can sensibly be shorter than its - tqsizeHint(); otherwise returns FALSE. - - \sa mayShrinkHorizontally() mayGrowVertically() -*/ - -/*! - \fn bool TQSizePolicy::mayGrowHorizontally() const - - Returns TRUE if the widget can sensibly be wider than its - tqsizeHint(); otherwise returns FALSE. - - \sa mayGrowVertically() mayShrinkHorizontally() -*/ - -/*! - \fn bool TQSizePolicy::mayGrowVertically() const - - Returns TRUE if the widget can sensibly be taller than its - tqsizeHint(); otherwise returns FALSE. - - \sa mayGrowHorizontally() mayShrinkVertically() -*/ - -/*! - \fn TQ_SPExpandData TQSizePolicy::expandingDirections() const - - Returns whether this tqlayout can make use of more space than - tqsizeHint(). A value of \c Vertical or \c Horizontal means that it wants - to grow in only one dimension, whereas \c BothDirections means that - it wants to grow in both dimensions. - - \sa mayShrinkHorizontally() mayGrowHorizontally() - mayShrinkVertically() mayGrowVertically() -*/ - -/*! - \fn void TQSizePolicy::setHorData( SizeType d ) - - Sets the horizontal component of the size policy to size type \a - d. - - \sa horData() setVerData() -*/ - -/*! - \fn void TQSizePolicy::setVerData( SizeType d ) - - Sets the vertical component of the size policy to size type \a d. - - \sa verData() setHorData() -*/ - -/*! - \fn bool TQSizePolicy::hasHeightForWidth() const - - Returns TRUE if the widget's preferred height depends on its - width; otherwise returns FALSE. - - \sa setHeightForWidth() -*/ - -/*! - \fn void TQSizePolicy::setHeightForWidth( bool b ) - - Sets the hasHeightForWidth() flag to \a b. - - \sa hasHeightForWidth() -*/ - -/*! - \fn uint TQSizePolicy::horStretch() const - - Returns the horizontal stretch factor of the size policy. - - \sa setHorStretch() verStretch() -*/ - -/*! - \fn uint TQSizePolicy::verStretch() const - - Returns the vertical stretch factor of the size policy. - - \sa setVerStretch() horStretch() -*/ - -/*! - \fn void TQSizePolicy::setHorStretch( uchar sf ) - - Sets the horizontal stretch factor of the size policy to \a sf. - - \sa horStretch() setVerStretch() -*/ - -/*! - \fn void TQSizePolicy::setVerStretch( uchar sf ) - - Sets the vertical stretch factor of the size policy to \a sf. - - \sa verStretch() setHorStretch() -*/ - -/*! - \fn void TQSizePolicy::transpose() - - Swaps the horizontal and vertical policies and stretches. -*/ - - -/*! - \fn bool TQSizePolicy::operator==( const TQSizePolicy &s ) const - - Returns TRUE if this policy is equal to \a s; otherwise returns - FALSE. - - \sa operator!=() -*/ - -/*! - \fn bool TQSizePolicy::operator!=( const TQSizePolicy &s ) const - - Returns TRUE if this policy is different from \a s; otherwise - returns FALSE. - - \sa operator==() -*/ - -/*! - \class TQGLayoutIterator - \brief The TQGLayoutIterator class is an abstract base class of internal tqlayout iterators. - - \ingroup appearance - \ingroup geomanagement - - (This class is \e not OpenGL related, it just happens to start with - the letters TQGL...) - - Subclass this class to create a custom tqlayout. The functions that - must be implemented are next(), current(), and takeCurrent(). - - The TQGLayoutIterator implements the functionality of - TQLayoutIterator. Each subclass of TQLayout needs a - TQGLayoutIterator subclass. -*/ - -/*! - \fn TQLayoutItem *TQGLayoutIterator::next() - - Implemented in subclasses to move the iterator to the next item - and return that item, or 0 if there is no next item. -*/ - -/*! - \fn TQLayoutItem *TQGLayoutIterator::current() - - Implemented in subclasses to return the current item, or 0 if - there is no current item. -*/ - -/*! - \fn TQLayoutItem *TQGLayoutIterator::takeCurrent() - - Implemented in subclasses. The function must remove the current - item from the tqlayout without deleting it, move the iterator to the - next item and return the removed item, or 0 if no item was - removed. -*/ - -/*! - Destroys the iterator -*/ -TQGLayoutIterator::~TQGLayoutIterator() -{ -} - -/*! - \class TQLayoutIterator - \brief The TQLayoutIterator class provides iterators over TQLayoutItem. - - \ingroup appearance - \ingroup geomanagement - - Use TQLayoutItem::iterator() to create an iterator over a tqlayout. - - TQLayoutIterator uses \e explicit sharing with a reference count. - If an iterator is copied and one of the copies is modified, both - iterators will be modified. - - A TQLayoutIterator is not protected against changes in its tqlayout. If - the tqlayout is modified or deleted the iterator will become invalid. - It is not possible to test for validity. It is safe to delete an - invalid tqlayout; any other access may lead to an illegal memory - reference and the abnormal termination of the program. - - Calling takeCurrent() or deleteCurrent() leaves the iterator in a - valid state, but may tqinvalidate any other iterators that access the - same tqlayout. - - The following code will draw a rectangle for each tqlayout item in - the tqlayout structure of the widget. - \code - static void paintLayout( TQPainter *p, TQLayoutItem *lay ) - { - TQLayoutIterator it = lay->iterator(); - TQLayoutItem *child; - while ( (child = it.current()) != 0 ) { - paintLayout( p, child ); - ++it; - } - p->drawRect( lay->tqgeometry() ); - } - void ExampleWidget::paintEvent( TQPaintEvent * ) - { - TQPainter p( this ); - if ( tqlayout() ) - paintLayout( &p, tqlayout() ); - } - \endcode - - All the functionality of TQLayoutIterator is implemented by - subclasses of \l TQGLayoutIterator. TQLayoutIterator itself is not - designed to be subclassed. -*/ - -/*! - \fn TQLayoutIterator::TQLayoutIterator( TQGLayoutIterator *gi ) - - Constructs an iterator based on \a gi. The constructed iterator - takes ownership of \a gi and will delete it. - - This constructor is provided for tqlayout implementors. Application - programmers should use TQLayoutItem::iterator() to create an - iterator over a tqlayout. -*/ - -/*! - \fn TQLayoutIterator::TQLayoutIterator( const TQLayoutIterator &i ) - - Creates a shallow copy of \a i, i.e. if the copy is modified, then - the original will also be modified. -*/ - -/*! - \fn TQLayoutIterator::~TQLayoutIterator() - - Destroys the iterator. -*/ - -/*! - \fn TQLayoutIterator &TQLayoutIterator::operator=( const TQLayoutIterator &i ) - - Assigns \a i to this iterator and returns a reference to this - iterator. -*/ - -/*! - \fn TQLayoutItem *TQLayoutIterator::operator++() - - Moves the iterator to the next child item and returns that item, - or 0 if there is no such item. -*/ - -/*! - \fn TQLayoutItem *TQLayoutIterator::current() - - Returns the current item, or 0 if there is no current item. -*/ - -/*! - \fn TQLayoutItem *TQLayoutIterator::takeCurrent() - - Removes the current child item from the tqlayout without deleting - it, and moves the iterator to the next item. Returns the removed - item, or 0 if there was no item to be removed. This iterator will - still be valid, but any other iterator over the same tqlayout may - become invalid. -*/ - -/*! - \fn void TQLayoutIterator::deleteCurrent() - - Removes and deletes the current child item from the tqlayout and - moves the iterator to the next item. This iterator will still be - valid, but any other iterator over the same tqlayout may become - invalid. -*/ - -/*! - \enum TQLayout::ResizeMode - - The possible values are: - - \value Auto If the main widget is a top-level widget with no - height-for-width (hasHeightForWidth()), this is - the same as \c Minimium; otherwise, this is the - same as \c FreeResize. - \value Fixed The main widget's size is set to tqsizeHint(); it - cannot be resized at all. - \value Minimum The main widget's minimum size is set to - tqminimumSize(); it cannot be smaller. - \value FreeResize The widget is not constrained. -*/ - -#ifdef USE_QT4 - -#else // USE_QT4 - -/*! - \property TQLayout::resizeMode - \brief the resize mode of the tqlayout - - The default mode is \c Auto. - - \sa TQLayout::ResizeMode -*/ - -void TQLayout::setResizeMode( ResizeMode mode ) -{ - if ( mode == resizeMode() ) - return; - - switch ( mode ) { - case Auto: - frozen = FALSE; - autoMinimum = FALSE; - autoResizeMode = TRUE; - break; - case Fixed: - frozen = TRUE; - autoMinimum = FALSE; - autoResizeMode = FALSE; - break; - case FreeResize: - frozen = FALSE; - autoMinimum = FALSE; - autoResizeMode = FALSE; - break; - case Minimum: - frozen = FALSE; - autoMinimum = TRUE; - autoResizeMode = FALSE; - } - if ( mainWidget() && mainWidget()->isVisible() ) - activate(); -} - -TQLayout::ResizeMode TQLayout::resizeMode() const -{ - return ( autoResizeMode ? Auto : - (frozen ? Fixed : (autoMinimum ? Minimum : FreeResize)) ); -} - -/*! - \fn bool TQLayout::autoAdd() const - - Returns TRUE if this tqlayout automatically grabs all new - mainWidget()'s new tqchildren and adds them as defined by addItem(); - otherwise returns FALSE. This has effect only for top-level - layouts, i.e. layouts that are direct tqchildren of their - mainWidget(). - - autoAdd() is disabled by default. - - Note that a top-level tqlayout is not necessarily associated with - the top-level widget. - - \sa setAutoAdd() -*/ - -/*! - If \a b is TRUE, auto-add is enabled; otherwise auto-add is - disabled. - - \warning If auto-add is enabled, you cannot set stretch factors - on the child widgets until the widgets are actually inserted in - the tqlayout (after control returned to the event loop). We - therefore recommend that you avoid the auto-add feature in new - programs. - - \sa autoAdd() -*/ -void TQLayout::setAutoAdd( bool b ) -{ - autoNewChild = b; -} - -/*! - \fn bool TQLayout::supportsMargin() const - - Returns TRUE if this tqlayout supports \l TQLayout::margin on - non-top-level layouts; otherwise returns FALSE. - - \sa margin -*/ - -/*! - Sets the value returned by supportsMargin(). If \a b is TRUE, - margin() handling is implemented by the subclass. If \a b is - FALSE (the default), TQLayout will add margin() around top-level - layouts. - - If \a b is TRUE, margin handling needs to be implemented in - setGeometry(), tqmaximumSize(), tqminimumSize(), tqsizeHint() and - heightForWidth(). - - \sa supportsMargin() -*/ -void TQLayout::setSupportsMargin( bool b ) -{ - marginImpl = b; -} - -/*! - Returns the rectangle that should be covered when the tqgeometry of - this tqlayout is set to \a r, provided that this tqlayout supports - tqsetAlignment(). - - The result is derived from tqsizeHint() and expandingDirections(). It is never - larger than \a r. -*/ -TQRect TQLayout::alignmentRect( const TQRect &r ) const -{ - TQSize s = tqsizeHint(); - int a = tqalignment(); - - /* - This is a hack to obtain the real maximum size, not - TQSize(TQLAYOUTSIZE_MAX, TQLAYOUTSIZE_MAX), the value consistently - returned by TQLayoutItems that have an tqalignment. - */ - TQLayout *that = (TQLayout *) this; - that->tqsetAlignment( 0 ); - TQSize ms = tqmaximumSize(); - that->tqsetAlignment( a ); - - if ( (expandingDirections() & TQSizePolicy::Horizontally) || - !(a & TQt::AlignHorizontal_Mask ) ) { - s.setWidth( TQMIN(r.width(), ms.width()) ); - } - if ( (expandingDirections() & TQSizePolicy::Vertically) || - !(a & TQt::AlignVertical_Mask) ) { - s.setHeight( TQMIN(r.height(), ms.height()) ); - } else if ( hasHeightForWidth() ) { - int hfw = heightForWidth( s.width() ); - if ( hfw < s.height() ) - s.setHeight( TQMIN(hfw, ms.height()) ); - } - - int x = r.x(); - int y = r.y(); - - if ( a & TQt::AlignBottom ) - y += ( r.height() - s.height() ); - else if ( !(a & TQt::AlignTop) ) - y += ( r.height() - s.height() ) / 2; - - a = TQApplication::horizontalAlignment( a ); - if ( a & TQt::AlignRight ) - x += ( r.width() - s.width() ); - else if ( !(a & TQt::AlignLeft) ) - x += ( r.width() - s.width() ) / 2; - - return TQRect( x, y, s.width(), s.height() ); -} - -/*! - Removes the widget \a widget from the tqlayout. After this call, it - is the caller's responsibility to give the widget a reasonable - tqgeometry or to put the widget back into a tqlayout. - - \sa removeItem(), TQWidget::setGeometry(), add() -*/ -void TQLayout::remove( TQWidget *widget ) -{ - TQLayoutIterator it = iterator(); - TQLayoutItem *child; - while ( (child = it.current()) != 0 ) { - if ( child->widget() == widget ) { - it.deleteCurrent(); - tqinvalidate(); // maybe redundant - TQApplication::postEvent( mainWidget(), - new TQEvent(TQEvent::LayoutHint) ); - } else { - ++it; - } - } -} - -/*! - Removes the tqlayout item \a item from the tqlayout. It is the - caller's responsibility to delete the item. - - Notice that \a item can be a tqlayout (since TQLayout inherits - TQLayoutItem). - - \sa remove(), addItem() -*/ -void TQLayout::removeItem( TQLayoutItem *item ) -{ - TQLayoutIterator it = iterator(); - TQLayoutItem *child; - while ( (child = it.current()) != 0 ) { - if ( child == item ) { - it.takeCurrent(); - tqinvalidate(); // maybe redundant - TQApplication::postEvent( mainWidget(), - new TQEvent(TQEvent::LayoutHint) ); - } else { - ++it; - } - } -} - -/*! - Enables this tqlayout if \a enable is TRUE, otherwise disables it. - - An enabled tqlayout adjusts dynamically to changes; a disabled - tqlayout acts as if it did not exist. - - By default all layouts are enabled. - - \sa isEnabled() -*/ -void TQLayout::setEnabled( bool enable ) -{ - enabled = enable; -} - -/*! - Returns TRUE if the tqlayout is enabled; otherwise returns FALSE. - - \sa setEnabled() -*/ -bool TQLayout::isEnabled() const -{ - return enabled; -} - -void TQLayout::propagateSpacing( TQLayout *parent ) -{ - TQLayoutIterator it = parent->iterator(); - TQLayoutItem *child; - while ( (child = it.current()) ) { - TQLayout *childLayout = child->tqlayout(); - if ( childLayout && childLayout->insideSpacing < 0 ) { - childLayout->insideSpacing = parent->insideSpacing; - propagateSpacing( childLayout ); - } - ++it; - } -} - -#endif // USE_QT4 - -#endif // TQT_NO_LAYOUT |