1 // Copyright (C) 2005 OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #include "STD_MDIDesktop.h"
21 #include <SUIT_Session.h>
22 #include <SUIT_ViewWindow.h>
23 #include <SUIT_ResourceMgr.h>
25 #include <QtxAction.h>
26 #include <QtxActionMenuMgr.h>
27 #include <QtxWorkspaceAction.h>
31 #include <qworkspace.h>
32 #include <qobjectlist.h>
37 STD_MDIDesktop::STD_MDIDesktop()
40 myWorkspaceAction( 0 )
42 QVBox* base = new QVBox( this );
43 base->setFrameStyle( QFrame::Panel | QFrame::Sunken );
45 setCentralWidget( base );
47 myWorkspace = new QWorkspace( base );
49 connect( myWorkspace, SIGNAL( windowActivated( QWidget* ) ),
50 this, SLOT( onWindowActivated( QWidget* ) ) );
56 STD_MDIDesktop::~STD_MDIDesktop()
60 /*!\retval SUIT_ViewWindow - return const active window.*/
61 SUIT_ViewWindow* STD_MDIDesktop::activeWindow() const
63 SUIT_ViewWindow* wnd = 0;
65 QWidget* wid = myWorkspace->activeWindow();
66 if ( wid && wid->inherits( "SUIT_ViewWindow" ) )
67 wnd = (SUIT_ViewWindow*)wid;
72 /*!\retval QPtrList<SUIT_ViewWindow> - return const active window list.*/
73 QPtrList<SUIT_ViewWindow> STD_MDIDesktop::windows() const
75 QPtrList<SUIT_ViewWindow> winList;
77 QWidgetList children = myWorkspace->windowList();
78 for ( QWidgetListIt it( children ); it.current(); ++it )
80 if ( it.current()->inherits( "SUIT_ViewWindow" ) )
81 winList.append( (SUIT_ViewWindow*)it.current() );
87 /*!\retval QWidget - pointer to work space.*/
88 QWidget* STD_MDIDesktop::parentArea() const
93 /*!Call method perform for operation \a type.*/
94 void STD_MDIDesktop::windowOperation( const int type )
96 myWorkspaceAction->perform( operationFlag( type ) );
99 /*!Sets window operations by \a first ... parameters.*/
100 void STD_MDIDesktop::setWindowOperations( const int first, ... )
103 va_start( ints, first );
105 QValueList<int> typeList;
110 typeList.append( cur );
111 cur = va_arg( ints, int );
114 setWindowOperations( typeList );
117 /*!Sets window operations by variable \a opList - operation list.*/
118 void STD_MDIDesktop::setWindowOperations( const QValueList<int>& opList )
122 for ( QValueList<int>::const_iterator it = opList.begin(); it != opList.end(); ++it )
123 flags = flags | operationFlag( *it );
125 myWorkspaceAction->setItems( flags );
128 /*!\retval QWorkspace pointer - work space.*/
129 QWorkspace* STD_MDIDesktop::workspace() const
134 /*!Emit window activated.*/
135 void STD_MDIDesktop::onWindowActivated( QWidget* w )
137 if ( w && w->inherits( "SUIT_ViewWindow" ) )
138 emit windowActivated( (SUIT_ViewWindow*)w );
141 /*!Create actions: cascade, Tile, Tile Horizontal, Tile Vertical*/
142 void STD_MDIDesktop::createActions()
144 if ( myWorkspaceAction )
147 SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
151 myWorkspaceAction = new QtxWorkspaceAction( workspace(), this );
153 myWorkspaceAction->setItems( QtxWorkspaceAction::Cascade | QtxWorkspaceAction::Tile |
154 QtxWorkspaceAction::HTile | QtxWorkspaceAction::VTile |
155 QtxWorkspaceAction::Windows );
158 myWorkspaceAction->setIconSet( QtxWorkspaceAction::Cascade,
159 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_CASCADE" ) ) );
160 myWorkspaceAction->setMenuText( QtxWorkspaceAction::Cascade, tr( "MEN_DESK_WINDOW_CASCADE" ) );
161 myWorkspaceAction->setStatusTip( QtxWorkspaceAction::Cascade, tr( "PRP_DESK_WINDOW_CASCADE" ) );
164 myWorkspaceAction->setIconSet( QtxWorkspaceAction::Tile,
165 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_TILE" ) ) );
166 myWorkspaceAction->setMenuText( QtxWorkspaceAction::Tile, tr( "MEN_DESK_WINDOW_TILE" ) );
167 myWorkspaceAction->setStatusTip( QtxWorkspaceAction::Tile, tr( "PRP_DESK_WINDOW_TILE" ) );
170 myWorkspaceAction->setIconSet( QtxWorkspaceAction::HTile,
171 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_HTILE" ) ) );
172 myWorkspaceAction->setMenuText( QtxWorkspaceAction::HTile, tr( "MEN_DESK_WINDOW_HTILE" ) );
173 myWorkspaceAction->setStatusTip( QtxWorkspaceAction::HTile, tr( "PRP_DESK_WINDOW_HTILE" ) );
176 myWorkspaceAction->setIconSet( QtxWorkspaceAction::VTile,
177 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_VTILE" ) ) );
178 myWorkspaceAction->setMenuText( QtxWorkspaceAction::VTile, tr( "MEN_DESK_WINDOW_VTILE" ) );
179 myWorkspaceAction->setStatusTip( QtxWorkspaceAction::VTile, tr( "PRP_DESK_WINDOW_VTILE" ) );
182 QtxActionMenuMgr* mMgr = menuMgr();
186 int winMenuId = mMgr->insert( tr( "MEN_DESK_WINDOW" ), -1, 100, MenuWindowId );
187 mMgr->insert( myWorkspaceAction, winMenuId, -1 );
188 mMgr->insert( QtxActionMenuMgr::separator(), winMenuId, -1 );
191 /*!Convert STD_MDIDesktop enumerations to QtxWorkspaceAction.*/
192 int STD_MDIDesktop::operationFlag( const int type ) const
198 res = QtxWorkspaceAction::Cascade;
201 res = QtxWorkspaceAction::Tile;
204 res = QtxWorkspaceAction::HTile;
207 res = QtxWorkspaceAction::VTile;