diff options
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqbutton.cpp')
-rw-r--r-- | tqtinterface/qt4/src/widgets/tqbutton.cpp | 1016 |
1 files changed, 0 insertions, 1016 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqbutton.cpp b/tqtinterface/qt4/src/widgets/tqbutton.cpp deleted file mode 100644 index a94d0cb..0000000 --- a/tqtinterface/qt4/src/widgets/tqbutton.cpp +++ /dev/null @@ -1,1016 +0,0 @@ -/**************************************************************************** -** -** Implementation of TQButton widget class -** -** Created : 940206 -** -** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. -** -** This file is part of the widgets module of the TQt GUI Toolkit. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at sales@trolltech.com. -** -** This file may be used under the terms of the Q Public License as -** defined by Trolltech ASA and appearing in the file LICENSE.TQPL -** included in the packaging of this file. Licensees holding valid TQt -** Commercial licenses may use this file in accordance with the TQt -** Commercial License Agreement provided with the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#undef TQT_NO_COMPAT -#include "tqbutton.h" -#ifndef TQT_NO_BUTTON -#include "tqbuttongroup.h" -#include "tqbitmap.h" -#include "tqpainter.h" -#include "tqtimer.h" -#include "tqaccel.h" -#include "tqpixmapcache.h" -#include "tqapplication.h" -#include "tqpushbutton.h" -#include "tqradiobutton.h" -#include "tqguardedptr.h" -#include "../kernel/tqinternal_p.h" - -#if defined(TQT_ACCESSIBILITY_SUPPORT) -#include "tqaccessible.h" -#endif - -#define AUTO_REPEAT_DELAY 300 -#define AUTO_REPEAT_PERIOD 100 - -class TQButtonData -{ -public: - TQButtonData() { -#ifndef TQT_NO_BUTTONGROUP - group = 0; -#endif -#ifndef TQT_NO_ACCEL - a = 0; -#endif - } -#ifndef TQT_NO_BUTTONGROUP - TQButtonGroup *group; -#endif - TQTimer timer; -#ifndef TQT_NO_ACCEL - TQAccel *a; -#endif -}; - - -void TQButton::ensureData() -{ - if ( !d ) { - d = new TQButtonData; - TQ_CHECK_PTR( d ); - connect(&d->timer, TQT_SIGNAL(timeout()), this, TQT_SLOT(autoRepeatTimeout())); - } -} - - -/*! - Returns the group that this button belongs to. - - If the button is not a member of any TQButtonGroup, this function - returns 0. - - \sa TQButtonGroup -*/ - -TQButtonGroup *TQButton::group() const -{ -#ifndef TQT_NO_BUTTONGROUP - return d ? d->group : 0; -#else - return 0; -#endif -} - - -void TQButton::setGroup( TQButtonGroup* g ) -{ -#ifndef TQT_NO_BUTTONGROUP - ensureData(); - d->group = g; -#endif -} - - -TQTimer *TQButton::timer() -{ - ensureData(); - return &d->timer; -} - - -/*! - \class TQButton tqbutton.h - \brief The TQButton class is the abstract base class of button - widgets, providing functionality common to buttons. - - \ingroup abstractwidgets - - <b>If you want to create a button use TQPushButton.</b> - - The TQButton class implements an \e abstract button, and lets - subclasses specify how to reply to user actions and how to draw - the button. - - TQButton provides both push and toggle buttons. The TQRadioButton - and TQCheckBox classes provide only toggle buttons; TQPushButton and - TQToolButton provide both toggle and push buttons. - - Any button can have either a text or pixmap label. setText() sets - the button to be a text button and setPixmap() sets it to be a - pixmap button. The text/pixmap is manipulated as necessary to - create the "disabled" appearance when the button is disabled. - - TQButton provides most of the states used for buttons: - \list - \i isDown() indicates whether the button is \e pressed down. - \i isOn() indicates whether the button is \e on. - Only toggle buttons can be switched on and off (see below). - \i isEnabled() indicates whether the button can be pressed by the - user. - \i setAutoRepeat() sets whether the button will auto-repeat - if the user holds it down. - \i setToggleButton() sets whether the button is a toggle - button or not. - \endlist - - The difference between isDown() and isOn() is as follows: When the - user clicks a toggle button to toggle it on, the button is first - \e pressed and then released into the \e on state. When the user - clicks it again (to toggle it off), the button moves first to the - \e pressed state, then to the \e off state (isOn() and isDown() - are both FALSE). - - Default buttons (as used in many dialogs) are provided by - TQPushButton::setDefault() and TQPushButton::setAutoDefault(). - - TQButton provides five Q_SIGNALS: - \list 1 - \i pressed() is emitted when the button is pressed. E.g. with the mouse - or when animateClick() is called. - \i released() is emitted when the button is released. E.g. when the mouse - is released or the cursor is moved outside the widget. - \i clicked() is emitted when the button is first pressed and then - released when the accelerator key is typed, or when - animateClick() is called. - \i toggled(bool) is emitted when the state of a toggle button changes. - \i stateChanged(int) is emitted when the state of a tristate - toggle button changes. - \endlist - - If the button is a text button with an ampersand (\&) in its text, - TQButton creates an automatic accelerator key. This code creates a - push button labelled "Ro<u>c</u>k \& Roll" (where the c is - underlined). The button gets an automatic accelerator key, Alt+C: - - \code - TQPushButton *p = new TQPushButton( "Ro&ck && Roll", this ); - \endcode - - In this example, when the user presses Alt+C the button will call - animateClick(). - - You can also set a custom accelerator using the setAccel() - function. This is useful mostly for pixmap buttons because they - have no automatic accelerator. - - \code - p->setPixmap( TQPixmap("print.png") ); - p->setAccel( ALT+Key_F7 ); - \endcode - - All of the buttons provided by TQt (\l TQPushButton, \l TQToolButton, - \l TQCheckBox and \l TQRadioButton) can display both text and - pixmaps. - - To subclass TQButton, you must reimplement at least drawButton() - (to draw the button's outline) and drawButtonLabel() (to draw its - text or pixmap). It is generally advisable to reimplement - tqsizeHint() as well, and sometimes hitButton() (to determine - whether a button press is within the button). - - To reduce flickering, TQButton::paintEvent() sets up a pixmap that - the drawButton() function draws in. You should not reimplement - paintEvent() for a subclass of TQButton unless you want to take - over all drawing. - - \sa TQButtonGroup -*/ - - -/*! - \enum TQButton::ToggleType - - This enum type defines what a button can do in response to a - mouse/keyboard press: - - \value SingleShot pressing the button causes an action, then the - button returns to the unpressed state. - - \value Toggle pressing the button toggles it between an \c On and - an \c Off state. - - \value Tristate pressing the button cycles between the three - states \c On, \c Off and \c NoChange -*/ - -/*! - \enum TQButton::ToggleState - - This enum defines the state of a toggle button. - - \value Off the button is in the "off" state - \value NoChange the button is in the default/unchanged state - \value On the button is in the "on" state -*/ - -/*! - \property TQButton::accel - \brief the accelerator associated with the button - - This property is 0 if there is no accelerator set. If you set this - property to 0 then any current accelerator is removed. -*/ - -/*! - \property TQButton::autoRepeat - \brief whether autoRepeat is enabled - - If autoRepeat is enabled then the clicked() signal is emitted at - regular intervals if the button is down. This property has no - effect on toggle buttons. autoRepeat is off by default. -*/ - -/*! \property TQButton::autoResize - \brief whether autoResize is enabled - \obsolete - - If autoResize is enabled then the button will resize itself - whenever the contents are changed. -*/ - -/*! - \property TQButton::down - \brief whether the button is pressed - - If this property is TRUE, the button is pressed down. The Q_SIGNALS - pressed() and clicked() are not emitted if you set this property - to TRUE. The default is FALSE. -*/ - -/*! - \property TQButton::exclusiveToggle - \brief whether the button is an exclusive toggle - - If this property is TRUE and the button is in a TQButtonGroup, the - button can only be toggled off by another one being toggled on. - The default is FALSE. -*/ - -/*! - \property TQButton::on - \brief whether the button is toggled - - This property should only be set for toggle buttons. -*/ - -/*! - \fn void TQButton::setOn( bool on ) - - Sets the state of this button to On if \a on is TRUE; otherwise to - Off. - - \sa toggleState -*/ - -/*! - \property TQButton::pixmap - \brief the pixmap shown on the button - - If the pixmap is monochrome (i.e. it is a TQBitmap or its \link - TQPixmap::depth() depth\endlink is 1) and it does not have a mask, - this property will set the pixmap to be its own mask. The purpose - of this is to draw transparent bitmaps which are important for - toggle buttons, for example. - - pixmap() returns 0 if no pixmap was set. -*/ - -/*! - \property TQButton::text - \brief the text shown on the button - - This property will return a TQString::null if the button has no - text. If the text has an ampersand (\&) in it, then an - accelerator is automatically created for it using the character - that follows the '\&' as the accelerator key. Any previous - accelerator will be overwritten, or cleared if no accelerator is - defined by the text. - - There is no default text. -*/ - -/*! - \property TQButton::toggleButton - \brief whether the button is a toggle button - - The default value is FALSE. -*/ - -/*! - \fn TQButton::setToggleButton( bool b ) - - If \a b is TRUE, this button becomes a toggle button; if \a b is - FALSE, this button becomes a command button. - - \sa toggleButton -*/ - -/*! - \property TQButton::toggleState - \brief the state of the toggle button - - If this property is changed then it does not cause the button - to be repainted. -*/ - -/*! - \property TQButton::toggleType - \brief the type of toggle on the button - - The default toggle type is \c SingleShot. - - \sa TQButton::ToggleType -*/ - -/*! - Constructs a standard button called \a name with parent \a parent, - using the widget flags \a f. - - If \a parent is a TQButtonGroup, this constructor calls - TQButtonGroup::insert(). -*/ - -TQButton::TQButton( TQWidget *parent, const char *name, WFlags f ) - : TQWidget( parent, name, f ) -{ - bpixmap = 0; - toggleTyp = SingleShot; // button is simple - buttonDown = FALSE; // button is up - stat = Off; // button is off - mlbDown = FALSE; // mouse left button up - autoresize = FALSE; // not auto resizing - animation = FALSE; // no pending animateClick - repeat = FALSE; // not in autorepeat mode - d = 0; -#ifndef TQT_NO_BUTTONGROUP - if ( ::tqqt_cast<TQButtonGroup*>(parent) ) { - setGroup((TQButtonGroup*)parent); - group()->insert( this ); // insert into button group - } -#endif - setFocusPolicy( Qt::TabFocus ); -} - -/*! - Destroys the button. - */ -TQButton::~TQButton() -{ -#ifndef TQT_NO_BUTTONGROUP - if ( group() ) - group()->remove( this ); -#endif - delete bpixmap; - delete d; -} - - -/*! - \fn void TQButton::pressed() - - This signal is emitted when the button is pressed down. - - \sa released(), clicked() -*/ - -/*! - \fn void TQButton::released() - - This signal is emitted when the button is released. - - \sa pressed(), clicked(), toggled() -*/ - -/*! - \fn void TQButton::clicked() - - This signal is emitted when the button is activated (i.e. first - pressed down and then released when the mouse cursor is inside the - button), when the accelerator key is typed or when animateClick() - is called. This signal is \e not emitted if you call setDown(). - - The TQButtonGroup::clicked() signal does the same job, if you want - to connect several buttons to the same slot. - - \warning Don't launch a model dialog in response to this signal - for a button that has \c autoRepeat turned on. - - \sa pressed(), released(), toggled() autoRepeat down -*/ - -/*! - \fn void TQButton::toggled( bool on ) - - This signal is emitted whenever a toggle button changes status. \a - on is TRUE if the button is on, or FALSE if the button is off. - - This may be the result of a user action, toggle() slot activation, - or because setOn() was called. - - \sa clicked() -*/ - -/*! - \fn void TQButton::stateChanged( int state ) - - This signal is emitted whenever a toggle button changes state. \a - state is \c On if the button is on, \c NoChange if it is in the - \link TQCheckBox::setTristate() "no change" state\endlink or \c Off - if the button is off. - - This may be the result of a user action, toggle() slot activation, - setState(), or because setOn() was called. - - \sa clicked() TQButton::ToggleState -*/ - -void TQButton::setText( const TQString &text ) -{ - if ( btext == text ) - return; - btext = text; -#ifndef TQT_NO_ACCEL - setAccel( TQAccel::shortcutKey( text ) ); -#endif - - if ( bpixmap ) { - delete bpixmap; - bpixmap = 0; - } - - if ( autoresize ) - adjustSize(); - - update(); - updateGeometry(); - -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::NameChanged ); -#endif -} - -void TQButton::setPixmap( const TQPixmap &pixmap ) -{ - if ( bpixmap && bpixmap->serialNumber() == pixmap.serialNumber() ) - return; - - bool newSize; - if ( bpixmap ) { - newSize = pixmap.width() != bpixmap->width() || - pixmap.height() != bpixmap->height(); - *bpixmap = pixmap; - } else { - newSize = TRUE; - bpixmap = new TQPixmap( pixmap ); - TQ_CHECK_PTR( bpixmap ); - } - if ( bpixmap->depth() == 1 && !bpixmap->mask() ) - bpixmap->setMask( *((TQBitmap *)bpixmap) ); - if ( !btext.isNull() ) { - btext = TQString::null; -#ifndef TQT_NO_ACCEL - setAccel( TQKeySequence() ); -#endif - } - if ( autoresize && newSize ) - adjustSize(); - if ( autoMask() ) - updateMask(); - update(); - if ( newSize ) - updateGeometry(); -} - - -#ifndef TQT_NO_ACCEL -TQKeySequence TQButton::accel() const -{ - if ( d && d->a ) - return d->a->key( 0 ); - return TQKeySequence(); -} - -void TQButton::setAccel( const TQKeySequence& key ) -{ - if ( d && d->a ) - d->a->clear(); - if ( key.isEmpty() ) - return; - ensureData(); - if ( !d->a ) { - d->a = new TQAccel( this, "buttonAccel" ); - connect( d->a, TQT_SIGNAL( activated(int) ), this, TQT_SLOT( animateClick() ) ); - connect( d->a, TQT_SIGNAL( activatedAmbiguously(int) ), this, TQT_SLOT( setFocus() ) ); - } - d->a->insertItem( key, 0 ); -} -#endif - -#ifndef TQT_NO_COMPAT - -void TQButton::setAutoResize( bool enable ) -{ - if ( (bool)autoresize != enable ) { - autoresize = enable; - if ( autoresize ) - adjustSize(); // calls resize which repaints - } -} - -#endif - -void TQButton::setAutoRepeat( bool enable ) -{ - repeat = (uint)enable; - if ( repeat && mlbDown ) - timer()->start( AUTO_REPEAT_DELAY, TRUE ); -} - -/*! - Performs an animated click: the button is pressed and released a - short while later. - - The pressed(), released(), clicked(), toggled(), and - stateChanged() Q_SIGNALS are emitted as appropriate. - - This function does nothing if the button is \link setEnabled() - disabled. \endlink - - \sa setAccel() -*/ - -void TQButton::animateClick() -{ - if ( !isEnabled() || animation ) - return; - animation = TRUE; - buttonDown = TRUE; - tqrepaint( FALSE ); - emit pressed(); - TQTimer::singleShot( 100, this, TQT_SLOT(animateTimeout()) ); -} - -void TQButton::emulateClick() -{ - if ( !isEnabled() || animation ) - return; - animation = TRUE; - buttonDown = TRUE; - emit pressed(); - animateTimeout(); -} - -void TQButton::setDown( bool enable ) -{ - if ( d ) - timer()->stop(); - mlbDown = FALSE; // the safe setting - if ( (bool)buttonDown != enable ) { - buttonDown = enable; - tqrepaint( FALSE ); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - } -} - -/*! - Sets the toggle state of the button to \a s. \a s can be \c Off, \c - NoChange or \c On. -*/ - -void TQButton::setState( ToggleState s ) -{ - if ( !toggleTyp ) { -#if defined(TQT_CHECK_STATE) - qWarning( "TQButton::setState() / setOn: (%s) Only toggle buttons " - "may be switched", name( "unnamed" ) ); -#endif - return; - } - - if ( (ToggleState)stat != s ) { // changed state - bool was = stat != Off; - stat = s; - if ( autoMask() ) - updateMask(); - tqrepaint( FALSE ); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - // ### toggled for tristate makes no sense. Don't emit the signal in 4.0 - if ( was != (stat != Off) ) - emit toggled( stat != Off ); - emit stateChanged( s ); - } -} - - -/*! - Returns TRUE if \a pos is inside the clickable button rectangle; - otherwise returns FALSE. - - By default, the clickable area is the entire widget. Subclasses - may reimplement it, though. -*/ -bool TQButton::hitButton( const TQPoint &pos ) const -{ - return TQT_TQRECT_OBJECT(rect()).contains( pos ); -} - -/*! - Draws the button. The default implementation does nothing. - - This virtual function is reimplemented by subclasses to draw real - buttons. At some point, these reimplementations should call - drawButtonLabel(). - - \sa drawButtonLabel(), paintEvent() -*/ -#if (TQT_VERSION-0 >= 0x040000) -#error "TQButton. Make pure virtual" -#endif -void TQButton::drawButton( TQPainter * ) -{ - return; -} - -/*! - Draws the button text or pixmap. - - This virtual function is reimplemented by subclasses to draw real - buttons. It is invoked by drawButton(). - - \sa drawButton(), paintEvent() -*/ - -void TQButton::drawButtonLabel( TQPainter * ) -{ - return; -} - -/*! \reimp */ -void TQButton::keyPressEvent( TQKeyEvent *e ) -{ - switch ( e->key() ) { - case Qt::Key_Enter: - case Qt::Key_Return: - { -#ifndef TQT_NO_PUSHBUTTON - TQPushButton *pb = (TQPushButton*)tqqt_cast( "TQPushButton" ); - if ( pb && ( pb->autoDefault() || pb->isDefault() ) ) - emit clicked(); - else -#endif - e->ignore(); - } - break; - case Qt::Key_Space: - if ( !e->isAutoRepeat() ) { - setDown( TRUE ); -#ifndef TQT_NO_PUSHBUTTON - if ( ::tqqt_cast<TQPushButton*>(this) ) - emit pressed(); - else -#endif - e->ignore(); - } - break; - case Qt::Key_Up: - case Qt::Key_Left: -#ifndef TQT_NO_BUTTONGROUP - if ( group() ) { - group()->moveFocus( e->key() ); - } else -#endif - { -#ifdef USE_QT4 - focusNextPrevChild( FALSE ); -#else // USE_QT4 - TQFocusEvent::setReason(TQFocusEvent::Backtab); - focusNextPrevChild( FALSE ); - TQFocusEvent::resetReason(); -#endif // USE_QT4 - } - break; - case Qt::Key_Right: - case Qt::Key_Down: -#ifndef TQT_NO_BUTTONGROUP - if ( group() ) { - group()->moveFocus( e->key() ); - } else -#endif - { -#ifdef USE_QT4 - focusNextPrevChild( TRUE ); -#else // USE_QT4 - TQFocusEvent::setReason(TQFocusEvent::Tab); - focusNextPrevChild( TRUE ); - TQFocusEvent::resetReason(); -#endif // USE_QT4 - } - break; - case Key_Escape: - if ( buttonDown ) { - buttonDown = FALSE; - update(); - break; - } - // fall through - default: - e->ignore(); - } -} - -/*! \reimp */ -void TQButton::keyReleaseEvent( TQKeyEvent * e) -{ - switch ( e->key() ) { - case Qt::Key_Space: - if ( buttonDown && !e->isAutoRepeat() ) { - buttonDown = FALSE; - nextState(); - emit released(); - emit clicked(); - } - break; - default: - e->ignore(); - } -} - -/*! \reimp */ -void TQButton::mousePressEvent( TQMouseEvent *e ) -{ - if ( e->button() != Qt::LeftButton ) { - e->ignore(); - return; - } - bool hit = hitButton( e->pos() ); - if ( hit ) { // mouse press on button - mlbDown = TRUE; // left mouse button down - buttonDown = TRUE; - if ( autoMask() ) - updateMask(); - - tqrepaint( FALSE ); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - TQGuardedPtr<TQTimer> t = timer(); - emit pressed(); - if ( t && repeat ) - t->start( AUTO_REPEAT_DELAY, TRUE ); - } -} - -/*! \reimp */ -void TQButton::mouseReleaseEvent( TQMouseEvent *e) -{ - if ( e->button() != Qt::LeftButton ) { - - // clean up apperance if left button has been pressed - if (mlbDown || buttonDown) { - mlbDown = FALSE; - buttonDown = FALSE; - - if ( autoMask() ) - updateMask(); - tqrepaint( FALSE ); - } - - e->ignore(); - return; - } - if ( !mlbDown ) - return; - if ( d ) - timer()->stop(); - - const bool oldButtonDown = buttonDown; - mlbDown = FALSE; // left mouse button up - buttonDown = FALSE; - if ( hitButton( e->pos() ) ) { // mouse release on button - nextState(); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - emit released(); - emit clicked(); - } else { - tqrepaint( FALSE ); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - if (oldButtonDown) - emit released(); - } -} - -/*! \reimp */ -void TQButton::mouseMoveEvent( TQMouseEvent *e ) -{ - if ( !((e->state() & Qt::LeftButton) && mlbDown) ) { - e->ignore(); - return; // left mouse button is up - } - if ( hitButton(e->pos()) ) { // mouse move in button - if ( !buttonDown ) { - buttonDown = TRUE; - tqrepaint( FALSE ); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - emit pressed(); - } - } else { // mouse move outside button - if ( buttonDown ) { - buttonDown = FALSE; - tqrepaint( FALSE ); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - emit released(); - } - } -} - - -/*! - Handles paint events for buttons. Small and typically complex - buttons are painted double-buffered to reduce flicker. The - actual drawing is done in the virtual functions drawButton() and - drawButtonLabel(). - - \sa drawButton(), drawButtonLabel() -*/ -void TQButton::paintEvent( TQPaintEvent *) -{ - TQSharedDoubleBuffer buffer( this ); - drawButton( buffer.painter() ); -} - -/*! \reimp */ -void TQButton::focusInEvent( TQFocusEvent * e) -{ - TQWidget::focusInEvent( e ); -} - -/*! \reimp */ -void TQButton::focusOutEvent( TQFocusEvent * e ) -{ - buttonDown = FALSE; - TQWidget::focusOutEvent( e ); -} - -/*! - Internal slot used for auto repeat. -*/ -void TQButton::autoRepeatTimeout() -{ - if ( mlbDown && isEnabled() && autoRepeat() ) { - TQGuardedPtr<TQTimer> t = timer(); - if ( buttonDown ) { - emit released(); - emit clicked(); - emit pressed(); - } - if ( t ) - t->start( AUTO_REPEAT_PERIOD, TRUE ); - } -} - -/*! - Internal slot used for the second stage of animateClick(). -*/ -void TQButton::animateTimeout() -{ - if ( !animation ) - return; - animation = FALSE; - buttonDown = FALSE; - nextState(); - emit released(); - emit clicked(); -} - - -void TQButton::nextState() -{ - bool t = isToggleButton() && !( isOn() && isExclusiveToggle() ); - bool was = stat != Off; - if ( t ) { - if ( toggleTyp == Tristate ) - stat = ( stat + 1 ) % 3; - else - stat = stat ? Off : On; - } - if ( autoMask() ) - updateMask(); - tqrepaint( FALSE ); - if ( t ) { -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif - if ( was != (stat != Off) ) - emit toggled( stat != Off ); - emit stateChanged( stat ); - } -} - -/*! \reimp */ -void TQButton::enabledChange( bool e ) -{ - if ( !isEnabled() ) - setDown( FALSE ); - TQWidget::enabledChange( e ); -} - - -/*! - Toggles the state of a toggle button. - - \sa isOn(), setOn(), toggled(), isToggleButton() -*/ -void TQButton::toggle() -{ - if ( isToggleButton() ) - setOn( !isOn() ); -} - -/*! - Sets the toggle type of the button to \a type. - - \a type can be set to \c SingleShot, \c Toggle and \c Tristate. -*/ -void TQButton::setToggleType( ToggleType type ) -{ - toggleTyp = type; - if ( type != Tristate && stat == NoChange ) - setState( On ); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - else - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif -} - -bool TQButton::isExclusiveToggle() const -{ -#ifndef TQT_NO_BUTTONGROUP - return group() && ( group()->isExclusive() || - (group()->isRadioButtonExclusive() && - ::tqqt_cast<TQRadioButton*>(this)) ); -#else - return FALSE; -#endif -} - -#endif |