Salome HOME
Copyright update 2022
[modules/gui.git] / src / STD / STD_MDIDesktop.cxx
old mode 100755 (executable)
new mode 100644 (file)
index 9a446ab..dca7f7a
@@ -1,50 +1,58 @@
-// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-// 
+// Copyright (C) 2007-2022  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either 
-// version 2.1 of the License.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // Lesser General Public License for more details.
 //
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+
 #include "STD_MDIDesktop.h"
 
 #include <SUIT_Session.h>
 #include <SUIT_ViewWindow.h>
 #include <SUIT_ResourceMgr.h>
 
-#include <QtxAction.h>
+#include <QtxWorkspace.h>
 #include <QtxActionMenuMgr.h>
 #include <QtxWorkspaceAction.h>
 
-#include <qvbox.h>
-#include <qmenubar.h>
-#include <qworkspace.h>
-#include <qobjectlist.h>
+#include <QFrame>
+#include <QVBoxLayout>
+#include <QMdiSubWindow>
 
 #include <stdarg.h>
 
-/*!Constructor.*/
+/*!
+  Constructor.
+*/
 STD_MDIDesktop::STD_MDIDesktop()
 : SUIT_Desktop(),
 myWorkspace( 0 ),
 myWorkspaceAction( 0 )
 {
-  QVBox* base = new QVBox( this );
+  QFrame* base = new QFrame( this );
+  QVBoxLayout* main = new QVBoxLayout( base );
+  main->setMargin( 0 );
   base->setFrameStyle( QFrame::Panel | QFrame::Sunken );
 
   setCentralWidget( base );
 
-  myWorkspace = new QWorkspace( base );
+  myWorkspace = new QtxWorkspace( base );
+  main->addWidget( myWorkspace );
 
   connect( myWorkspace, SIGNAL( windowActivated( QWidget* ) ),
            this, SLOT( onWindowActivated( QWidget* ) ) );
@@ -52,42 +60,48 @@ myWorkspaceAction( 0 )
   createActions();
 }
 
-/*!destructor.*/
+/*!
+  Destructor.
+*/
 STD_MDIDesktop::~STD_MDIDesktop()
 {
 }
 
-/*!\retval SUIT_ViewWindow - return const active window.*/
+/*!
+  \retval SUIT_ViewWindow - return const active window.
+*/
 SUIT_ViewWindow* STD_MDIDesktop::activeWindow() const
 {
-  SUIT_ViewWindow* wnd = 0;
-
-  QWidget* wid = myWorkspace->activeWindow();
-  if ( wid && wid->inherits( "SUIT_ViewWindow" ) )
-    wnd = (SUIT_ViewWindow*)wid;
-
-  return wnd;
+  return qobject_cast<SUIT_ViewWindow*>( myWorkspace->activeSubWindow()->widget() );
 }
 
-/*!\retval QPtrList<SUIT_ViewWindow> - return const active window list.*/
-QPtrList<SUIT_ViewWindow> STD_MDIDesktop::windows() const
+/*!
+  \retval QList<SUIT_ViewWindow> - return const active window list.
+*/
+QList<SUIT_ViewWindow*> STD_MDIDesktop::windows() const
 {
-  QPtrList<SUIT_ViewWindow> winList;
+  QList<SUIT_ViewWindow*> winList;
 
-  QWidgetList children = myWorkspace->windowList();
-  for ( QWidgetListIt it( children ); it.current(); ++it )
+  QList<QMdiSubWindow *> children = myWorkspace->subWindowList();
+  for ( QList<QMdiSubWindow *>::iterator it = children.begin(); it != children.end(); ++it )
   {
-    if ( it.current()->inherits( "SUIT_ViewWindow" ) )
-      winList.append( (SUIT_ViewWindow*)it.current() );
+    SUIT_ViewWindow* vw = ::qobject_cast<SUIT_ViewWindow*>( (*it)->widget() );
+    if ( vw )
+      winList.append( vw );
   }
 
   return winList;
 }
 
-/*!\retval QWidget - pointer to work space.*/
-QWidget* STD_MDIDesktop::parentArea() const
+/*!
+  Add the new widget into desktop.
+*/
+void STD_MDIDesktop::addWindow( QWidget* w )
 {
-  return workspace();
+  if ( !w || !workspace() )
+    return;
+
+  workspace()->addSubWindow( w );
 }
 
 /*!Call method perform for operation \a type.*/
@@ -100,45 +114,51 @@ void STD_MDIDesktop::windowOperation( const int type )
 void STD_MDIDesktop::setWindowOperations( const int first, ... )
 {
   va_list ints;
-       va_start( ints, first );
-
-       QValueList<int> typeList;
+  va_start( ints, first );
 
-       int cur = first;
-       while ( cur )
-       {
-         typeList.append( cur );
-               cur = va_arg( ints, int );
+  QList<int> typeList;
+  
+  int cur = first;
+  while ( cur )
+  {
+    typeList.append( cur );
+    cur = va_arg( ints, int );
   }
 
-       setWindowOperations( typeList );
+  setWindowOperations( typeList );
 }
 
 /*!Sets window operations by variable \a opList - operation list.*/
-void STD_MDIDesktop::setWindowOperations( const QValueList<int>& opList )
+void STD_MDIDesktop::setWindowOperations( const QList<int>& opList )
 {
   int flags = 0;
 
-  for ( QValueList<int>::const_iterator it = opList.begin(); it != opList.end(); ++it )
+  for ( QList<int>::const_iterator it = opList.begin(); it != opList.end(); ++it )
     flags = flags | operationFlag( *it );
 
-  myWorkspaceAction->setItems( flags );
+  myWorkspaceAction->setMenuActions( flags );
 }
 
-/*!\retval QWorkspace pointer - work space.*/
-QWorkspace* STD_MDIDesktop::workspace() const
+/*!
+  \retval QtxWorkspace pointer - work space.
+*/
+QtxWorkspace* STD_MDIDesktop::workspace() const
 {
   return myWorkspace;
 }
 
-/*!Emit window activated.*/
+/*!
+  Emit window activated.
+*/
 void STD_MDIDesktop::onWindowActivated( QWidget* w )
 {
   if ( w && w->inherits( "SUIT_ViewWindow" ) )
     emit windowActivated( (SUIT_ViewWindow*)w );
 }
 
-/*!Create actions: cascade, Tile, Tile Horizontal, Tile Vertical*/
+/*!
+  Create actions: cascade, Tile, Tile Horizontal, Tile Vertical
+*/
 void STD_MDIDesktop::createActions()
 {
   if ( myWorkspaceAction )
@@ -150,40 +170,39 @@ void STD_MDIDesktop::createActions()
 
   myWorkspaceAction = new QtxWorkspaceAction( workspace(), this );
 
-  myWorkspaceAction->setItems( QtxWorkspaceAction::Cascade | QtxWorkspaceAction::Tile |
-                               QtxWorkspaceAction::HTile | QtxWorkspaceAction::VTile |
-                               QtxWorkspaceAction::Windows );
+  myWorkspaceAction->setMenuActions( QtxWorkspaceAction::Cascade | QtxWorkspaceAction::Tile  |
+                                     QtxWorkspaceAction::HTile   | QtxWorkspaceAction::VTile |
+                                     QtxWorkspaceAction::Windows );
 
   // Cascade
-  myWorkspaceAction->setIconSet( QtxWorkspaceAction::Cascade,
-                                 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_CASCADE" ) ) );
-  myWorkspaceAction->setMenuText( QtxWorkspaceAction::Cascade, tr( "MEN_DESK_WINDOW_CASCADE" ) );
+  myWorkspaceAction->setIcon( QtxWorkspaceAction::Cascade,
+                              resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_CASCADE" ) ) );
+  myWorkspaceAction->setText( QtxWorkspaceAction::Cascade, tr( "MEN_DESK_WINDOW_CASCADE" ) );
   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::Cascade, tr( "PRP_DESK_WINDOW_CASCADE" ) );
 
   // Tile
-  myWorkspaceAction->setIconSet( QtxWorkspaceAction::Tile,
-                                 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_TILE" ) ) );
-  myWorkspaceAction->setMenuText( QtxWorkspaceAction::Tile, tr( "MEN_DESK_WINDOW_TILE" ) );
+  myWorkspaceAction->setIcon( QtxWorkspaceAction::Tile,
+                              resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_TILE" ) ) );
+  myWorkspaceAction->setText( QtxWorkspaceAction::Tile, tr( "MEN_DESK_WINDOW_TILE" ) );
   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::Tile, tr( "PRP_DESK_WINDOW_TILE" ) );
 
   // Tile Horizontal
-  myWorkspaceAction->setIconSet( QtxWorkspaceAction::HTile,
-                                 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_HTILE" ) ) );
-  myWorkspaceAction->setMenuText( QtxWorkspaceAction::HTile, tr( "MEN_DESK_WINDOW_HTILE" ) );
+  myWorkspaceAction->setIcon( QtxWorkspaceAction::HTile,
+                              resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_HTILE" ) ) );
+  myWorkspaceAction->setText( QtxWorkspaceAction::HTile, tr( "MEN_DESK_WINDOW_HTILE" ) );
   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::HTile, tr( "PRP_DESK_WINDOW_HTILE" ) );
 
   // Tile Vertical
-  myWorkspaceAction->setIconSet( QtxWorkspaceAction::VTile,
-                                 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_VTILE" ) ) );
-  myWorkspaceAction->setMenuText( QtxWorkspaceAction::VTile, tr( "MEN_DESK_WINDOW_VTILE" ) );
+  myWorkspaceAction->setIcon( QtxWorkspaceAction::VTile,
+                              resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_VTILE" ) ) );
+  myWorkspaceAction->setText( QtxWorkspaceAction::VTile, tr( "MEN_DESK_WINDOW_VTILE" ) );
   myWorkspaceAction->setStatusTip( QtxWorkspaceAction::VTile, tr( "PRP_DESK_WINDOW_VTILE" ) );
 
-
   QtxActionMenuMgr* mMgr = menuMgr();
   if ( !mMgr )
     return;
 
-  int winMenuId = mMgr->insert( tr( "MEN_DESK_WINDOW" ), -1, 100, MenuWindowId );
+  int winMenuId = mMgr->insert( tr( "MEN_DESK_WINDOW" ), -1, 100 );
   mMgr->insert( myWorkspaceAction, winMenuId, -1 );
   mMgr->insert( QtxActionMenuMgr::separator(), winMenuId, -1 );
 }