X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_PriorityTableModel.cxx;h=0b008616eb8ae6a49aee0c150043d076ce3f742e;hb=58bb6b7459bebeeb089c9ed486c4683a8bae7288;hp=6d737e3aa4b34fc8df467e39c5ffe854e4be1af9;hpb=6ec169685b405459c4e3a878b2d9f0abff95562f;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_PriorityTableModel.cxx b/src/HYDROGUI/HYDROGUI_PriorityTableModel.cxx index 6d737e3a..0b008616 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 ); } @@ -121,14 +119,17 @@ bool HYDROGUI_PriorityTableModel::setData( const QModelIndex & theIndex, const Q } bool aRes = false; - + if ( theRole == Qt::EditRole ) { + bool aRuleChanged = false; + myPrevRules = myRules; + 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; @@ -137,9 +138,16 @@ bool HYDROGUI_PriorityTableModel::setData( const QModelIndex & theIndex, const Q if ( !anObject.IsNull() ) { HYDROData_CustomRule anEditedRule = myRules[aRow]; + QString anEntryNew = HYDROGUI_DataObject::dataObjectEntry( anObject ); if ( aColumn == 0 ) { + QString anEntryOld = HYDROGUI_DataObject::dataObjectEntry( anEditedRule.Object1 ); + if ( anEntryOld != anEntryNew ) + aRuleChanged = true; anEditedRule.Object1 = anObject; } else { + QString anEntryOld = HYDROGUI_DataObject::dataObjectEntry( anEditedRule.Object2 ); + if ( anEntryOld != anEntryNew ) + aRuleChanged = true; anEditedRule.Object2 = anObject; } @@ -147,14 +155,24 @@ bool HYDROGUI_PriorityTableModel::setData( const QModelIndex & theIndex, const Q myRules[aRow] = anEditedRule; aRes = true; } else { + aRuleChanged = false; emit showError( tr("ALREADY_EXISTS") ); } } } else if ( aColumn == 1 ) { - myRules[aRow].Priority = (HYDROData_PriorityType)theValue.toInt(); + HYDROData_PriorityType aNewPriority = (HYDROData_PriorityType)theValue.toInt(); + if ( myRules[aRow].Priority != aNewPriority ) + aRuleChanged = true; + myRules[aRow].Priority = aNewPriority; } else if ( aColumn == 3 ) { - myRules[aRow].MergeType = (HYDROData_Zone::MergeAltitudesType)theValue.toInt();; + HYDROData_Zone::MergeType aNewMergeType = (HYDROData_Zone::MergeType)theValue.toInt(); + if ( myRules[aRow].MergeType != aNewMergeType ) + aRuleChanged = true; + myRules[aRow].MergeType = aNewMergeType; } + + if ( aRuleChanged ) + emit ruleChanged(); } return aRes; @@ -171,7 +189,7 @@ int HYDROGUI_PriorityTableModel::rowCount( const QModelIndex &theParent ) const */ int HYDROGUI_PriorityTableModel::columnCount( const QModelIndex &theParent ) const { - return 4; + return myColumnCount; } /** @@ -181,6 +199,7 @@ int HYDROGUI_PriorityTableModel::columnCount( const QModelIndex &theParent ) con void HYDROGUI_PriorityTableModel::setRules( const HYDROData_ListOfRules& theRules ) { beginResetModel(); + myPrevRules = myRules; myRules = theRules; endResetModel(); } @@ -219,7 +238,10 @@ QVariant HYDROGUI_PriorityTableModel::headerData( int theSection, aData = tr( "OBJECT2" ); break; case 3: - aData = tr( "BATHYMETRY" ); + { + if ( getObjectsKind() != KIND_LAND_COVER_MAP ) + aData = tr( "BATHYMETRY" ); + } break; }; } else if ( theOrientation == Qt::Vertical ) { @@ -233,10 +255,12 @@ QVariant HYDROGUI_PriorityTableModel::headerData( int theSection, 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; + myPrevRules = myRules; + beginResetModel(); // Remove rules which use objects which are no longer available @@ -278,7 +302,7 @@ bool HYDROGUI_PriorityTableModel::createNewRule() // Try to find: // 1. the new pair of objects // 2. the priority type corresponding to the objects order - Handle(HYDROData_Object) anObject1, anObject2; + Handle(HYDROData_Entity) anObject1, anObject2; HYDROData_PriorityType aPriorityType = GREATER; int aNbObjects = myObjects.count(); @@ -316,6 +340,8 @@ bool HYDROGUI_PriorityTableModel::createNewRule() aNewRule.Priority = aPriorityType; aNewRule.MergeType = HYDROData_Zone::Merge_ZMIN; + myPrevRules = myRules; + beginResetModel(); myRules << aNewRule; endResetModel(); @@ -350,6 +376,8 @@ bool HYDROGUI_PriorityTableModel::removeRows ( int theRow, int theCount, const Q aLastRow = myRules.count() - 1; } + myPrevRules = myRules; + beginRemoveRows( theParent, theRow, aLastRow ); // Remove the corresponding rules @@ -376,7 +404,7 @@ 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; @@ -450,8 +478,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; @@ -476,11 +504,43 @@ QStringList HYDROGUI_PriorityTableModel::getAvailableObjectNames() const { QStringList aNames; - foreach ( const Handle(HYDROData_Object) anObj, myObjects ) { + foreach ( const Handle(HYDROData_Entity) anObj, myObjects ) { if ( !anObj.IsNull() ) { aNames << anObj->GetName(); } } return aNames; -} \ No newline at end of file +} + +/** + Set number of columns in the table. + @param theColumnCount the number of columns + */ +void HYDROGUI_PriorityTableModel::setColumnCount( int theColumnCount ) +{ + myColumnCount = theColumnCount; +} + +/** + Undo last change in the list of priority rules. + */ +void HYDROGUI_PriorityTableModel::undoLastChange() +{ + beginResetModel(); + myRules = myPrevRules; + endResetModel(); +} + +/** + 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(); +}