1 | /****************************************************************************
|
---|
2 | ** $Id: qaction.cpp 2 2005-11-16 15:49:26Z dmik $
|
---|
3 | **
|
---|
4 | ** Implementation of QAction class
|
---|
5 | **
|
---|
6 | ** Copyright (C) 2000-2003 Trolltech AS. All rights reserved.
|
---|
7 | **
|
---|
8 | ** This file is part of the widgets module of the Qt GUI Toolkit.
|
---|
9 | **
|
---|
10 | ** This file may be distributed under the terms of the Q Public License
|
---|
11 | ** as defined by Trolltech AS of Norway and appearing in the file
|
---|
12 | ** LICENSE.QPL included in the packaging of this file.
|
---|
13 | **
|
---|
14 | ** This file may be distributed and/or modified under the terms of the
|
---|
15 | ** GNU General Public License version 2 as published by the Free Software
|
---|
16 | ** Foundation and appearing in the file LICENSE.GPL included in the
|
---|
17 | ** packaging of this file.
|
---|
18 | **
|
---|
19 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
|
---|
20 | ** licenses may use this file in accordance with the Qt Commercial License
|
---|
21 | ** Agreement provided with the Software.
|
---|
22 | **
|
---|
23 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
---|
24 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
---|
25 | **
|
---|
26 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
|
---|
27 | ** information about Qt Commercial License Agreements.
|
---|
28 | ** See http://www.trolltech.com/qpl/ for QPL licensing information.
|
---|
29 | ** See http://www.trolltech.com/gpl/ for GPL licensing information.
|
---|
30 | **
|
---|
31 | ** Contact info@trolltech.com if any conditions of this licensing are
|
---|
32 | ** not clear to you.
|
---|
33 | **
|
---|
34 | **********************************************************************/
|
---|
35 |
|
---|
36 | #include "qaction.h"
|
---|
37 |
|
---|
38 | #ifndef QT_NO_ACTION
|
---|
39 |
|
---|
40 | #include "qtoolbar.h"
|
---|
41 | #include "qptrlist.h"
|
---|
42 | #include "qpopupmenu.h"
|
---|
43 | #include "qaccel.h"
|
---|
44 | #include "qtoolbutton.h"
|
---|
45 | #include "qcombobox.h"
|
---|
46 | #include "qtooltip.h"
|
---|
47 | #include "qwhatsthis.h"
|
---|
48 | #include "qstatusbar.h"
|
---|
49 | #include "qobjectlist.h"
|
---|
50 |
|
---|
51 |
|
---|
52 | /*!
|
---|
53 | \class QAction qaction.h
|
---|
54 | \brief The QAction class provides an abstract user interface
|
---|
55 | action that can appear both in menus and tool bars.
|
---|
56 |
|
---|
57 | \ingroup basic
|
---|
58 | \ingroup application
|
---|
59 | \mainclass
|
---|
60 |
|
---|
61 | In GUI applications many commands can be invoked via a menu
|
---|
62 | option, a toolbar button and a keyboard accelerator. Since the
|
---|
63 | same action must be performed regardless of how the action was
|
---|
64 | invoked, and since the menu and toolbar should be kept in sync, it
|
---|
65 | is useful to represent a command as an \e action. An action can be
|
---|
66 | added to a menu and a toolbar and will automatically keep them in
|
---|
67 | sync. For example, if the user presses a Bold toolbar button the
|
---|
68 | Bold menu item will automatically be checked.
|
---|
69 |
|
---|
70 | A QAction may contain an icon, a menu text, an accelerator, a
|
---|
71 | status text, a whats this text and a tool tip. Most of these can
|
---|
72 | be set in the constructor. They can also be set independently with
|
---|
73 | setIconSet(), setText(), setMenuText(), setToolTip(),
|
---|
74 | setStatusTip(), setWhatsThis() and setAccel().
|
---|
75 |
|
---|
76 | An action may be a toggle action e.g. a Bold toolbar button, or a
|
---|
77 | command action, e.g. 'Open File' to invoke an open file dialog.
|
---|
78 | Toggle actions emit the toggled() signal when their state changes.
|
---|
79 | Both command and toggle actions emit the activated() signal when
|
---|
80 | they are invoked. Use setToggleAction() to set an action's toggled
|
---|
81 | status. To see if an action is a toggle action use
|
---|
82 | isToggleAction(). A toggle action may be "on", isOn() returns
|
---|
83 | TRUE, or "off", isOn() returns FALSE.
|
---|
84 |
|
---|
85 | Actions are added to widgets (menus or toolbars) using addTo(),
|
---|
86 | and removed using removeFrom().
|
---|
87 |
|
---|
88 | Once a QAction has been created it should be added to the relevant
|
---|
89 | menu and toolbar and then connected to the slot which will perform
|
---|
90 | the action. For example:
|
---|
91 |
|
---|
92 | \quotefile action/application.cpp
|
---|
93 | \skipto QPixmap( fileopen
|
---|
94 | \printuntil connect
|
---|
95 |
|
---|
96 | We create a "File Save" action with a menu text of "&Save" and
|
---|
97 | \e{Ctrl+S} as the keyboard accelerator. We connect the
|
---|
98 | fileSaveAction's activated() signal to our own save() slot. Note
|
---|
99 | that at this point there is no menu or toolbar action, we'll add
|
---|
100 | them next:
|
---|
101 |
|
---|
102 | \skipto new QToolBar
|
---|
103 | \printline
|
---|
104 | \skipto fileSaveAction->addTo
|
---|
105 | \printline
|
---|
106 | \skipto new QPopupMenu
|
---|
107 | \printuntil insertItem
|
---|
108 | \skipto fileSaveAction->addTo
|
---|
109 | \printline
|
---|
110 |
|
---|
111 | We create a toolbar and add our fileSaveAction to it. Similarly we
|
---|
112 | create a menu, add a top-level menu item, and add our
|
---|
113 | fileSaveAction.
|
---|
114 |
|
---|
115 | We recommend that actions are created as children of the window
|
---|
116 | that they are used in. In most cases actions will be children of
|
---|
117 | the application's main window.
|
---|
118 |
|
---|
119 | To prevent recursion, don't create an action as a child of a
|
---|
120 | widget that the action is later added to.
|
---|
121 | */
|
---|
122 |
|
---|
123 | class QActionPrivate
|
---|
124 | {
|
---|
125 | public:
|
---|
126 | QActionPrivate(QAction *act);
|
---|
127 | ~QActionPrivate();
|
---|
128 | QIconSet *iconset;
|
---|
129 | QString text;
|
---|
130 | QString menutext;
|
---|
131 | QString tooltip;
|
---|
132 | QString statustip;
|
---|
133 | QString whatsthis;
|
---|
134 | #ifndef QT_NO_ACCEL
|
---|
135 | QKeySequence key;
|
---|
136 | QAccel* accel;
|
---|
137 | int accelid;
|
---|
138 | #endif
|
---|
139 | uint enabled : 1;
|
---|
140 | uint visible : 1;
|
---|
141 | uint toggleaction : 1;
|
---|
142 | uint on : 1;
|
---|
143 | uint forceDisabled : 1;
|
---|
144 | #ifndef QT_NO_TOOLTIP
|
---|
145 | QToolTipGroup tipGroup;
|
---|
146 | #endif
|
---|
147 | QActionGroupPrivate* d_group;
|
---|
148 | QAction *action;
|
---|
149 |
|
---|
150 | struct MenuItem {
|
---|
151 | MenuItem():popup(0),id(0){}
|
---|
152 | QPopupMenu* popup;
|
---|
153 | int id;
|
---|
154 | };
|
---|
155 | // ComboItem is only necessary for actions that are
|
---|
156 | // in dropdown/exclusive actiongroups. The actiongroup
|
---|
157 | // will clean this up
|
---|
158 | struct ComboItem {
|
---|
159 | ComboItem():combo(0), id(0) {}
|
---|
160 | QComboBox *combo;
|
---|
161 | int id;
|
---|
162 | };
|
---|
163 | QPtrList<MenuItem> menuitems;
|
---|
164 | QPtrList<QToolButton> toolbuttons;
|
---|
165 | QPtrList<ComboItem> comboitems;
|
---|
166 |
|
---|
167 | enum Update { Icons = 1, Visibility = 2, State = 4, EverythingElse = 8 };
|
---|
168 | void update( uint upd = EverythingElse );
|
---|
169 |
|
---|
170 | QString menuText() const;
|
---|
171 | QString toolTip() const;
|
---|
172 | QString statusTip() const;
|
---|
173 | };
|
---|
174 |
|
---|
175 | QActionPrivate::QActionPrivate(QAction *act)
|
---|
176 | : iconset( 0 ),
|
---|
177 | #ifndef QT_NO_ACCEL
|
---|
178 | key( 0 ), accel( 0 ), accelid( 0 ),
|
---|
179 | #endif
|
---|
180 | enabled( TRUE ), visible( TRUE ), toggleaction( FALSE ), on( FALSE ),
|
---|
181 | forceDisabled( FALSE ),
|
---|
182 | #ifndef QT_NO_TOOLTIP
|
---|
183 | tipGroup( 0 ),
|
---|
184 | #endif
|
---|
185 | d_group( 0 ), action(act)
|
---|
186 | {
|
---|
187 | menuitems.setAutoDelete( TRUE );
|
---|
188 | comboitems.setAutoDelete( TRUE );
|
---|
189 | #ifndef QT_NO_TOOLTIP
|
---|
190 | tipGroup.setDelay( FALSE );
|
---|
191 | #endif
|
---|
192 | }
|
---|
193 |
|
---|
194 | QActionPrivate::~QActionPrivate()
|
---|
195 | {
|
---|
196 | QPtrListIterator<QToolButton> ittb( toolbuttons );
|
---|
197 | QToolButton *tb;
|
---|
198 |
|
---|
199 | while ( ( tb = ittb.current() ) ) {
|
---|
200 | ++ittb;
|
---|
201 | delete tb;
|
---|
202 | }
|
---|
203 |
|
---|
204 | QPtrListIterator<QActionPrivate::MenuItem> itmi( menuitems);
|
---|
205 | QActionPrivate::MenuItem* mi;
|
---|
206 | while ( ( mi = itmi.current() ) ) {
|
---|
207 | ++itmi;
|
---|
208 | QPopupMenu* menu = mi->popup;
|
---|
209 | if ( menu->findItem( mi->id ) )
|
---|
210 | menu->removeItem( mi->id );
|
---|
211 | }
|
---|
212 |
|
---|
213 | QPtrListIterator<QActionPrivate::ComboItem> itci(comboitems);
|
---|
214 | QActionPrivate::ComboItem* ci;
|
---|
215 | while ( ( ci = itci.current() ) ) {
|
---|
216 | ++itci;
|
---|
217 | QComboBox* combo = ci->combo;
|
---|
218 | combo->clear();
|
---|
219 | QActionGroup *group = ::qt_cast<QActionGroup*>(action->parent());
|
---|
220 | QObjectList *siblings = group ? group->queryList("QAction") : 0;
|
---|
221 | if (siblings) {
|
---|
222 | QObjectListIt it(*siblings);
|
---|
223 | while (it.current()) {
|
---|
224 | QAction *sib = ::qt_cast<QAction*>(it.current());
|
---|
225 | ++it;
|
---|
226 | sib->removeFrom(combo);
|
---|
227 | }
|
---|
228 | it = QObjectListIt(*siblings);
|
---|
229 | while (it.current()) {
|
---|
230 | QAction *sib = ::qt_cast<QAction*>(it.current());
|
---|
231 | ++it;
|
---|
232 | if (sib == action)
|
---|
233 | continue;
|
---|
234 | sib->addTo(combo);
|
---|
235 | }
|
---|
236 | }
|
---|
237 | delete siblings;
|
---|
238 | }
|
---|
239 |
|
---|
240 | #ifndef QT_NO_ACCEL
|
---|
241 | delete accel;
|
---|
242 | #endif
|
---|
243 | delete iconset;
|
---|
244 | }
|
---|
245 |
|
---|
246 | class QActionGroupPrivate
|
---|
247 | {
|
---|
248 | public:
|
---|
249 | uint exclusive: 1;
|
---|
250 | uint dropdown: 1;
|
---|
251 | QPtrList<QAction> actions;
|
---|
252 | QAction* selected;
|
---|
253 | QAction* separatorAction;
|
---|
254 |
|
---|
255 | struct MenuItem {
|
---|
256 | MenuItem():popup(0),id(0){}
|
---|
257 | QPopupMenu* popup;
|
---|
258 | int id;
|
---|
259 | };
|
---|
260 |
|
---|
261 | QPtrList<QComboBox> comboboxes;
|
---|
262 | QPtrList<QToolButton> menubuttons;
|
---|
263 | QPtrList<MenuItem> menuitems;
|
---|
264 | QPtrList<QPopupMenu> popupmenus;
|
---|
265 |
|
---|
266 | void update( const QActionGroup * );
|
---|
267 | };
|
---|
268 |
|
---|
269 | void QActionPrivate::update( uint upd )
|
---|
270 | {
|
---|
271 | for ( QPtrListIterator<MenuItem> it( menuitems); it.current(); ++it ) {
|
---|
272 | MenuItem* mi = it.current();
|
---|
273 | QString t = menuText();
|
---|
274 | #ifndef QT_NO_ACCEL
|
---|
275 | if ( key )
|
---|
276 | t += '\t' + QAccel::keyToString( key );
|
---|
277 | #endif
|
---|
278 | if ( upd & State ) {
|
---|
279 | mi->popup->setItemEnabled( mi->id, enabled );
|
---|
280 | if ( toggleaction )
|
---|
281 | mi->popup->setItemChecked( mi->id, on );
|
---|
282 | }
|
---|
283 | if ( upd & Visibility )
|
---|
284 | mi->popup->setItemVisible( mi->id, visible );
|
---|
285 |
|
---|
286 | if ( upd & Icons )
|
---|
287 | if ( iconset )
|
---|
288 | mi->popup->changeItem( mi->id, *iconset, t );
|
---|
289 | else
|
---|
290 | mi->popup->changeItem( mi->id, QIconSet(), t );
|
---|
291 | if ( upd & EverythingElse ) {
|
---|
292 | mi->popup->changeItem( mi->id, t );
|
---|
293 | if ( !whatsthis.isEmpty() )
|
---|
294 | mi->popup->setWhatsThis( mi->id, whatsthis );
|
---|
295 | if ( toggleaction ) {
|
---|
296 | mi->popup->setCheckable( TRUE );
|
---|
297 | mi->popup->setItemChecked( mi->id, on );
|
---|
298 | }
|
---|
299 | }
|
---|
300 | }
|
---|
301 | for ( QPtrListIterator<QToolButton> it2(toolbuttons); it2.current(); ++it2 ) {
|
---|
302 | QToolButton* btn = it2.current();
|
---|
303 | if ( upd & State ) {
|
---|
304 | btn->setEnabled( enabled );
|
---|
305 | if ( toggleaction )
|
---|
306 | btn->setOn( on );
|
---|
307 | }
|
---|
308 | if ( upd & Visibility )
|
---|
309 | visible ? btn->show() : btn->hide();
|
---|
310 | if ( upd & Icons ) {
|
---|
311 | if ( iconset )
|
---|
312 | btn->setIconSet( *iconset );
|
---|
313 | else
|
---|
314 | btn->setIconSet( QIconSet() );
|
---|
315 | }
|
---|
316 | if ( upd & EverythingElse ) {
|
---|
317 | btn->setToggleButton( toggleaction );
|
---|
318 | if ( !text.isEmpty() )
|
---|
319 | btn->setTextLabel( text, FALSE );
|
---|
320 | #ifndef QT_NO_TOOLTIP
|
---|
321 | QToolTip::remove( btn );
|
---|
322 | QToolTip::add( btn, toolTip(), &tipGroup, statusTip() );
|
---|
323 | #endif
|
---|
324 | #ifndef QT_NO_WHATSTHIS
|
---|
325 | QWhatsThis::remove( btn );
|
---|
326 | if ( !whatsthis.isEmpty() )
|
---|
327 | QWhatsThis::add( btn, whatsthis );
|
---|
328 | #endif
|
---|
329 | }
|
---|
330 | }
|
---|
331 | #ifndef QT_NO_ACCEL
|
---|
332 | if ( accel ) {
|
---|
333 | accel->setEnabled( enabled && visible );
|
---|
334 | if ( !whatsthis.isEmpty() )
|
---|
335 | accel->setWhatsThis( accelid, whatsthis );
|
---|
336 | }
|
---|
337 | #endif
|
---|
338 | // Only used by actiongroup
|
---|
339 | for ( QPtrListIterator<ComboItem> it3( comboitems ); it3.current(); ++it3 ) {
|
---|
340 | ComboItem *ci = it3.current();
|
---|
341 | if ( !ci->combo )
|
---|
342 | return;
|
---|
343 | if ( iconset )
|
---|
344 | ci->combo->changeItem( iconset->pixmap(), text, ci->id );
|
---|
345 | else
|
---|
346 | ci->combo->changeItem( text, ci->id );
|
---|
347 | }
|
---|
348 | }
|
---|
349 |
|
---|
350 | QString QActionPrivate::menuText() const
|
---|
351 | {
|
---|
352 | if ( menutext.isNull() ) {
|
---|
353 | QString t(text);
|
---|
354 | t.replace('&', "&&");
|
---|
355 | return t;
|
---|
356 | }
|
---|
357 | return menutext;
|
---|
358 | }
|
---|
359 |
|
---|
360 | QString QActionPrivate::toolTip() const
|
---|
361 | {
|
---|
362 | if ( tooltip.isNull() ) {
|
---|
363 | #ifndef QT_NO_ACCEL
|
---|
364 | if ( accel )
|
---|
365 | return text + " (" + QAccel::keyToString( accel->key( accelid )) + ")";
|
---|
366 | #endif
|
---|
367 | return text;
|
---|
368 | }
|
---|
369 | return tooltip;
|
---|
370 | }
|
---|
371 |
|
---|
372 | QString QActionPrivate::statusTip() const
|
---|
373 | {
|
---|
374 | if ( statustip.isNull() )
|
---|
375 | return toolTip();
|
---|
376 | return statustip;
|
---|
377 | }
|
---|
378 |
|
---|
379 | /*
|
---|
380 | internal: guesses a descriptive text from a menu text
|
---|
381 | */
|
---|
382 | static QString qt_stripMenuText( QString s )
|
---|
383 | {
|
---|
384 | s.remove( QString::fromLatin1("...") );
|
---|
385 | s.remove( QChar('&' ) );
|
---|
386 | return s.stripWhiteSpace();
|
---|
387 | };
|
---|
388 |
|
---|
389 | /*!
|
---|
390 | Constructs an action called \a name with parent \a parent.
|
---|
391 |
|
---|
392 | If \a parent is a QActionGroup, the new action inserts itself into
|
---|
393 | \a parent.
|
---|
394 |
|
---|
395 | For accelerators and status tips to work, \a parent must either be
|
---|
396 | a widget, or an action group whose parent is a widget.
|
---|
397 |
|
---|
398 | \warning To prevent recursion, don't create an action as a child
|
---|
399 | of a widget that the action is later added to.
|
---|
400 | */
|
---|
401 | QAction::QAction( QObject* parent, const char* name )
|
---|
402 | : QObject( parent, name )
|
---|
403 | {
|
---|
404 | d = new QActionPrivate(this);
|
---|
405 | init();
|
---|
406 | }
|
---|
407 |
|
---|
408 | /*! \obsolete
|
---|
409 | Constructs an action called \a name with parent \a parent.
|
---|
410 |
|
---|
411 | If \a toggle is TRUE the action will be a toggle action, otherwise
|
---|
412 | it will be a command action.
|
---|
413 |
|
---|
414 | If \a parent is a QActionGroup, the new action inserts itself into
|
---|
415 | \a parent.
|
---|
416 |
|
---|
417 | For accelerators and status tips to work, \a parent must either be
|
---|
418 | a widget, or an action group whose parent is a widget.
|
---|
419 | */
|
---|
420 | QAction::QAction( QObject* parent, const char* name, bool toggle )
|
---|
421 | : QObject( parent, name )
|
---|
422 | {
|
---|
423 | d = new QActionPrivate(this);
|
---|
424 | d->toggleaction = toggle;
|
---|
425 | init();
|
---|
426 | }
|
---|
427 |
|
---|
428 |
|
---|
429 | #ifndef QT_NO_ACCEL
|
---|
430 |
|
---|
431 | /*!
|
---|
432 | This constructor creates an action with the following properties:
|
---|
433 | the icon or iconset \a icon, the menu text \a menuText and
|
---|
434 | keyboard accelerator \a accel. It is a child of \a parent and
|
---|
435 | called \a name.
|
---|
436 |
|
---|
437 | If \a parent is a QActionGroup, the action automatically becomes
|
---|
438 | a member of it.
|
---|
439 |
|
---|
440 | For accelerators and status tips to work, \a parent must either be
|
---|
441 | a widget, or an action group whose parent is a widget.
|
---|
442 |
|
---|
443 | The action uses a stripped version of \a menuText (e.g. "\&Menu
|
---|
444 | Option..." becomes "Menu Option") as descriptive text for
|
---|
445 | toolbuttons. You can override this by setting a specific
|
---|
446 | description with setText(). The same text and \a accel will be
|
---|
447 | used for tool tips and status tips unless you provide text for
|
---|
448 | these using setToolTip() and setStatusTip().
|
---|
449 |
|
---|
450 | Call setToggleAction(TRUE) to make the action a toggle action.
|
---|
451 |
|
---|
452 | \warning To prevent recursion, don't create an action as a child
|
---|
453 | of a widget that the action is later added to.
|
---|
454 | */
|
---|
455 | QAction::QAction( const QIconSet& icon, const QString& menuText, QKeySequence accel,
|
---|
456 | QObject* parent, const char* name )
|
---|
457 | : QObject( parent, name )
|
---|
458 | {
|
---|
459 | d = new QActionPrivate(this);
|
---|
460 | if ( !icon.isNull() )
|
---|
461 | setIconSet( icon );
|
---|
462 | d->text = qt_stripMenuText( menuText );
|
---|
463 | d->menutext = menuText;
|
---|
464 | setAccel( accel );
|
---|
465 | init();
|
---|
466 | }
|
---|
467 |
|
---|
468 | /*!
|
---|
469 | This constructor results in an icon-less action with the the menu
|
---|
470 | text \a menuText and keyboard accelerator \a accel. It is a child
|
---|
471 | of \a parent and called \a name.
|
---|
472 |
|
---|
473 | If \a parent is a QActionGroup, the action automatically becomes
|
---|
474 | a member of it.
|
---|
475 |
|
---|
476 | For accelerators and status tips to work, \a parent must either be
|
---|
477 | a widget, or an action group whose parent is a widget.
|
---|
478 |
|
---|
479 | The action uses a stripped version of \a menuText (e.g. "\&Menu
|
---|
480 | Option..." becomes "Menu Option") as descriptive text for
|
---|
481 | toolbuttons. You can override this by setting a specific
|
---|
482 | description with setText(). The same text and \a accel will be
|
---|
483 | used for tool tips and status tips unless you provide text for
|
---|
484 | these using setToolTip() and setStatusTip().
|
---|
485 |
|
---|
486 | Call setToggleAction(TRUE) to make the action a toggle action.
|
---|
487 |
|
---|
488 | \warning To prevent recursion, don't create an action as a child
|
---|
489 | of a widget that the action is later added to.
|
---|
490 | */
|
---|
491 | QAction::QAction( const QString& menuText, QKeySequence accel,
|
---|
492 | QObject* parent, const char* name )
|
---|
493 | : QObject( parent, name )
|
---|
494 | {
|
---|
495 | d = new QActionPrivate(this);
|
---|
496 | d->text = qt_stripMenuText( menuText );
|
---|
497 | d->menutext = menuText;
|
---|
498 | setAccel( accel );
|
---|
499 | init();
|
---|
500 | }
|
---|
501 |
|
---|
502 | /*! \obsolete
|
---|
503 | This constructor creates an action with the following properties:
|
---|
504 | the description \a text, the icon or iconset \a icon, the menu
|
---|
505 | text \a menuText and keyboard accelerator \a accel. It is a child
|
---|
506 | of \a parent and called \a name. If \a toggle is TRUE the action
|
---|
507 | will be a toggle action, otherwise it will be a command action.
|
---|
508 |
|
---|
509 | If \a parent is a QActionGroup, the action automatically becomes
|
---|
510 | a member of it.
|
---|
511 |
|
---|
512 | For accelerators and status tips to work, \a parent must either be
|
---|
513 | a widget, or an action group whose parent is a widget.
|
---|
514 |
|
---|
515 | The \a text and \a accel will be used for tool tips and status
|
---|
516 | tips unless you provide specific text for these using setToolTip()
|
---|
517 | and setStatusTip().
|
---|
518 | */
|
---|
519 | QAction::QAction( const QString& text, const QIconSet& icon, const QString& menuText, QKeySequence accel, QObject* parent, const char* name, bool toggle )
|
---|
520 | : QObject( parent, name )
|
---|
521 | {
|
---|
522 | d = new QActionPrivate(this);
|
---|
523 | d->toggleaction = toggle;
|
---|
524 | if ( !icon.isNull() )
|
---|
525 | setIconSet( icon );
|
---|
526 |
|
---|
527 | d->text = text;
|
---|
528 | d->menutext = menuText;
|
---|
529 | setAccel( accel );
|
---|
530 | init();
|
---|
531 | }
|
---|
532 |
|
---|
533 | /*! \obsolete
|
---|
534 | This constructor results in an icon-less action with the
|
---|
535 | description \a text, the menu text \a menuText and the keyboard
|
---|
536 | accelerator \a accel. Its parent is \a parent and it is called \a
|
---|
537 | name. If \a toggle is TRUE the action will be a toggle action,
|
---|
538 | otherwise it will be a command action.
|
---|
539 |
|
---|
540 | The action automatically becomes a member of \a parent if \a
|
---|
541 | parent is a QActionGroup.
|
---|
542 |
|
---|
543 | For accelerators and status tips to work, \a parent must either be
|
---|
544 | a widget, or an action group whose parent is a widget.
|
---|
545 |
|
---|
546 | The \a text and \a accel will be used for tool tips and status
|
---|
547 | tips unless you provide specific text for these using setToolTip()
|
---|
548 | and setStatusTip().
|
---|
549 | */
|
---|
550 | QAction::QAction( const QString& text, const QString& menuText, QKeySequence accel, QObject* parent, const char* name, bool toggle )
|
---|
551 | : QObject( parent, name )
|
---|
552 | {
|
---|
553 | d = new QActionPrivate(this);
|
---|
554 | d->toggleaction = toggle;
|
---|
555 | d->text = text;
|
---|
556 | d->menutext = menuText;
|
---|
557 | setAccel( accel );
|
---|
558 | init();
|
---|
559 | }
|
---|
560 | #endif
|
---|
561 |
|
---|
562 | /*!
|
---|
563 | \internal
|
---|
564 | */
|
---|
565 | void QAction::init()
|
---|
566 | {
|
---|
567 | if ( ::qt_cast<QActionGroup*>(parent()) )
|
---|
568 | ((QActionGroup*) parent())->add( this ); // insert into action group
|
---|
569 | }
|
---|
570 |
|
---|
571 | /*!
|
---|
572 | Destroys the object and frees allocated resources.
|
---|
573 | */
|
---|
574 |
|
---|
575 | QAction::~QAction()
|
---|
576 | {
|
---|
577 | delete d;
|
---|
578 | }
|
---|
579 |
|
---|
580 | /*!
|
---|
581 | \property QAction::iconSet
|
---|
582 | \brief the action's icon
|
---|
583 |
|
---|
584 | The icon is used as the tool button icon and in the menu to the
|
---|
585 | left of the menu text. There is no default icon.
|
---|
586 |
|
---|
587 | If a null icon (QIconSet::isNull() is passed into this function,
|
---|
588 | the icon of the action is cleared.
|
---|
589 |
|
---|
590 | (See the action/toggleaction/toggleaction.cpp example.)
|
---|
591 |
|
---|
592 | */
|
---|
593 | void QAction::setIconSet( const QIconSet& icon )
|
---|
594 | {
|
---|
595 | register QIconSet *i = d->iconset;
|
---|
596 | if ( !icon.isNull() )
|
---|
597 | d->iconset = new QIconSet( icon );
|
---|
598 | else
|
---|
599 | d->iconset = 0;
|
---|
600 | delete i;
|
---|
601 | d->update( QActionPrivate::Icons );
|
---|
602 | }
|
---|
603 |
|
---|
604 | QIconSet QAction::iconSet() const
|
---|
605 | {
|
---|
606 | if ( d->iconset )
|
---|
607 | return *d->iconset;
|
---|
608 | return QIconSet();
|
---|
609 | }
|
---|
610 |
|
---|
611 | /*!
|
---|
612 | \property QAction::text
|
---|
613 | \brief the action's descriptive text
|
---|
614 |
|
---|
615 | If \l QMainWindow::usesTextLabel is TRUE, the text appears as a
|
---|
616 | label in the relevant tool button. It also serves as the default
|
---|
617 | text in menus and tool tips if these have not been specifically
|
---|
618 | defined. There is no default text.
|
---|
619 |
|
---|
620 | \sa setMenuText() setToolTip() setStatusTip()
|
---|
621 | */
|
---|
622 | void QAction::setText( const QString& text )
|
---|
623 | {
|
---|
624 | d->text = text;
|
---|
625 | d->update();
|
---|
626 | }
|
---|
627 |
|
---|
628 | QString QAction::text() const
|
---|
629 | {
|
---|
630 | return d->text;
|
---|
631 | }
|
---|
632 |
|
---|
633 |
|
---|
634 | /*!
|
---|
635 | \property QAction::menuText
|
---|
636 | \brief the action's menu text
|
---|
637 |
|
---|
638 | If the action is added to a menu the menu option will consist of
|
---|
639 | the icon (if there is one), the menu text and the accelerator (if
|
---|
640 | there is one). If the menu text is not explicitly set in the
|
---|
641 | constructor or by using setMenuText() the action's description
|
---|
642 | text will be used as the menu text. There is no default menu text.
|
---|
643 |
|
---|
644 | \sa text
|
---|
645 | */
|
---|
646 | void QAction::setMenuText( const QString& text )
|
---|
647 | {
|
---|
648 | if ( d->menutext == text )
|
---|
649 | return;
|
---|
650 |
|
---|
651 | d->menutext = text;
|
---|
652 | d->update();
|
---|
653 | }
|
---|
654 |
|
---|
655 | QString QAction::menuText() const
|
---|
656 | {
|
---|
657 | return d->menuText();
|
---|
658 | }
|
---|
659 |
|
---|
660 | /*!
|
---|
661 | \property QAction::toolTip
|
---|
662 | \brief the action's tool tip
|
---|
663 |
|
---|
664 | This text is used for the tool tip. If no status tip has been set
|
---|
665 | the tool tip will be used for the status tip.
|
---|
666 |
|
---|
667 | If no tool tip is specified the action's text is used, and if that
|
---|
668 | hasn't been specified the description text is used as the tool tip
|
---|
669 | text.
|
---|
670 |
|
---|
671 | There is no default tool tip text.
|
---|
672 |
|
---|
673 | \sa setStatusTip() setAccel()
|
---|
674 | */
|
---|
675 | void QAction::setToolTip( const QString& tip )
|
---|
676 | {
|
---|
677 | if ( d->tooltip == tip )
|
---|
678 | return;
|
---|
679 |
|
---|
680 | d->tooltip = tip;
|
---|
681 | d->update();
|
---|
682 | }
|
---|
683 |
|
---|
684 | QString QAction::toolTip() const
|
---|
685 | {
|
---|
686 | return d->toolTip();
|
---|
687 | }
|
---|
688 |
|
---|
689 | /*!
|
---|
690 | \property QAction::statusTip
|
---|
691 | \brief the action's status tip
|
---|
692 |
|
---|
693 | The statusTip is displayed on all status bars that this action's
|
---|
694 | toplevel parent widget provides.
|
---|
695 |
|
---|
696 | If no status tip is defined, the action uses the tool tip text.
|
---|
697 |
|
---|
698 | There is no default statusTip text.
|
---|
699 |
|
---|
700 | \sa setStatusTip() setToolTip()
|
---|
701 | */
|
---|
702 | //#### Please reimp for QActionGroup!
|
---|
703 | //#### For consistency reasons even action groups should show
|
---|
704 | //#### status tips (as they already do with tool tips)
|
---|
705 | //#### Please change QActionGroup class doc appropriately after
|
---|
706 | //#### reimplementation.
|
---|
707 | void QAction::setStatusTip( const QString& tip )
|
---|
708 | {
|
---|
709 | if ( d->statustip == tip )
|
---|
710 | return;
|
---|
711 |
|
---|
712 | d->statustip = tip;
|
---|
713 | d->update();
|
---|
714 | }
|
---|
715 |
|
---|
716 | QString QAction::statusTip() const
|
---|
717 | {
|
---|
718 | return d->statusTip();
|
---|
719 | }
|
---|
720 |
|
---|
721 | /*!
|
---|
722 | \property QAction::whatsThis
|
---|
723 | \brief the action's "What's This?" help text
|
---|
724 |
|
---|
725 | The whats this text is used to provide a brief description of the
|
---|
726 | action. The text may contain rich text (HTML-like tags -- see
|
---|
727 | QStyleSheet for the list of supported tags). There is no default
|
---|
728 | "What's This" text.
|
---|
729 |
|
---|
730 | \sa QWhatsThis
|
---|
731 | */
|
---|
732 | void QAction::setWhatsThis( const QString& whatsThis )
|
---|
733 | {
|
---|
734 | if ( d->whatsthis == whatsThis )
|
---|
735 | return;
|
---|
736 | d->whatsthis = whatsThis;
|
---|
737 | d->update();
|
---|
738 | }
|
---|
739 |
|
---|
740 | QString QAction::whatsThis() const
|
---|
741 | {
|
---|
742 | return d->whatsthis;
|
---|
743 | }
|
---|
744 |
|
---|
745 |
|
---|
746 | #ifndef QT_NO_ACCEL
|
---|
747 | /*!
|
---|
748 | \property QAction::accel
|
---|
749 | \brief the action's accelerator key
|
---|
750 |
|
---|
751 | The keycodes can be found in \l Qt::Key and \l Qt::Modifier. There
|
---|
752 | is no default accelerator key.
|
---|
753 | */
|
---|
754 | //#### Please reimp for QActionGroup!
|
---|
755 | //#### For consistency reasons even QActionGroups should respond to
|
---|
756 | //#### their accelerators and e.g. open the relevant submenu.
|
---|
757 | //#### Please change appropriate QActionGroup class doc after
|
---|
758 | //#### reimplementation.
|
---|
759 | void QAction::setAccel( const QKeySequence& key )
|
---|
760 | {
|
---|
761 | if ( d->key == key )
|
---|
762 | return;
|
---|
763 |
|
---|
764 | d->key = key;
|
---|
765 | delete d->accel;
|
---|
766 | d->accel = 0;
|
---|
767 |
|
---|
768 | if ( !(int)key ) {
|
---|
769 | d->update();
|
---|
770 | return;
|
---|
771 | }
|
---|
772 |
|
---|
773 | QObject* p = parent();
|
---|
774 | while ( p && !p->isWidgetType() ) {
|
---|
775 | p = p->parent();
|
---|
776 | }
|
---|
777 | if ( p ) {
|
---|
778 | d->accel = new QAccel( (QWidget*)p, this, "qt_action_accel" );
|
---|
779 | d->accelid = d->accel->insertItem( d->key );
|
---|
780 | d->accel->connectItem( d->accelid, this, SLOT( internalActivation() ) );
|
---|
781 | }
|
---|
782 | #if defined(QT_CHECK_STATE)
|
---|
783 | else
|
---|
784 | qWarning( "QAction::setAccel() (%s) requires widget in parent chain", name() );
|
---|
785 | #endif
|
---|
786 | d->update();
|
---|
787 | }
|
---|
788 |
|
---|
789 |
|
---|
790 | QKeySequence QAction::accel() const
|
---|
791 | {
|
---|
792 | return d->key;
|
---|
793 | }
|
---|
794 | #endif
|
---|
795 |
|
---|
796 |
|
---|
797 | /*!
|
---|
798 | \property QAction::toggleAction
|
---|
799 | \brief whether the action is a toggle action
|
---|
800 |
|
---|
801 | A toggle action is one which has an on/off state. For example a
|
---|
802 | Bold toolbar button is either on or off. An action which is not a
|
---|
803 | toggle action is a command action; a command action is simply
|
---|
804 | executed, e.g. file save. This property's default is FALSE.
|
---|
805 |
|
---|
806 | In some situations, the state of one toggle action should depend
|
---|
807 | on the state of others. For example, "Left Align", "Center" and
|
---|
808 | "Right Align" toggle actions are mutually exclusive. To achieve
|
---|
809 | exclusive toggling, add the relevant toggle actions to a
|
---|
810 | QActionGroup with the \l QActionGroup::exclusive property set to
|
---|
811 | TRUE.
|
---|
812 | */
|
---|
813 | void QAction::setToggleAction( bool enable )
|
---|
814 | {
|
---|
815 | if ( enable == (bool)d->toggleaction )
|
---|
816 | return;
|
---|
817 |
|
---|
818 | if ( !enable )
|
---|
819 | d->on = FALSE;
|
---|
820 |
|
---|
821 | d->toggleaction = enable;
|
---|
822 | d->update();
|
---|
823 | }
|
---|
824 |
|
---|
825 | bool QAction::isToggleAction() const
|
---|
826 | {
|
---|
827 | return d->toggleaction;
|
---|
828 | }
|
---|
829 |
|
---|
830 | /*!
|
---|
831 | Activates the action and executes all connected slots.
|
---|
832 | This only works for actions that are not toggle action.
|
---|
833 |
|
---|
834 | \sa toggle()
|
---|
835 | */
|
---|
836 | void QAction::activate()
|
---|
837 | {
|
---|
838 | if ( isToggleAction() ) {
|
---|
839 | #if defined(QT_CHECK_STATE)
|
---|
840 | qWarning( "QAction::%s() (%s) Toggle actions "
|
---|
841 | "can not be activated", "activate", name() );
|
---|
842 | #endif
|
---|
843 | return;
|
---|
844 | }
|
---|
845 | emit activated();
|
---|
846 | }
|
---|
847 |
|
---|
848 | /*!
|
---|
849 | Toggles the state of a toggle action.
|
---|
850 |
|
---|
851 | \sa on, activate(), toggled(), isToggleAction()
|
---|
852 | */
|
---|
853 | void QAction::toggle()
|
---|
854 | {
|
---|
855 | if ( !isToggleAction() ) {
|
---|
856 | #if defined(QT_CHECK_STATE)
|
---|
857 | qWarning( "QAction::%s() (%s) Only toggle actions "
|
---|
858 | "can be switched", "toggle", name() );
|
---|
859 | #endif
|
---|
860 | return;
|
---|
861 | }
|
---|
862 | setOn( !isOn() );
|
---|
863 | }
|
---|
864 |
|
---|
865 | /*!
|
---|
866 | \property QAction::on
|
---|
867 | \brief whether a toggle action is on
|
---|
868 |
|
---|
869 | This property is always on (TRUE) for command actions and
|
---|
870 | \l{QActionGroup}s; setOn() has no effect on them. For action's
|
---|
871 | where isToggleAction() is TRUE, this property's default value is
|
---|
872 | off (FALSE).
|
---|
873 |
|
---|
874 | \sa toggleAction
|
---|
875 | */
|
---|
876 | void QAction::setOn( bool enable )
|
---|
877 | {
|
---|
878 | if ( !isToggleAction() ) {
|
---|
879 | #if defined(QT_CHECK_STATE)
|
---|
880 | if ( enable )
|
---|
881 | qWarning( "QAction::%s() (%s) Only toggle actions "
|
---|
882 | "can be switched", "setOn", name() );
|
---|
883 | #endif
|
---|
884 | return;
|
---|
885 | }
|
---|
886 | if ( enable == (bool)d->on )
|
---|
887 | return;
|
---|
888 | d->on = enable;
|
---|
889 | d->update( QActionPrivate::State );
|
---|
890 | emit toggled( enable );
|
---|
891 | }
|
---|
892 |
|
---|
893 | bool QAction::isOn() const
|
---|
894 | {
|
---|
895 | return d->on;
|
---|
896 | }
|
---|
897 |
|
---|
898 | /*!
|
---|
899 | \property QAction::enabled
|
---|
900 | \brief whether the action is enabled
|
---|
901 |
|
---|
902 | Disabled actions can't be chosen by the user. They don't disappear
|
---|
903 | from the menu/tool bar but are displayed in a way which indicates
|
---|
904 | that they are unavailable, e.g. they might be displayed grayed
|
---|
905 | out.
|
---|
906 |
|
---|
907 | What's this? help on disabled actions is still available provided
|
---|
908 | the \l QAction::whatsThis property is set.
|
---|
909 | */
|
---|
910 | void QAction::setEnabled( bool enable )
|
---|
911 | {
|
---|
912 | d->forceDisabled = !enable;
|
---|
913 |
|
---|
914 | if ( (bool)d->enabled == enable )
|
---|
915 | return;
|
---|
916 |
|
---|
917 | d->enabled = enable;
|
---|
918 | d->update( QActionPrivate::State );
|
---|
919 | }
|
---|
920 |
|
---|
921 | bool QAction::isEnabled() const
|
---|
922 | {
|
---|
923 | return d->enabled;
|
---|
924 | }
|
---|
925 |
|
---|
926 | /*!
|
---|
927 | Disables the action if \a disable is TRUE; otherwise
|
---|
928 | enables the action.
|
---|
929 |
|
---|
930 | See the \l enabled documentation for more information.
|
---|
931 | */
|
---|
932 | void QAction::setDisabled( bool disable )
|
---|
933 | {
|
---|
934 | setEnabled( !disable );
|
---|
935 | }
|
---|
936 |
|
---|
937 | /*!
|
---|
938 | \property QAction::visible
|
---|
939 | \brief whether the action can be seen (e.g. in menus and toolbars)
|
---|
940 |
|
---|
941 | If \e visible is TRUE the action can be seen (e.g. in menus and
|
---|
942 | toolbars) and chosen by the user; if \e visible is FALSE the
|
---|
943 | action cannot be seen or chosen by the user.
|
---|
944 |
|
---|
945 | Actions which are not visible are \e not grayed out; they do not
|
---|
946 | appear at all.
|
---|
947 | */
|
---|
948 | void QAction::setVisible( bool visible )
|
---|
949 | {
|
---|
950 | if ( (bool)d->visible == visible )
|
---|
951 | return;
|
---|
952 | d->visible = visible;
|
---|
953 | d->update( QActionPrivate::Visibility );
|
---|
954 | #if (QT_VERSION-0 >= 0x040000)
|
---|
955 | #error "QAction::setVisible function wants to be virtual. Also add virtual change() function"
|
---|
956 | #endif
|
---|
957 | if ( d->d_group ) //### this function wants to be virtual in 4.0
|
---|
958 | d->d_group->update( (QActionGroup*) this );
|
---|
959 | }
|
---|
960 |
|
---|
961 | /*
|
---|
962 | Returns TRUE if the action is visible (e.g. in menus and
|
---|
963 | toolbars); otherwise returns FALSE.
|
---|
964 | */
|
---|
965 | bool QAction::isVisible() const
|
---|
966 | {
|
---|
967 | return d->visible;
|
---|
968 | }
|
---|
969 |
|
---|
970 | /*! \internal
|
---|
971 | */
|
---|
972 | void QAction::internalActivation()
|
---|
973 | {
|
---|
974 | if ( isToggleAction() )
|
---|
975 | setOn( !isOn() );
|
---|
976 | emit activated();
|
---|
977 | }
|
---|
978 |
|
---|
979 | /*! \internal
|
---|
980 | */
|
---|
981 | void QAction::toolButtonToggled( bool on )
|
---|
982 | {
|
---|
983 | if ( !isToggleAction() )
|
---|
984 | return;
|
---|
985 | setOn( on );
|
---|
986 | }
|
---|
987 |
|
---|
988 | /*!
|
---|
989 | Adds this action to widget \a w.
|
---|
990 |
|
---|
991 | Currently actions may be added to QToolBar and QPopupMenu widgets.
|
---|
992 |
|
---|
993 | An action added to a tool bar is automatically displayed as a tool
|
---|
994 | button; an action added to a pop up menu appears as a menu option.
|
---|
995 |
|
---|
996 | addTo() returns TRUE if the action was added successfully and
|
---|
997 | FALSE otherwise. (If \a w is not a QToolBar or QPopupMenu the
|
---|
998 | action will not be added and FALSE will be returned.)
|
---|
999 |
|
---|
1000 | \sa removeFrom()
|
---|
1001 | */
|
---|
1002 | bool QAction::addTo( QWidget* w )
|
---|
1003 | {
|
---|
1004 | #ifndef QT_NO_TOOLBAR
|
---|
1005 | if ( ::qt_cast<QToolBar*>(w) ) {
|
---|
1006 | if ( !qstrcmp( name(), "qt_separator_action" ) ) {
|
---|
1007 | ((QToolBar*)w)->addSeparator();
|
---|
1008 | } else {
|
---|
1009 | QCString bname = name() + QCString( "_action_button" );
|
---|
1010 | QToolButton* btn = new QToolButton( (QToolBar*) w, bname );
|
---|
1011 | addedTo( btn, w );
|
---|
1012 | btn->setToggleButton( d->toggleaction );
|
---|
1013 | d->toolbuttons.append( btn );
|
---|
1014 | if ( d->iconset )
|
---|
1015 | btn->setIconSet( *d->iconset );
|
---|
1016 | d->update( QActionPrivate::State | QActionPrivate::Visibility | QActionPrivate::EverythingElse ) ;
|
---|
1017 | connect( btn, SIGNAL( clicked() ), this, SIGNAL( activated() ) );
|
---|
1018 | connect( btn, SIGNAL( toggled(bool) ), this, SLOT( toolButtonToggled(bool) ) );
|
---|
1019 | connect( btn, SIGNAL( destroyed() ), this, SLOT( objectDestroyed() ) );
|
---|
1020 | #ifndef QT_NO_TOOLTIP
|
---|
1021 | connect( &(d->tipGroup), SIGNAL(showTip(const QString&)), this, SLOT(showStatusText(const QString&)) );
|
---|
1022 | connect( &(d->tipGroup), SIGNAL(removeTip()), this, SLOT(clearStatusText()) );
|
---|
1023 | #endif
|
---|
1024 | }
|
---|
1025 | } else
|
---|
1026 | #endif
|
---|
1027 | if ( ::qt_cast<QPopupMenu*>(w) ) {
|
---|
1028 | QActionPrivate::MenuItem* mi = new QActionPrivate::MenuItem;
|
---|
1029 | mi->popup = (QPopupMenu*) w;
|
---|
1030 | QIconSet* diconset = d->iconset;
|
---|
1031 | if ( !qstrcmp( name(), "qt_separator_action" ) )
|
---|
1032 | mi->id = ((QPopupMenu*)w)->insertSeparator();
|
---|
1033 | else if ( diconset )
|
---|
1034 | mi->id = mi->popup->insertItem( *diconset, QString::fromLatin1("") );
|
---|
1035 | else
|
---|
1036 | mi->id = mi->popup->insertItem( QString::fromLatin1("") );
|
---|
1037 | addedTo( mi->popup->indexOf( mi->id ), mi->popup );
|
---|
1038 | mi->popup->connectItem( mi->id, this, SLOT(internalActivation()) );
|
---|
1039 | d->menuitems.append( mi );
|
---|
1040 | d->update( QActionPrivate::State | QActionPrivate::Visibility | QActionPrivate::EverythingElse ) ;
|
---|
1041 | w->topLevelWidget()->className();
|
---|
1042 | connect( mi->popup, SIGNAL(highlighted(int)), this, SLOT(menuStatusText(int)) );
|
---|
1043 | connect( mi->popup, SIGNAL(aboutToHide()), this, SLOT(clearStatusText()) );
|
---|
1044 | connect( mi->popup, SIGNAL( destroyed() ), this, SLOT( objectDestroyed() ) );
|
---|
1045 | // Makes only sense when called by QActionGroup::addTo
|
---|
1046 | } else if ( ::qt_cast<QComboBox*>(w) ) {
|
---|
1047 | QActionPrivate::ComboItem *ci = new QActionPrivate::ComboItem;
|
---|
1048 | ci->combo = (QComboBox*)w;
|
---|
1049 | connect( ci->combo, SIGNAL( destroyed() ), this, SLOT( objectDestroyed() ) );
|
---|
1050 | ci->id = ci->combo->count();
|
---|
1051 | if ( qstrcmp( name(), "qt_separator_action" ) ) {
|
---|
1052 | if ( d->iconset )
|
---|
1053 | ci->combo->insertItem( d->iconset->pixmap(), text() );
|
---|
1054 | else
|
---|
1055 | ci->combo->insertItem( text() );
|
---|
1056 | } else {
|
---|
1057 | ci->id = -1;
|
---|
1058 | }
|
---|
1059 | d->comboitems.append( ci );
|
---|
1060 |
|
---|
1061 | d->update( QActionPrivate::State | QActionPrivate::EverythingElse );
|
---|
1062 | } else {
|
---|
1063 | qWarning( "QAction::addTo(), unknown object" );
|
---|
1064 | return FALSE;
|
---|
1065 | }
|
---|
1066 | return TRUE;
|
---|
1067 | }
|
---|
1068 |
|
---|
1069 | /*!
|
---|
1070 | This function is called from the addTo() function when it has
|
---|
1071 | created a widget (\a actionWidget) for the action in the \a
|
---|
1072 | container.
|
---|
1073 | */
|
---|
1074 |
|
---|
1075 | void QAction::addedTo( QWidget *actionWidget, QWidget *container )
|
---|
1076 | {
|
---|
1077 | Q_UNUSED( actionWidget );
|
---|
1078 | Q_UNUSED( container );
|
---|
1079 | }
|
---|
1080 |
|
---|
1081 | /*!
|
---|
1082 | \overload
|
---|
1083 |
|
---|
1084 | This function is called from the addTo() function when it has
|
---|
1085 | created a menu item at the index position \a index in the popup
|
---|
1086 | menu \a menu.
|
---|
1087 | */
|
---|
1088 |
|
---|
1089 | void QAction::addedTo( int index, QPopupMenu *menu )
|
---|
1090 | {
|
---|
1091 | Q_UNUSED( index );
|
---|
1092 | Q_UNUSED( menu );
|
---|
1093 | }
|
---|
1094 |
|
---|
1095 | /*!
|
---|
1096 | Sets the status message to \a text
|
---|
1097 | */
|
---|
1098 | void QAction::showStatusText( const QString& text )
|
---|
1099 | {
|
---|
1100 | #ifndef QT_NO_STATUSBAR
|
---|
1101 | // find out whether we are clearing the status bar by the popup that actually set the text
|
---|
1102 | static QPopupMenu *lastmenu = 0;
|
---|
1103 | QObject *s = (QObject*)sender();
|
---|
1104 | if ( s ) {
|
---|
1105 | QPopupMenu *menu = (QPopupMenu*)s->qt_cast( "QPopupMenu" );
|
---|
1106 | if ( menu && !!text )
|
---|
1107 | lastmenu = menu;
|
---|
1108 | else if ( menu && text.isEmpty() ) {
|
---|
1109 | if ( lastmenu && menu != lastmenu )
|
---|
1110 | return;
|
---|
1111 | lastmenu = 0;
|
---|
1112 | }
|
---|
1113 | }
|
---|
1114 |
|
---|
1115 | QObject* par = parent();
|
---|
1116 | QObject* lpar = 0;
|
---|
1117 | QStatusBar *bar = 0;
|
---|
1118 | while ( par && !bar ) {
|
---|
1119 | lpar = par;
|
---|
1120 | bar = (QStatusBar*)par->child( 0, "QStatusBar", FALSE );
|
---|
1121 | par = par->parent();
|
---|
1122 | }
|
---|
1123 | if ( !bar && lpar ) {
|
---|
1124 | QObjectList *l = lpar->queryList( "QStatusBar" );
|
---|
1125 | if ( !l )
|
---|
1126 | return;
|
---|
1127 | // #### hopefully the last one is the one of the mainwindow...
|
---|
1128 | bar = (QStatusBar*)l->last();
|
---|
1129 | delete l;
|
---|
1130 | }
|
---|
1131 | if ( bar ) {
|
---|
1132 | if ( text.isEmpty() )
|
---|
1133 | bar->clear();
|
---|
1134 | else
|
---|
1135 | bar->message( text );
|
---|
1136 | }
|
---|
1137 | #endif
|
---|
1138 | }
|
---|
1139 |
|
---|
1140 | /*!
|
---|
1141 | Sets the status message to the menu item's status text, or to the
|
---|
1142 | tooltip, if there is no status text.
|
---|
1143 | */
|
---|
1144 | void QAction::menuStatusText( int id )
|
---|
1145 | {
|
---|
1146 | static int lastId = 0;
|
---|
1147 | QString text;
|
---|
1148 | QPtrListIterator<QActionPrivate::MenuItem> it( d->menuitems);
|
---|
1149 | QActionPrivate::MenuItem* mi;
|
---|
1150 | while ( ( mi = it.current() ) ) {
|
---|
1151 | ++it;
|
---|
1152 | if ( mi->id == id ) {
|
---|
1153 | text = statusTip();
|
---|
1154 | break;
|
---|
1155 | }
|
---|
1156 | }
|
---|
1157 |
|
---|
1158 | if ( !text.isEmpty() )
|
---|
1159 | showStatusText( text );
|
---|
1160 | else if ( id != lastId )
|
---|
1161 | clearStatusText();
|
---|
1162 | lastId = id;
|
---|
1163 | }
|
---|
1164 |
|
---|
1165 | /*!
|
---|
1166 | Clears the status text.
|
---|
1167 | */
|
---|
1168 | void QAction::clearStatusText()
|
---|
1169 | {
|
---|
1170 | if (!statusTip().isEmpty())
|
---|
1171 | showStatusText( QString::null );
|
---|
1172 | }
|
---|
1173 |
|
---|
1174 | /*!
|
---|
1175 | Removes the action from widget \a w.
|
---|
1176 |
|
---|
1177 | Returns TRUE if the action was removed successfully; otherwise
|
---|
1178 | returns FALSE.
|
---|
1179 |
|
---|
1180 | \sa addTo()
|
---|
1181 | */
|
---|
1182 | bool QAction::removeFrom( QWidget* w )
|
---|
1183 | {
|
---|
1184 | #ifndef QT_NO_TOOLBAR
|
---|
1185 | if ( ::qt_cast<QToolBar*>(w) ) {
|
---|
1186 | QPtrListIterator<QToolButton> it( d->toolbuttons);
|
---|
1187 | QToolButton* btn;
|
---|
1188 | while ( ( btn = it.current() ) ) {
|
---|
1189 | ++it;
|
---|
1190 | if ( btn->parentWidget() == w ) {
|
---|
1191 | d->toolbuttons.removeRef( btn );
|
---|
1192 | disconnect( btn, SIGNAL( destroyed() ), this, SLOT( objectDestroyed() ) );
|
---|
1193 | delete btn;
|
---|
1194 | // no need to disconnect from statusbar
|
---|
1195 | }
|
---|
1196 | }
|
---|
1197 | } else
|
---|
1198 | #endif
|
---|
1199 | if ( ::qt_cast<QPopupMenu*>(w) ) {
|
---|
1200 | QPtrListIterator<QActionPrivate::MenuItem> it( d->menuitems);
|
---|
1201 | QActionPrivate::MenuItem* mi;
|
---|
1202 | while ( ( mi = it.current() ) ) {
|
---|
1203 | ++it;
|
---|
1204 | if ( mi->popup == w ) {
|
---|
1205 | disconnect( mi->popup, SIGNAL(highlighted(int)), this, SLOT(menuStatusText(int)) );
|
---|
1206 | disconnect( mi->popup, SIGNAL(aboutToHide()), this, SLOT(clearStatusText()) );
|
---|
1207 | disconnect( mi->popup, SIGNAL( destroyed() ), this, SLOT( objectDestroyed() ) );
|
---|
1208 | mi->popup->removeItem( mi->id );
|
---|
1209 | d->menuitems.removeRef( mi );
|
---|
1210 | }
|
---|
1211 | }
|
---|
1212 | } else if ( ::qt_cast<QComboBox*>(w) ) {
|
---|
1213 | QPtrListIterator<QActionPrivate::ComboItem> it( d->comboitems );
|
---|
1214 | QActionPrivate::ComboItem *ci;
|
---|
1215 | while ( ( ci = it.current() ) ) {
|
---|
1216 | ++it;
|
---|
1217 | if ( ci->combo == w ) {
|
---|
1218 | disconnect( ci->combo, SIGNAL(destroyed()), this, SLOT(objectDestroyed()) );
|
---|
1219 | d->comboitems.removeRef( ci );
|
---|
1220 | }
|
---|
1221 | }
|
---|
1222 | } else {
|
---|
1223 | qWarning( "QAction::removeFrom(), unknown object" );
|
---|
1224 | return FALSE;
|
---|
1225 | }
|
---|
1226 | return TRUE;
|
---|
1227 | }
|
---|
1228 |
|
---|
1229 | /*!
|
---|
1230 | \internal
|
---|
1231 | */
|
---|
1232 | void QAction::objectDestroyed()
|
---|
1233 | {
|
---|
1234 | const QObject* obj = sender();
|
---|
1235 | QPtrListIterator<QActionPrivate::MenuItem> it( d->menuitems );
|
---|
1236 | QActionPrivate::MenuItem* mi;
|
---|
1237 | while ( ( mi = it.current() ) ) {
|
---|
1238 | ++it;
|
---|
1239 | if ( mi->popup == obj )
|
---|
1240 | d->menuitems.removeRef( mi );
|
---|
1241 | }
|
---|
1242 | QActionPrivate::ComboItem *ci;
|
---|
1243 | QPtrListIterator<QActionPrivate::ComboItem> it2( d->comboitems );
|
---|
1244 | while ( ( ci = it2.current() ) ) {
|
---|
1245 | ++it2;
|
---|
1246 | if ( ci->combo == obj )
|
---|
1247 | d->comboitems.removeRef( ci );
|
---|
1248 | }
|
---|
1249 | d->toolbuttons.removeRef( (QToolButton*) obj );
|
---|
1250 | }
|
---|
1251 |
|
---|
1252 | /*!
|
---|
1253 | \fn void QAction::activated()
|
---|
1254 |
|
---|
1255 | This signal is emitted when an action is activated by the user,
|
---|
1256 | e.g. when the user clicks a menu option or a toolbar button or
|
---|
1257 | presses an action's accelerator key combination.
|
---|
1258 |
|
---|
1259 | Connect to this signal for command actions. Connect to the
|
---|
1260 | toggled() signal for toggle actions.
|
---|
1261 | */
|
---|
1262 |
|
---|
1263 | /*!
|
---|
1264 | \fn void QAction::toggled(bool on)
|
---|
1265 |
|
---|
1266 | This signal is emitted when a toggle action changes state; command
|
---|
1267 | actions and \l{QActionGroup}s don't emit toggled().
|
---|
1268 |
|
---|
1269 | The \a on argument denotes the new state: If \a on is TRUE the
|
---|
1270 | toggle action is switched on, and if \a on is FALSE the toggle
|
---|
1271 | action is switched off.
|
---|
1272 |
|
---|
1273 | To trigger a user command depending on whether a toggle action has
|
---|
1274 | been switched on or off connect it to a slot that takes a bool to
|
---|
1275 | indicate the state, e.g.
|
---|
1276 |
|
---|
1277 | \quotefile action/toggleaction/toggleaction.cpp
|
---|
1278 | \skipto QMainWindow * window
|
---|
1279 | \printline QMainWindow * window
|
---|
1280 | \skipto labelonoffaction
|
---|
1281 | \printline labelonoffaction
|
---|
1282 | \skipto connect
|
---|
1283 | \printuntil setUsesTextLabel
|
---|
1284 |
|
---|
1285 | \sa activated() setToggleAction() setOn()
|
---|
1286 | */
|
---|
1287 |
|
---|
1288 | void QActionGroupPrivate::update( const QActionGroup* that )
|
---|
1289 | {
|
---|
1290 | for ( QPtrListIterator<QAction> it( actions ); it.current(); ++it ) {
|
---|
1291 | if ( that->isEnabled() && !it.current()->d->forceDisabled )
|
---|
1292 | it.current()->setEnabled( TRUE );
|
---|
1293 | else if ( !that->isEnabled() && it.current()->isEnabled() ) {
|
---|
1294 | it.current()->setEnabled( FALSE );
|
---|
1295 | it.current()->d->forceDisabled = FALSE;
|
---|
1296 | }
|
---|
1297 | it.current()->setVisible( that->isVisible() );
|
---|
1298 | }
|
---|
1299 | for ( QPtrListIterator<QComboBox> cb( comboboxes ); cb.current(); ++cb ) {
|
---|
1300 | QComboBox *combobox = cb.current();
|
---|
1301 | combobox->setEnabled( that->isEnabled() );
|
---|
1302 | combobox->setShown( that->isVisible() );
|
---|
1303 |
|
---|
1304 | #ifndef QT_NO_TOOLTIP
|
---|
1305 | QToolTip::remove( combobox );
|
---|
1306 | if ( !!that->toolTip() )
|
---|
1307 | QToolTip::add( combobox, that->toolTip() );
|
---|
1308 | #endif
|
---|
1309 | #ifndef QT_NO_WHATSTHIS
|
---|
1310 | QWhatsThis::remove( combobox );
|
---|
1311 | if ( !!that->whatsThis() )
|
---|
1312 | QWhatsThis::add( combobox, that->whatsThis() );
|
---|
1313 | #endif
|
---|
1314 |
|
---|
1315 | }
|
---|
1316 | for ( QPtrListIterator<QToolButton> mb( menubuttons ); mb.current(); ++mb ) {
|
---|
1317 | QToolButton *button = mb.current();
|
---|
1318 | button->setEnabled( that->isEnabled() );
|
---|
1319 | button->setShown( that->isVisible() );
|
---|
1320 |
|
---|
1321 | if ( !that->text().isNull() )
|
---|
1322 | button->setTextLabel( that->text() );
|
---|
1323 | if ( !that->iconSet().isNull() )
|
---|
1324 | button->setIconSet( that->iconSet() );
|
---|
1325 |
|
---|
1326 | #ifndef QT_NO_TOOLTIP
|
---|
1327 | QToolTip::remove( mb.current() );
|
---|
1328 | if ( !!that->toolTip() )
|
---|
1329 | QToolTip::add( button, that->toolTip() );
|
---|
1330 | #endif
|
---|
1331 | #ifndef QT_NO_WHATSTHIS
|
---|
1332 | QWhatsThis::remove( button );
|
---|
1333 | if ( !!that->whatsThis() )
|
---|
1334 | QWhatsThis::add( button, that->whatsThis() );
|
---|
1335 | #endif
|
---|
1336 | }
|
---|
1337 | for ( QPtrListIterator<QActionGroupPrivate::MenuItem> pu( menuitems ); pu.current(); ++pu ) {
|
---|
1338 | QWidget* parent = pu.current()->popup->parentWidget();
|
---|
1339 | if ( ::qt_cast<QPopupMenu*>(parent) ) {
|
---|
1340 | QPopupMenu* ppopup = (QPopupMenu*)parent;
|
---|
1341 | ppopup->setItemEnabled( pu.current()->id, that->isEnabled() );
|
---|
1342 | ppopup->setItemVisible( pu.current()->id, that->isVisible() );
|
---|
1343 | } else {
|
---|
1344 | pu.current()->popup->setEnabled( that->isEnabled() );
|
---|
1345 | }
|
---|
1346 | }
|
---|
1347 | for ( QPtrListIterator<QPopupMenu> pm( popupmenus ); pm.current(); ++pm ) {
|
---|
1348 | QPopupMenu *popup = pm.current();
|
---|
1349 | QPopupMenu *parent = ::qt_cast<QPopupMenu*>(popup->parentWidget());
|
---|
1350 | if ( !parent )
|
---|
1351 | continue;
|
---|
1352 |
|
---|
1353 | int index;
|
---|
1354 | parent->findPopup( popup, &index );
|
---|
1355 | int id = parent->idAt( index );
|
---|
1356 | if ( !that->iconSet().isNull() )
|
---|
1357 | parent->changeItem( id, that->iconSet(), that->menuText() );
|
---|
1358 | else
|
---|
1359 | parent->changeItem( id, that->menuText() );
|
---|
1360 | parent->setItemEnabled( id, that->isEnabled() );
|
---|
1361 | #ifndef QT_NO_ACCEL
|
---|
1362 | parent->setAccel( that->accel(), id );
|
---|
1363 | #endif
|
---|
1364 | }
|
---|
1365 | }
|
---|
1366 |
|
---|
1367 | /*!
|
---|
1368 | \class QActionGroup qaction.h
|
---|
1369 | \brief The QActionGroup class groups actions together.
|
---|
1370 |
|
---|
1371 | \ingroup basic
|
---|
1372 | \ingroup application
|
---|
1373 |
|
---|
1374 | In some situations it is useful to group actions together. For
|
---|
1375 | example, if you have a left justify action, a right justify action
|
---|
1376 | and a center action, only one of these actions should be active at
|
---|
1377 | any one time, and one simple way of achieving this is to group the
|
---|
1378 | actions together in an action group.
|
---|
1379 |
|
---|
1380 | An action group can also be added to a menu or a toolbar as a
|
---|
1381 | single unit, with all the actions within the action group
|
---|
1382 | appearing as separate menu options and toolbar buttons.
|
---|
1383 |
|
---|
1384 | Here's an example from examples/textedit:
|
---|
1385 | \quotefile textedit/textedit.cpp
|
---|
1386 | \skipto QActionGroup
|
---|
1387 | \printuntil connect
|
---|
1388 |
|
---|
1389 | Here we create a new action group. Since the action group is exclusive
|
---|
1390 | by default, only one of the actions in the group is ever active at any
|
---|
1391 | one time. We then connect the group's selected() signal to our
|
---|
1392 | textAlign() slot.
|
---|
1393 |
|
---|
1394 | \printuntil actionAlignLeft->setToggleAction
|
---|
1395 |
|
---|
1396 | We create a left align action, add it to the toolbar and the menu
|
---|
1397 | and make it a toggle action. We create center and right align
|
---|
1398 | actions in exactly the same way.
|
---|
1399 |
|
---|
1400 | \omit
|
---|
1401 | A QActionGroup emits an activated() signal when one of its actions
|
---|
1402 | is activated.
|
---|
1403 | \endomit
|
---|
1404 | The actions in an action group emit their activated() (and for
|
---|
1405 | toggle actions, toggled()) signals as usual.
|
---|
1406 |
|
---|
1407 | The setExclusive() function is used to ensure that only one action
|
---|
1408 | is active at any one time: it should be used with actions which
|
---|
1409 | have their \c toggleAction set to TRUE.
|
---|
1410 |
|
---|
1411 | Action group actions appear as individual menu options and toolbar
|
---|
1412 | buttons. For exclusive action groups use setUsesDropDown() to
|
---|
1413 | display the actions in a subwidget of any widget the action group
|
---|
1414 | is added to. For example, the actions would appear in a combobox
|
---|
1415 | in a toolbar or as a submenu in a menu.
|
---|
1416 |
|
---|
1417 | Actions can be added to an action group using add(), but normally
|
---|
1418 | they are added by creating the action with the action group as
|
---|
1419 | parent. Actions can have separators dividing them using
|
---|
1420 | addSeparator(). Action groups are added to widgets with addTo().
|
---|
1421 | */
|
---|
1422 |
|
---|
1423 | /*!
|
---|
1424 | Constructs an action group called \a name, with parent \a parent.
|
---|
1425 |
|
---|
1426 | The action group is exclusive by default. Call setExclusive(FALSE) to make
|
---|
1427 | the action group non-exclusive.
|
---|
1428 | */
|
---|
1429 | QActionGroup::QActionGroup( QObject* parent, const char* name )
|
---|
1430 | : QAction( parent, name )
|
---|
1431 | {
|
---|
1432 | d = new QActionGroupPrivate;
|
---|
1433 | d->exclusive = TRUE;
|
---|
1434 | d->dropdown = FALSE;
|
---|
1435 | d->selected = 0;
|
---|
1436 | d->separatorAction = 0;
|
---|
1437 | QAction::d->d_group = d;
|
---|
1438 |
|
---|
1439 | connect( this, SIGNAL(selected(QAction*)), SLOT(internalToggle(QAction*)) );
|
---|
1440 | }
|
---|
1441 |
|
---|
1442 | /*!
|
---|
1443 | Constructs an action group called \a name, with parent \a parent.
|
---|
1444 |
|
---|
1445 | If \a exclusive is TRUE only one toggle action in the group will
|
---|
1446 | ever be active.
|
---|
1447 |
|
---|
1448 | \sa exclusive
|
---|
1449 | */
|
---|
1450 | QActionGroup::QActionGroup( QObject* parent, const char* name, bool exclusive )
|
---|
1451 | : QAction( parent, name )
|
---|
1452 | {
|
---|
1453 | d = new QActionGroupPrivate;
|
---|
1454 | d->exclusive = exclusive;
|
---|
1455 | d->dropdown = FALSE;
|
---|
1456 | d->selected = 0;
|
---|
1457 | d->separatorAction = 0;
|
---|
1458 | QAction::d->d_group = d;
|
---|
1459 |
|
---|
1460 | connect( this, SIGNAL(selected(QAction*)), SLOT(internalToggle(QAction*)) );
|
---|
1461 | }
|
---|
1462 |
|
---|
1463 | /*!
|
---|
1464 | Destroys the object and frees allocated resources.
|
---|
1465 | */
|
---|
1466 |
|
---|
1467 | QActionGroup::~QActionGroup()
|
---|
1468 | {
|
---|
1469 | QPtrListIterator<QActionGroupPrivate::MenuItem> mit( d->menuitems );
|
---|
1470 | while ( mit.current() ) {
|
---|
1471 | QActionGroupPrivate::MenuItem *mi = mit.current();
|
---|
1472 | ++mit;
|
---|
1473 | if ( mi->popup )
|
---|
1474 | mi->popup->disconnect( SIGNAL(destroyed()), this, SLOT(objectDestroyed()) );
|
---|
1475 | }
|
---|
1476 |
|
---|
1477 | QPtrListIterator<QComboBox> cbit( d->comboboxes );
|
---|
1478 | while ( cbit.current() ) {
|
---|
1479 | QComboBox *cb = cbit.current();
|
---|
1480 | ++cbit;
|
---|
1481 | cb->disconnect( SIGNAL(destroyed()), this, SLOT(objectDestroyed()) );
|
---|
1482 | }
|
---|
1483 | QPtrListIterator<QToolButton> mbit( d->menubuttons );
|
---|
1484 | while ( mbit.current() ) {
|
---|
1485 | QToolButton *mb = mbit.current();
|
---|
1486 | ++mbit;
|
---|
1487 | mb->disconnect( SIGNAL(destroyed()), this, SLOT(objectDestroyed()) );
|
---|
1488 | }
|
---|
1489 | QPtrListIterator<QPopupMenu> pmit( d->popupmenus );
|
---|
1490 | while ( pmit.current() ) {
|
---|
1491 | QPopupMenu *pm = pmit.current();
|
---|
1492 | ++pmit;
|
---|
1493 | pm->disconnect( SIGNAL(destroyed()), this, SLOT(objectDestroyed()) );
|
---|
1494 | }
|
---|
1495 |
|
---|
1496 | delete d->separatorAction;
|
---|
1497 | d->menubuttons.setAutoDelete( TRUE );
|
---|
1498 | d->comboboxes.setAutoDelete( TRUE );
|
---|
1499 | d->menuitems.setAutoDelete( TRUE );
|
---|
1500 | d->popupmenus.setAutoDelete( TRUE );
|
---|
1501 | delete d;
|
---|
1502 | }
|
---|
1503 |
|
---|
1504 | /*!
|
---|
1505 | \property QActionGroup::exclusive
|
---|
1506 | \brief whether the action group does exclusive toggling
|
---|
1507 |
|
---|
1508 | If exclusive is TRUE only one toggle action in the action group
|
---|
1509 | can ever be active at any one time. If the user chooses another
|
---|
1510 | toggle action in the group the one they chose becomes active and
|
---|
1511 | the one that was active becomes inactive.
|
---|
1512 |
|
---|
1513 | \sa QAction::toggleAction
|
---|
1514 | */
|
---|
1515 | void QActionGroup::setExclusive( bool enable )
|
---|
1516 | {
|
---|
1517 | d->exclusive = enable;
|
---|
1518 | }
|
---|
1519 |
|
---|
1520 | bool QActionGroup::isExclusive() const
|
---|
1521 | {
|
---|
1522 | return d->exclusive;
|
---|
1523 | }
|
---|
1524 |
|
---|
1525 | /*!
|
---|
1526 | \property QActionGroup::usesDropDown
|
---|
1527 | \brief whether the group's actions are displayed in a subwidget of
|
---|
1528 | the widgets the action group is added to
|
---|
1529 |
|
---|
1530 | Exclusive action groups added to a toolbar display their actions
|
---|
1531 | in a combobox with the action's \l QAction::text and \l
|
---|
1532 | QAction::iconSet properties shown. Non-exclusive groups are
|
---|
1533 | represented by a tool button showing their \l QAction::iconSet and
|
---|
1534 | -- depending on \l QMainWindow::usesTextLabel() -- text()
|
---|
1535 | property.
|
---|
1536 |
|
---|
1537 | In a popup menu the member actions are displayed in a submenu.
|
---|
1538 |
|
---|
1539 | Changing usesDropDown only affects \e subsequent calls to addTo().
|
---|
1540 |
|
---|
1541 | This property's default is FALSE.
|
---|
1542 |
|
---|
1543 | */
|
---|
1544 | void QActionGroup::setUsesDropDown( bool enable )
|
---|
1545 | {
|
---|
1546 | d->dropdown = enable;
|
---|
1547 | }
|
---|
1548 |
|
---|
1549 | bool QActionGroup::usesDropDown() const
|
---|
1550 | {
|
---|
1551 | return d->dropdown;
|
---|
1552 | }
|
---|
1553 |
|
---|
1554 | /*!
|
---|
1555 | Adds action \a action to this group.
|
---|
1556 |
|
---|
1557 | Normally an action is added to a group by creating it with the
|
---|
1558 | group as parent, so this function is not usually used.
|
---|
1559 |
|
---|
1560 | \sa addTo()
|
---|
1561 | */
|
---|
1562 | void QActionGroup::add( QAction* action )
|
---|
1563 | {
|
---|
1564 | if ( d->actions.containsRef( action ) )
|
---|
1565 | return;
|
---|
1566 |
|
---|
1567 | d->actions.append( action );
|
---|
1568 |
|
---|
1569 | if ( action->whatsThis().isNull() )
|
---|
1570 | action->setWhatsThis( whatsThis() );
|
---|
1571 | if ( action->toolTip().isNull() )
|
---|
1572 | action->setToolTip( toolTip() );
|
---|
1573 | action->d->enabled = isEnabled();
|
---|
1574 | action->d->visible = isVisible();
|
---|
1575 |
|
---|
1576 | connect( action, SIGNAL( destroyed() ), this, SLOT( childDestroyed() ) );
|
---|
1577 | connect( action, SIGNAL( activated() ), this, SIGNAL( activated() ) );
|
---|
1578 | connect( action, SIGNAL( toggled(bool) ), this, SLOT( childToggled(bool) ) );
|
---|
1579 |
|
---|
1580 | for ( QPtrListIterator<QComboBox> cb( d->comboboxes ); cb.current(); ++cb ) {
|
---|
1581 | action->addTo( cb.current() );
|
---|
1582 | }
|
---|
1583 | for ( QPtrListIterator<QToolButton> mb( d->menubuttons ); mb.current(); ++mb ) {
|
---|
1584 | QPopupMenu* popup = mb.current()->popup();
|
---|
1585 | if ( !popup )
|
---|
1586 | continue;
|
---|
1587 | action->addTo( popup );
|
---|
1588 | }
|
---|
1589 | for ( QPtrListIterator<QActionGroupPrivate::MenuItem> mi( d->menuitems ); mi.current(); ++mi ) {
|
---|
1590 | QPopupMenu* popup = mi.current()->popup;
|
---|
1591 | if ( !popup )
|
---|
1592 | continue;
|
---|
1593 | action->addTo( popup );
|
---|
1594 | }
|
---|
1595 | }
|
---|
1596 |
|
---|
1597 | /*!
|
---|
1598 | Adds a separator to the group.
|
---|
1599 | */
|
---|
1600 | void QActionGroup::addSeparator()
|
---|
1601 | {
|
---|
1602 | if ( !d->separatorAction )
|
---|
1603 | d->separatorAction = new QAction( 0, "qt_separator_action" );
|
---|
1604 | d->actions.append( d->separatorAction );
|
---|
1605 | }
|
---|
1606 |
|
---|
1607 |
|
---|
1608 | /*! \fn void QActionGroup::insert( QAction* a )
|
---|
1609 |
|
---|
1610 | \obsolete
|
---|
1611 |
|
---|
1612 | Use add() instead, or better still create the action with the action
|
---|
1613 | group as its parent.
|
---|
1614 | */
|
---|
1615 |
|
---|
1616 | /*!
|
---|
1617 | Adds this action group to the widget \a w.
|
---|
1618 |
|
---|
1619 | If isExclusive() is FALSE or usesDropDown() is FALSE, the actions within
|
---|
1620 | the group are added to the widget individually. For example, if the widget
|
---|
1621 | is a menu, the actions will appear as individual menu options, and
|
---|
1622 | if the widget is a toolbar, the actions will appear as toolbar buttons.
|
---|
1623 |
|
---|
1624 | If both isExclusive() and usesDropDown() are TRUE, the actions
|
---|
1625 | are presented either in a combobox (if \a w is a toolbar) or in a
|
---|
1626 | submenu (if \a w is a menu).
|
---|
1627 |
|
---|
1628 | All actions should be added to the action group \e before the
|
---|
1629 | action group is added to the widget. If actions are added to the
|
---|
1630 | action group \e after the action group has been added to the
|
---|
1631 | widget these later actions will \e not appear.
|
---|
1632 |
|
---|
1633 | \sa setExclusive() setUsesDropDown() removeFrom()
|
---|
1634 | */
|
---|
1635 | bool QActionGroup::addTo( QWidget* w )
|
---|
1636 | {
|
---|
1637 | #ifndef QT_NO_TOOLBAR
|
---|
1638 | if ( ::qt_cast<QToolBar*>(w) ) {
|
---|
1639 | if ( d->dropdown ) {
|
---|
1640 | if ( !d->exclusive ) {
|
---|
1641 | QPtrListIterator<QAction> it( d->actions);
|
---|
1642 | if ( !it.current() )
|
---|
1643 | return TRUE;
|
---|
1644 |
|
---|
1645 | QAction *defAction = it.current();
|
---|
1646 |
|
---|
1647 | QToolButton* btn = new QToolButton( (QToolBar*) w, "qt_actiongroup_btn" );
|
---|
1648 | addedTo( btn, w );
|
---|
1649 | connect( btn, SIGNAL(destroyed()), SLOT(objectDestroyed()) );
|
---|
1650 | d->menubuttons.append( btn );
|
---|
1651 |
|
---|
1652 | if ( !iconSet().isNull() )
|
---|
1653 | btn->setIconSet( iconSet() );
|
---|
1654 | else if ( !defAction->iconSet().isNull() )
|
---|
1655 | btn->setIconSet( defAction->iconSet() );
|
---|
1656 | if ( !!text() )
|
---|
1657 | btn->setTextLabel( text() );
|
---|
1658 | else if ( !!defAction->text() )
|
---|
1659 | btn->setTextLabel( defAction->text() );
|
---|
1660 | #ifndef QT_NO_TOOLTIP
|
---|
1661 | if ( !!toolTip() )
|
---|
1662 | QToolTip::add( btn, toolTip() );
|
---|
1663 | else if ( !!defAction->toolTip() )
|
---|
1664 | QToolTip::add( btn, defAction->toolTip() );
|
---|
1665 | #endif
|
---|
1666 | #ifndef QT_NO_WHATSTHIS
|
---|
1667 | if ( !!whatsThis() )
|
---|
1668 | QWhatsThis::add( btn, whatsThis() );
|
---|
1669 | else if ( !!defAction->whatsThis() )
|
---|
1670 | QWhatsThis::add( btn, defAction->whatsThis() );
|
---|
1671 | #endif
|
---|
1672 |
|
---|
1673 | connect( btn, SIGNAL( clicked() ), defAction, SIGNAL( activated() ) );
|
---|
1674 | connect( btn, SIGNAL( toggled(bool) ), defAction, SLOT( toolButtonToggled(bool) ) );
|
---|
1675 | connect( btn, SIGNAL( destroyed() ), defAction, SLOT( objectDestroyed() ) );
|
---|
1676 |
|
---|
1677 | QPopupMenu *menu = new QPopupMenu( btn, "qt_actiongroup_menu" );
|
---|
1678 | btn->setPopupDelay( 0 );
|
---|
1679 | btn->setPopup( menu );
|
---|
1680 |
|
---|
1681 | while( it.current() ) {
|
---|
1682 | it.current()->addTo( menu );
|
---|
1683 | ++it;
|
---|
1684 | }
|
---|
1685 | d->update( this );
|
---|
1686 | return TRUE;
|
---|
1687 | } else {
|
---|
1688 | QComboBox *box = new QComboBox( FALSE, w, "qt_actiongroup_combo" );
|
---|
1689 | addedTo( box, w );
|
---|
1690 | connect( box, SIGNAL(destroyed()), SLOT(objectDestroyed()) );
|
---|
1691 | d->comboboxes.append( box );
|
---|
1692 | #ifndef QT_NO_TOOLTIP
|
---|
1693 | if ( !!toolTip() )
|
---|
1694 | QToolTip::add( box, toolTip() );
|
---|
1695 | #endif
|
---|
1696 | #ifndef QT_NO_WHATSTHIS
|
---|
1697 | if ( !!whatsThis() )
|
---|
1698 | QWhatsThis::add( box, whatsThis() );
|
---|
1699 | #endif
|
---|
1700 |
|
---|
1701 | int onIndex = 0;
|
---|
1702 | bool foundOn = FALSE;
|
---|
1703 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1704 | QAction *action = it.current();
|
---|
1705 | if ( !foundOn )
|
---|
1706 | foundOn = action->isOn();
|
---|
1707 | if ( qstrcmp( action->name(), "qt_separator_action" ) && !foundOn )
|
---|
1708 | onIndex++;
|
---|
1709 | action->addTo( box );
|
---|
1710 | }
|
---|
1711 | if ( foundOn )
|
---|
1712 | box->setCurrentItem( onIndex );
|
---|
1713 | connect( box, SIGNAL(activated(int)), this, SLOT( internalComboBoxActivated(int)) );
|
---|
1714 | connect( box, SIGNAL(highlighted(int)), this, SLOT( internalComboBoxHighlighted(int)) );
|
---|
1715 | d->update( this );
|
---|
1716 | return TRUE;
|
---|
1717 | }
|
---|
1718 | }
|
---|
1719 | } else
|
---|
1720 | #endif
|
---|
1721 | if ( ::qt_cast<QPopupMenu*>(w) ) {
|
---|
1722 | QPopupMenu *popup;
|
---|
1723 | if ( d->dropdown ) {
|
---|
1724 | QPopupMenu *menu = (QPopupMenu*)w;
|
---|
1725 | popup = new QPopupMenu( w, "qt_actiongroup_menu" );
|
---|
1726 | d->popupmenus.append( popup );
|
---|
1727 | connect( popup, SIGNAL(destroyed()), SLOT(objectDestroyed()) );
|
---|
1728 |
|
---|
1729 | int id;
|
---|
1730 | if ( !iconSet().isNull() ) {
|
---|
1731 | if ( menuText().isEmpty() )
|
---|
1732 | id = menu->insertItem( iconSet(), text(), popup );
|
---|
1733 | else
|
---|
1734 | id = menu->insertItem( iconSet(), menuText(), popup );
|
---|
1735 | } else {
|
---|
1736 | if ( menuText().isEmpty() )
|
---|
1737 | id = menu->insertItem( text(), popup );
|
---|
1738 | else
|
---|
1739 | id = menu->insertItem( menuText(), popup );
|
---|
1740 | }
|
---|
1741 |
|
---|
1742 | addedTo( menu->indexOf( id ), menu );
|
---|
1743 |
|
---|
1744 | QActionGroupPrivate::MenuItem *item = new QActionGroupPrivate::MenuItem;
|
---|
1745 | item->id = id;
|
---|
1746 | item->popup = popup;
|
---|
1747 | d->menuitems.append( item );
|
---|
1748 | } else {
|
---|
1749 | popup = (QPopupMenu*)w;
|
---|
1750 | }
|
---|
1751 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1752 | // #### do an addedTo( index, popup, action), need to find out index
|
---|
1753 | it.current()->addTo( popup );
|
---|
1754 | }
|
---|
1755 | return TRUE;
|
---|
1756 | }
|
---|
1757 |
|
---|
1758 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1759 | // #### do an addedTo( index, popup, action), need to find out index
|
---|
1760 | it.current()->addTo( w );
|
---|
1761 | }
|
---|
1762 |
|
---|
1763 | return TRUE;
|
---|
1764 | }
|
---|
1765 |
|
---|
1766 | /*! \reimp
|
---|
1767 | */
|
---|
1768 | bool QActionGroup::removeFrom( QWidget* w )
|
---|
1769 | {
|
---|
1770 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1771 | it.current()->removeFrom( w );
|
---|
1772 | }
|
---|
1773 |
|
---|
1774 | #ifndef QT_NO_TOOLBAR
|
---|
1775 | if ( ::qt_cast<QToolBar*>(w) ) {
|
---|
1776 | QPtrListIterator<QComboBox> cb( d->comboboxes );
|
---|
1777 | while( cb.current() ) {
|
---|
1778 | QComboBox *box = cb.current();
|
---|
1779 | ++cb;
|
---|
1780 | if ( box->parentWidget() == w )
|
---|
1781 | delete box;
|
---|
1782 | }
|
---|
1783 | QPtrListIterator<QToolButton> mb( d->menubuttons );
|
---|
1784 | while( mb.current() ) {
|
---|
1785 | QToolButton *btn = mb.current();
|
---|
1786 | ++mb;
|
---|
1787 | if ( btn->parentWidget() == w )
|
---|
1788 | delete btn;
|
---|
1789 | }
|
---|
1790 | } else
|
---|
1791 | #endif
|
---|
1792 | if ( ::qt_cast<QPopupMenu*>(w) ) {
|
---|
1793 | QPtrListIterator<QActionGroupPrivate::MenuItem> pu( d->menuitems );
|
---|
1794 | while ( pu.current() ) {
|
---|
1795 | QActionGroupPrivate::MenuItem *mi = pu.current();
|
---|
1796 | ++pu;
|
---|
1797 | if ( d->dropdown && mi->popup )
|
---|
1798 | ( (QPopupMenu*)w )->removeItem( mi->id );
|
---|
1799 | delete mi->popup;
|
---|
1800 | }
|
---|
1801 | }
|
---|
1802 |
|
---|
1803 | return TRUE;
|
---|
1804 | }
|
---|
1805 |
|
---|
1806 | /*! \internal
|
---|
1807 | */
|
---|
1808 | void QActionGroup::childToggled( bool b )
|
---|
1809 | {
|
---|
1810 | if ( !isExclusive() )
|
---|
1811 | return;
|
---|
1812 | QAction* s = (QAction*) sender();
|
---|
1813 | if ( b ) {
|
---|
1814 | if ( s != d->selected ) {
|
---|
1815 | d->selected = s;
|
---|
1816 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1817 | if ( it.current()->isToggleAction() && it.current() != s )
|
---|
1818 | it.current()->setOn( FALSE );
|
---|
1819 | }
|
---|
1820 | emit activated();
|
---|
1821 | emit selected( s );
|
---|
1822 | } else if ( !s->isToggleAction() ) {
|
---|
1823 | emit activated();
|
---|
1824 | }
|
---|
1825 | } else {
|
---|
1826 | if ( s == d->selected ) {
|
---|
1827 | // at least one has to be selected
|
---|
1828 | s->setOn( TRUE );
|
---|
1829 | }
|
---|
1830 | }
|
---|
1831 | }
|
---|
1832 |
|
---|
1833 | /*! \internal
|
---|
1834 | */
|
---|
1835 | void QActionGroup::childDestroyed()
|
---|
1836 | {
|
---|
1837 | d->actions.removeRef( (QAction*) sender() );
|
---|
1838 | if ( d->selected == sender() )
|
---|
1839 | d->selected = 0;
|
---|
1840 | }
|
---|
1841 |
|
---|
1842 | /*! \reimp
|
---|
1843 | */
|
---|
1844 | void QActionGroup::setEnabled( bool enable )
|
---|
1845 | {
|
---|
1846 | if ( enable == isEnabled() )
|
---|
1847 | return;
|
---|
1848 |
|
---|
1849 | QAction::setEnabled( enable );
|
---|
1850 | d->update( this );
|
---|
1851 | }
|
---|
1852 |
|
---|
1853 | /*! \reimp
|
---|
1854 | */
|
---|
1855 | void QActionGroup::setToggleAction( bool toggle )
|
---|
1856 | {
|
---|
1857 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it )
|
---|
1858 | it.current()->setToggleAction( toggle );
|
---|
1859 |
|
---|
1860 | QAction::setToggleAction( TRUE );
|
---|
1861 | d->update( this );
|
---|
1862 | }
|
---|
1863 |
|
---|
1864 | /*! \reimp
|
---|
1865 | */
|
---|
1866 | void QActionGroup::setOn( bool on )
|
---|
1867 | {
|
---|
1868 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1869 | QAction *act = it.current();
|
---|
1870 | if ( act->isToggleAction() )
|
---|
1871 | act->setOn( on );
|
---|
1872 | }
|
---|
1873 |
|
---|
1874 | QAction::setOn( on );
|
---|
1875 | d->update( this );
|
---|
1876 | }
|
---|
1877 |
|
---|
1878 | /*! \reimp
|
---|
1879 | */
|
---|
1880 | void QActionGroup::setIconSet( const QIconSet& icon )
|
---|
1881 | {
|
---|
1882 | QAction::setIconSet( icon );
|
---|
1883 | d->update( this );
|
---|
1884 | }
|
---|
1885 |
|
---|
1886 | /*! \reimp
|
---|
1887 | */
|
---|
1888 | void QActionGroup::setText( const QString& txt )
|
---|
1889 | {
|
---|
1890 | if ( txt == text() )
|
---|
1891 | return;
|
---|
1892 |
|
---|
1893 | QAction::setText( txt );
|
---|
1894 | d->update( this );
|
---|
1895 | }
|
---|
1896 |
|
---|
1897 | /*! \reimp
|
---|
1898 | */
|
---|
1899 | void QActionGroup::setMenuText( const QString& text )
|
---|
1900 | {
|
---|
1901 | if ( text == menuText() )
|
---|
1902 | return;
|
---|
1903 |
|
---|
1904 | QAction::setMenuText( text );
|
---|
1905 | d->update( this );
|
---|
1906 | }
|
---|
1907 |
|
---|
1908 | /*! \reimp
|
---|
1909 | */
|
---|
1910 | void QActionGroup::setToolTip( const QString& text )
|
---|
1911 | {
|
---|
1912 | if ( text == toolTip() )
|
---|
1913 | return;
|
---|
1914 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1915 | if ( it.current()->toolTip().isNull() )
|
---|
1916 | it.current()->setToolTip( text );
|
---|
1917 | }
|
---|
1918 | QAction::setToolTip( text );
|
---|
1919 | d->update( this );
|
---|
1920 | }
|
---|
1921 |
|
---|
1922 | /*! \reimp
|
---|
1923 | */
|
---|
1924 | void QActionGroup::setWhatsThis( const QString& text )
|
---|
1925 | {
|
---|
1926 | if ( text == whatsThis() )
|
---|
1927 | return;
|
---|
1928 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1929 | if ( it.current()->whatsThis().isNull() )
|
---|
1930 | it.current()->setWhatsThis( text );
|
---|
1931 | }
|
---|
1932 | QAction::setWhatsThis( text );
|
---|
1933 | d->update( this );
|
---|
1934 | }
|
---|
1935 |
|
---|
1936 | /*! \reimp
|
---|
1937 | */
|
---|
1938 | void QActionGroup::childEvent( QChildEvent *e )
|
---|
1939 | {
|
---|
1940 | if ( !e->removed() )
|
---|
1941 | return;
|
---|
1942 |
|
---|
1943 | QAction *action = ::qt_cast<QAction*>(e->child());
|
---|
1944 | if ( !action )
|
---|
1945 | return;
|
---|
1946 |
|
---|
1947 | for ( QPtrListIterator<QComboBox> cb( d->comboboxes ); cb.current(); ++cb ) {
|
---|
1948 | for ( int i = 0; i < cb.current()->count(); i++ ) {
|
---|
1949 | if ( cb.current()->text( i ) == action->text() ) {
|
---|
1950 | cb.current()->removeItem( i );
|
---|
1951 | break;
|
---|
1952 | }
|
---|
1953 | }
|
---|
1954 | }
|
---|
1955 | for ( QPtrListIterator<QToolButton> mb( d->menubuttons ); mb.current(); ++mb ) {
|
---|
1956 | QPopupMenu* popup = mb.current()->popup();
|
---|
1957 | if ( !popup )
|
---|
1958 | continue;
|
---|
1959 | action->removeFrom( popup );
|
---|
1960 | }
|
---|
1961 | for ( QPtrListIterator<QActionGroupPrivate::MenuItem> mi( d->menuitems ); mi.current(); ++mi ) {
|
---|
1962 | QPopupMenu* popup = mi.current()->popup;
|
---|
1963 | if ( !popup )
|
---|
1964 | continue;
|
---|
1965 | action->removeFrom( popup );
|
---|
1966 | }
|
---|
1967 | }
|
---|
1968 |
|
---|
1969 | /*!
|
---|
1970 | \fn void QActionGroup::selected( QAction* )
|
---|
1971 |
|
---|
1972 | This signal is emitted from exclusive groups when toggle actions
|
---|
1973 | change state.
|
---|
1974 |
|
---|
1975 | The argument is the action whose state changed to "on".
|
---|
1976 |
|
---|
1977 | \sa setExclusive(), isOn() QAction::toggled()
|
---|
1978 | */
|
---|
1979 |
|
---|
1980 | /*! \internal
|
---|
1981 | */
|
---|
1982 | void QActionGroup::internalComboBoxActivated( int index )
|
---|
1983 | {
|
---|
1984 | QAction *a = 0;
|
---|
1985 | for ( int i = 0; i <= index && i < (int)d->actions.count(); ++i ) {
|
---|
1986 | a = d->actions.at( i );
|
---|
1987 | if ( a && !qstrcmp( a->name(), "qt_separator_action" ) )
|
---|
1988 | index++;
|
---|
1989 | }
|
---|
1990 | a = d->actions.at( index );
|
---|
1991 | if ( a ) {
|
---|
1992 | if ( a != d->selected ) {
|
---|
1993 | d->selected = a;
|
---|
1994 | for ( QPtrListIterator<QAction> it( d->actions); it.current(); ++it ) {
|
---|
1995 | if ( it.current()->isToggleAction() && it.current() != a )
|
---|
1996 | it.current()->setOn( FALSE );
|
---|
1997 | }
|
---|
1998 | if ( a->isToggleAction() )
|
---|
1999 | a->setOn( TRUE );
|
---|
2000 |
|
---|
2001 | emit activated();
|
---|
2002 | if ( a->isToggleAction() )
|
---|
2003 | emit selected( d->selected );
|
---|
2004 | emit ((QActionGroup*)a)->activated();
|
---|
2005 | } else if ( !a->isToggleAction() ) {
|
---|
2006 | emit activated();
|
---|
2007 | emit ((QActionGroup*)a)->activated();
|
---|
2008 | }
|
---|
2009 | a->clearStatusText();
|
---|
2010 | }
|
---|
2011 | }
|
---|
2012 |
|
---|
2013 | /*! \internal
|
---|
2014 | */
|
---|
2015 | void QActionGroup::internalComboBoxHighlighted( int index )
|
---|
2016 | {
|
---|
2017 | QAction *a = 0;
|
---|
2018 | for ( int i = 0; i <= index && i < (int)d->actions.count(); ++i ) {
|
---|
2019 | a = d->actions.at( i );
|
---|
2020 | if ( a && !qstrcmp( a->name(), "qt_separator_action" ) )
|
---|
2021 | index++;
|
---|
2022 | }
|
---|
2023 | a = d->actions.at( index );
|
---|
2024 | if ( a )
|
---|
2025 | a->showStatusText(a->statusTip());
|
---|
2026 | else
|
---|
2027 | clearStatusText();
|
---|
2028 | }
|
---|
2029 |
|
---|
2030 | /*! \internal
|
---|
2031 | */
|
---|
2032 | void QActionGroup::internalToggle( QAction *a )
|
---|
2033 | {
|
---|
2034 | int index = d->actions.find( a );
|
---|
2035 | if ( index == -1 )
|
---|
2036 | return;
|
---|
2037 |
|
---|
2038 | int lastItem = index;
|
---|
2039 | for ( int i = 0; i < lastItem; i++ ) {
|
---|
2040 | QAction *action = d->actions.at( i );
|
---|
2041 | if ( !qstrcmp( action->name(), "qt_separator_action" ) )
|
---|
2042 | index--;
|
---|
2043 | }
|
---|
2044 |
|
---|
2045 | for ( QPtrListIterator<QComboBox> it( d->comboboxes); it.current(); ++it )
|
---|
2046 | it.current()->setCurrentItem( index );
|
---|
2047 | }
|
---|
2048 |
|
---|
2049 | /*! \internal
|
---|
2050 | */
|
---|
2051 | void QActionGroup::objectDestroyed()
|
---|
2052 | {
|
---|
2053 | const QObject* obj = sender();
|
---|
2054 | d->menubuttons.removeRef( (QToolButton*)obj );
|
---|
2055 | for ( QPtrListIterator<QActionGroupPrivate::MenuItem> mi( d->menuitems ); mi.current(); ++mi ) {
|
---|
2056 | if ( mi.current()->popup == obj ) {
|
---|
2057 | d->menuitems.removeRef( mi.current() );
|
---|
2058 | break;
|
---|
2059 | }
|
---|
2060 | }
|
---|
2061 | d->popupmenus.removeRef( (QPopupMenu*)obj );
|
---|
2062 | d->comboboxes.removeRef( (QComboBox*)obj );
|
---|
2063 | }
|
---|
2064 |
|
---|
2065 | /*!
|
---|
2066 | This function is called from the addTo() function when it has
|
---|
2067 | created a widget (\a actionWidget) for the child action \a a in
|
---|
2068 | the \a container.
|
---|
2069 | */
|
---|
2070 |
|
---|
2071 | void QActionGroup::addedTo( QWidget *actionWidget, QWidget *container, QAction *a )
|
---|
2072 | {
|
---|
2073 | Q_UNUSED( actionWidget );
|
---|
2074 | Q_UNUSED( container );
|
---|
2075 | Q_UNUSED( a );
|
---|
2076 | }
|
---|
2077 |
|
---|
2078 | /*!
|
---|
2079 | \overload
|
---|
2080 |
|
---|
2081 | This function is called from the addTo() function when it has
|
---|
2082 | created a menu item for the child action at the index position \a
|
---|
2083 | index in the popup menu \a menu.
|
---|
2084 | */
|
---|
2085 |
|
---|
2086 | void QActionGroup::addedTo( int index, QPopupMenu *menu, QAction *a )
|
---|
2087 | {
|
---|
2088 | Q_UNUSED( index );
|
---|
2089 | Q_UNUSED( menu );
|
---|
2090 | Q_UNUSED( a );
|
---|
2091 | }
|
---|
2092 |
|
---|
2093 | /*!
|
---|
2094 | \reimp
|
---|
2095 | \overload
|
---|
2096 |
|
---|
2097 | This function is called from the addTo() function when it has
|
---|
2098 | created a widget (\a actionWidget) in the \a container.
|
---|
2099 | */
|
---|
2100 |
|
---|
2101 | void QActionGroup::addedTo( QWidget *actionWidget, QWidget *container )
|
---|
2102 | {
|
---|
2103 | Q_UNUSED( actionWidget );
|
---|
2104 | Q_UNUSED( container );
|
---|
2105 | }
|
---|
2106 |
|
---|
2107 | /*!
|
---|
2108 | \reimp
|
---|
2109 | \overload
|
---|
2110 |
|
---|
2111 | This function is called from the addTo() function when it has
|
---|
2112 | created a menu item at the index position \a index in the popup
|
---|
2113 | menu \a menu.
|
---|
2114 | */
|
---|
2115 |
|
---|
2116 | void QActionGroup::addedTo( int index, QPopupMenu *menu )
|
---|
2117 | {
|
---|
2118 | Q_UNUSED( index );
|
---|
2119 | Q_UNUSED( menu );
|
---|
2120 | }
|
---|
2121 |
|
---|
2122 | #endif
|
---|