]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
*** empty log message ***
authorstv <stv@opencascade.com>
Fri, 19 Sep 2008 12:15:44 +0000 (12:15 +0000)
committerstv <stv@opencascade.com>
Fri, 19 Sep 2008 12:15:44 +0000 (12:15 +0000)
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Application.h
src/LightApp/LightApp_Preferences.cxx
src/LightApp/LightApp_Preferences.h
src/Qtx/QtxActionGroup.cxx [new file with mode: 0644]
src/Qtx/QtxActionGroup.h [new file with mode: 0644]
src/Qtx/QtxActionSet.cxx
src/Qtx/QtxPagePrefMgr.cxx
src/Qtx/QtxPagePrefMgr.h
src/Qtx/QtxPreferenceMgr.cxx
src/Qtx/QtxPreferenceMgr.h

index d05f9fc2c6cf1c114ce799f7613464d322033071..9b726fd1cee12218a5fa1ec6030db8f5d8de0f37 100644 (file)
@@ -908,16 +908,18 @@ void LightApp_Application::onHelpContentsModule()
 #endif
   QString aParams = resMgr->stringValue("ExternalBrowser", "parameters");
 
-  if (!anApp.isEmpty()) {
+  if ( !anApp.isEmpty() )
+  {
     RunBrowser* rs = new RunBrowser( this, anApp, aParams, helpFile );
     rs->start();
   }
-  else {
-    if( SUIT_MessageBox::question(desktop(), tr("WRN_WARNING"),
-                                 tr("DEFINE_EXTERNAL_BROWSER"),
-                                 SUIT_MessageBox::Yes | SUIT_MessageBox::No,
-                                 SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes )
-      onPreferences();
+  else
+  {
+    if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ),
+                                   SUIT_MessageBox::Yes | SUIT_MessageBox::No,
+                                   SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes )
+
+      showPreferences( tr( "PREF_APP" ) );
   }
 }
 
@@ -956,16 +958,17 @@ void LightApp_Application::onHelpContextModule( const QString& theComponentName,
 #endif
   QString aParams = resMgr->stringValue("ExternalBrowser", "parameters");
 
-  if (!anApp.isEmpty()) {
+  if ( !anApp.isEmpty() )
+  {
     RunBrowser* rs = new RunBrowser( this, anApp, aParams, helpFile, theContext );
     rs->start();
   }
-  else {
-    if( SUIT_MessageBox::question(desktop(), tr("WRN_WARNING"),
-                                 tr("DEFINE_EXTERNAL_BROWSER"),
-                                 SUIT_MessageBox::Yes | SUIT_MessageBox::No,
-                                 SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes )
-      onPreferences();
+  else
+  {
+    if ( SUIT_MessageBox::question( desktop(), tr( "WRN_WARNING" ), tr( "DEFINE_EXTERNAL_BROWSER" ),
+                                   SUIT_MessageBox::Yes | SUIT_MessageBox::No,
+                                   SUIT_MessageBox::Yes ) == SUIT_MessageBox::Yes )
+      showPreferences( tr( "PREF_APP" ) );
   }
 }
 
@@ -1489,6 +1492,12 @@ void LightApp_Application::onRefresh()
 
 /*!Private SLOT. On preferences.*/
 void LightApp_Application::onPreferences()
+{
+  showPreferences( activeModule() ? activeModule()->moduleName() : tr( "PREF_CATEGORY_SALOME" ) );
+}
+
+/*!Private SLOT. On preferences.*/
+void LightApp_Application::showPreferences( const QString& itemText )
 {
   QApplication::setOverrideCursor( Qt::WaitCursor );
 
@@ -1499,9 +1508,10 @@ void LightApp_Application::onPreferences()
   if ( !prefDlg )
     return;
 
-  preferences()->activateModule( activeModule() ? activeModule()->moduleName() : tr( "PREF_CATEGORY_SALOME" ) );
+  preferences()->activateItem( itemText );
 
-  if ( ( prefDlg->exec() == QDialog::Accepted || prefDlg->isSaved() ) &&  resourceMgr() ) {
+  if ( ( prefDlg->exec() == QDialog::Accepted || prefDlg->isSaved() ) &&  resourceMgr() )
+  {
     if ( desktop() )
       resourceMgr()->setValue( "desktop", "geometry", desktop()->storeGeometry() );
     resourceMgr()->save();
@@ -1799,7 +1809,7 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref )
   pref->addPreference( tr( "PREF_VIEWER_BACKGROUND" ), vtkGroup,
                       LightApp_Preferences::Color, "VTKViewer", "background" );
   pref->addPreference( tr( "PREF_RELATIVE_SIZE" ), vtkGroup, LightApp_Preferences::Bool, "VTKViewer", "relative_size" );
-  pref->addPreference( tr( "PREF_USE_ADVANCED_SELECTION_ALGORITHM" ), vtkGroup, 
+  pref->addPreference( tr( "PREF_USE_ADVANCED_SELECTION_ALGORITHM" ), vtkGroup,
                       LightApp_Preferences::Bool, "VTKViewer", "use_advanced_selection_algorithm" );
 
   pref->setItemProperty( "min", 1.0E-06, vtkTS );
@@ -2704,7 +2714,7 @@ void LightApp_Application::onCloseAllWindow()
   SUIT_ViewWindow* wnd;
   foreach( wnd, wndList )
   {
-    if ( wnd )  
+    if ( wnd )
       wnd->close();
   }
 }
index 834b7ceeeb05c3bce577701514cd9d1c47edbf21..2f929ae94e4154512cf28323d28cd6b946063472 100644 (file)
@@ -74,7 +74,7 @@ public:
 
   enum { MenuWindowId = 6 };
 
-  enum { RenameId = CAM_Application::UserID,         
+  enum { RenameId = CAM_Application::UserID,
         CloseId, CloseAllId, GroupAllId,
         PreferencesId, MRUId, ModulesListId,
          NewGLViewId, NewPlot2dId, NewOCCViewId, NewVTKViewId, NewQxGraphViewId, UserID };
@@ -240,6 +240,8 @@ protected:
   virtual int                         openChoice( const QString& );
   virtual bool                        openAction( const int, const QString& );
 
+  void                                showPreferences( const QString& = QString() );
+
 protected:
   typedef QPointer<QWidget>         WinPtr;
   typedef QMap<int, WinPtr>         WinMap;
index 38bdf7f2f624690867eae3b8823c805ff7c39ec6..0024efe990726fc527d002d373ce19eb61cf3bdf 100644 (file)
@@ -68,12 +68,15 @@ bool LightApp_Preferences::hasModule( const QString& mod ) const
   return res;
 }
 
-void LightApp_Preferences::activateModule( const QString& mod ) const
+void LightApp_Preferences::activateItem( const QString& mod ) const
 {
   QtxPreferenceItem* item = findItem( mod, true );
 
-  if ( item && item->depth() < 3 )
-    item->ensureVisible();
+  if ( !item )
+    return;
+
+  item->ensureVisible();
+  item->activate();
 }
 
 /*!Do nothing.*/
index c6c41c1e875fc456069f89aca69d85e3b91f1428..c2f90452d5c52ab6b7b119e15fd53717b1a84e5e 100644 (file)
@@ -49,7 +49,7 @@ public:
 
   bool                 hasModule( const QString& ) const;
 
-  void                 activateModule( const QString& ) const;
+  void                 activateItem( const QString& ) const;
 
 protected:
   void                 changedResources( const ResourceMap& );
diff --git a/src/Qtx/QtxActionGroup.cxx b/src/Qtx/QtxActionGroup.cxx
new file mode 100644 (file)
index 0000000..c3db645
--- /dev/null
@@ -0,0 +1,255 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// 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
+// 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
+//
+// File:      QtxActionGroup.cxx
+// Author:    Sergey TELKOV
+
+#include "QtxActionGroup.h"
+
+#include "QtxComboBox.h"
+
+#include <QApplication>
+
+/*!
+  \class QtxActionGroup
+  \brief An action class which is represented in the menu bar (or toolbar) as
+  a group of actions or combo box and support exclusive triggerd action behaviour.
+*/
+
+/*!
+  \brief Constructor.
+  \param parent parent object
+*/
+QtxActionGroup::QtxActionGroup( QObject* parent )
+: QtxActionSet( parent ),
+  myExclusive( false ),
+  myDropDown( false )
+{
+  connect( this, SIGNAL( triggered( QAction* ) ), this, SLOT( onTriggered( QAction* ) ) );
+}
+
+/*!
+  \brief Destructor.
+*/
+QtxActionGroup::~QtxActionGroup()
+{
+}
+
+/*!
+  \brief Returns true if the action group is exclusive.
+*/
+bool QtxActionGroup::isExclusive() const
+{
+  return myExclusive;
+}
+
+/*!
+  \brief Set the action group is exclusive.
+  \param on if true group should be exclusive otherwise not.
+*/
+void QtxActionGroup::setExclusive( const bool on )
+{
+  if ( myExclusive == on )
+    return;
+
+  bool e = isEmptyAction();
+
+  myExclusive = on;
+
+  if ( e != isEmptyAction() )
+    updateType();
+}
+
+/*!
+  \brief Returns .
+  \param on if true group should be exclusive otherwise not.
+*/
+bool QtxActionGroup::usesDropDown() const
+{
+  return myDropDown;
+}
+
+/*!
+  \brief Sets whether the group's actions are displayed in a subwidget of the widgets the action group is added to.
+*/
+void QtxActionGroup::setUsesDropDown( const bool on )
+{
+  if ( myDropDown == on )
+    return;
+
+  bool e = isEmptyAction();
+
+  myDropDown = on;
+
+  if ( e != isEmptyAction() )
+    updateType();
+}
+
+/*!
+  \brief Append the specified action into group.
+*/
+void QtxActionGroup::add( QAction* a )
+{
+  insertAction( a );
+}
+
+/*!
+  \brief Called when some action is activated by the user.
+  \param a toggled action
+*/
+void QtxActionGroup::onTriggered( QAction* a )
+{
+  if ( !isExclusive() )
+    return;
+
+  if ( !a->isCheckable() || !a->isChecked() )
+    return;
+
+  QList<QAction*> aList = actions();
+  for ( QList<QAction*>::const_iterator it = aList.begin(); it != aList.end(); ++it )
+  {
+    QAction* cur = *it;
+    if ( cur->isCheckable() )
+      cur->setChecked( cur == a );
+  }
+
+  emit selected( a );
+}
+
+void QtxActionGroup::onActivated( int id )
+{
+  const QObject* s = sender();
+
+  QAction* a = action( id );
+  if ( !a )
+    return;
+
+  if ( a->isChecked() )
+    return;
+
+  a->setChecked( true );
+
+  QList<QWidget*> lst = createdWidgets();
+  for ( QList<QWidget*>::iterator it = lst.begin(); it != lst.end(); ++it )
+  {
+    QtxComboBox* cb = ::qobject_cast<QtxComboBox*>( *it );
+    if ( cb && cb != s )
+      cb->setCurrentId( id );
+  }
+}
+
+/*!
+  \brief Update action set for the specified widget.
+  \param w a widget this action is added to
+*/
+void QtxActionGroup::updateAction( QWidget* w )
+{
+  QtxComboBox* cb = createdWidget( w );
+  if ( !cb )
+    QtxActionSet::updateAction( w );
+  else
+  {
+    updateAction( cb );
+
+    QList<QAction*> lst = actions();
+    for ( QList<QAction*>::iterator it = lst.begin(); it != lst.end(); ++it )
+      w->removeAction( *it );
+  }
+}
+
+void QtxActionGroup::updateAction( QtxComboBox* cb )
+{
+  if ( !cb )
+    return;
+
+  cb->clear();
+  cb->setCleared( false );
+
+  QAction* cur = 0;
+  QList<QAction*> lst = actions();
+  for ( QList<QAction*>::iterator it = lst.begin(); it != lst.end(); ++it )
+  {
+    QAction* a = *it;
+    cb->addItem( a->icon(), a->text() );
+    cb->setId( cb->count() - 1, actionId( a ) );
+    if ( a->isChecked() )
+      cur = a;
+  }
+
+  if ( cur )
+    cb->setCurrentId( actionId( cur ) );
+  else
+    cb->setCleared( true );
+}
+
+QWidget* QtxActionGroup::createWidget( QWidget* p )
+{
+  QtxComboBox* cb = !isEmptyAction() ? new QtxComboBox( p ) : 0;
+  if ( cb )
+    connect( cb, SIGNAL( activatedId( int ) ), this, SLOT( onActivated( int ) ) );
+  return cb;
+}
+
+/*!
+  \brief Check if the action itself should be invisible
+  (only child action are shown)
+  \return \c true if the action itself should be visible
+*/
+bool QtxActionGroup::isEmptyAction() const
+{
+  return !isExclusive() || !usesDropDown();
+}
+
+
+void QtxActionGroup::updateType()
+{
+  QList<QWidget*> lst = associatedWidgets();
+  for ( QList<QWidget*>::iterator it = lst.begin(); it != lst.end(); ++it )
+  {
+    QWidget* w = *it;
+    QList<QAction*> lst = w->actions();
+
+    int i = lst.indexOf( this );
+    w->removeAction( this );
+
+    lst = w->actions();
+    w->insertAction( i < lst.count() ? lst.at( i ) : 0, this );
+  }
+}
+
+QtxComboBox* QtxActionGroup::createdWidget( QWidget* p )
+{
+  QtxComboBox* cb = 0;
+  QList<QWidget*> lst = createdWidgets();
+  for ( QList<QWidget*>::iterator it = lst.begin(); it != lst.end() && !cb; ++it )
+  {
+    if ( (*it)->parent() == p )
+      cb = ::qobject_cast<QtxComboBox*>( *it );
+  }
+  return cb;
+}
+
+
+
+
+
+/*!
+  \fn void QtxActionGroup::selected( QAction* a );
+  \brief Emitted when some child action is checked by the user.
+  \param a action being checked
+*/
diff --git a/src/Qtx/QtxActionGroup.h b/src/Qtx/QtxActionGroup.h
new file mode 100644 (file)
index 0000000..aae9b11
--- /dev/null
@@ -0,0 +1,78 @@
+// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
+//
+// 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
+// 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
+//
+// File:      QtxActionGroup.h
+// Author:    Sergey TELKOV
+
+#ifndef QTXACTIONGROUP_H
+#define QTXACTIONGROUP_H
+
+#include "QtxActionSet.h"
+
+#ifdef WIN32
+#pragma warning( disable:4251 )
+#endif
+
+class QtxComboBox;
+
+class QTX_EXPORT QtxActionGroup : public QtxActionSet
+{
+  Q_OBJECT
+
+public:
+  QtxActionGroup( QObject* = 0 );
+  QtxActionGroup( QObject*, const bool );
+  virtual ~QtxActionGroup();
+
+  bool             isExclusive() const;
+  void             setExclusive( const bool );
+
+  bool             usesDropDown() const;
+  void             setUsesDropDown( const bool );
+
+  void             add( QAction* );
+
+signals:
+  void             selected( QAction* );
+
+private slots:
+  void             onActivated( int );
+  void             onTriggered( QAction* );
+
+protected:
+  virtual void     updateAction( QWidget* );
+  virtual void     updateAction( QtxComboBox* );
+
+  virtual QWidget* createWidget( QWidget* );
+
+  virtual bool     isEmptyAction() const;
+
+private:
+  void             updateType();
+  QtxComboBox*     createdWidget( QWidget* );
+
+private:
+  bool             myDropDown;
+  bool             myExclusive;
+};
+
+#ifdef WIN32
+#pragma warning( default:4251 )
+#endif
+
+#endif
index da8d7630dda2e6891c4a6e7bc65e845d9872c4e3..916ce7ec8afdc4f5decc69761018f6efa46ccd3d 100644 (file)
@@ -1,17 +1,17 @@
 // Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-// 
+//
 // 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 
+// 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 
+//
+// 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
@@ -212,7 +212,7 @@ void QtxActionSet::clear()
 
 /*!
   \brief Called when action is changed.
-  
+
   Update action state.
 */
 void QtxActionSet::onChanged()
@@ -363,6 +363,9 @@ void QtxActionSet::updateAction( QWidget* w )
   for ( ActionList::iterator it = mySet.begin(); it != mySet.end(); ++it )
     w->removeAction( *it );
 
+  if ( !w->actions().contains( this ) )
+    return;
+
   QAction* first = 0;
   for ( int i = 0; i < mySet.count(); i++ )
   {
index 27701557eb54fc4b4a07e85c1a23da1583bbdf38..30a08cea62ec65a20e0c7212ad9236a076ba8c69 100644 (file)
@@ -277,6 +277,14 @@ QtxPagePrefItem::~QtxPagePrefItem()
   delete myListener;
 }
 
+void QtxPagePrefItem::activate()
+{
+  QtxPreferenceItem::activate();
+
+  if ( widget() )
+    widget()->setFocus();
+}
+
 /*!
   \brief Get preference item editor widget.
   \return editor widget
@@ -509,7 +517,8 @@ void QtxPageNamedPrefItem::setControl( QWidget* wid )
   {
     //    QtxPagePrefGroupItem* aGroup = 0;//dynamic_cast<QtxPagePrefGroupItem*>(parentItem());
     //    if ( !aGroup )
-      widget()->layout()->addWidget( myControl );
+    widget()->layout()->addWidget( myControl );
+    widget()->setFocusProxy( myControl );
       //    else myControl->setParent( aGroup->gridBox() );
   }
 }
index 11ca33aa3629e861e4df51962917ceb2795162ba..40d0dd992497928416ead1849f03f1113142efc7 100644 (file)
@@ -97,6 +97,8 @@ public:
 
   QWidget*          widget() const;
 
+  virtual void      activate();
+
 protected:
   void              setWidget( QWidget* );
 
index 26ebbf2a318cf1c39eb9d2d6b09eb9a8e90c3dc0..e3212ca7e7266574d471517107470dd1d1dc82fe 100644 (file)
@@ -554,6 +554,10 @@ QtxPreferenceItem* QtxPreferenceItem::findItem( const QString& title, const int
   return item;
 }
 
+void QtxPreferenceItem::activate()
+{
+}
+
 void QtxPreferenceItem::ensureVisible()
 {
   if ( parentItem() )
index 1b99d84ad9779895994aba336d4b5ed403caa585..244d6b36083ed403db3a528a89e2e10e524e2500 100644 (file)
@@ -89,6 +89,7 @@ public:
   virtual QtxResourceMgr*   resourceMgr() const;
   virtual QtxPreferenceMgr* preferenceMgr() const;
 
+  virtual void              activate();
   void                      ensureVisible();
 
   static int                RTTI();