Salome HOME
IMP 10199 (add Volume Control)
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_FilterDlg.cxx
index bf2863b..95f8ed3 100755 (executable)
@@ -428,7 +428,7 @@ QString SMESHGUI_FilterTable::Table::text (int row, int col) const
 // Purpose : Constructor
 //=======================================================================
 SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule,
-                                           QWidget* parent,
+                                            QWidget* parent,
                                             const int type)
 : QFrame(parent),
   myIsLocked( false ),
@@ -443,7 +443,7 @@ SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule,
 // Purpose : Constructor
 //=======================================================================
 SMESHGUI_FilterTable::SMESHGUI_FilterTable( SMESHGUI* theModule,
-                                           QWidget* parent,
+                                            QWidget* parent,
                                             const QValueList<int>& types)
 : QFrame(parent),
   myIsLocked( false ),
@@ -674,7 +674,7 @@ bool SMESHGUI_FilterTable::IsValid (const bool theMess, const int theEntityType)
          aCriterion == FT_BelongToGeom ||
          aCriterion == FT_BelongToPlane ||
          aCriterion == FT_BelongToCylinder ||
-        aCriterion == FT_LyingOnGeom) {
+         aCriterion == FT_LyingOnGeom) {
       if (aTable->text(i, 2).isEmpty()) {
         if (theMess)
           QMessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"),
@@ -984,7 +984,7 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
                   GetCriterionType(aRow) != FT_LyingOnGeom &&
                   GetCriterionType(aRow) != FT_RangeOfIds &&
                   GetCriterionType(aRow) != FT_FreeEdges &&
-                 GetCriterionType(aRow) != FT_BadOrientedVolume;
+                  GetCriterionType(aRow) != FT_BadOrientedVolume;
   if (!myAddWidgets.contains(anItem))
   {
     myAddWidgets[ anItem ] = new AdditionalWidget(myWgStack);
@@ -1065,10 +1065,10 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int col, con
     aTable->SetEditable(false, row, 2);
   }
   else if (aCriterionType == SMESH::FT_RangeOfIds ||
-            aCriterionType == SMESH::FT_BelongToGeom ||
-            aCriterionType == SMESH::FT_BelongToPlane ||
-            aCriterionType == SMESH::FT_BelongToCylinder ||
-           aCriterionType == SMESH::FT_LyingOnGeom)
+           aCriterionType == SMESH::FT_BelongToGeom ||
+           aCriterionType == SMESH::FT_BelongToPlane ||
+           aCriterionType == SMESH::FT_BelongToCylinder ||
+           aCriterionType == SMESH::FT_LyingOnGeom)
   {
     QMap<int, QString> aMap;
     aMap[ FT_EqualTo ] = tr("EQUAL_TO");
@@ -1314,6 +1314,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_BelongToGeom ] = tr("BELONG_TO_GEOM");
       aCriteria[ SMESH::FT_LyingOnGeom ] = tr("LYING_ON_GEOM");
       aCriteria[ SMESH::FT_BadOrientedVolume ] = tr("BAD_ORIENTED_VOLUME");
+      aCriteria[ SMESH::FT_Volume3D ] = tr("VOLUME_3D");
     }
     return aCriteria;
   }
@@ -1604,10 +1605,11 @@ SMESHGUI_FilterDlg::SMESHGUI_FilterDlg( SMESHGUI*              theModule,
 : QDialog( SMESH::GetDesktop( theModule ), theName, false,
            WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu),
      mySMESHGUI( theModule ),
-     mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
-     myViewWindow( SMESH::GetViewWindow( theModule ) ),
-     mySelector( myViewWindow->GetSelector() )
+     mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
 {
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    mySelector = aViewWindow->GetSelector();
+
   construct(theTypes);
 }
 
@@ -1623,8 +1625,8 @@ SMESHGUI_FilterDlg::SMESHGUI_FilterDlg( SMESHGUI*   theModule,
      mySMESHGUI( theModule ),
      mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
 {
-  myViewWindow = SMESH::GetViewWindow( theModule );
-  mySelector = myViewWindow->GetSelector();
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    mySelector = aViewWindow->GetSelector();
   QValueList<int> aTypes;
   aTypes.append(theType);
   construct(aTypes);
@@ -1885,7 +1887,8 @@ void SMESHGUI_FilterDlg::onClose()
         aResMap.Add(anIndMap(i));
 
       mySelector->AddOrRemoveIndex( anIter.Key(), aResMap, false);
-      myViewWindow->highlight( anIter.Key(), true, true );
+      if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+        aViewWindow->highlight( anIter.Key(), true, true );
     }
     mySelectionMgr->setSelectedObjects(aList, false);
   }
@@ -2036,9 +2039,9 @@ bool SMESHGUI_FilterDlg::isValid() const
   {
     int aType = myTable->GetCriterionType(i);
     if (aType == FT_BelongToGeom ||
-         aType == FT_BelongToPlane ||
-         aType == FT_BelongToCylinder ||
-        aType == FT_LyingOnGeom) {
+        aType == FT_BelongToPlane ||
+        aType == FT_BelongToCylinder ||
+        aType == FT_LyingOnGeom) {
       QString aName;
       myTable->GetThreshold(i, aName);
 
@@ -2190,15 +2193,10 @@ bool SMESHGUI_FilterDlg::createFilter (const int theType)
   aCriteria->length(n);
 
   long aPrecision = -1;
-  SUIT_ResourceMgr* mgr = SMESHGUI::resourceMgr();
+  SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
 
-  if (mgr && mgr->hasValue("SMESH", "ControlsPrecision")) {
-    QString aStr = mgr->stringValue("SMESH", "ControlsPrecision");
-    bool isOk = false;
-    int aVal = aStr.toInt(&isOk);
-    if (isOk)
-      aPrecision = aVal;
-  }
+  if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
+    aPrecision = mgr->integerValue( "SMESH", "controls_precision", aPrecision );
 
   for (CORBA::ULong i = 0; i < n; i++) {
     SMESH::Filter::Criterion aCriterion = createCriterion();
@@ -2366,12 +2364,13 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QValueList<int
 
   // Set new selection mode if necessary
   Selection_Mode aSelMode = getSelMode(theType);
-  if (myViewWindow->SelectionMode()!=aSelMode) {
+  SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
+  if ( aViewWindow && aViewWindow->SelectionMode()!=aSelMode) {
     mySelectionMgr->clearSelected();
     mySelectionMgr->clearFilters();
     if (aSelMode == NodeSelection)
       SMESH::SetPointRepresentation(true);
-    myViewWindow->SetSelectionMode(aSelMode);
+    aViewWindow->SetSelectionMode(aSelMode);
   }
 
   // Clear selection
@@ -2404,7 +2403,8 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QValueList<int
 
   // Set new selection
   mySelector->AddOrRemoveIndex(anIO, aMap, false);
-  myViewWindow->highlight( anIO, true, true );
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
+    aViewWindow->highlight( anIO, true, true );
 
   // insert previously stored filter in viewer if necessary
   if (!aFilter.IsNull())
@@ -2495,10 +2495,10 @@ void SMESHGUI_FilterDlg::updateSelection()
   int aRow, aCol;
 
   if (myTable->CurrentCell(aRow, aCol) &&
-       (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
-         myTable->GetCriterionType(aRow) == FT_BelongToPlane ||
-         myTable->GetCriterionType(aRow) == FT_BelongToCylinder ||
-        myTable->GetCriterionType(aRow) == FT_LyingOnGeom)) {
+      (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
+       myTable->GetCriterionType(aRow) == FT_BelongToPlane ||
+       myTable->GetCriterionType(aRow) == FT_BelongToCylinder ||
+       myTable->GetCriterionType(aRow) == FT_LyingOnGeom)) {
 
     if (myTable->GetCriterionType(aRow) == FT_BelongToGeom ||
         myTable->GetCriterionType(aRow) == FT_LyingOnGeom) {