diff options
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqpushbutton.cpp')
-rw-r--r-- | tqtinterface/qt4/src/widgets/tqpushbutton.cpp | 760 |
1 files changed, 0 insertions, 760 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqpushbutton.cpp b/tqtinterface/qt4/src/widgets/tqpushbutton.cpp deleted file mode 100644 index aecc6c7..0000000 --- a/tqtinterface/qt4/src/widgets/tqpushbutton.cpp +++ /dev/null @@ -1,760 +0,0 @@ -/**************************************************************************** -** -** Implementation of TQPushButton class -** -** Created : 940221 -** -** 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 "tqpushbutton.h" -#ifndef TQT_NO_PUSHBUTTON -#include "tqdialog.h" -#include "tqfontmetrics.h" -#include "tqpainter.h" -#include "tqdrawutil.h" -#include "tqpixmap.h" -#include "tqbitmap.h" -#include "tqpopupmenu.h" -#include "tqguardedptr.h" -#include "tqapplication.h" -#include "tqtoolbar.h" -#include "tqstyle.h" -#if defined(TQT_ACCESSIBILITY_SUPPORT) -#include "tqaccessible.h" -#endif - -/*! - \class TQPushButton tqpushbutton.h - \brief The TQPushButton widget provides a command button. - - \ingroup basic - \mainclass - - The push button, or command button, is perhaps the most commonly - used widget in any graphical user interface. Push (click) a button - to command the computer to perform some action, or to answer a - question. Typical buttons are OK, Apply, Cancel, Close, Yes, No - and Help. - - A command button is rectangular and typically displays a text - label describing its action. An underlined character in the label - (signified by preceding it with an ampersand in the text) - indicates an accelerator key, e.g. - \code - TQPushButton *pb = new TQPushButton( "&Download", this ); - \endcode - In this example the accelerator is \e{Alt+D}, and the label text - will be displayed as <b><u>D</u>ownload</b>. - - Push buttons can display a textual label or a pixmap, and - optionally a small icon. These can be set using the constructors - and changed later using setText(), setPixmap() and setIconSet(). - If the button is disabled the appearance of the text or pixmap and - iconset will be manipulated with respect to the GUI style to make - the button look "disabled". - - A push button emits the signal clicked() when it is activated by - the mouse, the Spacebar or by a keyboard accelerator. Connect to - this signal to perform the button's action. Push buttons also - provide less commonly used Q_SIGNALS, for example, pressed() and - released(). - - Command buttons in dialogs are by default auto-default buttons, - i.e. they become the default push button automatically when they - receive the keyboard input focus. A default button is a push - button that is activated when the user presses the Enter or Return - key in a dialog. You can change this with setAutoDefault(). Note - that auto-default buttons reserve a little extra space which is - necessary to draw a default-button indicator. If you do not want - this space around your buttons, call setAutoDefault(FALSE). - - Being so central, the button widget has grown to accommodate a - great many variations in the past decade. The Microsoft style - guide now shows about ten different states of Windows push buttons - and the text implies that there are dozens more when all the - combinations of features are taken into consideration. - - The most important modes or states are: - \list - \i Available or not (grayed out, disabled). - \i Standard push button, toggling push button or menu button. - \i On or off (only for toggling push buttons). - \i Default or normal. The default button in a dialog can generally - be "clicked" using the Enter or Return key. - \i Auto-repeat or not. - \i Pressed down or not. - \endlist - - As a general rule, use a push button when the application or - dialog window performs an action when the user clicks on it (such - as Apply, Cancel, Close and Help) \e and when the widget is - supposed to have a wide, rectangular tqshape with a text label. - Small, typically square buttons that change the state of the - window rather than performing an action (such as the buttons in - the top-right corner of the TQFileDialog) are not command buttons, - but tool buttons. TQt provides a special class (TQToolButton) for - these buttons. - - If you need toggle behavior (see setToggleButton()) or a button - that auto-repeats the activation signal when being pushed down - like the arrows in a scroll bar (see setAutoRepeat()), a command - button is probably not what you want. When in doubt, use a tool - button. - - A variation of a command button is a menu button. These provide - not just one command, but several, since when they are clicked - they pop up a menu of options. Use the method setPopup() to - associate a popup menu with a push button. - - Other classes of buttons are option buttons (see TQRadioButton) and - check boxes (see TQCheckBox). - - <img src="qpushbt-m.png"> <img src="qpushbt-w.png"> - - In TQt, the TQButton abstract base class provides most of the modes - and other API, and TQPushButton provides GUI logic. See TQButton for - more information about the API. - - \important text, setText, text, pixmap, setPixmap, accel, setAccel, - isToggleButton, setDown, isDown, isOn, state, autoRepeat, - isExclusiveToggle, group, setAutoRepeat, toggle, pressed, released, - clicked, toggled, state stateChanged - - \sa TQToolButton, TQRadioButton TQCheckBox - \link guibooks.html#fowler GUI Design Handbook: Push Button\endlink -*/ - -/*! - \property TQPushButton::autoDefault - \brief whether the push button is the auto default button - - If this property is set to TRUE then the push button is the auto - default button in a dialog. - - In some GUI styles a default button is drawn with an extra frame - around it, up to 3 pixels or more. TQt automatically keeps this - space free around auto-default buttons, i.e. auto-default buttons - may have a slightly larger size hint. - - This property's default is TRUE for buttons that have a TQDialog - parent; otherwise it defaults to FALSE. - - See the \l default property for details of how \l default and - auto-default interact. -*/ - -/*! - \property TQPushButton::autoMask - \brief whether the button is automatically masked - - \sa TQWidget::setAutoMask() -*/ - -/*! - \property TQPushButton::default - \brief whether the push button is the default button - - If this property is set to TRUE then the push button will be - pressed if the user presses the Enter (or Return) key in a dialog. - - Regardless of focus, if the user presses Enter: If there is a - default button the default button is pressed; otherwise, if - there are one or more \l autoDefault buttons the first \l autoDefault - button that is next in the tab order is pressed. If there are no - default or \l autoDefault buttons only pressing Space on a button - with focus, mouse clicking, or using an accelerator will press a - button. - - In a dialog, only one push button at a time can be the default - button. This button is then displayed with an additional frame - (depending on the GUI style). - - The default button behavior is provided only in dialogs. Buttons - can always be clicked from the keyboard by pressing Enter (or - Return) or the Spacebar when the button has focus. - - This property's default is FALSE. -*/ - -/*! - \property TQPushButton::flat - \brief whether the border is disabled - - This property's default is FALSE. -*/ - -/*! - \property TQPushButton::iconSet - \brief the icon set on the push button - - This property will return 0 if the push button has no iconset. -*/ - -/*! - \property TQPushButton::on - \brief whether the push button is toggled - - This property should only be set for toggle push buttons. The - default value is FALSE. - - \sa isOn(), toggle(), toggled(), isToggleButton() -*/ - -/*! - \property TQPushButton::toggleButton - \brief whether the button is a toggle button - - Toggle buttons have an on/off state similar to \link TQCheckBox - check boxes. \endlink A push button is initially not a toggle - button. - - \sa setOn(), toggle(), isToggleButton() toggled() -*/ - -/*! \property TQPushButton::menuButton - \brief whether the push button has a menu button on it - \obsolete - - If this property is set to TRUE, then a down arrow is drawn on the push - button to indicate that a menu will pop up if the user clicks on the - arrow. -*/ - -class TQPushButtonPrivate -{ -public: - TQPushButtonPrivate() - :iconset( 0 ) - {} - ~TQPushButtonPrivate() - { -#ifndef TQT_NO_ICONSET - delete iconset; -#endif - } -#ifndef TQT_NO_POPUPMENU - TQGuardedPtr<TQPopupMenu> popup; -#endif - TQIconSet* iconset; -}; - - -/*! - Constructs a push button with no text. - - The \a parent and \a name arguments are sent on to the TQWidget - constructor. -*/ - -TQPushButton::TQPushButton( TQWidget *parent, const char *name ) - : TQButton( parent, name ) -{ - init(); -} - -/*! - Constructs a push button called \a name with the parent \a parent - and the text \a text. -*/ - -TQPushButton::TQPushButton( const TQString &text, TQWidget *parent, - const char *name ) - : TQButton( parent, name ) -{ - init(); - setText( text ); -} - - -/*! - Constructs a push button with an \a icon and a \a text. - - Note that you can also pass a TQPixmap object as an icon (thanks to - the implicit type conversion provided by C++). - - The \a parent and \a name arguments are sent to the TQWidget - constructor. -*/ -#ifndef TQT_NO_ICONSET -TQPushButton::TQPushButton( const TQIconSet& icon, const TQString &text, - TQWidget *parent, const char *name ) - : TQButton( parent, name ) -{ - init(); - setText( text ); - setIconSet( icon ); -} -#endif - - -/*! - Destroys the push button. -*/ -TQPushButton::~TQPushButton() -{ - delete d; -} - -void TQPushButton::init() -{ - d = 0; - defButton = FALSE; - lastEnabled = FALSE; - hasMenuArrow = FALSE; - flt = FALSE; -#ifndef TQT_NO_DIALOG - autoDefButton = ::tqqt_cast<TQDialog*>(tqtopLevelWidget()) != 0; -#else - autoDefButton = FALSE; -#endif - setBackgroundMode( TQt::PaletteButton ); - tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Minimum, TQSizePolicy::Fixed ) ); -} - - -/* - Makes the push button a toggle button if \a enable is TRUE or a normal - push button if \a enable is FALSE. - - Toggle buttons have an on/off state similar to \link TQCheckBox check - boxes. \endlink A push button is initially not a toggle button. - - \sa setOn(), toggle(), isToggleButton() toggled() -*/ - -void TQPushButton::setToggleButton( bool enable ) -{ - TQButton::setToggleButton( enable ); -} - - -/* - Switches a toggle button on if \a enable is TRUE or off if \a enable is - FALSE. - \sa isOn(), toggle(), toggled(), isToggleButton() -*/ - -void TQPushButton::setOn( bool enable ) -{ - if ( !isToggleButton() ) - return; - TQButton::setOn( enable ); -} - -void TQPushButton::setAutoDefault( bool enable ) -{ - if ( (bool)autoDefButton == enable ) - return; - autoDefButton = enable; - update(); - updateGeometry(); -} - - -void TQPushButton::setDefault( bool enable ) -{ - if ( (bool)defButton == enable ) - return; // no change - defButton = enable; -#ifndef TQT_NO_DIALOG - if ( defButton && ::tqqt_cast<TQDialog*>(tqtopLevelWidget()) ) - ((TQDialog*)tqtopLevelWidget())->setMainDefault( this ); -#endif - update(); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif -} - - -/*! - \reimp -*/ -TQSize TQPushButton::tqsizeHint() const -{ - constPolish(); - - int w = 0, h = 0; - - // calculate contents size... -#ifndef TQT_NO_ICONSET - if ( iconSet() && !iconSet()->isNull() ) { - int iw = iconSet()->pixmap( TQIconSet::Small, TQIconSet::Normal ).width() + 4; - int ih = iconSet()->pixmap( TQIconSet::Small, TQIconSet::Normal ).height(); - w += iw; - h = TQMAX( h, ih ); - } -#endif - if ( isMenuButton() ) - w += tqstyle().tqpixelMetric(TQStyle::PM_MenuButtonIndicator, this); - - if ( pixmap() ) { - TQPixmap *pm = (TQPixmap *)pixmap(); - w += pm->width(); - h += pm->height(); - } else { - TQString s( text() ); - bool empty = s.isEmpty(); - if ( empty ) - s = TQString::tqfromLatin1("XXXX"); - TQFontMetrics fm = fontMetrics(); - TQSize sz = fm.size( TQt::ShowPrefix, s ); - if(!empty || !w) - w += sz.width(); - if(!empty || !h) - h = TQMAX(h, sz.height()); - } - - return (tqstyle().tqsizeFromContents(TQStyle::CT_PushButton, this, TQSize(w, h)). - expandedTo(TQApplication::globalStrut())); -} - - -/*! - \reimp -*/ -void TQPushButton::move( int x, int y ) -{ - TQWidget::move( x, y ); -} - -/*! - \reimp -*/ -void TQPushButton::move( const TQPoint &p ) -{ - move( p.x(), p.y() ); -} - -/*! - \reimp -*/ -void TQPushButton::resize( int w, int h ) -{ - TQWidget::resize( w, h ); -} - -/*! - \reimp -*/ -void TQPushButton::resize( const TQSize &s ) -{ - resize( s.width(), s.height() ); -} - -/*! - \reimp -*/ -void TQPushButton::setGeometry( int x, int y, int w, int h ) -{ - TQWidget::setGeometry( x, y, w, h ); -} - -/*! - \reimp -*/ -void TQPushButton::setGeometry( const TQRect &r ) -{ - TQWidget::setGeometry( r ); -} - -/*! - \reimp - */ -void TQPushButton::resizeEvent( TQResizeEvent * ) -{ - if ( autoMask() ) - updateMask(); -} - -/*! - \reimp -*/ -void TQPushButton::drawButton( TQPainter *paint ) -{ - int diw = 0; - if ( isDefault() || autoDefault() ) { - diw = tqstyle().tqpixelMetric(TQStyle::PM_ButtonDefaultIndicator, this); - - if ( diw > 0 ) { - if (backgroundMode() == TQt::X11ParentRelative) { - erase( 0, 0, width(), diw ); - erase( 0, 0, diw, height() ); - erase( 0, height() - diw, width(), diw ); - erase( width() - diw, 0, diw, height() ); - } else if ( parentWidget() && parentWidget()->backgroundPixmap() ){ - // pseudo tranparency - paint->drawTiledPixmap( 0, 0, width(), diw, - *parentWidget()->backgroundPixmap(), - x(), y() ); - paint->drawTiledPixmap( 0, 0, diw, height(), - *parentWidget()->backgroundPixmap(), - x(), y() ); - paint->drawTiledPixmap( 0, height()-diw, width(), diw, - *parentWidget()->backgroundPixmap(), - x(), y()+height() ); - paint->drawTiledPixmap( width()-diw, 0, diw, height(), - *parentWidget()->backgroundPixmap(), - x()+width(), y() ); - } else { - paint->fillRect( 0, 0, width(), diw, - tqcolorGroup().brush(TQColorGroup::Background) ); - paint->fillRect( 0, 0, diw, height(), - tqcolorGroup().brush(TQColorGroup::Background) ); - paint->fillRect( 0, height()-diw, width(), diw, - tqcolorGroup().brush(TQColorGroup::Background) ); - paint->fillRect( width()-diw, 0, diw, height(), - tqcolorGroup().brush(TQColorGroup::Background) ); - } - - } - } - - TQStyle::SFlags flags = TQStyle::Style_Default; - if (isEnabled()) - flags |= TQStyle::Style_Enabled; - if (hasFocus()) - flags |= TQStyle::Style_HasFocus; - if (isDown()) - flags |= TQStyle::Style_Down; - if (isOn()) - flags |= TQStyle::Style_On; - if (! isFlat() && ! isDown()) - flags |= TQStyle::Style_Raised; - if (isDefault()) - flags |= TQStyle::Style_ButtonDefault; - - tqstyle().tqdrawControl(TQStyle::CE_PushButton, paint, this, rect(), tqcolorGroup(), flags); - drawButtonLabel( paint ); - - lastEnabled = isEnabled(); -} - - -/*! - \reimp -*/ -void TQPushButton::drawButtonLabel( TQPainter *paint ) -{ - - TQStyle::SFlags flags = TQStyle::Style_Default; - if (isEnabled()) - flags |= TQStyle::Style_Enabled; - if (hasFocus()) - flags |= TQStyle::Style_HasFocus; - if (isDown()) - flags |= TQStyle::Style_Down; - if (isOn()) - flags |= TQStyle::Style_On; - if (! isFlat() && ! isDown()) - flags |= TQStyle::Style_Raised; - if (isDefault()) - flags |= TQStyle::Style_ButtonDefault; - - tqstyle().tqdrawControl(TQStyle::CE_PushButtonLabel, paint, this, - tqstyle().subRect(TQStyle::SR_PushButtonContents, this), - tqcolorGroup(), flags); -} - - -/*! - \reimp - */ -void TQPushButton::updateMask() -{ - TQBitmap bm( size() ); - bm.fill( Qt::color0 ); - - { - TQPainter p( &bm, this ); - tqstyle().tqdrawControlMask(TQStyle::CE_PushButton, &p, this, rect()); - } - - setMask( bm ); -} - -/*! - \reimp -*/ -void TQPushButton::focusInEvent( TQFocusEvent *e ) -{ - if (autoDefButton && !defButton) { - defButton = TRUE; -#ifndef TQT_NO_DIALOG - if ( defButton && ::tqqt_cast<TQDialog*>(tqtopLevelWidget()) ) - ((TQDialog*)tqtopLevelWidget())->setDefault( this ); -#endif - } - TQButton::focusInEvent( e ); -} - -/*! - \reimp -*/ -void TQPushButton::focusOutEvent( TQFocusEvent *e ) -{ -#ifndef TQT_NO_DIALOG - if ( defButton && autoDefButton ) { - if ( ::tqqt_cast<TQDialog*>(tqtopLevelWidget()) ) - ((TQDialog*)tqtopLevelWidget())->setDefault( 0 ); - } -#endif - - TQButton::focusOutEvent( e ); -#ifndef TQT_NO_POPUPMENU - if ( popup() && popup()->isVisible() ) // restore pressed status - setDown( TRUE ); -#endif -} - - -#ifndef TQT_NO_POPUPMENU -/*! - Associates the popup menu \a popup with this push button. This - turns the button into a menu button. - - Ownership of the popup menu is \e not transferred to the push - button. - - \sa popup() -*/ -void TQPushButton::setPopup( TQPopupMenu* popup ) -{ - if ( !d ) - d = new TQPushButtonPrivate; - if ( popup && !d->popup ) - connect( this, TQT_SIGNAL( pressed() ), this, TQT_SLOT( popupPressed() ) ); - - d->popup = popup; - setIsMenuButton( popup != 0 ); -} -#endif //TQT_NO_POPUPMENU -#ifndef TQT_NO_ICONSET -void TQPushButton::setIconSet( const TQIconSet& icon ) -{ - if ( !d ) - d = new TQPushButtonPrivate; - if ( !icon.isNull() ) { - if ( d->iconset ) - *d->iconset = icon; - else - d->iconset = new TQIconSet( icon ); - } else if ( d->iconset) { - delete d->iconset; - d->iconset = 0; - } - - update(); - updateGeometry(); -} - - -TQIconSet* TQPushButton::iconSet() const -{ - return d ? d->iconset : 0; -} -#endif // TQT_NO_ICONSET -#ifndef TQT_NO_POPUPMENU -/*! - Returns the button's associated popup menu or 0 if no popup menu - has been set. - - \sa setPopup() -*/ -TQPopupMenu* TQPushButton::popup() const -{ - return d ? (TQPopupMenu*)d->popup : 0; -} - -void TQPushButton::popupPressed() -{ - TQPopupMenu* popup = d ? (TQPopupMenu*) d->popup : 0; - TQGuardedPtr<TQPushButton> that = this; - if ( isDown() && popup ) { - bool horizontal = TRUE; - bool topLeft = TRUE; // ### always TRUE -#ifndef TQT_NO_TOOLBAR - TQToolBar *tb = ::tqqt_cast<TQToolBar*>(parentWidget()); - if ( tb && tb->orientation() == Qt::Vertical ) - horizontal = FALSE; -#endif - if ( horizontal ) { - if ( topLeft ) { - if ( mapToGlobal( TQPoint( 0, rect().bottom() ) ).y() + popup->tqsizeHint().height() <= tqApp->desktop()->height() ) - popup->exec( mapToGlobal( rect().bottomLeft() ) ); - else - popup->exec( mapToGlobal( rect().topLeft() - TQPoint( 0, popup->tqsizeHint().height() ) ) ); - } else { - TQSize sz( popup->tqsizeHint() ); - TQPoint p = mapToGlobal( rect().topLeft() ); - p.ry() -= sz.height(); - popup->exec( p ); - } - } else { - if ( topLeft ) { - if ( mapToGlobal( TQPoint( rect().right(), 0 ) ).x() + popup->tqsizeHint().width() <= tqApp->desktop()->width() ) - popup->exec( mapToGlobal( rect().topRight() ) ); - else - popup->exec( mapToGlobal( rect().topLeft() - TQPoint( popup->tqsizeHint().width(), 0 ) ) ); - } else { - TQSize sz( popup->tqsizeHint() ); - TQPoint p = mapToGlobal( rect().topLeft() ); - p.rx() -= sz.width(); - popup->exec( p ); - } - } - if (that) - setDown( FALSE ); - } -} -#endif - -void TQPushButton::setFlat( bool f ) -{ - flt = f; - update(); -} - -bool TQPushButton::isFlat() const -{ - return flt; -} - -/*! - \obsolete - \fn virtual void TQPushButton::setIsMenuButton( bool enable ) -*/ - -#endif |