From 791b55249f942e1b829a0cf693ed3adf2e25ba94 Mon Sep 17 00:00:00 2001 From: rkv Date: Mon, 11 Nov 2013 07:27:21 +0000 Subject: [PATCH] New calculation case dialog layout is implemented. Two lists of geometry objects are implemented - included and available. Limits polyline combobox is not yet filled and processed. --- src/HYDROGUI/HYDROGUI_CalculationDlg.cxx | 120 ++++++++++++++++++---- src/HYDROGUI/HYDROGUI_CalculationDlg.h | 8 +- src/HYDROGUI/HYDROGUI_CalculationOp.cxx | 69 ++++++++----- src/HYDROGUI/HYDROGUI_CalculationOp.h | 3 +- src/HYDROGUI/resources/HYDROGUI_msg_en.ts | 16 ++- 5 files changed, 163 insertions(+), 53 deletions(-) diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx index 9b53a249..76c0a83d 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.cxx @@ -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 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 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 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; diff --git a/src/HYDROGUI/HYDROGUI_CalculationDlg.h b/src/HYDROGUI/HYDROGUI_CalculationDlg.h index 11d38363..d13c6651 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationDlg.h +++ b/src/HYDROGUI/HYDROGUI_CalculationDlg.h @@ -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; diff --git a/src/HYDROGUI/HYDROGUI_CalculationOp.cxx b/src/HYDROGUI/HYDROGUI_CalculationOp.cxx index b9089a7f..2e5b2de4 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationOp.cxx +++ b/src/HYDROGUI/HYDROGUI_CalculationOp.cxx @@ -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( 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( 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 ); + } } } diff --git a/src/HYDROGUI/HYDROGUI_CalculationOp.h b/src/HYDROGUI/HYDROGUI_CalculationOp.h index cba6529c..19dce657 100644 --- a/src/HYDROGUI/HYDROGUI_CalculationOp.h +++ b/src/HYDROGUI/HYDROGUI_CalculationOp.h @@ -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; diff --git a/src/HYDROGUI/resources/HYDROGUI_msg_en.ts b/src/HYDROGUI/resources/HYDROGUI_msg_en.ts index 460a6f22..bb8bf240 100644 --- a/src/HYDROGUI/resources/HYDROGUI_msg_en.ts +++ b/src/HYDROGUI/resources/HYDROGUI_msg_en.ts @@ -88,6 +88,14 @@ does not exist or you have not enough permissions to open it. CALCULATION_REFERENCE_OBJECTS Objects + + INCLUDED_OBJECTS + Included objects + + + LIMITS + Limits + NAME Name @@ -97,12 +105,12 @@ does not exist or you have not enough permissions to open it. Bathymetry - ADD - Add + INCLUDE + Include >> - REMOVE - Remove + EXCLUDE + Exclude << -- 2.39.2