]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
New calculation case dialog layout is implemented. Two lists of geometry objects...
authorrkv <rkv@opencascade.com>
Mon, 11 Nov 2013 07:27:21 +0000 (07:27 +0000)
committerrkv <rkv@opencascade.com>
Mon, 11 Nov 2013 07:27:21 +0000 (07:27 +0000)
src/HYDROGUI/HYDROGUI_CalculationDlg.cxx
src/HYDROGUI/HYDROGUI_CalculationDlg.h
src/HYDROGUI/HYDROGUI_CalculationOp.cxx
src/HYDROGUI/HYDROGUI_CalculationOp.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 9b53a2499e4713e20e8ee912a51c05189650f139..76c0a83d071d33b2eb886a79c36a080127366f4c 100644 (file)
@@ -91,43 +91,71 @@ QWizardPage* HYDROGUI_CalculationDlg::createObjectsPage() {
   connect( myValidator, SIGNAL( emptyName() ), SLOT( onEmptyName() ) );
   connect( myValidator, SIGNAL( alreadyExists( QString ) ), SLOT( onAlreadyExists( QString ) ) );
 
+  myPolylineName = new QComboBox( aPage );
+
   myGeomObjects = new QListWidget( aPage );
   myGeomObjects->setSelectionMode( QListWidget::SingleSelection );
   myGeomObjects->setEditTriggers( QListWidget::NoEditTriggers );
   myGeomObjects->setViewMode( QListWidget::ListMode );
   myGeomObjects->setSortingEnabled( true );
 
+  myAvailableGeomObjects = new QListWidget( aPage );
+  myAvailableGeomObjects->setSelectionMode( QListWidget::SingleSelection );
+  myAvailableGeomObjects->setEditTriggers( QListWidget::NoEditTriggers );
+  myAvailableGeomObjects->setViewMode( QListWidget::ListMode );
+  myAvailableGeomObjects->setSortingEnabled( true );
+
   connect( myGeomObjects, SIGNAL( currentTextChanged( const QString & ) ), 
     SIGNAL( objectSelected( const QString & ) ) );
 
-  QFrame* aBtnsFrame = new QFrame( aPage );
+  QFrame* anObjectsFrame = new QFrame( aPage );
+  QGridLayout* anObjsLayout = new QGridLayout( anObjectsFrame );
+  anObjsLayout->setMargin( 5 );
+  anObjsLayout->setSpacing( 5 );
+  anObjectsFrame->setLayout( anObjsLayout );
+
+  QFrame* aBtnsFrame = new QFrame( anObjectsFrame );
   QVBoxLayout* aBtnsLayout = new QVBoxLayout( aBtnsFrame );
   aBtnsLayout->setMargin( 5 );
   aBtnsLayout->setSpacing( 5 );
   aBtnsFrame->setLayout( aBtnsLayout );
-  QPushButton* anAddBtn = new QPushButton( tr("ADD"), aBtnsFrame );
-  QPushButton* aRemoveBtn = new QPushButton( tr("REMOVE"), aBtnsFrame );
+  QPushButton* anAddBtn = new QPushButton( tr("INCLUDE"), aBtnsFrame );
+  QPushButton* aRemoveBtn = new QPushButton( tr("EXCLUDE"), aBtnsFrame );
+
+  // Fill the butons frame with two buttons
   aBtnsLayout->addWidget( anAddBtn );
   aBtnsLayout->addWidget( aRemoveBtn );
   aBtnsLayout->addStretch( 1 );
 
+  QLabel* anIncludedLabel = new QLabel( tr( "INCLUDED_OBJECTS" ), anObjectsFrame );
+  QLabel* anObjectsLabel = new QLabel( tr( "CALCULATION_REFERENCE_OBJECTS" ), anObjectsFrame );
+
+  // Fill the objects frame with two lists, two labels and with buttons frame
+  anObjsLayout->addWidget( anObjectsLabel, 0, 0, Qt::AlignHCenter );
+  anObjsLayout->addWidget( anIncludedLabel, 0, 2, Qt::AlignHCenter );
+  anObjsLayout->addWidget( myAvailableGeomObjects, 1, 0, Qt::AlignHCenter );
+  anObjsLayout->addWidget( aBtnsFrame, 1, 1, Qt::AlignHCenter );
+  anObjsLayout->addWidget( myGeomObjects, 1, 2, Qt::AlignHCenter );
+
+
   QLabel* aNameLabel = new QLabel( tr( "NAME" ), aPage );
-  QLabel* anObjectsLabel = new QLabel( tr( "CALCULATION_REFERENCE_OBJECTS" ), aPage );
+  QLabel* aLimitsLabel = new QLabel( tr( "LIMITS" ), aPage );
 
-  QGridLayout* aZonesLayout = new QGridLayout( aPage );
-  aZonesLayout->setMargin( 5 );
-  aZonesLayout->setSpacing( 5 );
-  aZonesLayout->setVerticalSpacing( 10 );
-  aZonesLayout->addWidget( aNameLabel,     0, 0, Qt::AlignHCenter );
-  aZonesLayout->addWidget( myObjectName,   0, 1 );
-  aZonesLayout->addWidget( anObjectsLabel, 1, 0, Qt::AlignHCenter );
-  aZonesLayout->addWidget( myGeomObjects,  1, 1, 2, 1 );
-  aZonesLayout->addWidget( aBtnsFrame,     2, 0, Qt::AlignHCenter );
+  // Fill the page
+  QGridLayout* aPageLayout = new QGridLayout( aPage );
+  aPageLayout->setMargin( 5 );
+  aPageLayout->setSpacing( 5 );
+  aPageLayout->setVerticalSpacing( 10 );
+  aPageLayout->addWidget( aNameLabel,     0, 0, Qt::AlignHCenter );
+  aPageLayout->addWidget( myObjectName,   0, 1 );
+  aPageLayout->addWidget( aLimitsLabel,   1, 0, Qt::AlignHCenter );
+  aPageLayout->addWidget( myPolylineName, 1, 1 );
+  aPageLayout->addWidget( anObjectsFrame, 2, 0, 1, 2, Qt::AlignHCenter );
 
-  aPage->setLayout( aZonesLayout );
+  aPage->setLayout( aPageLayout );
 
-  connect( anAddBtn, SIGNAL( clicked() ), this, SIGNAL( addObjects() ) );
-  connect( aRemoveBtn, SIGNAL( clicked() ), this, SIGNAL( removeObjects() ) );
+  connect( anAddBtn, SIGNAL( clicked() ), SIGNAL( addObjects() ) );
+  connect( aRemoveBtn, SIGNAL( clicked() ), SIGNAL( removeObjects() ) );
 
   return aPage;
 }
@@ -278,16 +306,59 @@ QString HYDROGUI_CalculationDlg::getObjectName() const
   return myObjectName->text();
 }
 
-void HYDROGUI_CalculationDlg::setGeomObjects( const QStringList& theObjects )
+void HYDROGUI_CalculationDlg::includeGeomObjects( const QStringList& theObjects )
 {
-  myGeomObjects->clear();
+  QList<QListWidgetItem*> aFoundItems;
+  int anIdx;
+  QListWidgetItem* anItem;
 
   for ( int i = 0, n = theObjects.length(); i < n; ++i )
   {
     QString anObjName = theObjects.at( i );
+    aFoundItems = myAvailableGeomObjects->findItems( anObjName, Qt::MatchExactly );
+    for ( anIdx = 0; anIdx < aFoundItems.length(); anIdx++ )
+    {
+      anItem = aFoundItems.at( anIdx );
+      // Remove this object from available objects list
+      anItem = myAvailableGeomObjects->takeItem( myAvailableGeomObjects->row( anItem ) );
+      // Add the item to the included objects list
+      myGeomObjects->addItem( anItem );
+    }
+  }
+}
 
-    QListWidgetItem* aListItem = new QListWidgetItem( anObjName, myGeomObjects );
+void HYDROGUI_CalculationDlg::excludeGeomObjects( const QStringList& theObjects )
+{
+  QList<QListWidgetItem*> aFoundItems;
+  int anIdx;
+  QListWidgetItem* anItem;
+
+  for ( int i = 0, n = theObjects.length(); i < n; ++i )
+  {
+    QString anObjName = theObjects.at( i );
+    aFoundItems = myGeomObjects->findItems( anObjName, Qt::MatchExactly );
+    for ( anIdx = 0; anIdx < aFoundItems.length(); anIdx++ )
+    {
+      anItem = aFoundItems.at( anIdx );
+      // Remove this object from included objects list
+      anItem = myGeomObjects->takeItem( myGeomObjects->row( anItem ) );
+      // Add the item to the excluded objects list
+      myAvailableGeomObjects->addItem( anItem );
+    }
+  }
+}
+
+void HYDROGUI_CalculationDlg::setAllGeomObjects( const QStringList& theObjects, const QStringList& theObjectsEntries )
+{
+  myAvailableGeomObjects->clear();
+
+  for ( int i = 0, n = theObjects.length(); i < n; ++i )
+  {
+    QString anObjName = theObjects.at( i );
+
+    QListWidgetItem* aListItem = new QListWidgetItem( anObjName, myAvailableGeomObjects );
     aListItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
+    aListItem->setData( Qt::UserRole, theObjectsEntries.at( i ) );
   }
 }
 
@@ -302,6 +373,17 @@ QStringList HYDROGUI_CalculationDlg::getSelectedGeomObjects() const
   return aResList;
 }
 
+QStringList HYDROGUI_CalculationDlg::getSelectedAvailableGeomObjects() const
+{
+  QStringList aResList;
+  QList<QListWidgetItem*> aList = myAvailableGeomObjects->selectedItems();
+  for ( int i = 0, n = aList.length(); i < n; ++i )
+  {
+    aResList.append( aList.at( i )->text() );
+  }
+  return aResList;
+}
+
 void HYDROGUI_CalculationDlg::setEditedObject( const Handle(HYDROData_CalculationCase) theCase )
 {
   myEditedObject = theCase;
index 11d38363ba97aa92df0abc70e6bd42ac659f64f9..d13c665121506edfd34f00e0455ee1e1581ad7f4 100644 (file)
@@ -53,11 +53,14 @@ public:
 
   void                       setEditedObject( const Handle(HYDROData_CalculationCase) theCase );
 
-  void                       setGeomObjects( const QStringList& theObjects );
+  void                       setAllGeomObjects( const QStringList& theObjects, const QStringList& theObjectsEntries );
   QStringList                getSelectedGeomObjects() const;
+  QStringList                getSelectedAvailableGeomObjects() const;
   HYDROGUI_Zone*             getCurrentZone() const;
 
 public slots:
+  void                       includeGeomObjects( const QStringList& theObjects );
+  void                       excludeGeomObjects( const QStringList& theObjects );
   void                       onEmptyName();
   void                       onAlreadyExists( QString theName );
   void                       refreshZonesBrowser();
@@ -95,6 +98,9 @@ private:
   QLineEdit*                 myObjectName;
   HYDROGUI_NameValidator*    myValidator;
 
+  QComboBox*                 myPolylineName;
+
+  QListWidget*               myAvailableGeomObjects;
   QListWidget*               myGeomObjects;
 
   HYDROGUI_DataBrowser*      myBrowser;
index b9089a7feb34ed047277060c737f43abaa07b027..2e5b2de48ea287f78f7c1750d764d9def52a432d 100644 (file)
@@ -76,6 +76,11 @@ void HYDROGUI_CalculationOp::startOperation()
     return;
 
   aPanel->reset();
+  QStringList aList;
+  QStringList anEntryList;
+  HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetGeometryObjects( module() );
+  getNamesAndEntries( aSeq, aList, anEntryList );
+  aPanel->setAllGeomObjects( aList, anEntryList );
 
   QString anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), "Case" );
 
@@ -88,7 +93,9 @@ void HYDROGUI_CalculationOp::startOperation()
     if ( !myEditedObject.IsNull() )
     {
       anObjectName = myEditedObject->GetName();
-      updateGeomObjectsList(aPanel);
+      aSeq = myEditedObject->GetGeometryObjects();
+      getNamesAndEntries( aSeq, aList, anEntryList );
+      aPanel->includeGeomObjects( aList );
     }
   }
   else
@@ -104,14 +111,14 @@ void HYDROGUI_CalculationOp::startOperation()
   createPreview();
 }
 
-void HYDROGUI_CalculationOp::updateGeomObjectsList( HYDROGUI_CalculationDlg* thePanel ) const
+void HYDROGUI_CalculationOp::getNamesAndEntries( const HYDROData_SequenceOfObjects& theSeq, 
+                                                QStringList& theNames, QStringList& theEntries ) const
 {
   Handle(HYDROData_Object) anObject;
   Handle(HYDROData_Entity) anEntity;
-  QStringList aList;
-  // Update the list in the dialog
-  HYDROData_SequenceOfObjects aSeq = myEditedObject->GetGeometryObjects();
-  HYDROData_SequenceOfObjects::Iterator anIter( aSeq );
+  theNames.clear();
+  theEntries.clear();
+  HYDROData_SequenceOfObjects::Iterator anIter( theSeq );
   for ( ; anIter.More(); anIter.Next() )
   {
     anEntity = anIter.Value();
@@ -120,11 +127,11 @@ void HYDROGUI_CalculationOp::updateGeomObjectsList( HYDROGUI_CalculationDlg* the
       anObject = Handle(HYDROData_Object)::DownCast( anEntity );
       if ( !anObject.IsNull() )
       {
-        aList.append( anObject->GetName() );
+        theNames.append( anObject->GetName() );
+        theEntries.append( HYDROGUI_DataObject::dataObjectEntry( anObject ) );
       }
     }
   }
-  thePanel->setGeomObjects( aList );
 }
 
 void HYDROGUI_CalculationOp::abortOperation()
@@ -322,33 +329,36 @@ void HYDROGUI_CalculationOp::onSetMergeType( int theMergeType, QString& theBathy
 
 void HYDROGUI_CalculationOp::onAddObjects()
 {
-  // Add geometry objects selected in the module browser to the calculation case
-  Handle(HYDROData_Object) anObject;
-  Handle(HYDROData_Entity) anEntity;
-  QStringList aList;
-  HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( module() );
-  for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ )
+  HYDROGUI_CalculationDlg* aPanel = 
+    ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
+  if ( aPanel )
   {
-    anEntity = aSeq.Value( anIndex );
-    if ( !anEntity.IsNull() )
+    // Add geometry objects selected in the module browser to the calculation case
+    Handle(HYDROData_Object) anObject;
+    Handle(HYDROData_Entity) anEntity;
+    QStringList aList;
+    QStringList aSelectedList = aPanel->getSelectedAvailableGeomObjects();
+    for (int i = 0; i < aSelectedList.length(); i++)
     {
-      anObject = Handle(HYDROData_Object)::DownCast( anEntity );
-      if( !anObject.IsNull() )
+      anEntity = HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at(i) );
+      if ( !anEntity.IsNull() )
       {
-        if (myEditedObject->AddGeometryObject( anObject ))
+        anObject = Handle(HYDROData_Object)::DownCast( anEntity );
+        if ( !anObject.IsNull() )
         {
-          aList.append( anObject->GetName() );
+          if (myEditedObject->AddGeometryObject( anObject ))
+          {
+            aList.append( anObject->GetName() );
+          }
         }
       }
     }
+    if ( !aList.isEmpty() )
+    {
+      aPanel->includeGeomObjects( aList );
+      createPreview();
+    }
   }
-  HYDROGUI_CalculationDlg* aPanel = 
-    ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
-  if ( aPanel )
-  {
-    updateGeomObjectsList( aPanel );
-  }
-  createPreview();
 }
 
 void HYDROGUI_CalculationOp::onRemoveObjects()
@@ -374,7 +384,10 @@ void HYDROGUI_CalculationOp::onRemoveObjects()
         }
       }
     }
-    updateGeomObjectsList( aPanel );
+    if ( !aList.isEmpty() )
+    {
+      aPanel->excludeGeomObjects( aList );
+    }
   }
 }
 
index cba6529c74a4573a2b920d04186d015fb1d902e0..19dce657c11d2ac53e299f36b1ae67874a77ccad 100644 (file)
@@ -97,9 +97,10 @@ protected slots:
 private:
   void                            createPreview();
   void                            closePreview();
-  void                            updateGeomObjectsList( HYDROGUI_CalculationDlg* thePanel ) const;
   void                            showObject( Handle(HYDROData_Entity) theEntity, Handle(AIS_InteractiveContext) theCtx );
   void                            setZonesVisible( bool theIsVisible );
+  void                            getNamesAndEntries( const HYDROData_SequenceOfObjects& theSeq, 
+                                                QStringList& theNames, QStringList& theEntries ) const;
 
 private:
   bool                            myIsEdit;
index 460a6f2231d81b1c650875e5c0bd0e6cdf3bb6bb..bb8bf240fd962cb868ff2fa7259105592cee7a09 100644 (file)
@@ -88,6 +88,14 @@ does not exist or you have not enough permissions to open it.</translation>
       <source>CALCULATION_REFERENCE_OBJECTS</source>
       <translation>Objects</translation>
     </message>
+    <message>
+      <source>INCLUDED_OBJECTS</source>
+      <translation>Included objects</translation>
+    </message>
+    <message>
+      <source>LIMITS</source>
+      <translation>Limits</translation>
+    </message>
     <message>
       <source>NAME</source>
       <translation>Name</translation>
@@ -97,12 +105,12 @@ does not exist or you have not enough permissions to open it.</translation>
       <translation>Bathymetry</translation>
     </message>
     <message>
-      <source>ADD</source>
-      <translation>Add</translation>
+      <source>INCLUDE</source>
+      <translation>Include &gt;&gt;</translation>
     </message>
     <message>
-      <source>REMOVE</source>
-      <translation>Remove</translation>
+      <source>EXCLUDE</source>
+      <translation>Exclude &lt;&lt;</translation>
     </message>
   </context>