Salome HOME
Dialog SetupCurveDlg has been added
[modules/gui.git] / src / STD / STD_MDIDesktop.cxx
1 #include "STD_MDIDesktop.h"
2
3 #include <SUIT_Session.h>
4 #include <SUIT_ViewWindow.h>
5 #include <SUIT_ResourceMgr.h>
6
7 #include <QtxAction.h>
8 #include <QtxActionMenuMgr.h>
9 #include <QtxWorkspaceAction.h>
10
11 #include <qvbox.h>
12 #include <qmenubar.h>
13 #include <qworkspace.h>
14 #include <qobjectlist.h>
15
16 #include <stdarg.h>
17
18 STD_MDIDesktop::STD_MDIDesktop()
19 : SUIT_Desktop(),
20 myWorkspace( 0 ),
21 myWorkspaceAction( 0 )
22 {
23   QVBox* base = new QVBox( this );
24   base->setFrameStyle( QFrame::Panel | QFrame::Sunken );
25
26   setCentralWidget( base );
27
28   myWorkspace = new QWorkspace( base );
29
30   connect( myWorkspace, SIGNAL( windowActivated( QWidget* ) ),
31            this, SLOT( onWindowActivated( QWidget* ) ) );
32
33   createActions();
34 }
35
36 STD_MDIDesktop::~STD_MDIDesktop()
37 {
38 }
39
40 SUIT_ViewWindow* STD_MDIDesktop::activeWindow() const
41 {
42   SUIT_ViewWindow* wnd = 0;
43
44   QWidget* wid = myWorkspace->activeWindow();
45   if ( wid && wid->inherits( "SUIT_ViewWindow" ) )
46     wnd = (SUIT_ViewWindow*)wid;
47
48   return wnd;
49 }
50
51 QPtrList<SUIT_ViewWindow> STD_MDIDesktop::windows() const
52 {
53   QPtrList<SUIT_ViewWindow> winList;
54
55   QWidgetList children = myWorkspace->windowList();
56   for ( QWidgetListIt it( children ); it.current(); ++it )
57   {
58     if ( it.current()->inherits( "SUIT_ViewWindow" ) )
59       winList.append( (SUIT_ViewWindow*)it.current() );
60   }
61
62   return winList;
63 }
64
65 QWidget* STD_MDIDesktop::parentArea() const
66 {
67   return workspace();
68 }
69
70 void STD_MDIDesktop::windowOperation( const int type )
71 {
72   myWorkspaceAction->perform( operationFlag( type ) );
73 }
74
75 void STD_MDIDesktop::setWindowOperations( const int first, ... )
76 {
77   va_list ints;
78         va_start( ints, first );
79
80         QValueList<int> typeList;
81
82         int cur = first;
83         while ( cur )
84         {
85           typeList.append( cur );
86                 cur = va_arg( ints, int );
87   }
88
89         setWindowOperations( typeList );
90 }
91
92 void STD_MDIDesktop::setWindowOperations( const QValueList<int>& opList )
93 {
94   int flags = 0;
95
96   for ( QValueList<int>::const_iterator it = opList.begin(); it != opList.end(); ++it )
97     flags = flags | operationFlag( *it );
98
99   myWorkspaceAction->setItems( flags );
100 }
101
102 QWorkspace* STD_MDIDesktop::workspace() const
103 {
104   return myWorkspace;
105 }
106
107 void STD_MDIDesktop::onWindowActivated( QWidget* w )
108 {
109   if ( w && w->inherits( "SUIT_ViewWindow" ) )
110     emit windowActivated( (SUIT_ViewWindow*)w );
111 }
112
113 void STD_MDIDesktop::createActions()
114 {
115   if ( myWorkspaceAction )
116     return;
117
118   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
119   if ( !resMgr )
120     return;
121
122   myWorkspaceAction = new QtxWorkspaceAction( workspace(), this );
123
124   myWorkspaceAction->setItems( QtxWorkspaceAction::Cascade | QtxWorkspaceAction::Tile |
125                                QtxWorkspaceAction::HTile | QtxWorkspaceAction::VTile |
126                                QtxWorkspaceAction::Windows );
127
128   // Cascade
129   myWorkspaceAction->setIconSet( QtxWorkspaceAction::Cascade,
130                                  resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_CASCADE" ) ) );
131   myWorkspaceAction->setMenuText( QtxWorkspaceAction::Cascade, tr( "MEN_DESK_WINDOW_CASCADE" ) );
132   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::Cascade, tr( "PRP_DESK_WINDOW_CASCADE" ) );
133
134   // Tile
135   myWorkspaceAction->setIconSet( QtxWorkspaceAction::Tile,
136                                  resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_TILE" ) ) );
137   myWorkspaceAction->setMenuText( QtxWorkspaceAction::Tile, tr( "MEN_DESK_WINDOW_TILE" ) );
138   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::Tile, tr( "PRP_DESK_WINDOW_TILE" ) );
139
140   // Tile Horizontal
141   myWorkspaceAction->setIconSet( QtxWorkspaceAction::HTile,
142                                  resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_HTILE" ) ) );
143   myWorkspaceAction->setMenuText( QtxWorkspaceAction::HTile, tr( "MEN_DESK_WINDOW_HTILE" ) );
144   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::HTile, tr( "PRP_DESK_WINDOW_HTILE" ) );
145
146   // Tile Vertical
147   myWorkspaceAction->setIconSet( QtxWorkspaceAction::VTile,
148                                  resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_VTILE" ) ) );
149   myWorkspaceAction->setMenuText( QtxWorkspaceAction::VTile, tr( "MEN_DESK_WINDOW_VTILE" ) );
150   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::VTile, tr( "PRP_DESK_WINDOW_VTILE" ) );
151
152
153   QtxActionMenuMgr* mMgr = menuMgr();
154   if ( !mMgr )
155     return;
156
157   int winMenuId = mMgr->insert( tr( "MEN_DESK_WINDOW" ), -1, 100 );
158   mMgr->insert( myWorkspaceAction, winMenuId, -1 );
159   mMgr->insert( QtxActionMenuMgr::separator(), winMenuId, -1 );
160 }
161
162 int STD_MDIDesktop::operationFlag( const int type ) const
163 {
164   int res = 0;
165   switch ( type )
166   {
167   case Cascade:
168     res = QtxWorkspaceAction::Cascade;
169     break;
170   case Tile:
171     res = QtxWorkspaceAction::Tile;
172     break;
173   case HTile:
174     res = QtxWorkspaceAction::HTile;
175     break;
176   case VTile:
177     res = QtxWorkspaceAction::VTile;
178     break;
179   }
180   return res;
181 }