]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Merge from V5_1_main 10/06/2010 V6_1_0a1 V6_1_0a2
authorvsr <vsr@opencascade.com>
Thu, 10 Jun 2010 08:03:59 +0000 (08:03 +0000)
committervsr <vsr@opencascade.com>
Thu, 10 Jun 2010 08:03:59 +0000 (08:03 +0000)
17 files changed:
adm_local/cmake_files/FindVTK.cmake
doc/salome/gui/images/pref32.png [new file with mode: 0755]
doc/salome/gui/input/postpro_preferences.doc
doc/salome/gui/input/using_input_widgets.doc
src/OpenGLUtils/OpenGLUtils_FrameBuffer.cxx
src/Qtx/QtxDoubleSpinBox.cxx
src/Qtx/QtxTreeView.cxx
src/Qtx/QtxTreeView.h
src/SUIT/SUIT_Study.h
src/SVTK/SVTK_Recorder.cxx
src/SalomeApp/SalomeApp_Study.cxx
src/SalomeApp/SalomeApp_Study.h
src/SalomeApp/SalomeApp_VisualState.cxx
src/VTKViewer/VTKViewer_MarkerDlg.cxx
src/VTKViewer/VTKViewer_MarkerDlg.h
src/VTKViewer/VTKViewer_PolyDataMapper.cxx
src/VTKViewer/VTKViewer_PolyDataMapper.h

index 4807376789a35f6213d6a1065413dd5d4c68ce09..71f7a605e3c1aec7c4de841df40c75f6ae500254 100644 (file)
@@ -47,3 +47,11 @@ SET(VTK_LIBS ${VTK_LIBS} ${VTK_WIDGETS})
 FIND_LIBRARY(vtkCommonPythonD vtkCommonPythonD ${VTK_LIBRARY_DIRS} NO_DEFAULT_PATH)
 FIND_LIBRARY(vtkGraphicsPythonD vtkGraphicsPythonD ${VTK_LIBRARY_DIRS} NO_DEFAULT_PATH)
 FIND_LIBRARY(vtkImagingPythonD vtkImagingPythonD ${VTK_LIBRARY_DIRS} NO_DEFAULT_PATH)
+
+IF(NOT WINDOWS)
+  IF(VTK_MAJOR_VERSION STREQUAL 5)
+    IF(VTK_MINOR_VERSION STREQUAL 0)
+      SET(VTK_INCLUDES ${VTK_INCLUDES} -Wno-deprecated)
+    ENDIF(VTK_MINOR_VERSION STREQUAL 0)
+  ENDIF(VTK_MAJOR_VERSION STREQUAL 5)
+ENDIF(NOT WINDOWS)
diff --git a/doc/salome/gui/images/pref32.png b/doc/salome/gui/images/pref32.png
new file mode 100755 (executable)
index 0000000..b2f2d50
Binary files /dev/null and b/doc/salome/gui/images/pref32.png differ
index 54036ef328fb08bd82c3914a4f38b80c63462c35..6e2755a6b98a103eec64c11f0b9ec9ac159a9289 100644 (file)
@@ -122,6 +122,18 @@ structure of the study and can be visualized in a XY plot.</li>
 </ul>
 </ul>
 
+<br><h2>Stream Lines Preferences</h2>
+
+\image html pref32.png
+
+<ul>
+<li><b>Stream Lines Preferences</b></li>
+<ul>
+<li><b>Used points</b> - allows to define a default value of percentage
+of points used for building the Stream Lines presentation.</li>
+</ul>
+</ul>
+
 <br><h2>Sweep and Animation Preferences</h2>
 
 \image html ppref3.png
index 2d0cb9bcbc1b3fff0df11e5b44e75ce8a70e795e..fcb04f0327c8e2cf02c8612ea41e8ac073ec208d 100755 (executable)
@@ -8,58 +8,57 @@ with SALOME GUI input widgets.
 <h1>Spin boxes</h1>
 
 This type of widgets is used for numeric (integer or floating-point)
-data input. Spin boxes are used in standard \b SALOME modules in case
-if an input value has clearly defined input range (and precision in
-case of floating-point value).
+data input. Spin boxes are used in standard \b SALOME modules if the
+input value has a clearly defined input range (and precision in
+case of floating-point value).
 
-Input precision has specific semantics in \b SALOME floating-point
+Input precision has specific semantics in \b SALOME floating-point
 spin boxes:
-- Positive value means that a number in a fixed-point format
-(corresponding to "f" format specifier for C printf function) is
+- Positive precision value means that a number in the fixed-point format
+(corresponding to the "f" format specifier for C printf function) is
 expected. Positive precision value is the maximum allowed number of
 digits after the decimal separator.
-- Negative precision value means that a number either in a fixed-point
-or scientific (exponetial) format is expected. This is similar to
-behavior of "g" format specifier for C printf function. Absolute
+- Negative precision value means that a number either in the fixed-point
+or the scientific (exponetial) format is expected. This is similar to the
+behavior of the "g" format specifier for C printf function. Negative
 precision value is the maximum allowed number of significant digits in
 mantissa (note that one digit is always before the decimal separator).
 
 To make the user aware of an input value constraints applied by some
-\b SALOME operation, the following basic capabilties are provided by
+\b SALOME operations, the following basic capabilties are provided by
 spin boxes:
-- Text entered manually into a spin box by the user is checked to be a
+- The text input manually in a spin box by the user is checked to be a
 number of valid type (integer or floating-point).
-- The text is converted to a number and checked against the valid
+- The text is converted to a number and checked to be within the valid
 range.
 - Additionally, for floating-point data the input text is checked
 against the precision rules described above.
 
-In case if the input text in a spin box does not satisfy the
-constraints, the user is informed about this by a message shown in a
+If the input text in a spin box does not meet the
+constraints, the user is shown a message in a
 tooltip near the spin box just as he types in it. The tooltip contains
-information about valid data range. For floating-point input, the
-tooltip also contains information about expected precision. 
+information about the valid data range. For a floating-point input, the
+tooltip also contains information about the expected precision. 
 
-In standard \bSALOME modules precision value can be adjusted through
-\ref setting_preferences_page "user preferences" of correspodning  modules, and the tooltip contains a
-reference to corresponding parameter in the preferences.
+In standard \bSALOME modules the precision value can be adjusted through
+\ref setting_preferences_page "user preferences" of the correspodning  modules, and the tooltip contains a
+reference to the corresponding parameter in the preferences.
 
 On-line documentation for each standard SALOME module contains the
 list of user preferences that can be used for tuning floating-point
-precision for different type of input quantities.
+precision for different types of input quantities.
 
 <h2>Spin boxes and SALOME Notebook</h2>
 
-Apart from numeric input, spin boxes in some \b SALOME modules accept
-names of \b Notebook variables (see \ref using_notebook "Using Notebook" 
+Apart from the numeric input, spin boxes in some \b SALOME modules accept
+the names of \b Notebook variables (see \ref using_notebook "Using Notebook" 
 page for more details about \b Notebook).
 
-If some spin box accepts variable names, then it is
-additionally checked whether the manual input text represents a variable name. Variable
-names should satisfy common naming rules for \b Python variables.
-In case if the input is neither a valid number nor a variable name,
-the tooltip is shown informing the user that variable names are
-also acceptable in this spin box.
+If a spin box accepts variable names, then it is
+additionally checked whether the manually input text represents a variable name. Variable
+names should comply with the common naming rules for \b Python variables.
+If the input is neither a valid number nor a variable name,
+the tooltip informs the user that variable names are also acceptable in this spin box.
 
 
 */
index a5e81e8132aea234d7ee55c0836e3b1973c556ec..e227f2642e9280ca2df64f8ad4a21b026bd2bfe3 100755 (executable)
@@ -132,7 +132,7 @@ bool OpenGLUtils_FrameBuffer::init( const GLsizei& xSize, const GLsizei& ySize )
   if( !IsEXTInitialized ||
       strstr( ext, "GL_EXT_framebuffer_object" ) == NULL )
   {
-    INFOS( "Initializing OpenGL FrameBuffer extension failed" );
+    MESSAGE( "Initializing OpenGL FrameBuffer extension failed" );
     return false;
   }
 
index f0560db9be6487ce590f55d97e2ea68600adf2f4..87120b243d338520c9a66dc6a7aad82534be09ed 100644 (file)
@@ -28,6 +28,8 @@
 
 #include <limits>
 
+const double PSEUDO_ZERO = 1.e-20;
+
 /*!
   \class QtxDoubleSpinBox
   \brief Enhanced version of the Qt's double spin box.
@@ -263,6 +265,11 @@ void QtxDoubleSpinBox::stepBy( int steps )
   myCleared = false;
 
   QDoubleSpinBox::stepBy( steps );
+  double tmpval = value();
+  if ( qAbs( tmpval ) < PSEUDO_ZERO ) tmpval = 0.;
+  if ( tmpval < minimum() ) tmpval = minimum();
+  else if ( tmpval > maximum() ) tmpval = maximum();
+  setValue( tmpval );
 }
 
 /*!
index ef551abc427917db6a2c74653f53f06a11776aa1..d86270d85482f2ea6767119933ef340c9893265c 100644 (file)
@@ -319,6 +319,22 @@ void QtxTreeView::selectionChanged( const QItemSelection& selected,
   emit( selectionChanged() );
 }
 
+/*!
+  \brief Called when rows are about to be removed.
+  \param parent model index
+  \param start first row to remove
+  \param end last row to remove
+*/
+void QtxTreeView::rowsAboutToBeRemoved( const QModelIndex& parent, int start, int end )
+{
+  QModelIndex curIndex = currentIndex();
+  while ( curIndex.isValid() && curIndex.parent() != parent )
+    curIndex = curIndex.parent();
+  if ( curIndex.isValid() && curIndex.row() >= start && curIndex.row() <= end )
+    setCurrentIndex( QModelIndex() );
+  QTreeView::rowsAboutToBeRemoved( parent, start, end );
+}
+
 /*!
   \brief Expand/collapse the specified item (recursively).
   \param index model index
index af16b8284bf50df31c801e30b99083089f54a00b..d63c9bdadc4c2a78367ec6366d25daf55096c6d8 100644 (file)
@@ -57,6 +57,7 @@ public:
 
 protected slots:
   void     onHeaderClicked( int );
+  void     rowsAboutToBeRemoved( const QModelIndex&, int, int );
   void     selectionChanged( const QItemSelection&, const QItemSelection& );
   void     onAppropriate( Qt::Orientation, int, int );
   
index d269c0be61a4c06443caa6cedd8a93d1be1e32f6..bd2ec1342f54dc579a0170eeae7c71a7ec76da8d 100755 (executable)
@@ -48,7 +48,7 @@ public:
   virtual int       id() const;
 
   SUIT_DataObject*  root() const;
-  QString           studyName() const;
+  virtual QString   studyName() const;
   SUIT_Application* application() const;
 
   virtual bool      isSaved()  const;
index 84a3221eb8fa230b05045497321be6936f05cce9..bba8a401f580fa815a90b719ea9dcc36d2426f88 100755 (executable)
@@ -322,7 +322,7 @@ int
 GetFrameIndex(double theStartTime,
               double theFPS)
 {
-  double aTimeNow = vtkTimerLog::GetCurrentTime();
+  double aTimeNow = vtkTimerLog::GetUniversalTime();
   double aDelta = aTimeNow - theStartTime;
   return int(aDelta*theFPS);
 }
@@ -336,7 +336,7 @@ SVTK_Recorder
 
   if(myFrameIndex < 0){
     myFrameIndex = 0;
-    myTimeStart = vtkTimerLog::GetCurrentTime();
+    myTimeStart = vtkTimerLog::GetUniversalTime();
   }else{
     int aFrameIndex = GetFrameIndex(myTimeStart,myNbFPS);
     if(aFrameIndex <= myFrameIndex)
index be3b096182c481471e634d8179eccc788c3eda76..019b882b430d563630360dc4340db7961bc64810 100644 (file)
@@ -66,11 +66,30 @@ SalomeApp_Study::~SalomeApp_Study()
 int SalomeApp_Study::id() const
 {
   int id = -1;
-  if ( myStudyDS )
+  if ( studyDS() )
     id = studyDS()->StudyId();
   return id;
 }
 
+/*!
+  Get study name.
+*/
+QString SalomeApp_Study::studyName() const
+{
+  // redefined from SUIT_Study to update study name properly since
+  // it can be changed outside of GUI
+  // TEMPORARILY SOLUTION: better to be implemented with help of SALOMEDS observers
+  if ( studyDS() ) {
+    QString newName = studyDS()->Name().c_str();
+    if ( LightApp_Study::studyName() != newName ) {
+      SalomeApp_Study* that = const_cast<SalomeApp_Study*>( this );
+      that->setStudyName( newName );
+      ((SalomeApp_Application*)application())->updateDesktopTitle();
+    }
+  }
+  return LightApp_Study::studyName();
+}
+
 /*!
   Gets studyDS pointer.
 */
index fe281212ded6b3f0f4b0e4dded0ea75e6cf271c3..597a3e069e5720dc38ea6dabcf003de17c3ed736 100644 (file)
@@ -42,6 +42,7 @@ public:
   virtual ~SalomeApp_Study();
 
   virtual int         id() const;
+  virtual QString     studyName() const;
 
   virtual bool        createDocument( const QString& );
   virtual bool        openDocument( const QString& );
index 689038fa6e40a3f53689ba43a5c30a05aa1c7ecc..0c06d2fd58bf7d452de5bf74975ddc0a2a5b2330 100644 (file)
@@ -108,6 +108,10 @@ int SalomeApp_VisualState::storeState()
   if ( !study )
     return -1;
 
+  // unlock study if it is locked
+  bool aLocked = study->studyDS()->GetProperties()->IsLocked();
+  if (aLocked) study->studyDS()->GetProperties()->SetLocked(false);
+
   int savePoint = 1;
   std::vector<int> savePoints = study->getSavePoints();
   //Calculate a new savePoint number = the last save point number + 1
@@ -182,6 +186,8 @@ int SalomeApp_VisualState::storeState()
   // set default name of new savePoint
   study->setNameOfSavePoint( savePoint, QObject::tr( "SAVE_POINT_DEF_NAME" ) + QString::number( savePoint ) );
 
+  if (aLocked) study->studyDS()->GetProperties()->SetLocked(true);
+
   return savePoint;
 }
 
index baa4a1fdac9c70c128edaf3662662dd753e60553..5484bad62040e10071fff2d08aae638a07a539d7 100644 (file)
 #include "VTKViewer_MarkerDlg.h"
 #include "VTKViewer_MarkerWidget.h"
 
+#include <SUIT_Application.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+
 #include <QFrame>
 #include <QHBoxLayout>
+#include <QKeyEvent>
 
 /*!
  * Class       : VTKViewer_MarkerDlg
@@ -42,6 +48,8 @@ VTKViewer_MarkerDlg::VTKViewer_MarkerDlg( QWidget* theParent )
   aTopLayout->setSpacing( 0 );
   aTopLayout->setMargin( 0 );
   aTopLayout->addWidget( myMarkerWidget );
+
+  connect( this, SIGNAL( dlgHelp() ), this, SLOT( onHelp() ) );
 }
 
 /*!
@@ -51,6 +59,48 @@ VTKViewer_MarkerDlg::~VTKViewer_MarkerDlg()
 {
 }
 
+void VTKViewer_MarkerDlg::setHelpData( const QString& theModuleName,
+                                       const QString& theHelpFileName )
+{
+  myModuleName = theModuleName;
+  myHelpFileName = theHelpFileName;
+}
+
+void VTKViewer_MarkerDlg::keyPressEvent( QKeyEvent* e )
+{
+  QtxDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+    return;
+
+  if ( e->key() == Qt::Key_F1 ) {
+    e->accept();
+    onHelp();
+  }
+}
+
+void VTKViewer_MarkerDlg::onHelp()
+{
+  if( myModuleName.isNull() || myHelpFileName.isNull() )
+    return;
+
+  SUIT_Application* app = SUIT_Session::session()->activeApplication();
+  if (app) 
+    app->onHelpContextModule(myModuleName, myHelpFileName);
+  else {
+    QString platform;
+#ifdef WIN32
+    platform = "winapplication";
+#else
+    platform = "application";
+#endif
+    SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
+                             tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
+                             arg(app->resourceMgr()->stringValue("ExternalBrowser", 
+                                                                 platform)).
+                             arg(myHelpFileName));
+  }
+}
+
 void VTKViewer_MarkerDlg::setCustomMarkerMap( VTK::MarkerMap theMarkerMap )
 {
   myMarkerWidget->setCustomMarkerMap( theMarkerMap );
index 8cbe935e6db4122ca5e736911eef2b7583352ee0..7e40c6131b00da4bba6a8e8e126bb7fbd262dec8 100644 (file)
@@ -39,6 +39,9 @@ public:
   VTKViewer_MarkerDlg( QWidget* = 0 );
   virtual ~VTKViewer_MarkerDlg();
 
+  void                    setHelpData( const QString& theModuleName,
+                                       const QString& theHelpFileName );
+
   void                    setCustomMarkerMap( VTK::MarkerMap );
   VTK::MarkerMap          getCustomMarkerMap();
 
@@ -48,8 +51,17 @@ public:
   VTK::MarkerScale        getStandardMarkerScale() const;
   int                     getCustomMarkerID() const;
 
+protected:
+  void                    keyPressEvent( QKeyEvent* );
+
+private slots:
+  void                    onHelp();
+
 private:
   VTKViewer_MarkerWidget* myMarkerWidget;
+
+  QString                 myModuleName;
+  QString                 myHelpFileName;
 };
 
 #endif
index 50ea7c8e32ee605d54834133a7a233502c844547..2a0458d22fe859b96e7f2fda6e27ea66126973a5 100644 (file)
@@ -126,7 +126,7 @@ VTKViewer_PolyDataMapper::VTKViewer_PolyDataMapper()
 {
   Q_INIT_RESOURCE( VTKViewer );
 
-  this->ExtensionsInitialized     = 0;
+  this->ExtensionsInitialized     = ES_None;
 
   this->PointSpriteTexture        = 0;
 
@@ -220,24 +220,18 @@ int VTKViewer_PolyDataMapper::GetMarkerTexture()
 }
 
 //-----------------------------------------------------------------------------
-bool VTKViewer_PolyDataMapper::InitExtensions()
+int VTKViewer_PolyDataMapper::InitExtensions()
 {
-  if( this->ExtensionsInitialized )
-    return true;
-
-  InitializeBufferExtensions();
-
   char* ext = (char*)glGetString( GL_EXTENSIONS );
   if( !IsBufferExtensionsInitialized ||
       strstr( ext, "GL_ARB_point_sprite" ) == NULL ||
       strstr( ext, "GL_ARB_vertex_buffer_object" ) == NULL )
   {
-    INFOS("Initializing ARB extensions failed");
-    return false;
+    MESSAGE("Initializing ARB extensions failed");
+    return ES_Error;
   }
 
-  this->ExtensionsInitialized = 1;
-  return true;
+  return ES_Ok;
 }
 
 //-----------------------------------------------------------------------------
@@ -296,7 +290,8 @@ void VTKViewer_PolyDataMapper::RenderPiece( vtkRenderer* ren, vtkActor* act )
   bool isUsePointSprites = this->MarkerEnabled && this->MarkerType != VTK::MT_NONE;
   if( isUsePointSprites )
   {
-    this->InitExtensions();
+    if( this->ExtensionsInitialized == ES_None )
+      this->ExtensionsInitialized = this->InitExtensions();
     this->InitPointSprites();
     this->InitTextures();
   }
@@ -542,7 +537,7 @@ int VTKViewer_PolyDataMapper::Draw( vtkRenderer* ren, vtkActor* act )
         delete aColorFunctor;
       }
 
-      if( this->ExtensionsInitialized ) {
+      if( this->ExtensionsInitialized == ES_Ok ) {
         GLuint aBufferObjectID = 0;
         vglGenBuffersARB( 1, &aBufferObjectID );
         vglBindBufferARB( GL_ARRAY_BUFFER_ARB, aBufferObjectID );
index 38b4838fb822990a80e4e0fc84ac5a14a739708a..9b936f8f9fb2b99e3bf27b857b860c0e33d0d765 100644 (file)
@@ -55,6 +55,9 @@ class vtkImageData;
  */
 class VTKVIEWER_EXPORT VTKViewer_PolyDataMapper : public MAPPER_SUPERCLASS
 {
+public:
+  enum ExtensionsState { ES_None = 0, ES_Error, ES_Ok };
+
 public:
   static VTKViewer_PolyDataMapper* New();
   vtkTypeRevisionMacro( VTKViewer_PolyDataMapper, MAPPER_SUPERCLASS );
@@ -88,7 +91,7 @@ protected:
   ~VTKViewer_PolyDataMapper();
 
   //! Initializing OpenGL extensions.
-  bool              InitExtensions();
+  int               InitExtensions();
 
   //! Activate Point Sprites.
   void              InitPointSprites();