Salome HOME
updated copyright message
[modules/gui.git] / src / STD / STD_TabDesktop.cxx
index 020abcf541b8bff4167a37a870f41420d82cc5e4..0e8f5e6b67ebc2fa7783f64416351445cd37a49a 100644 (file)
@@ -1,18 +1,37 @@
+// Copyright (C) 2007-2023  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, 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
+// 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_TabDesktop.h"
 
 #include <SUIT_Session.h>
 #include <SUIT_ViewWindow.h>
 #include <SUIT_ResourceMgr.h>
 
-#include <QtxAction.h>
 #include <QtxWorkstack.h>
 #include <QtxActionMenuMgr.h>
 #include <QtxWorkstackAction.h>
 
-#include <qvbox.h>
-#include <qmenubar.h>
-#include <qworkspace.h>
-#include <qobjectlist.h>
+#include <QFrame>
+#include <QVBoxLayout>
 
 #include <stdarg.h>
 
@@ -22,20 +41,34 @@ STD_TabDesktop::STD_TabDesktop()
 myWorkstack( 0 ),
 myWorkstackAction( 0 )
 {
-  QVBox* base = new QVBox( this );
+  QFrame* base = new QFrame( this );
   base->setFrameStyle( QFrame::Panel | QFrame::Sunken );
 
+  QVBoxLayout* main = new QVBoxLayout( base );
+  main->setMargin( 0 );
+
   setCentralWidget( base );
 
   myWorkstack = new QtxWorkstack( base );
+  main->addWidget( myWorkstack );
   // setting Expanding size policy for central workstack.  If there are several widgets
-  // in central area of Desktop, other widgets will be added below the workstack (CATHARE, TIRPOLI modules).  
+  // in central area of Desktop, other widgets will be added below the workstack (CATHARE, TRIPOLI modules).
   // But the workstack must occupy as much space as possible -- set Expanding for it.
   myWorkstack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
 
-  myWorkstack->setAccel(QtxWorkstack::SplitVertical,   SHIFT + Key_V);
-  myWorkstack->setAccel(QtxWorkstack::SplitHorizontal, SHIFT + Key_H);
-  myWorkstack->setAccel(QtxWorkstack::Close,           SHIFT + Key_C);
+  myWorkstack->setAccel( QtxWorkstack::SplitVertical,   Qt::ALT + Qt::SHIFT + Qt::Key_V );
+  myWorkstack->setAccel( QtxWorkstack::SplitHorizontal, Qt::ALT + Qt::SHIFT + Qt::Key_H );
+  //myWorkstack->setAccel( QtxWorkstack::Close,           Qt::CTRL + Qt::Key_F4 );
+
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  if ( resMgr ) {
+    myWorkstack->setIcon( QtxWorkstack::SplitVertical,
+                          resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_VSPLIT" ) ) );
+    myWorkstack->setIcon( QtxWorkstack::SplitHorizontal,
+                          resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_HSPLIT" ) ) );
+    myWorkstack->setIcon( QtxWorkstack::Close,
+                          resMgr->loadPixmap( "STD", tr( "ICON_FILE_CLOSE" ) ));
+  }
 
   connect( myWorkstack, SIGNAL( windowActivated( QWidget* ) ),
            this, SLOT( onWindowActivated( QWidget* ) ) );
@@ -43,12 +76,16 @@ myWorkstackAction( 0 )
   createActions();
 }
 
-/*!Destructor.*/
+/*!
+  Destructor.
+*/
 STD_TabDesktop::~STD_TabDesktop()
 {
 }
 
-/*!\retval SUIT_ViewWindow - return const active window.*/
+/*!
+  \retval SUIT_ViewWindow - return const active window.
+*/
 SUIT_ViewWindow* STD_TabDesktop::activeWindow() const
 {
   SUIT_ViewWindow* wnd = 0;
@@ -60,76 +97,107 @@ SUIT_ViewWindow* STD_TabDesktop::activeWindow() const
   return wnd;
 }
 
-/*!\retval QPtrList<SUIT_ViewWindow> - return const active window list.*/
-QPtrList<SUIT_ViewWindow> STD_TabDesktop::windows() const
+/*!
+  Set active window
+  \param wnd - view window
+*/
+void STD_TabDesktop::setActiveWindow(SUIT_ViewWindow* wnd)
+{
+  if (wnd) {
+    myWorkstack->setActiveWindow(wnd);
+    wnd->setFocus();
+  }
+}
+
+/*!
+  \retval QPtrList<SUIT_ViewWindow> - return const active window list.
+*/
+QList<SUIT_ViewWindow*> STD_TabDesktop::windows() const
 {
-  QPtrList<SUIT_ViewWindow> winList;
+  QList<SUIT_ViewWindow*> winList;
 
   QWidgetList children = myWorkstack->windowList();
-  for ( QWidgetListIt it( children ); it.current(); ++it )
+  for ( QWidgetList::iterator it = children.begin(); it != children.end(); ++it )
   {
-    if ( it.current()->inherits( "SUIT_ViewWindow" ) )
-      winList.append( (SUIT_ViewWindow*)it.current() );
+    if ( (*it)->inherits( "SUIT_ViewWindow" ) )
+      winList.append( (SUIT_ViewWindow*)*it );
   }
 
   return winList;
 }
 
-/*!\retval QWidget pointer - QT work stack.*/
-QWidget* STD_TabDesktop::parentArea() const
+/*!
+  Insert new widget into desktop.
+*/
+void STD_TabDesktop::addWindow( QWidget* w )
 {
-  return workstack();
+  if ( !w || !workstack() )
+    return;
+
+  workstack()->addWindow( w );
 }
 
-/*!Call method perform for operation \a type.*/
+/*!
+  Call method perform for operation \a type.
+*/
 void STD_TabDesktop::windowOperation( const int type )
 {
   myWorkstackAction->perform( operationFlag( type ) );
 }
 
-/*!Sets window operations by \a first ... parameters.*/
+/*!
+  Sets window operations by \a first ... parameters.
+*/
 void STD_TabDesktop::setWindowOperations( const int first, ... )
 {
   va_list ints;
-       va_start( ints, first );
+        va_start( ints, first );
 
-       QValueList<int> typeList;
+        QList<int> typeList;
 
-       int cur = first;
-       while ( cur )
-       {
-         typeList.append( cur );
-               cur = va_arg( ints, int );
+        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_TabDesktop::setWindowOperations( const QValueList<int>& opList )
+/*!
+  Sets window operations by variable \a opList - operation list.
+*/
+void STD_TabDesktop::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 );
 
-  myWorkstackAction->setItems( flags );
+//  myWorkstackAction->setItems( flags );
 }
 
-/*!\retval QtxWorkstack pointer - QT work stack.*/
+/*!
+  \retval QtxWorkstack pointer - Qt work stack.
+*/
 QtxWorkstack* STD_TabDesktop::workstack() const
 {
   return myWorkstack;
 }
 
-/*!Emit window activated.*/
+/*!
+  Emit window activated.
+*/
 void STD_TabDesktop::onWindowActivated( QWidget* w )
 {
   if ( w && w->inherits( "SUIT_ViewWindow" ) )
     emit windowActivated( (SUIT_ViewWindow*)w );
 }
 
-/*!Create actions for window.*/
+/*!
+  Create actions for window.
+*/
 void STD_TabDesktop::createActions()
 {
   if ( myWorkstackAction )
@@ -141,41 +209,60 @@ void STD_TabDesktop::createActions()
 
   myWorkstackAction = new QtxWorkstackAction( workstack(), this );
 
-  myWorkstackAction->setItems( QtxWorkstackAction::Split | QtxWorkstackAction::Windows );
+  myWorkstackAction->setMenuActions( QtxWorkstackAction::Split | QtxWorkstackAction::Windows );
 
   // Split Horizontal
-  myWorkstackAction->setIconSet( QtxWorkstackAction::HSplit,
-                                 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_HSPLIT" ) ) );
-  myWorkstackAction->setMenuText( QtxWorkstackAction::HSplit, tr( "MEN_DESK_WINDOW_HSPLIT" ) );
-  myWorkstackAction->setStatusTip( QtxWorkstackAction::HSplit, tr( "PRP_DESK_WINDOW_HSPLIT" ) );
+  myWorkstackAction->setIcon( QtxWorkstackAction::SplitHorizontal,
+                              resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_HSPLIT" ) ) );
+  myWorkstackAction->setText( QtxWorkstackAction::SplitHorizontal, tr( "MEN_DESK_WINDOW_HSPLIT" ) );
+  myWorkstackAction->setStatusTip( QtxWorkstackAction::SplitHorizontal, tr( "PRP_DESK_WINDOW_HSPLIT" ) );
+  myWorkstackAction->setAccel( QtxWorkstackAction::SplitHorizontal, Qt::ALT + Qt::SHIFT + Qt::Key_H );
 
   // Split Vertical
-  myWorkstackAction->setIconSet( QtxWorkstackAction::VSplit,
-                                 resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_VSPLIT" ) ) );
-  myWorkstackAction->setMenuText( QtxWorkstackAction::VSplit, tr( "MEN_DESK_WINDOW_VSPLIT" ) );
-  myWorkstackAction->setStatusTip( QtxWorkstackAction::VSplit, tr( "PRP_DESK_WINDOW_VSPLIT" ) );
+  myWorkstackAction->setIcon( QtxWorkstackAction::SplitVertical,
+                              resMgr->loadPixmap( "STD", tr( "ICON_DESK_WINDOW_VSPLIT" ) ) );
+  myWorkstackAction->setText( QtxWorkstackAction::SplitVertical, tr( "MEN_DESK_WINDOW_VSPLIT" ) );
+  myWorkstackAction->setStatusTip( QtxWorkstackAction::SplitVertical, tr( "PRP_DESK_WINDOW_VSPLIT" ) );
+  myWorkstackAction->setAccel( QtxWorkstackAction::SplitVertical,   Qt::ALT + Qt::SHIFT + Qt::Key_V );
+
+  QAction* anArrangeViewsAction = myWorkstackAction->getArrangeViewsAction();
+  if( anArrangeViewsAction )
+    connect( anArrangeViewsAction, SIGNAL( triggered() ), this, SLOT( onArrangeViews() ) );
 
   QtxActionMenuMgr* mMgr = menuMgr();
   if ( !mMgr )
     return;
 
   int winMenuId = mMgr->insert( tr( "MEN_DESK_WINDOW" ), -1, 100 );
+  mMgr->insert( anArrangeViewsAction, winMenuId, -1 );
   mMgr->insert( myWorkstackAction, winMenuId, -1 );
   mMgr->insert( QtxActionMenuMgr::separator(), winMenuId, -1 );
 }
 
-/*!Convert STD_TabDesktop enumerations to QtxWorkstackAction*/
+/*!
+  Emit Arrange Views menu activated.
+*/
+void STD_TabDesktop::onArrangeViews()
+{
+  QtxSplitDlg ArrangeViewsDlg( this, workstack(), ArrangeViews );
+  ArrangeViewsDlg.exec();
+}
+
+/*!
+  Convert STD_TabDesktop enumerations to QtxWorkstackAction
+*/
 int STD_TabDesktop::operationFlag( const int type ) const
 {
   int res = 0;
   switch ( type )
   {
-  case VSplit:
-    res = QtxWorkstackAction::VSplit;
+  case SplitVertical:
+    res = QtxWorkstackAction::SplitVertical;
     break;
-  case HSplit:
-    res = QtxWorkstackAction::HSplit;
+  case SplitHorizontal:
+    res = QtxWorkstackAction::SplitHorizontal;
     break;
   }
+
   return res;
 }