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