X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_PriorityTableModel.cxx;h=6e2e46cd14efa289ff6f55974fd52cf78f5d89bd;hb=d6e19029f8b41f295db878e9aecf451c2edda4af;hp=16023dad5bfd8c71d1d23d4facc3daab4089583b;hpb=5a4cb1fb4122437e235eac790670e36e61de852e;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_PriorityTableModel.cxx b/src/HYDROGUI/HYDROGUI_PriorityTableModel.cxx index 16023dad..6e2e46cd 100644 --- a/src/HYDROGUI/HYDROGUI_PriorityTableModel.cxx +++ b/src/HYDROGUI/HYDROGUI_PriorityTableModel.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,13 +18,15 @@ #include "HYDROGUI_PriorityTableModel.h" +#include /** Constructor. @param theParent the parent object */ HYDROGUI_PriorityTableModel::HYDROGUI_PriorityTableModel( QObject* theParent ) - : QAbstractTableModel( theParent ) + : QAbstractTableModel( theParent ), + myColumnCount( 4 ) { } @@ -87,7 +85,7 @@ QVariant HYDROGUI_PriorityTableModel::data( const QModelIndex &theIndex, int the if ( aColumn == 0 || aColumn == 2 ) { QStringList aNames; HYDROData_CustomRule aRule = myRules.at( aRow ); - Handle(HYDROData_Object) aUsedObject = aColumn == 0 ? aRule.Object2 : aRule.Object1; + Handle(HYDROData_Entity) aUsedObject = aColumn == 0 ? aRule.Object2 : aRule.Object1; if ( !aUsedObject.IsNull() ) { aNames = getAvailablePairs( aUsedObject ); } @@ -126,9 +124,9 @@ bool HYDROGUI_PriorityTableModel::setData( const QModelIndex & theIndex, const Q int aColumn = theIndex.column(); if ( aColumn == 0 || aColumn == 2 ) { - Handle(HYDROData_Object) anObject; + Handle(HYDROData_Entity) anObject; QString anObjName = theValue.toString(); - foreach ( const Handle(HYDROData_Object) anObj, myObjects ) { + foreach ( const Handle(HYDROData_Entity) anObj, myObjects ) { if ( anObj->GetName() == anObjName ) { anObject = anObj; break; @@ -171,7 +169,7 @@ int HYDROGUI_PriorityTableModel::rowCount( const QModelIndex &theParent ) const */ int HYDROGUI_PriorityTableModel::columnCount( const QModelIndex &theParent ) const { - return 4; + return myColumnCount; } /** @@ -219,7 +217,10 @@ QVariant HYDROGUI_PriorityTableModel::headerData( int theSection, aData = tr( "OBJECT2" ); break; case 3: - aData = tr( "BATHYMETRY" ); + { + if ( getObjectsKind() != KIND_LAND_COVER ) + aData = tr( "BATHYMETRY" ); + } break; }; } else if ( theOrientation == Qt::Vertical ) { @@ -230,21 +231,22 @@ 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& theObjects ) +void HYDROGUI_PriorityTableModel::setObjects( const QList& theObjects ) { myObjects = theObjects; - + beginResetModel(); // Remove rules which use objects which are no longer available + QStringList aNames = getAvailableObjectNames(); QMutableListIterator anIter( myRules ); while ( anIter.hasNext() ) { HYDROData_CustomRule aRule = anIter.next(); - if ( !myObjects.contains( aRule.Object1 ) || - !myObjects.contains( aRule.Object2 ) ) { + if ( !aNames.contains( aRule.Object1->GetName() ) || + !aNames.contains( aRule.Object2->GetName() ) ) { anIter.remove(); } } @@ -261,20 +263,24 @@ bool HYDROGUI_PriorityTableModel::createNewRule() if ( !canCreateNewRule() ) { return false; } - + // Existing pairs of object indexes + QStringList aNames = getAvailableObjectNames(); QList< QPair > aRules; foreach( const HYDROData_CustomRule& aRule, getRules() ) { - int anIndex1 = myObjects.indexOf( aRule.Object1 ); - int anIndex2 = myObjects.indexOf( aRule.Object2 ); + int anIndex1 = aNames.indexOf( aRule.Object1->GetName() ); + int anIndex2 = aNames.indexOf( aRule.Object2->GetName() ); if ( anIndex1 >= 0 && anIndex2 >= 0 ) { aRules << QPair( anIndex1, anIndex2 ); aRules << QPair( anIndex2, anIndex1 ); } } - // Try to find new pair of objects - Handle(HYDROData_Object) anObject1, anObject2; + // Try to find: + // 1. the new pair of objects + // 2. the priority type corresponding to the objects order + Handle(HYDROData_Entity) anObject1, anObject2; + HYDROData_PriorityType aPriorityType = GREATER; int aNbObjects = myObjects.count(); for ( int anIndex1 = 0; anIndex1 < aNbObjects; anIndex1++ ) { @@ -288,6 +294,9 @@ bool HYDROGUI_PriorityTableModel::createNewRule() if ( !aRules.contains( QPair( anIndex1, anIndex2 ) ) ) { anObject1 = myObjects.at( anIndex1 ); anObject2 = myObjects.at( anIndex2 ); + if ( anIndex1 > anIndex2 ) { + aPriorityType = LESS; + } isFound = true; break; } @@ -305,7 +314,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(); @@ -368,14 +377,13 @@ bool HYDROGUI_PriorityTableModel::removeAll() @param theObject the object @return the list of object names */ -QStringList HYDROGUI_PriorityTableModel::getAvailablePairs( const Handle(HYDROData_Object)& theObject ) const +QStringList HYDROGUI_PriorityTableModel::getAvailablePairs( const Handle(HYDROData_Entity)& theObject ) const { QStringList aNames; - foreach ( const Handle(HYDROData_Object) anObj, myObjects ) { - if ( !anObj.IsNull() && anObj->GetName() != theObject->GetName() ) { - aNames << anObj->GetName(); - } + if ( !theObject.IsNull() ) { + aNames = getAvailableObjectNames(); + aNames.removeAll( theObject->GetName() ); } return aNames; @@ -443,8 +451,8 @@ QString HYDROGUI_PriorityTableModel::mergeTypeToString( const int theMergeType ) Check if the given pair of objects is already used. @return true if the pair is used */ -bool HYDROGUI_PriorityTableModel::isUsed( const Handle(HYDROData_Object)& theObj1, - const Handle(HYDROData_Object)& theObj2 ) const +bool HYDROGUI_PriorityTableModel::isUsed( const Handle(HYDROData_Entity)& theObj1, + const Handle(HYDROData_Entity)& theObj2 ) const { bool isUsed = false; @@ -459,4 +467,43 @@ bool HYDROGUI_PriorityTableModel::isUsed( const Handle(HYDROData_Object)& theObj } return isUsed; -} \ No newline at end of file +} + +/** + Get available object names. + @return the list of object names + */ +QStringList HYDROGUI_PriorityTableModel::getAvailableObjectNames() const +{ + QStringList aNames; + + foreach ( const Handle(HYDROData_Entity) anObj, myObjects ) { + if ( !anObj.IsNull() ) { + aNames << anObj->GetName(); + } + } + + return aNames; +} + +/** + Set number of columns in the table. + @param theColumnCount the number of columns + */ +void HYDROGUI_PriorityTableModel::setColumnCount( int theColumnCount ) +{ + myColumnCount = theColumnCount; +} + +/** + Get type of objects for which rules are defined assuming, + that all objects in the list have the same type. + @return the type of objects + */ +const ObjectKind HYDROGUI_PriorityTableModel::getObjectsKind() const +{ + if ( myObjects.isEmpty() ) + return KIND_UNKNOWN; + + return myObjects.at( 0 )->GetKind(); +}