diff options
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqgroupbox.cpp')
-rw-r--r-- | tqtinterface/qt4/src/widgets/tqgroupbox.cpp | 989 |
1 files changed, 0 insertions, 989 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqgroupbox.cpp b/tqtinterface/qt4/src/widgets/tqgroupbox.cpp deleted file mode 100644 index ef877e7..0000000 --- a/tqtinterface/qt4/src/widgets/tqgroupbox.cpp +++ /dev/null @@ -1,989 +0,0 @@ -/********************************************************************** -** -** Implementation of TQGroupBox widget class -** -** Created : 950203 -** -** 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 [email protected]. -** -** 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 "tqgroupbox.h" -#ifndef TQT_NO_GROUPBOX -#include "tqlayout.h" -#include "tqpainter.h" -#include "tqbitmap.h" -#include "tqaccel.h" -#include "tqradiobutton.h" -#include "tqfocusdata.h" -#include "tqobjectlist.h" -#include "tqdrawutil.h" -#include "tqapplication.h" -#include "tqstyle.h" -#include "tqcheckbox.h" -#include "tqbuttongroup.h" -#if defined(TQT_ACCESSIBILITY_SUPPORT) -#include "tqaccessible.h" -#endif - -/*! - \class TQGroupBox tqgroupbox.h - \brief The TQGroupBox widget provides a group box frame with a title. - - \ingroup organizers - \ingroup geomanagement - \ingroup appearance - \mainclass - - A group box provides a frame, a title and a keyboard shortcut, and - displays various other widgets inside itself. The title is on top, - the keyboard shortcut moves keyboard focus to one of the group - box's child widgets, and the child widgets are usually laid out - horizontally (or vertically) inside the frame. - - The simplest way to use it is to create a group box with the - desired number of columns (or rows) and orientation, and then just - create widgets with the group box as parent. - - It is also possible to change the orientation() and number of - columns() after construction, or to ignore all the automatic - tqlayout support and manage the tqlayout yourself. You can add 'empty' - spaces to the group box with addSpace(). - - TQGroupBox also lets you set the title() (normally set in the - constructor) and the title's tqalignment(). - - You can change the spacing used by the group box with - setInsideMargin() and setInsideSpacing(). To minimize space - consumption, you can remove the right, left and bottom edges of - the frame with setFlat(). - - <img src=qgrpbox-w.png> - - \sa TQButtonGroup -*/ - -class TQCheckBox; - -class TQGroupBoxPrivate -{ -public: - TQGroupBoxPrivate(): - spacer( 0 ), - checkbox( 0 ) {} - - TQSpacerItem *spacer; - TQCheckBox *checkbox; -}; - - - - -/*! - Constructs a group box widget with no title. - - The \a parent and \a name arguments are passed to the TQWidget - constructor. - - This constructor does not do automatic tqlayout. -*/ - -TQGroupBox::TQGroupBox( TQWidget *parent, const char *name ) - : TQFrame( parent, name ) -{ - init(); -} - -/*! - Constructs a group box with the title \a title. - - The \a parent and \a name arguments are passed to the TQWidget - constructor. - - This constructor does not do automatic tqlayout. -*/ - -TQGroupBox::TQGroupBox( const TQString &title, TQWidget *parent, const char *name ) - : TQFrame( parent, name ) -{ - init(); - setTitle( title ); -} - -/*! - Constructs a group box with no title. Child widgets will be - arranged in \a strips rows or columns (depending on \a - orientation). - - The \a parent and \a name arguments are passed to the TQWidget - constructor. -*/ - -TQGroupBox::TQGroupBox( int strips, Qt::Orientation orientation, - TQWidget *parent, const char *name ) - : TQFrame( parent, name ) -{ - init(); - setColumnLayout( strips, orientation ); -} - -/*! - Constructs a group box titled \a title. Child widgets will be - arranged in \a strips rows or columns (depending on \a - orientation). - - The \a parent and \a name arguments are passed to the TQWidget - constructor. -*/ - -TQGroupBox::TQGroupBox( int strips, Qt::Orientation orientation, - const TQString &title, TQWidget *parent, - const char *name ) - : TQFrame( parent, name ) -{ - init(); - setTitle( title ); - setColumnLayout( strips, orientation ); -} - -/*! - Destroys the group box. -*/ -TQGroupBox::~TQGroupBox() -{ - delete d; -} - -void TQGroupBox::init() -{ - align = TQt::AlignAuto; - setFrameStyle( TQFrame::GroupBoxPanel | TQFrame::Sunken ); -#ifndef TQT_NO_ACCEL - accel = 0; -#endif - vbox = 0; - grid = 0; - d = new TQGroupBoxPrivate(); - lenvisible = 0; - nCols = nRows = 0; - dir = Qt::Horizontal; - marg = 11; - spac = 5; - bFlat = FALSE; -} - -void TQGroupBox::setTextSpacer() -{ - if ( !d->spacer ) - return; - int h = 0; - int w = 0; - if ( isCheckable() || lenvisible ) { - TQFontMetrics fm = fontMetrics(); - int fh = fm.height(); - if ( isCheckable() ) { -#ifndef TQT_NO_CHECKBOX - fh = d->checkbox->tqsizeHint().height() + 2; - w = d->checkbox->tqsizeHint().width() + 2*fm.width( "xx" ); -#endif - } else { - fh = fm.height(); - w = fm.width( str, lenvisible ) + 2*fm.width( "xx" ); - } - h = frameRect().y(); - if ( tqlayout() ) { - int m = tqlayout()->margin(); - int sp = tqlayout()->spacing(); - // do we have a child tqlayout? - for ( TQLayoutIterator it = tqlayout()->iterator(); it.current(); ++it ) { - if ( it.current()->tqlayout() ) { - m += it.current()->tqlayout()->margin(); - sp = TQMAX( sp, it.current()->tqlayout()->spacing() ); - break; - } - } - h = TQMAX( fh-m, h ); - h += TQMAX( sp - (h+m - fh), 0 ); - } - } - d->spacer->changeSize( w, h, TQSizePolicy::Minimum, TQSizePolicy::Fixed ); -} - - -void TQGroupBox::setTitle( const TQString &title ) -{ - if ( str == title ) // no change - return; - str = title; -#ifndef TQT_NO_ACCEL - if ( accel ) - delete accel; - accel = 0; - int s = TQAccel::shortcutKey( title ); - if ( s ) { - accel = new TQAccel( this, "automatic focus-change accelerator" ); - accel->connectItem( accel->insertItem( s, 0 ), - TQT_TQOBJECT(this), TQT_SLOT(fixFocus()) ); - } -#endif -#ifndef TQT_NO_CHECKBOX - if ( d->checkbox ) { - d->checkbox->setText( str ); - updateCheckBoxGeometry(); - } -#endif - calculateFrame(); - setTextSpacer(); - - update(); - updateGeometry(); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::NameChanged ); -#endif -} - -/*! - \property TQGroupBox::title - \brief the group box title text. - - The group box title text will have a focus-change keyboard - accelerator if the title contains \&, followed by a letter. - - \code - g->setTitle( "&User information" ); - \endcode - This produces "<u>U</u>ser information"; Alt+U moves the keyboard - focus to the group box. - - There is no default title text. -*/ - -/*! - \property TQGroupBox::tqalignment - \brief the tqalignment of the group box title. - - The title is always placed on the upper frame line. The horizontal - tqalignment can be specified by the tqalignment parameter. - - The tqalignment is one of the following flags: - \list - \i \c AlignAuto aligns the title according to the language, - usually to the left. - \i \c AlignLeft aligns the title text to the left. - \i \c AlignRight aligns the title text to the right. - \i \c AlignHCenter aligns the title text centered. - \endlist - - The default tqalignment is \c AlignAuto. - - \sa TQt::AlignmentFlags -*/ - -void TQGroupBox::tqsetAlignment( int tqalignment ) -{ - align = tqalignment; -#ifndef TQT_NO_CHECKBOX - updateCheckBoxGeometry(); -#endif - update(); -} - -/*! \reimp -*/ -void TQGroupBox::resizeEvent( TQResizeEvent *e ) -{ - TQFrame::resizeEvent(e); -#ifndef TQT_NO_CHECKBOX - if ( align & TQt::AlignRight || align & TQt::AlignCenter || - ( TQApplication::reverseLayout() && !(align & TQt::AlignLeft) ) ) - updateCheckBoxGeometry(); -#endif - calculateFrame(); -} - -/*! \reimp - - \internal - overrides TQFrame::paintEvent -*/ - -void TQGroupBox::paintEvent( TQPaintEvent *event ) -{ - TQPainter paint( this ); - - if ( lenvisible && !isCheckable() ) { // draw title - TQFontMetrics fm = paint.fontMetrics(); - int h = fm.height(); - int tw = fm.width( str, lenvisible ) + fm.width(TQChar(' ')); - int x; - int marg = bFlat ? 0 : 8; - if ( align & TQt::AlignHCenter ) // center tqalignment - x = frameRect().width()/2 - tw/2; - else if ( align & TQt::AlignRight ) // right tqalignment - x = frameRect().width() - tw - marg; - else if ( align & TQt::AlignLeft ) // left tqalignment - x = marg; - else { // auto align - if( TQApplication::reverseLayout() ) - x = frameRect().width() - tw - marg; - else - x = marg; - } - TQRect r( x, 0, tw, h ); - int va = tqstyle().tqstyleHint(TQStyle::SH_GroupBox_TextLabelVerticalAlignment, this); - if(va & TQt::AlignTop) - r.moveBy(0, fm.descent()); - TQColor pen( (TQRgb) tqstyle().tqstyleHint(TQStyle::SH_GroupBox_TextLabelColor, this ) ); - if (!tqstyle().tqstyleHint(TQStyle::SH_UnderlineAccelerator, this)) - va |= TQt::NoAccel; - tqstyle().drawItem( &paint, r, TQt::ShowPrefix | TQt::AlignHCenter | va, tqcolorGroup(), - isEnabled(), 0, str, -1, ownPalette() ? 0 : &pen ); - paint.setClipRegion( event->region().subtract( r ) ); // clip everything but title -#ifndef TQT_NO_CHECKBOX - } else if ( d->checkbox ) { - TQRect cbClip = d->checkbox->tqgeometry(); - TQFontMetrics fm = paint.fontMetrics(); - cbClip.setX( cbClip.x() - fm.width(TQChar(' ')) ); - cbClip.setWidth( cbClip.width() + fm.width(TQChar(' ')) ); - paint.setClipRegion( event->region().subtract( cbClip ) ); -#endif - } - if ( bFlat ) { - TQRect fr = frameRect(); - TQPoint p1( fr.x(), fr.y() + 1 ); - TQPoint p2( fr.x() + fr.width(), p1.y() ); - // ### This should probably be a style primitive. - qDrawShadeLine( &paint, p1, p2, tqcolorGroup(), TRUE, - lineWidth(), midLineWidth() ); - } else { - drawFrame(&paint); - } - drawContents( &paint ); // draw the contents -} - - -/*! - Adds an empty cell at the next free position. If \a size is - greater than 0, the empty cell takes \a size to be its fixed width - (if orientation() is \c Qt::Horizontal) or height (if orientation() is - \c Qt::Vertical). - - Use this method to separate the widgets in the group box or to - skip the next free cell. For performance reasons, call this method - after calling setColumnLayout() or by changing the \l - TQGroupBox::columns or \l TQGroupBox::orientation properties. It is - generally a good idea to call these methods first (if needed at - all), and insert the widgets and spaces afterwards. -*/ -void TQGroupBox::addSpace( int size ) -{ - TQApplication::sendPostedEvents( this, TQEvent::ChildInserted ); - - if ( nCols <= 0 || nRows <= 0 ) - return; - - if ( row >= nRows || col >= nCols ) - grid->expand( row+1, col+1 ); - - if ( size > 0 ) { - TQSpacerItem *spacer - = new TQSpacerItem( ( dir == Qt::Horizontal ) ? 0 : size, - ( dir == Qt::Vertical ) ? 0 : size, - TQSizePolicy::Fixed, TQSizePolicy::Fixed ); - grid->addItem( spacer, row, col ); - } - - skip(); -} - -/*! - \property TQGroupBox::columns - \brief the number of columns or rows (depending on \l TQGroupBox::orientation) in the group box - - Usually it is not a good idea to set this property because it is - slow (it does a complete tqlayout). It is best to set the number - of columns directly in the constructor. -*/ -int TQGroupBox::columns() const -{ - if ( dir == Qt::Horizontal ) - return nCols; - return nRows; -} - -void TQGroupBox::setColumns( int c ) -{ - setColumnLayout( c, dir ); -} - -/*! - Returns the width of the empty space between the items in the - group and the frame of the group. - - Only applies if the group box has a defined orientation. - - The default is usually 11, by may vary depending on the platform - and style. - - \sa setInsideMargin(), orientation -*/ -int TQGroupBox::insideMargin() const -{ - return marg; -} - -/*! - Returns the width of the empty space between each of the items - in the group. - - Only applies if the group box has a defined orientation. - - The default is usually 5, by may vary depending on the platform - and style. - - \sa setInsideSpacing(), orientation -*/ -int TQGroupBox::insideSpacing() const -{ - return spac; -} - -/*! - Sets the the width of the inside margin to \a m pixels. - - \sa insideMargin() -*/ -void TQGroupBox::setInsideMargin( int m ) -{ - marg = m; - setColumnLayout( columns(), dir ); -} - -/*! - Sets the width of the empty space between each of the items in - the group to \a s pixels. - - \sa insideSpacing() -*/ -void TQGroupBox::setInsideSpacing( int s ) -{ - spac = s; - setColumnLayout( columns(), dir ); -} - -/*! - \property TQGroupBox::orientation - \brief the group box's orientation - - A horizontal group box arranges it's tqchildren in columns, while a - vertical group box arranges them in rows. - - Usually it is not a good idea to set this property because it is - slow (it does a complete tqlayout). It is better to set the - orientation directly in the constructor. -*/ -void TQGroupBox::setOrientation( Orientation o ) -{ - setColumnLayout( columns(), o ); -} - -/*! - Changes the tqlayout of the group box. This function is only useful - in combination with the default constructor that does not take any - tqlayout information. This function will put all existing tqchildren - in the new tqlayout. It is not good TQt programming style to call - this function after tqchildren have been inserted. Sets the number - of columns or rows to be \a strips, depending on \a direction. - - \sa orientation columns -*/ -void TQGroupBox::setColumnLayout(int strips, Qt::Orientation direction) -{ - if ( tqlayout() ) - delete tqlayout(); - - vbox = 0; - grid = 0; - - if ( strips < 0 ) // if 0, we create the vbox but not the grid. See below. - return; - - vbox = new TQVBoxLayout( this, marg, 0 ); - - d->spacer = new TQSpacerItem( 0, 0, TQSizePolicy::Minimum, - TQSizePolicy::Fixed ); - - setTextSpacer(); - vbox->addItem( TQT_TQLAYOUTITEM(d->spacer) ); - - nCols = 0; - nRows = 0; - dir = direction; - - // Send all child events and ignore them. Otherwise we will end up - // with doubled insertion. This won't do anything because nCols == - // nRows == 0. - TQApplication::sendPostedEvents( this, TQEvent::ChildInserted ); - - // if 0 or smaller , create a vbox-tqlayout but no grid. This allows - // the designer to handle its own grid tqlayout in a group box. - if ( strips <= 0 ) - return; - - dir = direction; - if ( dir == Qt::Horizontal ) { - nCols = strips; - nRows = 1; - } else { - nCols = 1; - nRows = strips; - } - grid = new TQGridLayout( nRows, nCols, spac ); - row = col = 0; - grid->tqsetAlignment( TQt::AlignTop ); - vbox->addLayout( TQT_TQLAYOUT(grid) ); - - // Add all tqchildren - if ( !childrenListObject().isEmpty() ) { - TQObjectListIt it( childrenListObject() ); - TQWidget *w; - while( (w=(TQWidget *)it.current()) != 0 ) { - ++it; - if ( w->isWidgetType() -#ifndef TQT_NO_CHECKBOX - && w != d->checkbox -#endif - ) - insertWid( w ); - } - } -} - - -/*! \reimp */ -bool TQGroupBox::event( TQEvent * e ) -{ - if ( e->type() == TQEvent::LayoutHint && tqlayout() ) - setTextSpacer(); - return TQFrame::event( e ); -} - -/*!\reimp */ -void TQGroupBox::childEvent( TQChildEvent *c ) -{ - if ( !c->inserted() || !c->child()->isWidgetType() ) - return; - TQWidget *w = (TQWidget*)c->child(); -#ifndef TQT_NO_CHECKBOX - if ( d->checkbox ) { - if ( w == d->checkbox ) - return; - if ( d->checkbox->isChecked() ) { - if ( !w->testWState( TQt::WState_ForceDisabled ) ) - w->setEnabled( TRUE ); - } else { - if ( w->isEnabled() ) { - w->setEnabled( FALSE ); - ((TQGroupBox*)w)->clearWState( TQt::WState_ForceDisabled ); - } - } - } -#endif - if ( !grid ) - return; - insertWid( w ); -} - -void TQGroupBox::insertWid( TQWidget* w ) -{ - if ( row >= nRows || col >= nCols ) - grid->expand( row+1, col+1 ); - grid->addWidget( w, row, col ); - skip(); - TQApplication::postEvent( this, new TQEvent( TQEvent::LayoutHint ) ); -} - - -void TQGroupBox::skip() -{ - // Same as TQGrid::skip() - if ( dir == Qt::Horizontal ) { - if ( col+1 < nCols ) { - col++; - } else { - col = 0; - row++; - } - } else { //Vertical - if ( row+1 < nRows ) { - row++; - } else { - row = 0; - col++; - } - } -} - - -/*! - \internal - - This private slot finds a widget in this group box that can accept - focus, and gives the focus to that widget. -*/ - -void TQGroupBox::fixFocus() -{ - TQFocusData * fd = focusData(); - TQWidget * orig = fd->home(); - TQWidget * best = 0; - TQWidget * candidate = 0; - TQWidget * w = orig; - do { - TQWidget * p = w; - while( p && p != this && !p->isTopLevel() ) - p = p->parentWidget(); - if ( p == this && ( w->focusPolicy() & Qt::TabFocus ) == Qt::TabFocus - && w->isVisibleTo(this) ) { - if ( w->hasFocus() -#ifndef TQT_NO_RADIOBUTTON - || ( !best && ::tqqt_cast<TQRadioButton*>(w) - && ((TQRadioButton*)w)->isChecked() ) -#endif - ) - // we prefer a checked radio button or a widget that - // already has focus, if there is one - best = w; - else if ( !candidate ) - // but we'll accept anything that takes focus - candidate = w; - } - w = fd->next(); - } while( w != orig ); - if ( best ) - best->setFocus(); - else if ( candidate ) - candidate->setFocus(); -} - - -/* - Sets the right frame rect depending on the title. Also calculates - the visible part of the title. -*/ -void TQGroupBox::calculateFrame() -{ - lenvisible = str.length(); - - if ( lenvisible && !isCheckable() ) { // do we have a label? - TQFontMetrics fm = fontMetrics(); - while ( lenvisible ) { - int tw = fm.width( str, lenvisible ) + 4*fm.width(TQChar(' ')); - if ( tw < width() ) - break; - lenvisible--; - } - if ( lenvisible ) { // but do we also have a visible label? - TQRect r = rect(); - int va = tqstyle().tqstyleHint(TQStyle::SH_GroupBox_TextLabelVerticalAlignment, this); - if(va & TQt::AlignVCenter) - r.setTop( fm.height()/2 ); // frame rect should be - else if(va & TQt::AlignTop) - r.setTop(fm.ascent()); - setFrameRect( r ); // smaller than client rect - return; - } - } else if ( isCheckable() ) { -#ifndef TQT_NO_CHECKBOX - TQRect r = rect(); - int va = tqstyle().tqstyleHint(TQStyle::SH_GroupBox_TextLabelVerticalAlignment, this); - if( va & TQt::AlignVCenter ) - r.setTop( d->checkbox->rect().height()/2 ); - else if( va & TQt::AlignTop ) - r.setTop( fontMetrics().ascent() ); - setFrameRect( r ); - return; -#endif - } - - // no visible label - setFrameRect( TQRect(0,0,0,0) ); // then use client rect -} - - - -/*! \reimp - */ -void TQGroupBox::focusInEvent( TQFocusEvent * ) -{ // note no call to super - fixFocus(); -} - - -/*!\reimp - */ -void TQGroupBox::fontChange( const TQFont & oldFont ) -{ - TQWidget::fontChange( oldFont ); -#ifndef TQT_NO_CHECKBOX - updateCheckBoxGeometry(); -#endif - calculateFrame(); - setTextSpacer(); -} - -/*! - \reimp -*/ - -TQSize TQGroupBox::tqsizeHint() const -{ - TQFontMetrics fm( font() ); - int tw, th; - if ( isCheckable() ) { -#ifndef TQT_NO_CHECKBOX - tw = d->checkbox->tqsizeHint().width() + 2*fm.width( "xx" ); - th = d->checkbox->tqsizeHint().height() + fm.width( TQChar(' ') ); -#endif - } else { - tw = fm.width( title() ) + 2 * fm.width( "xx" ); - th = fm.height() + fm.width( TQChar(' ') ); - } - - TQSize s; - if ( tqlayout() ) { - s = TQFrame::tqsizeHint(); - return s.expandedTo( TQSize( tw, 0 ) ); - } else { - TQRect r = tqchildrenRect(); - TQSize s( 100, 50 ); - s = s.expandedTo( TQSize( tw, th ) ); - if ( r.isNull() ) - return s; - - return s.expandedTo( TQSize( r.width() + 2 * r.x(), r.height()+ 2 * r.y() ) ); - } -} - -/*! - \property TQGroupBox::flat - \brief whether the group box is painted flat or has a frame - - By default a group box has a surrounding frame, with the title - being placed on the upper frame line. In flat mode the right, left - and bottom frame lines are omitted, and only the thin line at the - top is drawn. - - \sa title -*/ -bool TQGroupBox::isFlat() const -{ - return bFlat; -} - -void TQGroupBox::setFlat( bool b ) -{ - if ( (bool)bFlat == b ) - return; - bFlat = b; - update(); -} - - -/*! - \property TQGroupBox::checkable - \brief Whether the group box has a checkbox in its title. - - If this property is TRUE, the group box has a checkbox. If the - checkbox is checked (which is the default), the group box's - tqchildren are enabled. - - setCheckable() controls whether or not the group box has a - checkbox, and isCheckable() controls whether the checkbox is - checked or not. -*/ -#ifndef TQT_NO_CHECKBOX -void TQGroupBox::setCheckable( bool b ) -{ - if ( (d->checkbox != 0) == b ) - return; - - if ( b ) { - if ( !d->checkbox ) { - d->checkbox = new TQCheckBox( title(), this, "qt_groupbox_checkbox" ); - if (TQButtonGroup *meAsButtonGroup = ::tqqt_cast<TQButtonGroup*>(this)) - meAsButtonGroup->remove(d->checkbox); - setChecked( TRUE ); - setChildrenEnabled( TRUE ); - connect( d->checkbox, TQT_SIGNAL( toggled(bool) ), - this, TQT_SLOT( setChildrenEnabled(bool) ) ); - connect( d->checkbox, TQT_SIGNAL( toggled(bool) ), - this, TQT_SIGNAL( toggled(bool) ) ); - updateCheckBoxGeometry(); - } - d->checkbox->show(); - } else { - setChildrenEnabled( TRUE ); - delete d->checkbox; - d->checkbox = 0; - } - calculateFrame(); - setTextSpacer(); - update(); -} -#endif //TQT_NO_CHECKBOX - -bool TQGroupBox::isCheckable() const -{ -#ifndef TQT_NO_CHECKBOX - return ( d->checkbox != 0 ); -#else - return FALSE; -#endif -} - - -bool TQGroupBox::isChecked() const -{ -#ifndef TQT_NO_CHECKBOX - return d->checkbox && d->checkbox->isChecked(); -#else - return FALSE; -#endif -} - - -/*! - \fn void TQGroupBox::toggled( bool on ) - - If the group box has a check box (see \l isCheckable()) this signal - is emitted when the check box is toggled. \a on is TRUE if the check - box is checked; otherwise it is FALSE. -*/ - -/*! - \property TQGroupBox::checked - \brief Whether the group box's checkbox is checked. - - If the group box has a check box (see \l isCheckable()), and the - check box is checked (see \l isChecked()), the group box's tqchildren - are enabled. If the checkbox is unchecked the tqchildren are - disabled. -*/ -#ifndef TQT_NO_CHECKBOX -void TQGroupBox::setChecked( bool b ) -{ - if ( d->checkbox ) - d->checkbox->setChecked( b ); -} -#endif - -/* - sets all tqchildren of the group box except the qt_groupbox_checkbox - to either disabled/enabled -*/ -void TQGroupBox::setChildrenEnabled( bool b ) -{ - if ( childrenListObject().isEmpty() ) - return; - TQObjectListIt it( childrenListObject() ); - TQObject *o; - while( (o = it.current()) ) { - ++it; - if ( o->isWidgetType() -#ifndef TQT_NO_CHECKBOX - && o != TQT_TQOBJECT(d->checkbox) -#endif - ) { - TQWidget *w = (TQWidget*)o; - if ( b ) { - if ( !w->testWState( TQt::WState_ForceDisabled ) ) - w->setEnabled( TRUE ); - } else { - if ( w->isEnabled() ) { - w->setEnabled( FALSE ); - ((TQGroupBox*)w)->clearWState( TQt::WState_ForceDisabled ); - } - } - } - } -} - -/*! \reimp */ -void TQGroupBox::setEnabled(bool on) -{ - TQFrame::setEnabled(on); - if ( !d->checkbox || !on ) - return; - -#ifndef TQT_NO_CHECKBOX - // we are being enabled - disable tqchildren - if ( !d->checkbox->isChecked() ) - setChildrenEnabled( FALSE ); -#endif -} - -/* - recalculates and sets the checkbox setGeometry -*/ -#ifndef TQT_NO_CHECKBOX -void TQGroupBox::updateCheckBoxGeometry() -{ - if ( d->checkbox ) { - TQSize cbSize = d->checkbox->tqsizeHint(); - TQRect cbRect( 0, 0, cbSize.width(), cbSize.height() ); - - int marg = bFlat ? 2 : 8; - marg += fontMetrics().width( TQChar(' ') ); - - if ( align & TQt::AlignHCenter ) { - cbRect.moveCenter( frameRect().center() ); - cbRect.moveTop( 0 ); - } else if ( align & TQt::AlignRight ) { - cbRect.moveRight( frameRect().right() - marg ); - } else if ( align & TQt::AlignLeft ) { - cbRect.moveLeft( frameRect().left() + marg ); - } else { // auto align - if( TQApplication::reverseLayout() ) - cbRect.moveRight( frameRect().right() - marg ); - else - cbRect.moveLeft( frameRect().left() + marg ); - } - - d->checkbox->setGeometry( cbRect ); - } -} -#endif //TQT_NO_CHECKBOX - - -#endif //TQT_NO_GROUPBOX |