1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include "CAM_Module.h"
25 #include "CAM_DataModel.h"
26 #include "CAM_Application.h"
27 #include "CAM_Study.h"
29 #include <QtxAction.h>
30 #include <QtxActionGroup.h>
31 #include <QtxActionMenuMgr.h>
32 #include <QtxActionToolMgr.h>
34 #include <SUIT_Desktop.h>
35 #include <SUIT_Session.h>
36 #include <SUIT_ResourceMgr.h>
42 \brief Base implementation of the module in the CAM application architecture.
44 Provides support of menu/toolbars management.
50 ActionMgrLocker( QtxActionMgr* m, bool use ) : myMgr( m ), myUseLock( use )
53 myUpdEnabled = myMgr->isUpdatesEnabled();
54 myMgr->setUpdatesEnabled( false );
60 myMgr->setUpdatesEnabled( myUpdEnabled );
71 \brief Default constructor.
73 Creates unnamed module.
75 CAM_Module::CAM_Module()
85 Creates module with the specified \a name.
87 \param name module name
89 CAM_Module::CAM_Module( const QString& name )
104 CAM_Module::~CAM_Module()
111 \brief Initialize module.
113 This method is usually called when the module is created (for example,
114 on the module library loading).
115 Successor classes can use this method to create menu/toolbar actions
116 and perform other module initialization.
118 \param app parent application object
119 \sa activateModule(), deactivateModule()
121 void CAM_Module::initialize( CAM_Application* app )
126 SUIT_Session* aSession = SUIT_Session::session();
127 connect( aSession, SIGNAL( applicationClosed( SUIT_Application* ) ),
128 this, SLOT( onApplicationClosed( SUIT_Application* ) ) );
130 connect( myApp, SIGNAL( infoChanged( QString ) ), this, SLOT( onInfoChanged( QString ) ) );
135 \brief Get module icon.
136 \return module icon pixmap
139 QPixmap CAM_Module::moduleIcon() const
141 if ( myIcon.isNull() ) {
142 QString iname = iconName();
143 if ( !iname.isEmpty() ) {
144 CAM_Module* that = (CAM_Module*)this;
145 that->myIcon = application()->resourceMgr()->loadPixmap( name(), iname, false );
152 \brief Get module icon's name.
154 This function is used to get module icon's file name.
155 Default implementation returns empty string.
157 \return module icon's name.
160 QString CAM_Module::iconName() const
162 return application()->moduleIcon( name() );
166 \brief Get module (internal) name
168 \sa setName(), moduleName(), setModuleName()
170 QString CAM_Module::name() const
176 \brief Get module title (user name)
178 \sa setModuleName(), name(), setName()
180 QString CAM_Module::moduleName() const
186 \brief Get data model.
188 Creates data model, if it is not yet created.
190 \return data model pointer
191 \sa createDataModel()
193 CAM_DataModel* CAM_Module::dataModel() const
197 CAM_Module* that = (CAM_Module*)this;
198 that->myDataModel = that->createDataModel();
199 that->myDataModel->initialize();
205 \brief Get application.
206 \return application pointer
208 CAM_Application* CAM_Module::application() const
214 \brief If return false, selection will be cleared at module activation
216 bool CAM_Module::isSelectionCompatible()
222 \brief Activate module.
224 This method is called when the user activates module.
225 Successor classes can use this method to customize module activation process,
226 for example, to show own menus, toolbars, etc.
228 Default implementation always returns \c true.
230 \return \c true if module is activated successfully.
231 \sa initialize(), deactivateModule()
233 bool CAM_Module::activateModule( SUIT_Study* /*study*/ )
235 // IMN 05/03/2015: we copied myActionMap for reset/unset actions accelerator keys
236 // after activate/deactivate modules
237 for ( QMap<QAction*, QKeySequence>::Iterator it = myActionShortcutMap.begin(); it != myActionShortcutMap.end(); ++it )
239 // Reset actions accelerator keys
240 it.key()->setShortcut( it.value() );
242 myActionShortcutMap.clear();
247 \brief Deactivate module.
249 This method is called when the user deactivates module.
250 Successor classes can use this method to customize module deactivation process,
251 for example, to hide own menus, toolbars, etc.
253 Default implementation always returns \c true.
255 \return \c true if module is deactivated successfully.
256 \sa initialize(), activateModule()
258 bool CAM_Module::deactivateModule( SUIT_Study* )
260 // IMN 05/03/2015: we copied myActionMap for reset/unset actions accelerator keys
261 // after activate/deactivate modules
262 myActionShortcutMap.clear();
263 for ( QMap<int, QAction*>::Iterator it = myActionMap.begin(); it != myActionMap.end(); ++it )
265 myActionShortcutMap.insert( it.value(), it.value()->shortcut() );
266 it.value()->setShortcut( QKeySequence() );
272 \brief Called when study is closed.
274 Removes data model from the \a study.
276 \param study study being closed
278 void CAM_Module::studyClosed( SUIT_Study* study )
280 CAM_Study* camDoc = dynamic_cast<CAM_Study*>( study );
284 CAM_DataModel* dm = dataModel();
285 if ( dm && camDoc->containsDataModel( dm ) ) {
287 camDoc->removeDataModel( dm );
292 \brief Called when study is changed (obsolete).
294 Default implementation does nothing.
296 \param oldStudy old study
297 \param newStudy new study
299 void CAM_Module::studyChanged( SUIT_Study* /*oldStudy*/, SUIT_Study* /*newStudy*/ )
304 \brief Check if the module is active.
305 \return \c true if module is active.
307 bool CAM_Module::isActiveModule() const
309 return application() ? application()->activeModule() == this : false;
313 \brief Put the text message into the status bar of the application main window.
315 If \a msec > 0, the message will be shown \a msec milliseconds.
316 If \a msec < 0, the message will be constantly displayed until module is active.
318 \param msg text message
319 \param msec message displaying duration in milliseconds
321 void CAM_Module::putInfo( const QString& msg, const int msec )
324 application()->putInfo( msg, msec );
331 \brief Shows the notifications with spectified text, title and automatic close timeout.
332 Notification will be automatically closed after specified timeout in msec. If
333 timeout is zero then automatic closing doesn't performed.
334 \param text - Notification text
335 \param title - Notification title
336 \param timeout - Notification close timeout in msec
337 \return notification identifier
339 int CAM_Module::showNotification( const QString& message, const QString& title, int timeout )
342 application()->showNotification( message, title, timeout );
346 \brief Closes the notifications with spectified text.
347 \param text - Notification text
349 void CAM_Module::hideNotification( const QString& message )
352 application()->hideNotification( message );
356 \brief Closes the notifications with spectified identifier.
357 \param text - Notification text
359 void CAM_Module::hideNotification( int id )
362 application()->hideNotification( id );
366 \brief Restore message info.
368 Restores constant text message when previous information status message is removed.
370 \param txt previous message (being removed)
373 void CAM_Module::onInfoChanged( QString txt )
375 if ( txt.isEmpty() && isActiveModule() && !myInfo.isEmpty() && application() )
376 application()->putInfo( myInfo );
380 \brief Called when application is closed.
382 Nullify application pointer if the application is being closed.
384 \param theApp application
386 void CAM_Module::onApplicationClosed( SUIT_Application* theApp )
393 \brief Create data model.
394 \return created data model object or 0 if it could not be created
396 CAM_DataModel* CAM_Module::createDataModel()
398 return new CAM_DataModel( this );
402 \brief Set module (internal) name
403 \param name new module name
404 \sa name(), moduleName(), setModuleName()
406 void CAM_Module::setName( const QString& name )
408 setObjectName( name );
412 \brief Set module title (user name)
413 \param name new module title
414 \sa moduleName(), name(), setName()
416 void CAM_Module::setModuleName( const QString& name )
422 \brief Get menu manager.
423 \return menu manager pointer
425 QtxActionMenuMgr* CAM_Module::menuMgr() const
427 QtxActionMenuMgr* mgr = 0;
428 if ( application() && application()->desktop() )
429 mgr = application()->desktop()->menuMgr();
434 \brief Get toolbar manager.
435 \return toolbar manager pointer
437 QtxActionToolMgr* CAM_Module::toolMgr() const
439 QtxActionToolMgr* mgr = 0;
440 if ( application() && application()->desktop() )
441 mgr = application()->desktop()->toolMgr();
446 \brief Create toolbar with speicifed \a name.
448 If the toolbar has been already created, its ID is just returned.
450 \param title toolbar title
451 \param name toolbar name (identifier)
452 \return toolbar ID or -1 if toolbar could not be created
454 int CAM_Module::createTool( const QString& title, const QString& name )
459 ActionMgrLocker lock( toolMgr(), !myToolShown );
461 return toolMgr()->createToolBar( title, name );
465 \brief Add toolbar item.
467 Insert action \a to the toolbar manager and register it with specified \a id.
468 Resulting action ID may differ from the requested one. This can happen if
469 requested ID is already in use.
471 If action has been already added previously, its ID is just returned.
473 If \a id < 0, the action ID is generated automatically.
475 If \a idx < 0, the action is added to the end of the toolbar.
478 \param tBar toolbar ID
479 \param id requested action ID
480 \param idx action index (desired position in the toolbar)
481 \return action ID or -1 if toolbar item could not be added
483 int CAM_Module::createTool( QAction* a, const int tBar, const int id, const int idx )
488 ActionMgrLocker lock( toolMgr(), !myToolShown );
490 int regId = registerAction( id, a );
491 int intId = toolMgr()->insert( a, tBar, idx );
494 setToolShown( a, false );
496 return intId != -1 ? regId : -1;
500 \brief Add toolbar item.
502 Insert action \a to the toolbar manager and register it with specified \a id.
503 Resulting action ID may differ from the requested one. This can happen if
504 requested ID is already in use.
506 If action has been already added previously, its ID is just returned.
508 If \a id < 0, the action ID is generated automatically.
510 If \a idx < 0, the action is added to the end of the toolbar.
513 \param tBar toolbar name
514 \param id requested action ID
515 \param idx action index (desired position in the toolbar)
516 \return action ID or -1 if toolbar item could not be added
518 int CAM_Module::createTool( QAction* a, const QString& tBar, const int id, const int idx )
523 ActionMgrLocker lock( toolMgr(), !myToolShown );
525 int regId = registerAction( id, a );
526 int intId = toolMgr()->insert( a, tBar, idx );
529 setToolShown( a, false );
531 return intId != -1 ? regId : -1;
535 \brief Add toolbar item.
537 Insert action with \a id identifier to the toolbar manager.
538 It is assumed that action has been already registered.
540 Resulting action ID may differ from the requested one. This can happen if
541 requested ID is already in use.
543 If action has been already added previously, its ID is just returned.
545 If \a idx < 0, the action is added to the end of the toolbar.
548 \param tBar toolbar ID
549 \param idx action index (desired position in the toolbar)
550 \return action ID or -1 if toolbar item could not be added
552 int CAM_Module::createTool( const int id, const int tBar, const int idx )
557 ActionMgrLocker lock( toolMgr(), !myToolShown );
559 int intId = toolMgr()->insert( action( id ), tBar, idx );
562 setToolShown( action( id ), false );
564 return intId != -1 ? id : -1;
568 \brief Add toolbar item.
570 Insert action with \a id identifier to the toolbar manager.
571 It is assumed that action has been already registered.
573 Resulting action ID may differ from the requested one. This can happen if
574 requested ID is already in use.
576 If action has been already added previously, its ID is just returned.
578 If \a idx < 0, the action is added to the end of the toolbar.
581 \param tBar toolbar name
582 \param idx action index (desired position in the toolbar)
583 \return action ID or -1 if toolbar item could not be added
585 int CAM_Module::createTool( const int id, const QString& tBar, const int idx )
590 ActionMgrLocker lock( toolMgr(), !myToolShown );
592 int intId = toolMgr()->insert( action( id ), tBar, idx );
595 setToolShown( action( id ), false );
597 return intId != -1 ? id : -1;
601 \brief Create menu or submenu.
603 Create main menu or popup submenu and register it with specified \a id.
604 Resulting action ID may differ from the requested one. This can happen if
605 requested ID is already in use.
607 If \a id < 0, the menu ID is generated automatically.
608 If menu has been already created previously, its ID is just returned.
610 The \a menu parameter represents the menu name - it could be a sequence
611 of strings, separated by '|' symbol. For example, "File|Edit" means
612 File->Edit submenu. If menu doesn't exist, it is created automatically.
614 Parameter \a idx defines the index of the menu item in the menu group which
615 is defined by the \a group. If \a idx < 0, the menu/submenu is added to the
616 end of the menu group.
618 \param subMenu subMenu name
619 \param menu parent menu ID
620 \param id requested menu ID
621 \param group menu group ID
622 \param idx menu item index (desired position in the menu group)
623 \return menu item ID or -1 if menu item could not be added
625 int CAM_Module::createMenu( const QString& subMenu, const int menu,
626 const int id, const int group, const int idx, QMenu * menuObj )
631 return menuMgr()->insert( subMenu, menu, group, id, idx, menuObj );
635 \brief Create menu or submenu.
637 Create main menu or popup submenu and register it with specified \a id.
638 Resulting action ID may differ from the requested one. This can happen if
639 requested ID is already in use.
641 If \a id < 0, the menu ID is generated automatically.
642 If menu has been already created previously, its ID is just returned.
644 The \a menu parameter represents the menu name - it could be a sequence
645 of strings, separated by '|' symbol. For example, "File|Edit" means
646 File->Edit submenu. If menu doesn't exist, it is created automatically.
648 Parameter \a idx defines the index of the menu item in the menu group which
649 is defined by the \a group. If \a idx < 0, the menu/submenu is added to the
650 end of the menu group.
652 \param subMenu subMenu name
653 \param menu parent menu name(s)
654 \param id requested menu ID
655 \param group menu group ID
656 \param idx menu item index (desired position in the menu group)
657 \return menu item ID or -1 if menu item could not be added
659 int CAM_Module::createMenu( const QString& subMenu, const QString& menu,
660 const int id, const int group, const int idx )
665 return menuMgr()->insert( subMenu, menu, group, id, idx );
669 \brief Add menu item.
671 Insert action \a to the menu manager and register it with specified \a id.
672 Resulting action ID may differ from the requested one. This can happen if
673 requested ID is already in use.
675 If \a id < 0, the action ID is generated automatically.
677 If action has been already added previously, its ID is just returned.
679 Parameter \a idx defines the index of the menu item in the menu group which
680 is defined by the \a group. If \a idx < 0, the action is added to the
681 end of the menu group.
685 \param id requested action ID
686 \param group menu group ID
687 \param idx action index (desired position in the menu group)
688 \return action ID or -1 if menu item could not be added
690 int CAM_Module::createMenu( QAction* a, const int menu, const int id, const int group, const int idx )
692 if ( !a || !menuMgr() )
695 ActionMgrLocker lock( menuMgr(), !myMenuShown );
697 int regId = registerAction( id, a );
698 int intId = menuMgr()->insert( a, menu, group, idx );
701 setMenuShown( a, false );
703 return intId != -1 ? regId : -1;
707 \brief Add menu item.
709 Insert action \a to the menu manager and register it with specified \a id.
710 Resulting action ID may differ from the requested one. This can happen if
711 requested ID is already in use.
713 If \a id < 0, the action ID is generated automatically.
715 If action has been already added previously, its ID is just returned.
717 The \a menu parameter represents the menu name - it could be a sequence
718 of strings, separated by '|' symbol. For example, "File|Edit" means
719 File->Edit submenu. If menu doesn't exist, it is created automatically.
721 Parameter \a idx defines the index of the menu item in the menu group which
722 is defined by the \a group. If \a idx < 0, the action is added to the
723 end of the menu group.
726 \param menu menu name(s)
727 \param id requested action ID
728 \param group menu group ID
729 \param idx action index (desired position in the menu group)
730 \return action ID or -1 if menu item could not be added
732 int CAM_Module::createMenu( QAction* a, const QString& menu, const int id, const int group, const int idx )
734 if ( !a || !menuMgr() )
737 ActionMgrLocker lock( menuMgr(), !myMenuShown );
739 int regId = registerAction( id, a );
740 int intId = menuMgr()->insert( a, menu, group, idx );
743 setMenuShown( a, false );
745 return intId != -1 ? regId : -1;
749 \brief Add menu item.
751 Insert action with \a id identifier to the menu manager.
752 It is assumed that action has been already registered.
754 Resulting action ID may differ from the requested one. This can happen if
755 requested ID is already in use.
757 If action has been already added previously, its ID is just returned.
759 Parameter \a idx defines the index of the menu item in the menu group which
760 is defined by the \a group. If \a idx < 0, the action is added to the
761 end of the menu group.
765 \param group menu group ID
766 \param idx action index (desired position in the menu group)
767 \return action ID or -1 if menu item could not be added
769 int CAM_Module::createMenu( const int id, const int menu, const int group, const int idx )
774 ActionMgrLocker lock( menuMgr(), !myMenuShown );
776 int intId = menuMgr()->insert( action( id ), menu, group, idx );
779 setMenuShown( action( id ), false );
781 return intId != -1 ? id : -1;
785 \brief Add menu item.
787 Insert action with \a id identifier to the menu manager.
788 It is assumed that action has been already registered.
790 Resulting action ID may differ from the requested one. This can happen if
791 requested ID is already in use.
793 If action has been already added previously, its ID is just returned.
795 The \a menu parameter represents the menu name - it could be a sequence
796 of strings, separated by '|' symbol. For example, "File|Edit" means
797 File->Edit submenu. If menu doesn't exist, it is created automatically.
799 Parameter \a idx defines the index of the menu item in the menu group which
800 is defined by the \a group. If \a idx < 0, the action is added to the
801 end of the menu group.
804 \param menu menu name(s)
805 \param group menu group ID
806 \param idx action index (desired position in the menu group)
807 \return action ID or -1 if menu item could not be added
809 int CAM_Module::createMenu( const int id, const QString& menu, const int group, const int idx )
814 ActionMgrLocker lock( menuMgr(), !myMenuShown );
816 int intId = menuMgr()->insert( action( id ), menu, group, idx );
819 setMenuShown( action( id ), false );
821 return intId != -1 ? id : -1;
825 \brief Show/hide all module's menus.
826 \param on if \c true, show menus, otherwise, hide all menus
829 void CAM_Module::setMenuShown( const bool on )
833 QtxActionMenuMgr* mMgr = menuMgr();
837 bool upd = mMgr->isUpdatesEnabled();
838 mMgr->setUpdatesEnabled( false );
840 QAction* sep = separator();
841 for ( QMap<int, QAction*>::Iterator it = myActionMap.begin(); it != myActionMap.end(); ++it )
843 if ( it.value() != sep )
844 mMgr->setShown( mMgr->actionId( it.value() ), on );
847 mMgr->setUpdatesEnabled( upd );
853 \brief Show/hide specified menu item.
855 \param on if \c true, show menu item, otherwise, hide it
857 void CAM_Module::setMenuShown( QAction* a, const bool on )
860 menuMgr()->setShown( menuMgr()->actionId( a ), on );
864 \brief Show/hide specified menu item.
865 \param id menu item ID
866 \param on if \c true, show menu item, otherwise, hide it
868 void CAM_Module::setMenuShown( const int id, const bool on )
870 setMenuShown( action( id ), on );
874 \brief Show/hide all module's toolbars.
875 \param on if \c true, show toolbars, otherwise, hide all toolbars
878 void CAM_Module::setToolShown( const bool on )
882 QtxActionToolMgr* tMgr = toolMgr();
886 bool upd = tMgr->isUpdatesEnabled();
887 tMgr->setUpdatesEnabled( false );
889 QAction* sep = separator();
890 for ( QMap<int, QAction*>::Iterator it = myActionMap.begin(); it != myActionMap.end(); ++it )
892 if ( it.value() != sep )
893 tMgr->setShown( tMgr->actionId( it.value() ), on );
896 tMgr->setUpdatesEnabled( upd );
902 \brief Show/hide specified toolbar item.
904 \param on if \c true, show toolbar item, otherwise, hide it
906 void CAM_Module::setToolShown( QAction* a, const bool on )
909 toolMgr()->setShown( toolMgr()->actionId( a ), on );
913 \brief Show/hide specified toolbar item.
914 \param id toolbar item ID
915 \param on if \c true, show toolbar item, otherwise, hide it
917 void CAM_Module::setToolShown( const int id, const bool on )
919 setToolShown( action( id ), on );
923 \brief Get action by specified \a id.
925 \return action or 0 if not found
927 QAction* CAM_Module::action( const int id ) const
930 if ( myActionMap.contains( id ) )
932 else if ( menuMgr() ) {
933 QMenu* m = menuMgr()->findMenu( id );
934 if ( m ) a = m->menuAction();
940 \brief Get action ID.
942 \return action ID or -1 if not found
944 int CAM_Module::actionId( const QAction* a ) const
947 for ( QMap<int, QAction*>::ConstIterator it = myActionMap.begin(); it != myActionMap.end() && id == -1; ++it )
949 if ( it.value() == a )
956 \brief Create new instance of QtxAction and register action with specified \a id.
958 Resulting action ID may differ from the requested one. This can happen if
959 requested ID is already in use.
961 If \a id < 0, the action ID is generated automatically.
963 \param id required action ID
964 \param text tooltip text
965 \param icon action icon
966 \param menu menu text
967 \param tip status bar tip
968 \param key keyboard accelerator
969 \param parent parent object
970 \param toggle if \c true, the action will be toggled
971 \param reciever action activation signal receiver object
972 \param member action activation signal receiver slot
974 QAction* CAM_Module::createAction( const int id, const QString& text, const QIcon& icon,
975 const QString& menu, const QString& tip, const int key,
976 QObject* parent, const bool toggle, QObject* reciever,
977 const char* member, const QString& shortcutAction )
979 return createAction( id, text, icon, menu, tip, QKeySequence(key), parent, toggle, reciever, member, shortcutAction );
983 \brief Create new instance of QtxAction and register action with specified \a id.
985 Resulting action ID may differ from the requested one. This can happen if
986 requested ID is already in use.
988 If \a id < 0, the action ID is generated automatically.
990 \param id required action ID
991 \param text tooltip text
992 \param icon action icon
993 \param menu menu text
994 \param tip status bar tip
995 \param key keyboard accelerator
996 \param parent parent object
997 \param toggle if \c true, the action will be toggled
998 \param reciever action activation signal receiver object
999 \param member action activation signal receiver slot
1001 QAction* CAM_Module::createAction( const int id, const QString& text, const QIcon& icon,
1002 const QString& menu, const QString& tip, const QKeySequence& key,
1003 QObject* parent, const bool toggle, QObject* reciever,
1004 const char* member, const QString& shortcutAction )
1006 QtxAction* a = new QtxAction( text, icon, menu, key, parent, toggle, shortcutAction );
1007 a->setStatusTip( tip );
1009 if ( reciever && member )
1010 connect( a, SIGNAL( triggered( bool ) ), reciever, member );
1012 registerAction( id, a );
1018 \brief Create new action group.
1019 \param id action group ID
1020 \param exclusive \c true for exclusive action group
1021 \return created action group
1023 QtxActionGroup* CAM_Module::createActionGroup( const int id, const bool exclusive )
1025 QtxActionGroup* a = qobject_cast<QtxActionGroup*>( action( id ) );
1027 a = new QtxActionGroup( this );
1028 registerAction( id, a );
1030 a->setExclusive( exclusive );
1035 \brief Register action in the internal action map.
1037 If action has been already added previously, its ID is just returned.
1038 If \a id < 0, the action ID is generated automatically.
1040 \param id action required ID
1044 int CAM_Module::registerAction( const int id, QAction* a )
1047 for ( QMap<int, QAction*>::ConstIterator it = myActionMap.begin(); it != myActionMap.end() && ident == -1; ++it )
1048 if ( it.value() == a )
1054 static int generatedId = -1;
1055 ident = id < 0 ? --generatedId : id;
1057 myActionMap.insert( ident, a );
1060 menuMgr()->registerAction( a );
1063 toolMgr()->registerAction( a );
1065 if ( application() && application()->desktop() &&
1066 a->shortcutContext() != Qt::WidgetShortcut &&
1067 a->shortcutContext() != Qt::WidgetWithChildrenShortcut )
1068 application()->desktop()->addAction( a );
1074 \brief Unregister action from the internal action map.
1077 \return \c true on success or \c false if action is in use
1079 bool CAM_Module::unregisterAction( const int id )
1081 return unregisterAction( action( id ) );
1085 \brief Unregister action from the internal action map.
1088 \return \c true on success or \c false if action is in use
1090 bool CAM_Module::unregisterAction( QAction* a )
1095 int id = menuMgr()->actionId( a );
1096 if ( id != -1 && menuMgr()->containsMenu( id, -1 ) )
1100 int id = toolMgr()->actionId( a );
1101 if ( id != -1 && toolMgr()->containsAction( id ) )
1105 menuMgr()->unRegisterAction( menuMgr()->actionId( a ) );
1107 toolMgr()->unRegisterAction( toolMgr()->actionId( a ) );
1112 \brief Create separator action.
1114 Separator action can be used in menus or toolbars.
1116 \return new separator action
1118 QAction* CAM_Module::separator()
1120 return QtxActionMgr::separator();
1124 \brief Update visibility state of the module objects.
1126 void CAM_Module::updateModuleVisibilityState() {
1131 \brief Activate GUI operation of module by its ID.
1132 This method is called from CAM_Application::startOperation().
1133 \param actionId is a numerical unique operation id.
1135 bool CAM_Module::activateOperation( int actionId )
1141 \brief Activate GUI operation of module by its ID.
1142 This method is called from CAM_Application::startOperation().
1143 \param actionId is a string unique operation id.
1145 bool CAM_Module::activateOperation( const QString& actionId )
1151 \brief Activate GUI operation of module by its ID and \a pluginName.
1152 This method is called from CAM_Application::startOperation().
1153 \param actionId is a string unique operation id.
1154 \param pluginName is a name of a plugin where the operation is implemented.
1156 bool CAM_Module::activateOperation( const QString& actionId, const QString& pluginName )
1163 \brief Connect data model of the module to the active study
1164 \param camStudy CAM study object
1166 void CAM_Module::connectToStudy( CAM_Study* camStudy )
1168 CAM_Application* app = camStudy ? dynamic_cast<CAM_Application*>( camStudy->application() ) : 0;
1172 CAM_DataModel* prev = 0;
1173 CAM_Application::ModuleList mods = app->modules();
1174 for( QList<CAM_Module*>::const_iterator it = mods.begin(); it != mods.end(); ++it )
1176 CAM_DataModel* dm = (*it)->dataModel();
1177 if( (*it) == this && !camStudy->containsDataModel( dm ) )
1180 camStudy->insertDataModel( (*it)->dataModel(), prev );
1182 camStudy->insertDataModel( (*it)->dataModel(), 0 );
1189 \fn void CAM_Module::contextMenuPopup( const QString& type, QMenu* menu, QString& title );
1190 \brief Create context popup menu.
1191 \param type popup menu context
1192 \param menu popup menu
1193 \param title popup menu title, which can be set by the module if required
1197 \fn void CAM_Module::updateCommandsStatus();
1198 \brief Update menu/toolbar actions.
1202 bool CAM_Module::abortAllOperations()