diff options
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqaction.cpp')
-rw-r--r-- | tqtinterface/qt4/src/widgets/tqaction.cpp | 2145 |
1 files changed, 0 insertions, 2145 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqaction.cpp b/tqtinterface/qt4/src/widgets/tqaction.cpp deleted file mode 100644 index 6857dda..0000000 --- a/tqtinterface/qt4/src/widgets/tqaction.cpp +++ /dev/null @@ -1,2145 +0,0 @@ -/**************************************************************************** -** -** Implementation of TQAction class -** -** Copyright (C) 2000-2008 Trolltech ASA. All rights reserved. -** -** 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. -** -**********************************************************************/ - -#include "tqaction.h" - -#ifndef TQT_NO_ACTION - -#include "tqtoolbar.h" -#include "tqptrlist.h" -#include "tqpopupmenu.h" -#include "tqaccel.h" -#include "tqtoolbutton.h" -#include "tqcombobox.h" -#include "tqtooltip.h" -#include "tqwhatsthis.h" -#include "tqstatusbar.h" -#include "tqobjectlist.h" - - -/*! - \class TQAction tqaction.h - \brief The TQAction class provides an abstract user interface - action that can appear both in menus and tool bars. - - \ingroup basic - \ingroup application - \mainclass - - In GUI applications many commands can be invoked via a menu - option, a toolbar button and a keyboard accelerator. Since the - same action must be performed regardless of how the action was - invoked, and since the menu and toolbar should be kept in sync, it - is useful to represent a command as an \e action. An action can be - added to a menu and a toolbar and will automatically keep them in - sync. For example, if the user presses a Bold toolbar button the - Bold menu item will automatically be checked. - - A TQAction may contain an icon, a menu text, an accelerator, a - status text, a whats this text and a tool tip. Most of these can - be set in the constructor. They can also be set independently with - setIconSet(), setText(), setMenuText(), setToolTip(), - setStatusTip(), setWhatsThis() and setAccel(). - - An action may be a toggle action e.g. a Bold toolbar button, or a - command action, e.g. 'Open File' to invoke an open file dialog. - Toggle actions emit the toggled() signal when their state changes. - Both command and toggle actions emit the activated() signal when - they are invoked. Use setToggleAction() to set an action's toggled - status. To see if an action is a toggle action use - isToggleAction(). A toggle action may be "on", isOn() returns - TRUE, or "off", isOn() returns FALSE. - - Actions are added to widgets (menus or toolbars) using addTo(), - and removed using removeFrom(). - - Once a TQAction has been created it should be added to the relevant - menu and toolbar and then connected to the slot which will perform - the action. For example: - - \quotefile action/application.cpp - \skipto TQPixmap( fileopen - \printuntil connect - - We create a "File Save" action with a menu text of "&Save" and - \e{Ctrl+S} as the keyboard accelerator. We connect the - fileSaveAction's activated() signal to our own save() slot. Note - that at this point there is no menu or toolbar action, we'll add - them next: - - \skipto new TQToolBar - \printline - \skipto fileSaveAction->addTo - \printline - \skipto new TQPopupMenu - \printuntil insertItem - \skipto fileSaveAction->addTo - \printline - - We create a toolbar and add our fileSaveAction to it. Similarly we - create a menu, add a top-level menu item, and add our - fileSaveAction. - - We recommend that actions are created as tqchildren of the window - that they are used in. In most cases actions will be tqchildren of - the application's main window. - - To prevent recursion, don't create an action as a child of a - widget that the action is later added to. -*/ - -class TQActionPrivate -{ -public: - TQActionPrivate(TQAction *act); - ~TQActionPrivate(); - TQIconSet *iconset; - TQString text; - TQString menutext; - TQString tooltip; - TQString statustip; - TQString whatsthis; -#ifndef TQT_NO_ACCEL - TQKeySequence key; - TQAccel* accel; - int accelid; -#endif - uint enabled : 1; - uint visible : 1; - uint toggleaction : 1; - uint on : 1; - uint forceDisabled : 1; - uint forceInvisible : 1; -#ifndef TQT_NO_TOOLTIP - TQToolTipGroup tipGroup; -#endif - TQActionGroupPrivate* d_group; - TQAction *action; - - struct MenuItem { - MenuItem():popup(0),id(0){} - TQPopupMenu* popup; - int id; - }; - // ComboItem is only necessary for actions that are - // in dropdown/exclusive actiongroups. The actiongroup - // will clean this up - struct ComboItem { - ComboItem():combo(0), id(0) {} - TQComboBox *combo; - int id; - }; - TQPtrList<MenuItem> menuitems; - TQPtrList<TQToolButton> toolbuttons; - TQPtrList<ComboItem> comboitems; - - enum Update { Icons = 1, Visibility = 2, State = 4, EverythingElse = 8 }; - void update( uint upd = EverythingElse ); - - TQString menuText() const; - TQString toolTip() const; - TQString statusTip() const; -}; - -TQActionPrivate::TQActionPrivate(TQAction *act) - : iconset( 0 ), -#ifndef TQT_NO_ACCEL - key( 0 ), accel( 0 ), accelid( 0 ), -#endif - enabled( TRUE ), visible( TRUE ), toggleaction( FALSE ), on( FALSE ), - forceDisabled( FALSE ), forceInvisible( FALSE ), -#ifndef TQT_NO_TOOLTIP - tipGroup( 0 ), -#endif - d_group( 0 ), action(act) -{ - menuitems.setAutoDelete( TRUE ); - comboitems.setAutoDelete( TRUE ); -#ifndef TQT_NO_TOOLTIP - tipGroup.setDelay( FALSE ); -#endif -} - -TQActionPrivate::~TQActionPrivate() -{ - TQPtrListIterator<TQToolButton> ittb( toolbuttons ); - TQToolButton *tb; - - while ( ( tb = ittb.current() ) ) { - ++ittb; - delete tb; - } - - TQPtrListIterator<TQActionPrivate::MenuItem> itmi( menuitems); - TQActionPrivate::MenuItem* mi; - while ( ( mi = itmi.current() ) ) { - ++itmi; - TQPopupMenu* menu = mi->popup; - if ( menu->findItem( mi->id ) ) - menu->removeItem( mi->id ); - } - - TQPtrListIterator<TQActionPrivate::ComboItem> itci(comboitems); - TQActionPrivate::ComboItem* ci; - while ( ( ci = itci.current() ) ) { - ++itci; - TQComboBox* combo = ci->combo; - combo->clear(); - TQActionGroup *group = ::tqqt_cast<TQActionGroup*>(action->parent()); - TQObjectList *siblings = group ? group->queryList("TQAction") : 0; - if (siblings) { - TQObjectListIt it(*siblings); - while (it.current()) { - TQAction *sib = ::tqqt_cast<TQAction*>(it.current()); - ++it; - sib->removeFrom(combo); - } - it = TQObjectListIt(*siblings); - while (it.current()) { - TQAction *sib = ::tqqt_cast<TQAction*>(it.current()); - ++it; - if (sib == action) - continue; - sib->addTo(combo); - } - } - delete siblings; - } - -#ifndef TQT_NO_ACCEL - delete accel; -#endif - delete iconset; -} - -class TQActionGroupPrivate -{ -public: - uint exclusive: 1; - uint dropdown: 1; - TQPtrList<TQAction> actions; - TQAction* selected; - TQAction* separatorAction; - - struct MenuItem { - MenuItem():popup(0),id(0){} - TQPopupMenu* popup; - int id; - }; - - TQPtrList<TQComboBox> comboboxes; - TQPtrList<TQToolButton> menubuttons; - TQPtrList<MenuItem> menuitems; - TQPtrList<TQPopupMenu> popupmenus; - - void update( const TQActionGroup * ); -}; - -void TQActionPrivate::update( uint upd ) -{ - for ( TQPtrListIterator<MenuItem> it( menuitems); it.current(); ++it ) { - MenuItem* mi = it.current(); - TQString t = menuText(); -#ifndef TQT_NO_ACCEL - if ( key ) - t += '\t' + TQAccel::keyToString( key ); -#endif - if ( upd & State ) { - mi->popup->setItemEnabled( mi->id, enabled ); - if ( toggleaction ) - mi->popup->setItemChecked( mi->id, on ); - } - if ( upd & Visibility ) - mi->popup->setItemVisible( mi->id, visible ); - - if ( upd & Icons ) { - if ( iconset ) - mi->popup->changeItem( mi->id, *iconset, t ); - else - mi->popup->changeItem( mi->id, TQIconSet(), t ); - } - if ( upd & EverythingElse ) { - mi->popup->changeItem( mi->id, t ); - if ( !whatsthis.isEmpty() ) - mi->popup->TQMenuData::setWhatsThis( mi->id, whatsthis ); - if ( toggleaction ) { - mi->popup->setCheckable( TRUE ); - mi->popup->setItemChecked( mi->id, on ); - } - } - } - for ( TQPtrListIterator<TQToolButton> it2(toolbuttons); it2.current(); ++it2 ) { - TQToolButton* btn = it2.current(); - if ( upd & State ) { - btn->setEnabled( enabled ); - if ( toggleaction ) - btn->setOn( on ); - } - if ( upd & Visibility ) - visible ? btn->show() : btn->hide(); - if ( upd & Icons ) { - if ( iconset ) - btn->setIconSet( *iconset ); - else - btn->setIconSet( TQIconSet() ); - } - if ( upd & EverythingElse ) { - btn->setToggleButton( toggleaction ); - if ( !text.isEmpty() ) - btn->setTextLabel( text, FALSE ); -#ifndef TQT_NO_TOOLTIP - TQToolTip::remove( btn ); - TQToolTip::add( btn, toolTip(), &tipGroup, statusTip() ); -#endif -#ifndef TQT_NO_WHATSTHIS - TQWhatsThis::remove( btn ); - if ( !whatsthis.isEmpty() ) - TQWhatsThis::add( btn, whatsthis ); -#endif - } - } -#ifndef TQT_NO_ACCEL - if ( accel ) { - accel->setEnabled( enabled && visible ); - if ( !whatsthis.isEmpty() ) - accel->setWhatsThis( accelid, whatsthis ); - } -#endif - // Only used by actiongroup - for ( TQPtrListIterator<ComboItem> it3( comboitems ); it3.current(); ++it3 ) { - ComboItem *ci = it3.current(); - if ( !ci->combo ) - return; - if ( iconset ) - ci->combo->changeItem( iconset->pixmap(), text, ci->id ); - else - ci->combo->changeItem( text, ci->id ); - } -} - -TQString TQActionPrivate::menuText() const -{ - if ( menutext.isNull() ) { - TQString t(text); - t.replace('&', "&&"); - return t; - } - return menutext; -} - -TQString TQActionPrivate::toolTip() const -{ - if ( tooltip.isNull() ) { -#ifndef TQT_NO_ACCEL - if ( accel ) - return text + " (" + TQAccel::keyToString( accel->key( accelid )) + ")"; -#endif - return text; - } - return tooltip; -} - -TQString TQActionPrivate::statusTip() const -{ - if ( statustip.isNull() ) - return toolTip(); - return statustip; -} - -/* - internal: guesses a descriptive text from a menu text - */ -static TQString qt_stripMenuText( TQString s ) -{ - s.remove( TQString::tqfromLatin1("...") ); - s.remove( TQChar('&' ) ); - return s.stripWhiteSpace(); -} - -/*! - Constructs an action called \a name with parent \a parent. - - If \a parent is a TQActionGroup, the new action inserts itself into - \a parent. - - For accelerators and status tips to work, \a parent must either be - a widget, or an action group whose parent is a widget. - - \warning To prevent recursion, don't create an action as a child - of a widget that the action is later added to. -*/ -TQAction::TQAction( TQT_BASE_OBJECT_NAME* parent, const char* name ) - : TQObject( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionPrivate(this); - init(); -} - -/*! \obsolete - Constructs an action called \a name with parent \a parent. - - If \a toggle is TRUE the action will be a toggle action, otherwise - it will be a command action. - - If \a parent is a TQActionGroup, the new action inserts itself into - \a parent. - - For accelerators and status tips to work, \a parent must either be - a widget, or an action group whose parent is a widget. -*/ -TQAction::TQAction( TQT_BASE_OBJECT_NAME* parent, const char* name, bool toggle ) - : TQObject( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionPrivate(this); - d->toggleaction = toggle; - init(); -} - - -#ifndef TQT_NO_ACCEL - -/*! - This constructor creates an action with the following properties: - the icon or iconset \a icon, the menu text \a menuText and - keyboard accelerator \a accel. It is a child of \a parent and - called \a name. - - If \a parent is a TQActionGroup, the action automatically becomes - a member of it. - - For accelerators and status tips to work, \a parent must either be - a widget, or an action group whose parent is a widget. - - The action uses a stripped version of \a menuText (e.g. "\&Menu - Option..." becomes "Menu Option") as descriptive text for - toolbuttons. You can override this by setting a specific - description with setText(). The same text and \a accel will be - used for tool tips and status tips unless you provide text for - these using setToolTip() and setStatusTip(). - - Call setToggleAction(TRUE) to make the action a toggle action. - - \warning To prevent recursion, don't create an action as a child - of a widget that the action is later added to. -*/ -TQAction::TQAction( const TQIconSet& icon, const TQString& menuText, TQKeySequence accel, - TQT_BASE_OBJECT_NAME* parent, const char* name ) - : TQObject( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionPrivate(this); - if ( !icon.isNull() ) - setIconSet( icon ); - d->text = qt_stripMenuText( menuText ); - d->menutext = menuText; - setAccel( accel ); - init(); -} - -/*! - This constructor results in an icon-less action with the the menu - text \a menuText and keyboard accelerator \a accel. It is a child - of \a parent and called \a name. - - If \a parent is a TQActionGroup, the action automatically becomes - a member of it. - - For accelerators and status tips to work, \a parent must either be - a widget, or an action group whose parent is a widget. - - The action uses a stripped version of \a menuText (e.g. "\&Menu - Option..." becomes "Menu Option") as descriptive text for - toolbuttons. You can override this by setting a specific - description with setText(). The same text and \a accel will be - used for tool tips and status tips unless you provide text for - these using setToolTip() and setStatusTip(). - - Call setToggleAction(TRUE) to make the action a toggle action. - - \warning To prevent recursion, don't create an action as a child - of a widget that the action is later added to. -*/ -TQAction::TQAction( const TQString& menuText, TQKeySequence accel, - TQT_BASE_OBJECT_NAME* parent, const char* name ) - : TQObject( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionPrivate(this); - d->text = qt_stripMenuText( menuText ); - d->menutext = menuText; - setAccel( accel ); - init(); -} - -/*! \obsolete - This constructor creates an action with the following properties: - the description \a text, the icon or iconset \a icon, the menu - text \a menuText and keyboard accelerator \a accel. It is a child - of \a parent and called \a name. If \a toggle is TRUE the action - will be a toggle action, otherwise it will be a command action. - - If \a parent is a TQActionGroup, the action automatically becomes - a member of it. - - For accelerators and status tips to work, \a parent must either be - a widget, or an action group whose parent is a widget. - - The \a text and \a accel will be used for tool tips and status - tips unless you provide specific text for these using setToolTip() - and setStatusTip(). -*/ -TQAction::TQAction( const TQString& text, const TQIconSet& icon, const TQString& menuText, TQKeySequence accel, TQT_BASE_OBJECT_NAME* parent, const char* name, bool toggle ) - : TQObject( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionPrivate(this); - d->toggleaction = toggle; - if ( !icon.isNull() ) - setIconSet( icon ); - - d->text = text; - d->menutext = menuText; - setAccel( accel ); - init(); -} - -/*! \obsolete - This constructor results in an icon-less action with the - description \a text, the menu text \a menuText and the keyboard - accelerator \a accel. Its parent is \a parent and it is called \a - name. If \a toggle is TRUE the action will be a toggle action, - otherwise it will be a command action. - - The action automatically becomes a member of \a parent if \a - parent is a TQActionGroup. - - For accelerators and status tips to work, \a parent must either be - a widget, or an action group whose parent is a widget. - - The \a text and \a accel will be used for tool tips and status - tips unless you provide specific text for these using setToolTip() - and setStatusTip(). -*/ -TQAction::TQAction( const TQString& text, const TQString& menuText, TQKeySequence accel, TQT_BASE_OBJECT_NAME* parent, const char* name, bool toggle ) - : TQObject( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionPrivate(this); - d->toggleaction = toggle; - d->text = text; - d->menutext = menuText; - setAccel( accel ); - init(); -} -#endif - -/*! - \internal -*/ -void TQAction::init() -{ - if ( ::tqqt_cast<TQActionGroup*>(parent()) ) - ((TQActionGroup*) parent())->add( this ); // insert into action group -} - -/*! - Destroys the object and frees allocated resources. -*/ - -TQAction::~TQAction() -{ - delete d; -} - -/*! - \property TQAction::iconSet - \brief the action's icon - - The icon is used as the tool button icon and in the menu to the - left of the menu text. There is no default icon. - - If a null icon (TQIconSet::isNull() is passed into this function, - the icon of the action is cleared. - - (See the action/toggleaction/toggleaction.cpp example.) - -*/ -void TQAction::setIconSet( const TQIconSet& icon ) -{ - register TQIconSet *i = d->iconset; - if ( !icon.isNull() ) - d->iconset = new TQIconSet( icon ); - else - d->iconset = 0; - delete i; - d->update( TQActionPrivate::Icons ); -} - -TQIconSet TQAction::iconSet() const -{ - if ( d->iconset ) - return *d->iconset; - return TQIconSet(); -} - -/*! - \property TQAction::text - \brief the action's descriptive text - - If \l TQMainWindow::usesTextLabel is TRUE, the text appears as a - label in the relevant tool button. It also serves as the default - text in menus and tool tips if these have not been specifically - defined. There is no default text. - - \sa setMenuText() setToolTip() setStatusTip() -*/ -void TQAction::setText( const TQString& text ) -{ - d->text = text; - d->update(); -} - -TQString TQAction::text() const -{ - return d->text; -} - - -/*! - \property TQAction::menuText - \brief the action's menu text - - If the action is added to a menu the menu option will consist of - the icon (if there is one), the menu text and the accelerator (if - there is one). If the menu text is not explicitly set in the - constructor or by using setMenuText() the action's description - text will be used as the menu text. There is no default menu text. - - \sa text -*/ -void TQAction::setMenuText( const TQString& text ) -{ - if ( d->menutext == text ) - return; - - d->menutext = text; - d->update(); -} - -TQString TQAction::menuText() const -{ - return d->menuText(); -} - -/*! - \property TQAction::toolTip - \brief the action's tool tip - - This text is used for the tool tip. If no status tip has been set - the tool tip will be used for the status tip. - - If no tool tip is specified the action's text is used, and if that - hasn't been specified the description text is used as the tool tip - text. - - There is no default tool tip text. - - \sa setStatusTip() setAccel() -*/ -void TQAction::setToolTip( const TQString& tip ) -{ - if ( d->tooltip == tip ) - return; - - d->tooltip = tip; - d->update(); -} - -TQString TQAction::toolTip() const -{ - return d->toolTip(); -} - -/*! - \property TQAction::statusTip - \brief the action's status tip - - The statusTip is displayed on all status bars that this action's - toplevel parent widget provides. - - If no status tip is defined, the action uses the tool tip text. - - There is no default statusTip text. - - \sa setStatusTip() setToolTip() -*/ -//#### Please reimp for TQActionGroup! -//#### For consistency reasons even action groups should show -//#### status tips (as they already do with tool tips) -//#### Please change TQActionGroup class doc appropriately after -//#### reimplementation. -void TQAction::setStatusTip( const TQString& tip ) -{ - if ( d->statustip == tip ) - return; - - d->statustip = tip; - d->update(); -} - -TQString TQAction::statusTip() const -{ - return d->statusTip(); -} - -/*! - \property TQAction::whatsThis - \brief the action's "What's This?" help text - - The whats this text is used to provide a brief description of the - action. The text may contain rich text (HTML-like tags -- see - TQStyleSheet for the list of supported tags). There is no default - "What's This" text. - - \sa TQWhatsThis -*/ -void TQAction::setWhatsThis( const TQString& whatsThis ) -{ - if ( d->whatsthis == whatsThis ) - return; - d->whatsthis = whatsThis; - d->update(); -} - -TQString TQAction::whatsThis() const -{ - return d->whatsthis; -} - - -#ifndef TQT_NO_ACCEL -/*! - \property TQAction::accel - \brief the action's accelerator key - - The keycodes can be found in \l TQt::Key and \l TQt::Modifier. There - is no default accelerator key. -*/ -//#### Please reimp for TQActionGroup! -//#### For consistency reasons even TQActionGroups should respond to -//#### their accelerators and e.g. open the relevant submenu. -//#### Please change appropriate TQActionGroup class doc after -//#### reimplementation. -void TQAction::setAccel( const TQKeySequence& key ) -{ - if ( d->key == key ) - return; - - d->key = key; - delete d->accel; - d->accel = 0; - - if ( !(int)key ) { - d->update(); - return; - } - - TQObject* p = parent(); - while ( p && !p->isWidgetType() ) { - p = p->parent(); - } - if ( p ) { - d->accel = new TQAccel( (TQWidget*)p, this, "qt_action_accel" ); - d->accelid = d->accel->insertItem( d->key ); - d->accel->connectItem( d->accelid, this, TQT_SLOT( internalActivation() ) ); - } -#if defined(TQT_CHECK_STATE) - else - qWarning( "TQAction::setAccel() (%s) requires widget in parent chain", name() ); -#endif - d->update(); -} - - -TQKeySequence TQAction::accel() const -{ - return d->key; -} -#endif - - -/*! - \property TQAction::toggleAction - \brief whether the action is a toggle action - - A toggle action is one which has an on/off state. For example a - Bold toolbar button is either on or off. An action which is not a - toggle action is a command action; a command action is simply - executed, e.g. file save. This property's default is FALSE. - - In some situations, the state of one toggle action should depend - on the state of others. For example, "Left Align", "Center" and - "Right Align" toggle actions are mutually exclusive. To achieve - exclusive toggling, add the relevant toggle actions to a - TQActionGroup with the \l TQActionGroup::exclusive property set to - TRUE. -*/ -void TQAction::setToggleAction( bool enable ) -{ - if ( enable == (bool)d->toggleaction ) - return; - - if ( !enable ) - d->on = FALSE; - - d->toggleaction = enable; - d->update(); -} - -bool TQAction::isToggleAction() const -{ - return d->toggleaction; -} - -/*! - Activates the action and executes all connected Q_SLOTS. - This only works for actions that are not toggle action. - - \sa toggle() -*/ -void TQAction::activate() -{ - if ( isToggleAction() ) { -#if defined(TQT_CHECK_STATE) - qWarning( "TQAction::%s() (%s) Toggle actions " - "can not be activated", "activate", name() ); -#endif - return; - } - emit activated(); -} - -/*! - Toggles the state of a toggle action. - - \sa on, activate(), toggled(), isToggleAction() -*/ -void TQAction::toggle() -{ - if ( !isToggleAction() ) { -#if defined(TQT_CHECK_STATE) - qWarning( "TQAction::%s() (%s) Only toggle actions " - "can be switched", "toggle", name() ); -#endif - return; - } - setOn( !isOn() ); -} - -/*! - \property TQAction::on - \brief whether a toggle action is on - - This property is always on (TRUE) for command actions and - \l{TQActionGroup}s; setOn() has no effect on them. For action's - where isToggleAction() is TRUE, this property's default value is - off (FALSE). - - \sa toggleAction -*/ -void TQAction::setOn( bool enable ) -{ - if ( !isToggleAction() ) { -#if defined(TQT_CHECK_STATE) - if ( enable ) - qWarning( "TQAction::%s() (%s) Only toggle actions " - "can be switched", "setOn", name() ); -#endif - return; - } - if ( enable == (bool)d->on ) - return; - d->on = enable; - d->update( TQActionPrivate::State ); - emit toggled( enable ); -} - -bool TQAction::isOn() const -{ - return d->on; -} - -/*! - \property TQAction::enabled - \brief whether the action is enabled - - Disabled actions can't be chosen by the user. They don't disappear - from the menu/tool bar but are displayed in a way which indicates - that they are unavailable, e.g. they might be displayed grayed - out. - - What's this? help on disabled actions is still available provided - the \l TQAction::whatsThis property is set. -*/ -void TQAction::setEnabled( bool enable ) -{ - d->forceDisabled = !enable; - - if ( (bool)d->enabled == enable ) - return; - - d->enabled = enable; - d->update( TQActionPrivate::State ); -} - -bool TQAction::isEnabled() const -{ - return d->enabled; -} - -/*! - Disables the action if \a disable is TRUE; otherwise - enables the action. - - See the \l enabled documentation for more information. -*/ -void TQAction::setDisabled( bool disable ) -{ - setEnabled( !disable ); -} - -/*! - \property TQAction::visible - \brief whether the action can be seen (e.g. in menus and toolbars) - - If \e visible is TRUE the action can be seen (e.g. in menus and - toolbars) and chosen by the user; if \e visible is FALSE the - action cannot be seen or chosen by the user. - - Actions which are not visible are \e not grayed out; they do not - appear at all. -*/ -void TQAction::tqsetVisible( bool visible ) -{ - d->forceInvisible = !visible; - - if ( (bool)d->visible == visible ) - return; - d->visible = visible; - d->update( TQActionPrivate::Visibility ); -#if (TQT_VERSION-0 >= 0x040000) -#error "TQAction::tqsetVisible function wants to be virtual. Also add virtual change() function" -#endif - if ( d->d_group ) //### this function wants to be virtual in 4.0 - d->d_group->update( (TQActionGroup*) this ); -} - -/* - Returns TRUE if the action is visible (e.g. in menus and - toolbars); otherwise returns FALSE. -*/ -bool TQAction::isVisible() const -{ - return d->visible; -} - -/*! \internal -*/ -void TQAction::internalActivation() -{ - if ( isToggleAction() ) - setOn( !isOn() ); - emit activated(); -} - -/*! \internal -*/ -void TQAction::toolButtonToggled( bool on ) -{ - if ( !isToggleAction() ) - return; - setOn( on ); -} - -/*! - Adds this action to widget \a w. - - Currently actions may be added to TQToolBar and TQPopupMenu widgets. - - An action added to a tool bar is automatically displayed as a tool - button; an action added to a pop up menu appears as a menu option. - - addTo() returns TRUE if the action was added successfully and - FALSE otherwise. (If \a w is not a TQToolBar or TQPopupMenu the - action will not be added and FALSE will be returned.) - - \sa removeFrom() -*/ -bool TQAction::addTo( TQWidget* w ) -{ -#ifndef TQT_NO_TOOLBAR - if ( ::tqqt_cast<TQToolBar*>(w) ) { - if ( !qstrcmp( name(), "qt_separator_action" ) ) { - ((TQToolBar*)w)->addSeparator(); - } else { - TQCString bname = name() + TQCString( "_action_button" ); - TQToolButton* btn = new TQToolButton( (TQToolBar*) w, bname ); - addedTo( btn, w ); - btn->setToggleButton( d->toggleaction ); - d->toolbuttons.append( btn ); - if ( d->iconset ) - btn->setIconSet( *d->iconset ); - d->update( TQActionPrivate::State | TQActionPrivate::Visibility | TQActionPrivate::EverythingElse ) ; - connect( btn, TQT_SIGNAL( clicked() ), this, TQT_SIGNAL( activated() ) ); - connect( btn, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( toolButtonToggled(bool) ) ); - connect( btn, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( objectDestroyed() ) ); -#ifndef TQT_NO_TOOLTIP - connect( &(d->tipGroup), TQT_SIGNAL(showTip(const TQString&)), this, TQT_SLOT(showtqStatusText(const TQString&)) ); - connect( &(d->tipGroup), TQT_SIGNAL(removeTip()), this, TQT_SLOT(cleartqStatusText()) ); -#endif - } - } else -#endif - if ( ::tqqt_cast<TQPopupMenu*>(w) ) { - TQActionPrivate::MenuItem* mi = new TQActionPrivate::MenuItem; - mi->popup = (TQPopupMenu*) w; - TQIconSet* diconset = d->iconset; - if ( !qstrcmp( name(), "qt_separator_action" ) ) - mi->id = ((TQPopupMenu*)w)->insertSeparator(); - else if ( diconset ) - mi->id = mi->popup->insertItem( *diconset, TQString::tqfromLatin1("") ); - else - mi->id = mi->popup->insertItem( TQString::tqfromLatin1("") ); - addedTo( mi->popup->indexOf( mi->id ), mi->popup ); - mi->popup->connectItem( mi->id, this, TQT_SLOT(internalActivation()) ); - d->menuitems.append( mi ); - d->update( TQActionPrivate::State | TQActionPrivate::Visibility | TQActionPrivate::EverythingElse ) ; - w->tqtopLevelWidget()->className(); - connect( mi->popup, TQT_SIGNAL(highlighted(int)), this, TQT_SLOT(menutqStatusText(int)) ); - connect( mi->popup, TQT_SIGNAL(aboutToHide()), this, TQT_SLOT(cleartqStatusText()) ); - connect( mi->popup, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( objectDestroyed() ) ); - // Makes only sense when called by TQActionGroup::addTo - } else if ( ::tqqt_cast<TQComboBox*>(w) ) { - TQActionPrivate::ComboItem *ci = new TQActionPrivate::ComboItem; - ci->combo = (TQComboBox*)w; - connect( ci->combo, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( objectDestroyed() ) ); - ci->id = ci->combo->count(); - if ( qstrcmp( name(), "qt_separator_action" ) ) { - if ( d->iconset ) - ci->combo->insertItem( d->iconset->pixmap(), text() ); - else - ci->combo->insertItem( text() ); - } else { - ci->id = -1; - } - d->comboitems.append( ci ); - - d->update( TQActionPrivate::State | TQActionPrivate::EverythingElse ); - } else { - qWarning( "TQAction::addTo(), unknown object" ); - return FALSE; - } - return TRUE; -} - -/*! - This function is called from the addTo() function when it has - created a widget (\a actionWidget) for the action in the \a - container. -*/ - -void TQAction::addedTo( TQWidget *actionWidget, TQWidget *container ) -{ - TQ_UNUSED( actionWidget ); - TQ_UNUSED( container ); -} - -/*! - \overload - - This function is called from the addTo() function when it has - created a menu item at the index position \a index in the popup - menu \a menu. -*/ - -void TQAction::addedTo( int index, TQPopupMenu *menu ) -{ - TQ_UNUSED( index ); - TQ_UNUSED( menu ); -} - -/*! - Sets the status message to \a text -*/ -void TQAction::showtqStatusText( const TQString& text ) -{ -#ifndef TQT_NO_STATUSBAR - // find out whether we are clearing the status bar by the popup that actually set the text - static TQPopupMenu *lastmenu = 0; - TQObject *s = (TQObject*)sender(); - if ( s ) { - TQPopupMenu *menu = (TQPopupMenu*)s->tqqt_cast( "TQPopupMenu" ); - if ( menu && !!text ) - lastmenu = menu; - else if ( menu && text.isEmpty() ) { - if ( lastmenu && menu != lastmenu ) - return; - lastmenu = 0; - } - } - - TQObject* par = parent(); - TQObject* lpar = 0; - TQStatusBar *bar = 0; - while ( par && !bar ) { - lpar = par; - bar = (TQStatusBar*)par->child( 0, "TQStatusBar", FALSE ); - par = par->parent(); - } - if ( !bar && lpar ) { - TQObjectList *l = lpar->queryList( "TQStatusBar" ); - if ( !l ) - return; - // #### hopefully the last one is the one of the mainwindow... - bar = (TQStatusBar*)l->last(); - delete l; - } - if ( bar ) { - if ( text.isEmpty() ) - bar->clear(); - else - bar->message( text ); - } -#endif -} - -/*! - Sets the status message to the menu item's status text, or to the - tooltip, if there is no status text. -*/ -void TQAction::menutqStatusText( int id ) -{ - static int lastId = 0; - TQString text; - TQPtrListIterator<TQActionPrivate::MenuItem> it( d->menuitems); - TQActionPrivate::MenuItem* mi; - while ( ( mi = it.current() ) ) { - ++it; - if ( mi->id == id ) { - text = statusTip(); - break; - } - } - - if ( !text.isEmpty() ) - showtqStatusText( text ); - else if ( id != lastId ) - cleartqStatusText(); - lastId = id; -} - -/*! - Clears the status text. -*/ -void TQAction::cleartqStatusText() -{ - if (!statusTip().isEmpty()) - showtqStatusText( TQString::null ); -} - -/*! - Removes the action from widget \a w. - - Returns TRUE if the action was removed successfully; otherwise - returns FALSE. - - \sa addTo() -*/ -bool TQAction::removeFrom( TQWidget* w ) -{ -#ifndef TQT_NO_TOOLBAR - if ( ::tqqt_cast<TQToolBar*>(w) ) { - TQPtrListIterator<TQToolButton> it( d->toolbuttons); - TQToolButton* btn; - while ( ( btn = it.current() ) ) { - ++it; - if ( btn->parentWidget() == w ) { - d->toolbuttons.removeRef( btn ); - disconnect( btn, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( objectDestroyed() ) ); - delete btn; - // no need to disconnect from statusbar - } - } - } else -#endif - if ( ::tqqt_cast<TQPopupMenu*>(w) ) { - TQPtrListIterator<TQActionPrivate::MenuItem> it( d->menuitems); - TQActionPrivate::MenuItem* mi; - while ( ( mi = it.current() ) ) { - ++it; - if ( mi->popup == w ) { - disconnect( mi->popup, TQT_SIGNAL(highlighted(int)), this, TQT_SLOT(menutqStatusText(int)) ); - disconnect( mi->popup, TQT_SIGNAL(aboutToHide()), this, TQT_SLOT(cleartqStatusText()) ); - disconnect( mi->popup, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( objectDestroyed() ) ); - mi->popup->removeItem( mi->id ); - d->menuitems.removeRef( mi ); - } - } - } else if ( ::tqqt_cast<TQComboBox*>(w) ) { - TQPtrListIterator<TQActionPrivate::ComboItem> it( d->comboitems ); - TQActionPrivate::ComboItem *ci; - while ( ( ci = it.current() ) ) { - ++it; - if ( ci->combo == w ) { - disconnect( ci->combo, TQT_SIGNAL(destroyed()), this, TQT_SLOT(objectDestroyed()) ); - d->comboitems.removeRef( ci ); - } - } - } else { - qWarning( "TQAction::removeFrom(), unknown object" ); - return FALSE; - } - return TRUE; -} - -/*! - \internal -*/ -void TQAction::objectDestroyed() -{ - const TQObject* obj = TQT_TQOBJECT(sender()); - TQPtrListIterator<TQActionPrivate::MenuItem> it( d->menuitems ); - TQActionPrivate::MenuItem* mi; - while ( ( mi = it.current() ) ) { - ++it; - if ( TQT_TQOBJECT(mi->popup) == obj ) - d->menuitems.removeRef( mi ); - } - TQActionPrivate::ComboItem *ci; - TQPtrListIterator<TQActionPrivate::ComboItem> it2( d->comboitems ); - while ( ( ci = it2.current() ) ) { - ++it2; - if ( TQT_TQOBJECT(ci->combo) == obj ) - d->comboitems.removeRef( ci ); - } - d->toolbuttons.removeRef( (TQToolButton*) obj ); -} - -/*! - \fn void TQAction::activated() - - This signal is emitted when an action is activated by the user, - e.g. when the user clicks a menu option or a toolbar button or - presses an action's accelerator key combination. - - Connect to this signal for command actions. Connect to the - toggled() signal for toggle actions. -*/ - -/*! - \fn void TQAction::toggled(bool on) - - This signal is emitted when a toggle action changes state; command - actions and \l{TQActionGroup}s don't emit toggled(). - - The \a on argument denotes the new state: If \a on is TRUE the - toggle action is switched on, and if \a on is FALSE the toggle - action is switched off. - - To trigger a user command depending on whether a toggle action has - been switched on or off connect it to a slot that takes a bool to - indicate the state, e.g. - - \quotefile action/toggleaction/toggleaction.cpp - \skipto TQMainWindow * window - \printline TQMainWindow * window - \skipto labelonoffaction - \printline labelonoffaction - \skipto connect - \printuntil setUsesTextLabel - - \sa activated() setToggleAction() setOn() -*/ - -void TQActionGroupPrivate::update( const TQActionGroup* that ) -{ - for ( TQPtrListIterator<TQAction> it( actions ); it.current(); ++it ) { - if ( that->isEnabled() && !it.current()->d->forceDisabled ) { - it.current()->setEnabled( TRUE ); - } else if ( !that->isEnabled() && it.current()->isEnabled() ) { - it.current()->setEnabled( FALSE ); - it.current()->d->forceDisabled = FALSE; - } - if ( that->isVisible() && !it.current()->d->forceInvisible ) { - it.current()->tqsetVisible( TRUE ); - } else if ( !that->isVisible() && it.current()->isVisible() ) { - it.current()->tqsetVisible( FALSE ); - it.current()->d->forceInvisible = FALSE; - } - } - for ( TQPtrListIterator<TQComboBox> cb( comboboxes ); cb.current(); ++cb ) { - TQComboBox *combobox = cb.current(); - combobox->setEnabled( that->isEnabled() ); - combobox->setShown( that->isVisible() ); - -#ifndef TQT_NO_TOOLTIP - TQToolTip::remove( combobox ); - if ( !!that->toolTip() ) - TQToolTip::add( combobox, that->toolTip() ); -#endif -#ifndef TQT_NO_WHATSTHIS - TQWhatsThis::remove( combobox ); - if ( !!that->whatsThis() ) - TQWhatsThis::add( combobox, that->whatsThis() ); -#endif - - } - for ( TQPtrListIterator<TQToolButton> mb( menubuttons ); mb.current(); ++mb ) { - TQToolButton *button = mb.current(); - button->setEnabled( that->isEnabled() ); - button->setShown( that->isVisible() ); - - if ( !that->text().isNull() ) - button->setTextLabel( that->text() ); - if ( !that->iconSet().isNull() ) - button->setIconSet( that->iconSet() ); - -#ifndef TQT_NO_TOOLTIP - TQToolTip::remove( mb.current() ); - if ( !!that->toolTip() ) - TQToolTip::add( button, that->toolTip() ); -#endif -#ifndef TQT_NO_WHATSTHIS - TQWhatsThis::remove( button ); - if ( !!that->whatsThis() ) - TQWhatsThis::add( button, that->whatsThis() ); -#endif - } - for ( TQPtrListIterator<TQActionGroupPrivate::MenuItem> pu( menuitems ); pu.current(); ++pu ) { - TQWidget* parent = pu.current()->popup->parentWidget(); - if ( ::tqqt_cast<TQPopupMenu*>(parent) ) { - TQPopupMenu* ppopup = (TQPopupMenu*)parent; - ppopup->setItemEnabled( pu.current()->id, that->isEnabled() ); - ppopup->setItemVisible( pu.current()->id, that->isVisible() ); - } else { - pu.current()->popup->setEnabled( that->isEnabled() ); - } - } - for ( TQPtrListIterator<TQPopupMenu> pm( popupmenus ); pm.current(); ++pm ) { - TQPopupMenu *popup = pm.current(); - TQPopupMenu *parent = ::tqqt_cast<TQPopupMenu*>(popup->parentWidget()); - if ( !parent ) - continue; - - int index; - parent->findPopup( popup, &index ); - int id = parent->idAt( index ); - if ( !that->iconSet().isNull() ) - parent->changeItem( id, that->iconSet(), that->menuText() ); - else - parent->changeItem( id, that->menuText() ); - parent->setItemEnabled( id, that->isEnabled() ); -#ifndef TQT_NO_ACCEL - parent->setAccel( that->accel(), id ); -#endif - } -} - -/*! - \class TQActionGroup tqaction.h - \brief The TQActionGroup class groups actions together. - - \ingroup basic - \ingroup application - - In some situations it is useful to group actions together. For - example, if you have a left justify action, a right justify action - and a center action, only one of these actions should be active at - any one time, and one simple way of achieving this is to group the - actions together in an action group. - - An action group can also be added to a menu or a toolbar as a - single unit, with all the actions within the action group - appearing as separate menu options and toolbar buttons. - - Here's an example from examples/textedit: - \quotefile textedit/textedit.cpp - \skipto TQActionGroup - \printuntil connect - - Here we create a new action group. Since the action group is exclusive - by default, only one of the actions in the group is ever active at any - one time. We then connect the group's selected() signal to our - textAlign() slot. - - \printuntil actionAlignLeft->setToggleAction - - We create a left align action, add it to the toolbar and the menu - and make it a toggle action. We create center and right align - actions in exactly the same way. - - \omit - A TQActionGroup emits an activated() signal when one of its actions - is activated. - \endomit - The actions in an action group emit their activated() (and for - toggle actions, toggled()) Q_SIGNALS as usual. - - The setExclusive() function is used to ensure that only one action - is active at any one time: it should be used with actions which - have their \c toggleAction set to TRUE. - - Action group actions appear as individual menu options and toolbar - buttons. For exclusive action groups use setUsesDropDown() to - display the actions in a subwidget of any widget the action group - is added to. For example, the actions would appear in a combobox - in a toolbar or as a submenu in a menu. - - Actions can be added to an action group using add(), but normally - they are added by creating the action with the action group as - parent. Actions can have separators dividing them using - addSeparator(). Action groups are added to widgets with addTo(). -*/ - -/*! - Constructs an action group called \a name, with parent \a parent. - - The action group is exclusive by default. Call setExclusive(FALSE) to make - the action group non-exclusive. -*/ -TQActionGroup::TQActionGroup( TQT_BASE_OBJECT_NAME* parent, const char* name ) - : TQAction( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionGroupPrivate; - d->exclusive = TRUE; - d->dropdown = FALSE; - d->selected = 0; - d->separatorAction = 0; - TQAction::d->d_group = d; - - connect( this, TQT_SIGNAL(selected(TQAction*)), TQT_SLOT(internalToggle(TQAction*)) ); -} - -/*! - Constructs an action group called \a name, with parent \a parent. - - If \a exclusive is TRUE only one toggle action in the group will - ever be active. - - \sa exclusive -*/ -TQActionGroup::TQActionGroup( TQT_BASE_OBJECT_NAME* parent, const char* name, bool exclusive ) - : TQAction( TQT_TQOBJECT(parent), name ) -{ - d = new TQActionGroupPrivate; - d->exclusive = exclusive; - d->dropdown = FALSE; - d->selected = 0; - d->separatorAction = 0; - TQAction::d->d_group = d; - - connect( this, TQT_SIGNAL(selected(TQAction*)), TQT_SLOT(internalToggle(TQAction*)) ); -} - -/*! - Destroys the object and frees allocated resources. -*/ - -TQActionGroup::~TQActionGroup() -{ - TQPtrListIterator<TQActionGroupPrivate::MenuItem> mit( d->menuitems ); - while ( mit.current() ) { - TQActionGroupPrivate::MenuItem *mi = mit.current(); - ++mit; - if ( mi->popup ) - mi->popup->disconnect( TQT_SIGNAL(destroyed()), this, TQT_SLOT(objectDestroyed()) ); - } - - TQPtrListIterator<TQComboBox> cbit( d->comboboxes ); - while ( cbit.current() ) { - TQComboBox *cb = cbit.current(); - ++cbit; - cb->disconnect( TQT_SIGNAL(destroyed()), this, TQT_SLOT(objectDestroyed()) ); - } - TQPtrListIterator<TQToolButton> mbit( d->menubuttons ); - while ( mbit.current() ) { - TQToolButton *mb = mbit.current(); - ++mbit; - mb->disconnect( TQT_SIGNAL(destroyed()), this, TQT_SLOT(objectDestroyed()) ); - } - TQPtrListIterator<TQPopupMenu> pmit( d->popupmenus ); - while ( pmit.current() ) { - TQPopupMenu *pm = pmit.current(); - ++pmit; - pm->disconnect( TQT_SIGNAL(destroyed()), this, TQT_SLOT(objectDestroyed()) ); - } - - delete d->separatorAction; - d->menubuttons.setAutoDelete( TRUE ); - d->comboboxes.setAutoDelete( TRUE ); - d->menuitems.setAutoDelete( TRUE ); - d->popupmenus.setAutoDelete( TRUE ); - delete d; -} - -/*! - \property TQActionGroup::exclusive - \brief whether the action group does exclusive toggling - - If exclusive is TRUE only one toggle action in the action group - can ever be active at any one time. If the user chooses another - toggle action in the group the one they chose becomes active and - the one that was active becomes inactive. - - \sa TQAction::toggleAction -*/ -void TQActionGroup::setExclusive( bool enable ) -{ - d->exclusive = enable; -} - -bool TQActionGroup::isExclusive() const -{ - return d->exclusive; -} - -/*! - \property TQActionGroup::usesDropDown - \brief whether the group's actions are displayed in a subwidget of - the widgets the action group is added to - - Exclusive action groups added to a toolbar display their actions - in a combobox with the action's \l TQAction::text and \l - TQAction::iconSet properties shown. Non-exclusive groups are - represented by a tool button showing their \l TQAction::iconSet and - -- depending on \l TQMainWindow::usesTextLabel() -- text() - property. - - In a popup menu the member actions are displayed in a submenu. - - Changing usesDropDown only affects \e subsequent calls to addTo(). - - Note that setting this property for actions in a combobox causes - calls to their \link TQAction::tqsetVisible()\endlink, - \link TQAction::setEnabled()\endlink, and - \link TQAction::setDisabled()\endlink functions to have no effect. - - This property's default is FALSE. - -*/ -void TQActionGroup::setUsesDropDown( bool enable ) -{ - d->dropdown = enable; -} - -bool TQActionGroup::usesDropDown() const -{ - return d->dropdown; -} - -/*! - Adds action \a action to this group. - - Normally an action is added to a group by creating it with the - group as parent, so this function is not usually used. - - \sa addTo() -*/ -void TQActionGroup::add( TQAction* action ) -{ - if ( d->actions.containsRef( action ) ) - return; - - d->actions.append( action ); - - if ( action->whatsThis().isNull() ) - action->setWhatsThis( whatsThis() ); - if ( action->toolTip().isNull() ) - action->setToolTip( toolTip() ); - - if (!action->d->forceDisabled) - action->d->enabled = isEnabled(); - if (!action->d->forceInvisible) - action->d->visible = isVisible(); - - connect( action, TQT_SIGNAL( destroyed() ), this, TQT_SLOT( childDestroyed() ) ); - connect( action, TQT_SIGNAL( activated() ), this, TQT_SIGNAL( activated() ) ); - connect( action, TQT_SIGNAL( toggled(bool) ), this, TQT_SLOT( childToggled(bool) ) ); - - for ( TQPtrListIterator<TQComboBox> cb( d->comboboxes ); cb.current(); ++cb ) { - action->addTo( cb.current() ); - } - for ( TQPtrListIterator<TQToolButton> mb( d->menubuttons ); mb.current(); ++mb ) { - TQPopupMenu* popup = mb.current()->popup(); - if ( !popup ) - continue; - action->addTo( popup ); - } - for ( TQPtrListIterator<TQActionGroupPrivate::MenuItem> mi( d->menuitems ); mi.current(); ++mi ) { - TQPopupMenu* popup = mi.current()->popup; - if ( !popup ) - continue; - action->addTo( popup ); - } -} - -/*! - Adds a separator to the group. -*/ -void TQActionGroup::addSeparator() -{ - if ( !d->separatorAction ) - d->separatorAction = new TQAction( 0, "qt_separator_action" ); - d->actions.append( d->separatorAction ); -} - - -/*! \fn void TQActionGroup::insert( TQAction* a ) - - \obsolete - - Use add() instead, or better still create the action with the action - group as its parent. - */ - -/*! - Adds this action group to the widget \a w. - - If isExclusive() is FALSE or usesDropDown() is FALSE, the actions within - the group are added to the widget individually. For example, if the widget - is a menu, the actions will appear as individual menu options, and - if the widget is a toolbar, the actions will appear as toolbar buttons. - - If both isExclusive() and usesDropDown() are TRUE, the actions - are presented either in a combobox (if \a w is a toolbar) or in a - submenu (if \a w is a menu). - - All actions should be added to the action group \e before the - action group is added to the widget. If actions are added to the - action group \e after the action group has been added to the - widget these later actions will \e not appear. - - \sa setExclusive() setUsesDropDown() removeFrom() -*/ -bool TQActionGroup::addTo( TQWidget* w ) -{ -#ifndef TQT_NO_TOOLBAR - if ( ::tqqt_cast<TQToolBar*>(w) ) { - if ( d->dropdown ) { - if ( !d->exclusive ) { - TQPtrListIterator<TQAction> it( d->actions); - if ( !it.current() ) - return TRUE; - - TQAction *defAction = it.current(); - - TQToolButton* btn = new TQToolButton( (TQToolBar*) w, "qt_actiongroup_btn" ); - addedTo( btn, w ); - connect( btn, TQT_SIGNAL(destroyed()), TQT_SLOT(objectDestroyed()) ); - d->menubuttons.append( btn ); - - if ( !iconSet().isNull() ) - btn->setIconSet( iconSet() ); - else if ( !defAction->iconSet().isNull() ) - btn->setIconSet( defAction->iconSet() ); - if ( !!text() ) - btn->setTextLabel( text() ); - else if ( !!defAction->text() ) - btn->setTextLabel( defAction->text() ); -#ifndef TQT_NO_TOOLTIP - if ( !!toolTip() ) - TQToolTip::add( btn, toolTip() ); - else if ( !!defAction->toolTip() ) - TQToolTip::add( btn, defAction->toolTip() ); -#endif -#ifndef TQT_NO_WHATSTHIS - if ( !!whatsThis() ) - TQWhatsThis::add( btn, whatsThis() ); - else if ( !!defAction->whatsThis() ) - TQWhatsThis::add( btn, defAction->whatsThis() ); -#endif - - connect( btn, TQT_SIGNAL( clicked() ), defAction, TQT_SIGNAL( activated() ) ); - connect( btn, TQT_SIGNAL( toggled(bool) ), defAction, TQT_SLOT( toolButtonToggled(bool) ) ); - connect( btn, TQT_SIGNAL( destroyed() ), defAction, TQT_SLOT( objectDestroyed() ) ); - - TQPopupMenu *menu = new TQPopupMenu( btn, "qt_actiongroup_menu" ); - btn->setPopupDelay( 0 ); - btn->setPopup( menu ); - - while( it.current() ) { - it.current()->addTo( menu ); - ++it; - } - d->update( this ); - return TRUE; - } else { - TQComboBox *box = new TQComboBox( FALSE, w, "qt_actiongroup_combo" ); - addedTo( box, w ); - connect( box, TQT_SIGNAL(destroyed()), TQT_SLOT(objectDestroyed()) ); - d->comboboxes.append( box ); -#ifndef TQT_NO_TOOLTIP - if ( !!toolTip() ) - TQToolTip::add( box, toolTip() ); -#endif -#ifndef TQT_NO_WHATSTHIS - if ( !!whatsThis() ) - TQWhatsThis::add( box, whatsThis() ); -#endif - - int onIndex = 0; - bool foundOn = FALSE; - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - TQAction *action = it.current(); - if ( !foundOn ) - foundOn = action->isOn(); - if ( qstrcmp( action->name(), "qt_separator_action" ) && !foundOn ) - onIndex++; - action->addTo( box ); - } - if ( foundOn ) - box->setCurrentItem( onIndex ); - connect( box, TQT_SIGNAL(activated(int)), this, TQT_SLOT( internalComboBoxActivated(int)) ); - connect( box, TQT_SIGNAL(highlighted(int)), this, TQT_SLOT( internalComboBoxHighlighted(int)) ); - d->update( this ); - return TRUE; - } - } - } else -#endif - if ( ::tqqt_cast<TQPopupMenu*>(w) ) { - TQPopupMenu *popup; - if ( d->dropdown ) { - TQPopupMenu *menu = (TQPopupMenu*)w; - popup = new TQPopupMenu( w, "qt_actiongroup_menu" ); - d->popupmenus.append( popup ); - connect( popup, TQT_SIGNAL(destroyed()), TQT_SLOT(objectDestroyed()) ); - - int id; - if ( !iconSet().isNull() ) { - if ( menuText().isEmpty() ) - id = menu->insertItem( iconSet(), text(), popup ); - else - id = menu->insertItem( iconSet(), menuText(), popup ); - } else { - if ( menuText().isEmpty() ) - id = menu->insertItem( text(), popup ); - else - id = menu->insertItem( menuText(), popup ); - } - - addedTo( menu->indexOf( id ), menu ); - - TQActionGroupPrivate::MenuItem *item = new TQActionGroupPrivate::MenuItem; - item->id = id; - item->popup = popup; - d->menuitems.append( item ); - } else { - popup = (TQPopupMenu*)w; - } - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - // #### do an addedTo( index, popup, action), need to find out index - it.current()->addTo( popup ); - } - return TRUE; - } - - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - // #### do an addedTo( index, popup, action), need to find out index - it.current()->addTo( w ); - } - - return TRUE; -} - -/*! \reimp -*/ -bool TQActionGroup::removeFrom( TQWidget* w ) -{ - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - it.current()->removeFrom( w ); - } - -#ifndef TQT_NO_TOOLBAR - if ( ::tqqt_cast<TQToolBar*>(w) ) { - TQPtrListIterator<TQComboBox> cb( d->comboboxes ); - while( cb.current() ) { - TQComboBox *box = cb.current(); - ++cb; - if ( box->parentWidget() == w ) - delete box; - } - TQPtrListIterator<TQToolButton> mb( d->menubuttons ); - while( mb.current() ) { - TQToolButton *btn = mb.current(); - ++mb; - if ( btn->parentWidget() == w ) - delete btn; - } - } else -#endif - if ( ::tqqt_cast<TQPopupMenu*>(w) ) { - TQPtrListIterator<TQActionGroupPrivate::MenuItem> pu( d->menuitems ); - while ( pu.current() ) { - TQActionGroupPrivate::MenuItem *mi = pu.current(); - ++pu; - if ( d->dropdown && mi->popup ) - ( (TQPopupMenu*)w )->removeItem( mi->id ); - delete mi->popup; - } - } - - return TRUE; -} - -/*! \internal -*/ -void TQActionGroup::childToggled( bool b ) -{ - if ( !isExclusive() ) - return; - TQAction* s = (TQAction*) sender(); - if ( b ) { - if ( s != d->selected ) { - d->selected = s; - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - if ( it.current()->isToggleAction() && it.current() != s ) - it.current()->setOn( FALSE ); - } - emit activated(); - emit selected( s ); - } else if ( !s->isToggleAction() ) { - emit activated(); - } - } else { - if ( s == d->selected ) { - // at least one has to be selected - s->setOn( TRUE ); - } - } -} - -/*! \internal -*/ -void TQActionGroup::childDestroyed() -{ - d->actions.removeRef( (TQAction*) sender() ); - if ( d->selected == sender() ) - d->selected = 0; -} - -/*! \reimp -*/ -void TQActionGroup::setEnabled( bool enable ) -{ - if ( enable == isEnabled() ) - return; - - TQAction::setEnabled( enable ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::setToggleAction( bool toggle ) -{ - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) - it.current()->setToggleAction( toggle ); - - TQAction::setToggleAction( TRUE ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::setOn( bool on ) -{ - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - TQAction *act = it.current(); - if ( act->isToggleAction() ) - act->setOn( on ); - } - - TQAction::setOn( on ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::setIconSet( const TQIconSet& icon ) -{ - TQAction::setIconSet( icon ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::setText( const TQString& txt ) -{ - if ( txt == text() ) - return; - - TQAction::setText( txt ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::setMenuText( const TQString& text ) -{ - if ( text == menuText() ) - return; - - TQAction::setMenuText( text ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::setToolTip( const TQString& text ) -{ - if ( text == toolTip() ) - return; - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - if ( it.current()->toolTip().isNull() ) - it.current()->setToolTip( text ); - } - TQAction::setToolTip( text ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::setWhatsThis( const TQString& text ) -{ - if ( text == whatsThis() ) - return; - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - if ( it.current()->whatsThis().isNull() ) - it.current()->setWhatsThis( text ); - } - TQAction::setWhatsThis( text ); - d->update( this ); -} - -/*! \reimp -*/ -void TQActionGroup::childEvent( TQChildEvent *e ) -{ - if ( !e->removed() ) - return; - - TQAction *action = ::tqqt_cast<TQAction*>(e->child()); - if ( !action ) - return; - - for ( TQPtrListIterator<TQComboBox> cb( d->comboboxes ); cb.current(); ++cb ) { - for ( int i = 0; i < cb.current()->count(); i++ ) { - if ( cb.current()->text( i ) == action->text() ) { - cb.current()->removeItem( i ); - break; - } - } - } - for ( TQPtrListIterator<TQToolButton> mb( d->menubuttons ); mb.current(); ++mb ) { - TQPopupMenu* popup = mb.current()->popup(); - if ( !popup ) - continue; - action->removeFrom( popup ); - } - for ( TQPtrListIterator<TQActionGroupPrivate::MenuItem> mi( d->menuitems ); mi.current(); ++mi ) { - TQPopupMenu* popup = mi.current()->popup; - if ( !popup ) - continue; - action->removeFrom( popup ); - } -} - -/*! - \fn void TQActionGroup::selected( TQAction* ) - - This signal is emitted from exclusive groups when toggle actions - change state. - - The argument is the action whose state changed to "on". - - \sa setExclusive(), isOn() TQAction::toggled() -*/ - -/*! \internal -*/ -void TQActionGroup::internalComboBoxActivated( int index ) -{ - TQAction *a = 0; - for ( int i = 0; i <= index && i < (int)d->actions.count(); ++i ) { - a = d->actions.at( i ); - if ( a && !qstrcmp( a->name(), "qt_separator_action" ) ) - index++; - } - a = d->actions.at( index ); - if ( a ) { - if ( a != d->selected ) { - d->selected = a; - for ( TQPtrListIterator<TQAction> it( d->actions); it.current(); ++it ) { - if ( it.current()->isToggleAction() && it.current() != a ) - it.current()->setOn( FALSE ); - } - if ( a->isToggleAction() ) - a->setOn( TRUE ); - - emit activated(); - if ( a->isToggleAction() ) - emit selected( d->selected ); - emit ((TQActionGroup*)a)->activated(); - } else if ( !a->isToggleAction() ) { - emit activated(); - emit ((TQActionGroup*)a)->activated(); - } - a->cleartqStatusText(); - } -} - -/*! \internal -*/ -void TQActionGroup::internalComboBoxHighlighted( int index ) -{ - TQAction *a = 0; - for ( int i = 0; i <= index && i < (int)d->actions.count(); ++i ) { - a = d->actions.at( i ); - if ( a && !qstrcmp( a->name(), "qt_separator_action" ) ) - index++; - } - a = d->actions.at( index ); - if ( a ) - a->showtqStatusText(a->statusTip()); - else - cleartqStatusText(); -} - -/*! \internal -*/ -void TQActionGroup::internalToggle( TQAction *a ) -{ - int index = d->actions.find( a ); - if ( index == -1 ) - return; - - int lastItem = index; - for ( int i = 0; i < lastItem; i++ ) { - TQAction *action = d->actions.at( i ); - if ( !qstrcmp( action->name(), "qt_separator_action" ) ) - index--; - } - - for ( TQPtrListIterator<TQComboBox> it( d->comboboxes); it.current(); ++it ) - it.current()->setCurrentItem( index ); -} - -/*! \internal -*/ -void TQActionGroup::objectDestroyed() -{ - const TQObject* obj = TQT_TQOBJECT(sender()); - d->menubuttons.removeRef( (TQToolButton*)obj ); - for ( TQPtrListIterator<TQActionGroupPrivate::MenuItem> mi( d->menuitems ); mi.current(); ++mi ) { - if ( TQT_TQOBJECT(mi.current()->popup) == obj ) { - d->menuitems.removeRef( mi.current() ); - break; - } - } - d->popupmenus.removeRef( (TQPopupMenu*)obj ); - d->comboboxes.removeRef( (TQComboBox*)obj ); -} - -/*! - \internal - - This function is called from the addTo() function when it has - created a widget (\a actionWidget) for the child action \a a in - the \a container. -*/ - -void TQActionGroup::addedTo( TQWidget *actionWidget, TQWidget *container, TQAction *a ) -{ - TQ_UNUSED( actionWidget ); - TQ_UNUSED( container ); - TQ_UNUSED( a ); -} - -/*! - \overload - \internal - - This function is called from the addTo() function when it has - created a menu item for the child action at the index position \a - index in the popup menu \a menu. -*/ - -void TQActionGroup::addedTo( int index, TQPopupMenu *menu, TQAction *a ) -{ - TQ_UNUSED( index ); - TQ_UNUSED( menu ); - TQ_UNUSED( a ); -} - -/*! - \reimp - \overload - - This function is called from the addTo() function when it has - created a widget (\a actionWidget) in the \a container. -*/ - -void TQActionGroup::addedTo( TQWidget *actionWidget, TQWidget *container ) -{ - TQ_UNUSED( actionWidget ); - TQ_UNUSED( container ); -} - -/*! - \reimp - \overload - - This function is called from the addTo() function when it has - created a menu item at the index position \a index in the popup - menu \a menu. -*/ - -void TQActionGroup::addedTo( int index, TQPopupMenu *menu ) -{ - TQ_UNUSED( index ); - TQ_UNUSED( menu ); -} - -#endif |