diff options
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqbuttongroup.cpp')
-rw-r--r-- | tqtinterface/qt4/src/widgets/tqbuttongroup.cpp | 691 |
1 files changed, 0 insertions, 691 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqbuttongroup.cpp b/tqtinterface/qt4/src/widgets/tqbuttongroup.cpp deleted file mode 100644 index 31ff7a5..0000000 --- a/tqtinterface/qt4/src/widgets/tqbuttongroup.cpp +++ /dev/null @@ -1,691 +0,0 @@ -/**************************************************************************** -** -** Implementation of TQButtonGroup class -** -** Created : 950130 -** -** 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 "tqbuttongroup.h" -#ifndef TQT_NO_BUTTONGROUP -#include "tqbutton.h" -#include "tqptrlist.h" -#include "tqapplication.h" -#include "tqradiobutton.h" - - - -/*! - \class TQButtonGroup tqbuttongroup.h - \brief The TQButtonGroup widget organizes TQButton widgets in a group. - - \ingroup organizers - \ingroup geomanagement - \ingroup appearance - \mainclass - - A button group widget makes it easier to deal with groups of - buttons. Each button in a button group has a unique identifier. - The button group emits a clicked() signal with this identifier - when a button in the group is clicked. This makes a button group - particularly useful when you have several similar buttons and want - to connect all their clicked() Q_SIGNALS to a single slot. - - An \link setExclusive() exclusive\endlink button group switches - off all toggle buttons except the one that was clicked. A button - group is, by default, non-exclusive. Note that all radio buttons - that are inserted into a button group are mutually exclusive even - if the button group is non-exclusive. (See - setRadioButtonExclusive().) - - There are two ways of using a button group: - \list - \i The button group is the parent widget of a number of buttons, - i.e. the button group is the parent argument in the button - constructor. The buttons are assigned identifiers 0, 1, 2, etc., - in the order they are created. A TQButtonGroup can display a frame - and a title because it inherits TQGroupBox. - \i The button group is an invisible widget and the contained - buttons have some other parent widget. In this usage, each button - must be manually inserted, using insert(), into the button group - and given an identifier. - \endlist - - A button can be removed from the group with remove(). A pointer to - a button with a given id can be obtained using find(). The id of a - button is available using id(). A button can be set \e on with - setButton(). The number of buttons in the group is returned by - count(). - - <img src=qbttngrp-m.png> <img src=qbttngrp-w.png> - - \sa TQPushButton, TQCheckBox, TQRadioButton -*/ - -/*! - \property TQButtonGroup::exclusive - \brief whether the button group is exclusive - - If this property is TRUE, then the buttons in the group are - toggled, and to untoggle a button you must click on another button - in the group. The default value is FALSE. -*/ - -/*! - \property TQButtonGroup::radioButtonExclusive - \brief whether the radio buttons in the group are exclusive - - If this property is TRUE (the default), the \link TQRadioButton - radiobuttons\endlink in the group are treated exclusively. -*/ - -struct TQButtonItem -{ - TQButton *button; - int id; -}; - - -class TQButtonList: public TQPtrList<TQButtonItem> -{ -public: - TQButtonList() {} - ~TQButtonList() {} -}; - - -typedef TQPtrListIterator<TQButtonItem> TQButtonListIt; - - -/*! - Constructs a button group with no title. - - The \a parent and \a name arguments are passed to the TQWidget - constructor. -*/ - -TQButtonGroup::TQButtonGroup( TQWidget *parent, const char *name ) - : TQGroupBox( parent, name ) -{ - init(); -} - -/*! - Constructs a button group with the title \a title. - - The \a parent and \a name arguments are passed to the TQWidget - constructor. -*/ - -TQButtonGroup::TQButtonGroup( const TQString &title, TQWidget *parent, - const char *name ) - : TQGroupBox( title, parent, name ) -{ - init(); -} - -/*! - Constructs a button group 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. -*/ - -TQButtonGroup::TQButtonGroup( int strips, Qt::Orientation orientation, - TQWidget *parent, const char *name ) - : TQGroupBox( strips, orientation, parent, name ) -{ - init(); -} - -/*! - Constructs a button group with title \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. -*/ - -TQButtonGroup::TQButtonGroup( int strips, Qt::Orientation orientation, - const TQString &title, TQWidget *parent, - const char *name ) - : TQGroupBox( strips, orientation, title, parent, name ) -{ - init(); -} - -/*! - Initializes the button group. -*/ - -void TQButtonGroup::init() -{ - buttons = new TQButtonList; - TQ_CHECK_PTR( buttons ); - buttons->setAutoDelete( TRUE ); - excl_grp = FALSE; - radio_excl = TRUE; -} - -/*! \reimp */ - -TQButtonGroup::~TQButtonGroup() -{ - TQButtonList * tmp = buttons; - TQButtonItem *bi = tmp->first(); - buttons = 0; - while( bi ) { - bi->button->setGroup(0); - bi = tmp->next(); - } - delete tmp; -} - -bool TQButtonGroup::isExclusive() const -{ - return excl_grp; -} - -void TQButtonGroup::setExclusive( bool enable ) -{ - excl_grp = enable; -} - - -/*! - Inserts the \a button with the identifier \a id into the button - group. Returns the button identifier. - - Buttons are normally inserted into a button group automatically by - passing the button group as the parent when the button is - constructed. So it is not necessary to manually insert buttons - that have this button group as their parent widget. An exception - is when you want custom identifiers instead of the default 0, 1, - 2, etc., or if you want the buttons to have some other parent. - - The button is assigned the identifier \a id or an automatically - generated identifier. It works as follows: If \a id >= 0, this - identifier is assigned. If \a id == -1 (default), the identifier - is equal to the number of buttons in the group. If \a id is any - other negative integer, for instance -2, a unique identifier - (negative integer \<= -2) is generated. No button has an id of -1. - - \sa find(), remove(), setExclusive() -*/ - -int TQButtonGroup::insert( TQButton *button, int id ) -{ - if ( button->group() ) - button->group()->remove( button ); - - static int seq_no = -2; - TQButtonItem *bi = new TQButtonItem; - TQ_CHECK_PTR( bi ); - - if ( id < -1 ) - bi->id = seq_no--; - else if ( id == -1 ) - bi->id = buttons->count(); - else - bi->id = id; - - bi->button = button; - button->setGroup(this); - buttons->append( bi ); - - connect( button, TQT_SIGNAL(pressed()) , TQT_SLOT(buttonPressed()) ); - connect( button, TQT_SIGNAL(released()), TQT_SLOT(buttonReleased()) ); - connect( button, TQT_SIGNAL(clicked()) , TQT_SLOT(buttonClicked()) ); - connect( button, TQT_SIGNAL(toggled(bool)) , TQT_SLOT(buttonToggled(bool)) ); - - if ( button->isToggleButton() && !button->isOn() && - selected() && (selected()->focusPolicy() & Qt::TabFocus) != 0 ) - button->setFocusPolicy( (Qt::FocusPolicy)(button->focusPolicy() & - ~Qt::TabFocus) ); - - return bi->id; -} - -/*! - Returns the number of buttons in the group. -*/ -int TQButtonGroup::count() const -{ - return buttons->count(); -} - -/*! - Removes the \a button from the button group. - - \sa insert() -*/ - -void TQButtonGroup::remove( TQButton *button ) -{ - if ( !buttons ) - return; - - TQButtonListIt it( *buttons ); - TQButtonItem *i; - while ( (i=it.current()) != 0 ) { - ++it; - if ( i->button == button ) { - buttons->remove( i ); - button->setGroup(0); - button->disconnect( this ); - return; - } - } -} - - -/*! - Returns the button with the specified identifier \a id, or 0 if - the button was not found. -*/ - -TQButton *TQButtonGroup::find( int id ) const -{ - // introduce a TQButtonListIt if calling anything - for ( TQButtonItem *i=buttons->first(); i; i=buttons->next() ) - if ( i->id == id ) - return i->button; - return 0; -} - - -/*! - \fn void TQButtonGroup::pressed( int id ) - - This signal is emitted when a button in the group is \link - TQButton::pressed() pressed\endlink. The \a id argument is the - button's identifier. - - \sa insert() -*/ - -/*! - \fn void TQButtonGroup::released( int id ) - - This signal is emitted when a button in the group is \link - TQButton::released() released\endlink. The \a id argument is the - button's identifier. - - \sa insert() -*/ - -/*! - \fn void TQButtonGroup::clicked( int id ) - - This signal is emitted when a button in the group is \link - TQButton::clicked() clicked\endlink. The \a id argument is the - button's identifier. - - \sa insert() -*/ - - -/*! - \internal - This slot is activated when one of the buttons in the group emits the - TQButton::pressed() signal. -*/ - -void TQButtonGroup::buttonPressed() -{ - // introduce a TQButtonListIt if calling anything - int id = -1; - TQButton *bt = (TQButton *)sender(); // object that sent the signal - for ( register TQButtonItem *i=buttons->first(); i; i=buttons->next() ) - if ( bt == i->button ) { // button was clicked - id = i->id; - break; - } - if ( id != -1 ) - emit pressed( id ); -} - -/*! - \internal - This slot is activated when one of the buttons in the group emits the - TQButton::released() signal. -*/ - -void TQButtonGroup::buttonReleased() -{ - // introduce a TQButtonListIt if calling anything - int id = -1; - TQButton *bt = (TQButton *)sender(); // object that sent the signal - for ( register TQButtonItem *i=buttons->first(); i; i=buttons->next() ) - if ( bt == i->button ) { // button was clicked - id = i->id; - break; - } - if ( id != -1 ) - emit released( id ); -} - -/*! - \internal - This slot is activated when one of the buttons in the group emits the - TQButton::clicked() signal. -*/ - -void TQButtonGroup::buttonClicked() -{ - // introduce a TQButtonListIt if calling anything - int id = -1; - TQButton *bt = ::tqqt_cast<TQButton*>(sender()); // object that sent the signal -#if defined(TQT_CHECK_NULL) - TQ_ASSERT( bt ); -#endif - for ( register TQButtonItem *i=buttons->first(); i; i=buttons->next() ) { - if ( bt == i->button ) { // button was clicked - id = i->id; - break; - } - } - if ( id != -1 ) - emit clicked( id ); -} - - -/*! - \internal - This slot is activated when one of the buttons in the group emits the - TQButton::toggled() signal. -*/ - -void TQButtonGroup::buttonToggled( bool on ) -{ - // introduce a TQButtonListIt if calling anything - if ( !on || (!excl_grp && !radio_excl) ) - return; - TQButton *bt = ::tqqt_cast<TQButton*>(sender()); // object that sent the signal -#if defined(TQT_CHECK_NULL) - TQ_ASSERT( bt ); - TQ_ASSERT( bt->isToggleButton() ); -#endif - - if ( !excl_grp && !::tqqt_cast<TQRadioButton*>(bt) ) - return; - TQButtonItem * i = buttons->first(); - bool hasTabFocus = FALSE; - - while( i != 0 && hasTabFocus == FALSE ) { - if ( ( excl_grp || ::tqqt_cast<TQRadioButton*>(i->button) ) && - (i->button->focusPolicy() & Qt::TabFocus) ) - hasTabFocus = TRUE; - i = buttons->next(); - } - - i = buttons->first(); - while( i ) { - if ( bt != i->button && - i->button->isToggleButton() && - i->button->isOn() && - ( excl_grp || ::tqqt_cast<TQRadioButton*>(i->button) ) ) - i->button->setOn( FALSE ); - if ( ( excl_grp || ::tqqt_cast<TQRadioButton*>(i->button) ) && - i->button->isToggleButton() && - hasTabFocus ) - i->button->setFocusPolicy( (Qt::FocusPolicy)(i->button->focusPolicy() & - ~Qt::TabFocus) ); - i = buttons->next(); - } - - if ( hasTabFocus ) - bt->setFocusPolicy( (Qt::FocusPolicy)(bt->focusPolicy() | Qt::TabFocus) ); -} - - - -void TQButtonGroup::setButton( int id ) -{ - TQButton * b = find( id ); - if ( b ) - b->setOn( TRUE ); -} - -void TQButtonGroup::setRadioButtonExclusive( bool on) -{ - radio_excl = on; -} - - -/*! - Moves the keyboard focus according to \a key, and if appropriate - checks the new focus item. - - This function does nothing unless the keyboard focus points to one - of the button group members and \a key is one of \c Key_Up, \c - Key_Down, \c Key_Left and \c Key_Right. -*/ - -void TQButtonGroup::moveFocus( int key ) -{ - TQWidget * f = tqApp->tqfocusWidget(); - - TQButtonItem * i; - i = buttons->first(); - while( i && i->button != f ) - i = buttons->next(); - - if ( !i || !i->button ) - return; - - TQWidget * candidate = 0; - int bestScore = -1; - - TQPoint goal( f->mapToGlobal( f->tqgeometry().center() ) ); - - i = buttons->first(); - while( i && i->button ) { - if ( i->button != f && - i->button->isEnabled() ) { - TQPoint p(i->button->mapToGlobal(i->button->tqgeometry().center())); - int score = (p.y() - goal.y())*(p.y() - goal.y()) + - (p.x() - goal.x())*(p.x() - goal.x()); - bool betterScore = score < bestScore || !candidate; - switch( key ) { - case Qt::Key_Up: - if ( p.y() < goal.y() && betterScore ) { - if ( TQABS( p.x() - goal.x() ) < TQABS( p.y() - goal.y() ) ) { - candidate = i->button; - bestScore = score; - } else if ( i->button->x() == f->x() ) { - candidate = i->button; - bestScore = score/2; - } - } - break; - case Qt::Key_Down: - if ( p.y() > goal.y() && betterScore ) { - if ( TQABS( p.x() - goal.x() ) < TQABS( p.y() - goal.y() ) ) { - candidate = i->button; - bestScore = score; - } else if ( i->button->x() == f->x() ) { - candidate = i->button; - bestScore = score/2; - } - } - break; - case Qt::Key_Left: - if ( p.x() < goal.x() && betterScore ) { - if ( TQABS( p.y() - goal.y() ) < TQABS( p.x() - goal.x() ) ) { - candidate = i->button; - bestScore = score; - } else if ( i->button->y() == f->y() ) { - candidate = i->button; - bestScore = score/2; - } - } - break; - case Qt::Key_Right: - if ( p.x() > goal.x() && betterScore ) { - if ( TQABS( p.y() - goal.y() ) < TQABS( p.x() - goal.x() ) ) { - candidate = i->button; - bestScore = score; - } else if ( i->button->y() == f->y() ) { - candidate = i->button; - bestScore = score/2; - } - } - break; - } - } - i = buttons->next(); - } - - TQButton *buttoncand = ::tqqt_cast<TQButton*>(candidate); - if ( buttoncand && ::tqqt_cast<TQButton*>(f) && - ((TQButton*)f)->isOn() && - buttoncand->isToggleButton() && - ( isExclusive() || ( ::tqqt_cast<TQRadioButton*>(f) && - ::tqqt_cast<TQRadioButton*>(candidate)))) { - if ( f->focusPolicy() & Qt::TabFocus ) { - f->setFocusPolicy( (Qt::FocusPolicy)(f->focusPolicy() & ~Qt::TabFocus) ); - candidate->setFocusPolicy( (Qt::FocusPolicy)(candidate->focusPolicy()| - Qt::TabFocus) ); - } - buttoncand->setOn( TRUE ); - buttoncand->animateClick(); - buttoncand->animateTimeout(); // ### crude l&f hack - } - -#ifdef USE_QT4 - if ( candidate ) { - if (key == Qt::Key_Up || key == Qt::Key_Left) - candidate->setFocus(TQFocusEvent::Backtab); - else - candidate->setFocus(TQFocusEvent::Tab); - } -#else // USE_QT4 - if ( candidate ) { - if (key == Qt::Key_Up || key == Qt::Key_Left) - TQFocusEvent::setReason(TQFocusEvent::Backtab); - else - TQFocusEvent::setReason(TQFocusEvent::Tab); - candidate->setFocus(); - TQFocusEvent::resetReason(); - } -#endif // USE_QT4 -} - - -/*! - Returns the selected toggle button if exactly one is selected; - otherwise returns 0. - - \sa selectedId() -*/ - -TQButton * TQButtonGroup::selected() const -{ - if ( !buttons ) - return 0; - TQButtonListIt it( *buttons ); - TQButtonItem *i; - TQButton *candidate = 0; - - while ( (i = it.current()) != 0 ) { - ++it; - if ( i->button && i->button->isToggleButton() && i->button->isOn() ) { - if ( candidate != 0 ) - return 0; - candidate = i->button; - } - } - return candidate; -} - -/*! - \property TQButtonGroup::selectedId - \brief the selected toggle button - - The toggle button is specified as an ID. - - If no toggle button is selected, this property holds -1. - - If setButton() is called on an exclusive group, the button with - the given id will be set to on and all the others will be set to - off. - - \sa selected() -*/ - -int TQButtonGroup::selectedId() const -{ - return id( selected() ); -} - - -/*! - Returns the id of \a button, or -1 if \a button is not a member of - this group. - - \sa selectedId(); -*/ - -int TQButtonGroup::id( TQButton * button ) const -{ - TQButtonItem *i = buttons->first(); - while ( i && i->button != button ) - i = buttons->next(); - return i ? i->id : -1; -} - - -/*! - \reimp -*/ -bool TQButtonGroup::event( TQEvent * e ) -{ - if ( e->type() == TQEvent::ChildInserted ) { - TQChildEvent * ce = (TQChildEvent *) e; - if ( radio_excl && ::tqqt_cast<TQRadioButton*>(ce->child()) ) { - TQButton * button = (TQButton *) ce->child(); - if ( button->isToggleButton() && !button->isOn() && - selected() && (selected()->focusPolicy() & Qt::TabFocus) != 0 ) - button->setFocusPolicy( (Qt::FocusPolicy)(button->focusPolicy() & - ~Qt::TabFocus) ); - } - } - return TQGroupBox::event( e ); -} -#endif |