]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Feature #477: Keep in Priority table order in Included objects field.
authormzn <mzn@opencascade.com>
Mon, 27 Oct 2014 11:47:01 +0000 (11:47 +0000)
committermzn <mzn@opencascade.com>
Mon, 27 Oct 2014 11:47:01 +0000 (11:47 +0000)
src/HYDROGUI/HYDROGUI_CalculationDlg.cxx
src/HYDROGUI/HYDROGUI_CalculationDlg.h
src/HYDROGUI/HYDROGUI_OrderedListWidget.cxx
src/HYDROGUI/HYDROGUI_OrderedListWidget.h
src/HYDROGUI/HYDROGUI_PriorityTableModel.cxx
src/HYDROGUI/HYDROGUI_PriorityWidget.cxx

index b57f38b174d013bbc0f74869cf6d500fd7bab739..9b2bfda7ae5aeae83e36fd5b4e90721592e8997d 100644 (file)
@@ -239,6 +239,8 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() {
   connect( anAddBtn, SIGNAL( clicked() ), SIGNAL( addObjects() ) );
   connect( aRemoveBtn, SIGNAL( clicked() ), SIGNAL( removeObjects() ) );
 
+  connect( myGeomObjects, SIGNAL( orderChanged() ), SLOT( onOrderChanged() ) );
+
   return aPage;
 }
 
@@ -723,8 +725,16 @@ HYDROData_ListOfRules HYDROGUI_CalculationDlg::getRules() const
 /**
   Set rules.
   @param theRules the list of rules
-*/
+ */
 void  HYDROGUI_CalculationDlg::setRules( const HYDROData_ListOfRules& theRules ) const
 {
   myPriorityWidget->setRules( theRules );
+}
+
+/**
+  Slot called when objects order is changed.
+ */
+void HYDROGUI_CalculationDlg::onOrderChanged()
+{
+  myPriorityWidget->setObjects( getGeometryObjects() );
 }
\ No newline at end of file
index 24604f33d7aeacc3356a5a554d4ba21e91677bef..5010b7d2cba7d697f1d04e205935d4ff4767c4c1 100644 (file)
@@ -89,6 +89,8 @@ public slots:
   void                       onAlreadyExists( QString theName );
   void                       refreshZonesBrowser();
   void                       onDataChanged();
+  void                       onOrderChanged();
+
   /**
    * Process items selection: hide/show bathymetry merge type selector.
    */
index b4bf9a1bc5b4ee6f2943eb7a30941261f538d3a8..8c23d22407f6d6e66af11030f07b6232f1d92615 100644 (file)
@@ -310,6 +310,8 @@ QStringList HYDROGUI_OrderedListWidget::getAllNames() const
 */
 void HYDROGUI_OrderedListWidget::onMove( int theType )
 {
+  bool isMoved = false;
+
   QSortFilterProxyModel* aFilterModel = dynamic_cast<QSortFilterProxyModel*>( myList->model() );
   if( aFilterModel ) {
     HYDROGUI_ListModel* aModel = dynamic_cast<HYDROGUI_ListModel*>( aFilterModel->sourceModel() );
@@ -320,10 +322,14 @@ void HYDROGUI_OrderedListWidget::onMove( int theType )
         aSelectedSourceIndexes << aFilterModel->mapToSource( anIndex );
       }
       QList<int> aSelectedIds = aModel->getIds( aSelectedSourceIndexes );
-      aModel->move( aSelectedIds, ( HYDROGUI_ListModel::OpType )theType, 
-                    !myIsHiddenObjectsShown );      
+      isMoved = aModel->move( aSelectedIds, ( HYDROGUI_ListModel::OpType )theType, 
+                              !myIsHiddenObjectsShown );
     }
   }
+
+  if ( isMoved ) {
+    emit orderChanged();
+  }
 }
 
 /**
index 39bf9ebe377fdd7d721e6fed892e908e82b2ef8f..31faba84e5bd73a273e23cd302fb9d1713e2b8ad 100644 (file)
@@ -64,6 +64,7 @@ public:
 
 signals:
   void selectionChanged();
+  void orderChanged();
 
 private slots:
   void onMove( int theType );
index 16023dad5bfd8c71d1d23d4facc3daab4089583b..22ae6a91af390c9713fd6ca09221bae1535c9f03 100644 (file)
@@ -230,8 +230,8 @@ QVariant HYDROGUI_PriorityTableModel::headerData( int theSection,
 }
 
 /**
-  Set objects which could be used for rules.
-  @param theObjects the list of objects
+  Set objects which could be used for rules definition.
+  @param theObjects the ordered list of objects
  */
 void HYDROGUI_PriorityTableModel::setObjects( const QList<Handle(HYDROData_Object)>& theObjects )
 {
@@ -273,8 +273,11 @@ bool HYDROGUI_PriorityTableModel::createNewRule()
     }
   }
     
-  // Try to find new pair of objects
+  // Try to find:
+  // 1. the new pair of objects 
+  // 2. the priority type corresponding to the objects order
   Handle(HYDROData_Object) anObject1, anObject2;
+  HYDROData_PriorityType aPriorityType = GREATER;
 
   int aNbObjects = myObjects.count();
   for ( int anIndex1 = 0; anIndex1 < aNbObjects; anIndex1++ ) {
@@ -288,6 +291,9 @@ bool HYDROGUI_PriorityTableModel::createNewRule()
       if ( !aRules.contains( QPair<int, int>( anIndex1, anIndex2 ) ) ) {
         anObject1 = myObjects.at( anIndex1 );
         anObject2 = myObjects.at( anIndex2 );
+        if ( anIndex1 > anIndex2 ) {
+          aPriorityType = LESS;
+        }
         isFound = true;
         break;
       }
@@ -305,7 +311,7 @@ bool HYDROGUI_PriorityTableModel::createNewRule()
     HYDROData_CustomRule aNewRule;
     aNewRule.Object1 = anObject1;
     aNewRule.Object2 = anObject2;
-    aNewRule.Priority = LESS;
+    aNewRule.Priority = aPriorityType;
     aNewRule.MergeType = HYDROData_Zone::Merge_ZMIN;
 
     beginResetModel();
index fe011338dd2644189f5b1cc74cb6282b5467a70c..1545f6673c9b16355f2f9705b7c669292ac93e73 100644 (file)
@@ -247,7 +247,8 @@ void HYDROGUI_PriorityWidget::onClearRules()
 }
 
 /**
-  Set objects.
+  Set objects which could be used for rules definition.
+  @param theObjects the ordered list of objects
  */
 void HYDROGUI_PriorityWidget::setObjects( const QList<Handle(HYDROData_Object)>& theObjects )
 {