X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_DataObject.cxx;h=f68c26e692f4999d207bfd8e927c067ed1a6b0d1;hb=c16caee6b6e61dffbc739dce6639215b24a459d3;hp=e060a5ac8692b4ea05527dfb35005ec4900b5c54;hpb=3be929a2da8f7d604c9aacd64d95ce6eab850b76;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_DataObject.cxx b/src/HYDROGUI/HYDROGUI_DataObject.cxx index e060a5ac..f68c26e6 100644 --- a/src/HYDROGUI/HYDROGUI_DataObject.cxx +++ b/src/HYDROGUI/HYDROGUI_DataObject.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,29 +18,45 @@ #include "HYDROGUI_DataObject.h" -#include -#include +#include +#include #include -#include +#include +#include +#include + +#include #include +#include +#include +#include +#include +#include +#include -#include +#include +#include HYDROGUI_DataObject::HYDROGUI_DataObject( SUIT_DataObject* theParent, Handle(HYDROData_Entity) theData, - const QString& theParentEntry ) + const QString& theParentEntry, + const bool theIsInOperation ) : CAM_DataObject( theParent ), +#ifndef TEST_MODE LightApp_DataObject( theParent ), +#endif myData( theData ), - myParentEntry( theParentEntry ) + myParentEntry( theParentEntry ), + myIsValid( true ), + myIsInOperation( theIsInOperation ) { } QString HYDROGUI_DataObject::entry() const { QString anEntry = HYDROGUI_DataObject::dataObjectEntry( modelObject() ); - if( isReference() ) + if( !refEntry().isEmpty() ) anEntry.prepend( myParentEntry + "_" ); return anEntry; } @@ -65,66 +77,149 @@ QString HYDROGUI_DataObject::name() const QFont HYDROGUI_DataObject::font( const int theId ) const { - QFont aFont = LightApp_DataObject::font( theId ); + QFont aFont = PARENT::font( theId ); if( theId == NameId ) { - Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( modelObject() ); - if( !anImage.IsNull() && anImage->MustBeUpdated() ) + Handle(HYDROData_Entity) aDataObject = modelObject(); + if( !aDataObject.IsNull() && aDataObject->IsMustBeUpdated( HYDROData_Entity::Geom_All ) ) + { aFont.setItalic( true ); + aFont.setBold( true ); + } } return aFont; } -QString HYDROGUI_DataObject::text( const int theColumnId ) const +QColor HYDROGUI_DataObject::color( const ColorRole theRole, const int theId ) const { - QString aRes; - if( !myData.IsNull() ) + QColor aColor; + + if ( !isValid() ) { + switch ( theRole ) + { + case Text: + case Foreground: + case Highlight: + aColor = Qt::red; // red + break; + case HighlightedText: + // text color for the highlighted item + aColor = Qt::white; // white + break; + + default: + break; + } + } + + if ( !aColor.isValid() ) { - if ( theColumnId == RefObjectId || theColumnId == BathymetryId ) + Handle(HYDROData_Entity) aDataObject = modelObject(); + if( !aDataObject.IsNull() && aDataObject->IsMustBeUpdated( HYDROData_Entity::Geom_All ) ) { - Handle(HYDROData_Zone) aZone = Handle(HYDROData_Zone)::DownCast( myData ); - if ( !aZone.IsNull() ) - { - HYDROData_SequenceOfObjects aSeq = aZone->GetGeometryObjects(); - HYDROData_SequenceOfObjects::Iterator anIter( aSeq ); - for ( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_Object) aRefGeomObj = - Handle(HYDROData_Object)::DownCast( anIter.Value() ); - if ( !aRefGeomObj.IsNull() ) - { - switch ( theColumnId ) - { - case RefObjectId: - // Get Ref.Object name - aRes += aRefGeomObj->GetName() + ", "; - break; - case BathymetryId: - // Get bathymetry name - aRes += aRefGeomObj->GetBathymetry()->GetName(); - } - } - } - } - if ( aRes.length() > 1 ) + switch ( theRole ) { - aRes.remove( aRes.length() - 2, 2 ); + case Text: + case Foreground: + case Highlight: + aColor = Qt::blue; // color for objects which need updating + break; + case HighlightedText: + // text color for the highlighted item + aColor = Qt::white; // white + break; + + default: + break; } } - else - { - aRes = LightApp_DataObject::text( theColumnId ); - } } - return aRes; + + if ( !aColor.isValid() ) { + aColor = PARENT::color( theRole, theId ); + } + + return aColor; } -QColor HYDROGUI_DataObject::color( const ColorRole theColorRole, const int theColumnId ) const +QPixmap HYDROGUI_DataObject::icon( const int theId ) const { - //TODO: Implement red color for bathymetry conflicts in case creation dialog - return LightApp_DataObject::color( theColorRole, theColumnId ); -} + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + if ( theId == NameId ) + { + QString anIcon; + Handle(HYDROData_Entity) aDataObject = modelObject(); + Handle(HYDROData_Object) anObject; + Handle(HYDROData_ArtificialObject) anAObject = Handle( HYDROData_ArtificialObject )::DownCast(aDataObject); + Handle(HYDROData_NaturalObject) aNObject = Handle( HYDROData_NaturalObject )::DownCast(aDataObject); + + if (!anAObject.IsNull()) + anObject = anAObject; + if (!aNObject.IsNull()) + anObject = aNObject; + + if( aDataObject.IsNull() ) + { + anIcon = QObject::tr( "HYDRO_TYPE0_ICO" ); // KIND_UNKNOWN + } + else + { + QString aNeedUpdate( aDataObject->IsMustBeUpdated( HYDROData_Entity::Geom_All ) ? "M_" : "" ); + int anObjectKind = (int)aDataObject->GetKind(); + bool IsUnsImmZone = false; + if ( anObjectKind == KIND_DUMMY_3D ) + { + Handle(HYDROData_DummyObject3D) anObject3D = + Handle(HYDROData_DummyObject3D)::DownCast( aDataObject ); + + Handle(HYDROData_Object) aFatherObj = anObject3D->GetObject(); + if ( !aFatherObj.IsNull() ) + anObjectKind = aFatherObj->GetKind(); + anIcon = QObject::tr( QString("HYDRO_%1TYPE%2_ICO").arg( aNeedUpdate ).arg( anObjectKind ).toLatin1() ); + } + else if ( !anObject.IsNull() ) + { + bool IsSubm = anObject->IsSubmersible(); + QString anIcon1 = QObject::tr( QString("HYDRO_%1TYPE%2_ICO").arg( aNeedUpdate ).arg( anObjectKind ).toLatin1() ); + QString anIcon2; + if (IsSubm) + anIcon2 = QObject::tr( QString("HYDRO_SUBMERSIBLE16_ICO").toLatin1()); + else + anIcon2 = QObject::tr( QString("HYDRO_UNSUBMERSIBLE16_ICO").toLatin1()); + + QPixmap qpm1 = aResMgr->loadPixmap( "HYDRO", anIcon1 ); + QPixmap qpm2 = aResMgr->loadPixmap( "HYDRO", anIcon2 ); + QPixmap qpmD(32,16); + qpmD.fill(QColor(0,0,0)); + QPainter painter; + painter.begin(&qpmD); + painter.drawPixmap(0, 0, qpm1); + painter.drawPixmap(16, 0, qpm2); + painter.end(); + return qpmD; + } + else if (anObjectKind == KIND_BC_POLYGON) + { + Handle(HYDROData_BCPolygon) aBCObj = Handle(HYDROData_BCPolygon)::DownCast( aDataObject ); + int aBT = aBCObj->GetBoundaryType(); + if (aBT == 1) + anIcon = QObject::tr( QString("HYDRO_BC_POLYGON_TYPE1_ICO").toLatin1()); + else if (aBT == 2) + anIcon = QObject::tr( QString("HYDRO_BC_POLYGON_TYPE2_ICO").toLatin1()); + else if (aBT == 3) + anIcon = QObject::tr( QString("HYDRO_BC_POLYGON_TYPE3_ICO").toLatin1()); + else + anIcon = QObject::tr( QString("HYDRO_BC_POLYGON_TYPE_UNDEF_ICO").toLatin1()); + } + else + anIcon = QObject::tr( QString("HYDRO_%1TYPE%2_ICO").arg( aNeedUpdate ).arg( anObjectKind ).toLatin1() ); + } + + return aResMgr->loadPixmap( "HYDRO", anIcon ); + } + return PARENT::icon( theId ); +} QString HYDROGUI_DataObject::dataObjectEntry( const Handle(HYDROData_Entity)& theObject, const bool theWithPrefix ) @@ -141,13 +236,63 @@ QString HYDROGUI_DataObject::dataObjectEntry( const Handle(HYDROData_Entity)& th return aEntryStr; } +void HYDROGUI_DataObject::setIsValid( const bool theIsValid ) +{ + myIsValid = theIsValid; +} + +bool HYDROGUI_DataObject::isValid() const +{ + return myIsValid; +} + +bool HYDROGUI_DataObject::renameAllowed( const int theColumnId ) const +{ + bool aRes = false; + if ( theColumnId == NameId && module()) + { + SUIT_Operation* anOp = module()->application()->activeStudy()->activeOperation(); + if ( anOp && anOp->inherits( "HYDROGUI_CalculationOp" ) ) + { + aRes = isInOperation(); + } + else + { + aRes = !anOp; + } + } + else + { + aRes = PARENT::renameAllowed( theColumnId ); + } + return aRes; +} + +void HYDROGUI_DataObject::updateBy( SUIT_DataObject* theObj ) +{ + HYDROGUI_DataObject* aDataObj = dynamic_cast( theObj ); + if( !aDataObj ) + return; + + myData = aDataObj->myData; + myParentEntry = aDataObj->myParentEntry; + myIsValid = aDataObj->myIsValid; + myIsInOperation = aDataObj->myIsInOperation; + myIcon = aDataObj->myIcon; + setModified( true ); +} + HYDROGUI_NamedObject::HYDROGUI_NamedObject( SUIT_DataObject* theParent, const QString& theName, - const QString& theParentEntry ) + const QString& theParentEntry, + const bool theIsInOperation ) : CAM_DataObject( theParent ), +#ifndef TEST_MODE LightApp_DataObject( theParent ), +#endif myName( theName ), - myParentEntry( theParentEntry ) + myParentEntry( theParentEntry ), + myIsInOperation( theIsInOperation ) { } @@ -161,5 +306,55 @@ QString HYDROGUI_NamedObject::entry() const QString HYDROGUI_NamedObject::name() const { - return myName; + return myName.toUpper(); +} + +QPixmap HYDROGUI_NamedObject::icon( const int theId ) const +{ + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + if ( theId == NameId ) + { + return aResMgr->loadPixmap( "HYDRO", QObject::tr( "PARTITION_ICO" ) ); + } + return PARENT::icon( theId ); +} + +QFont HYDROGUI_NamedObject::font( const int theId ) const +{ + QFont aFont = PARENT::font( theId ); + if( theId == NameId ) + { + if ( dynamic_cast( parent() ) ) + { + aFont.setBold( true ); + } + } + return aFont; +} + +void HYDROGUI_NamedObject::updateBy( SUIT_DataObject* theObj ) +{ + HYDROGUI_NamedObject* aNamedObj = dynamic_cast( theObj ); + if( !aNamedObj ) + return; + + myName = aNamedObj->myName; + myParentEntry = aNamedObj->myParentEntry; + myIcon = aNamedObj->myIcon; + myIsInOperation = aNamedObj->myIsInOperation; + setModified( true ); +} + + + + + + +HYDROGUI_DropTargetObject::HYDROGUI_DropTargetObject( SUIT_DataObject* theParent, + const QString& theName, + const QString& theParentEntry, + const bool theIsInOperation ) +: HYDROGUI_NamedObject( theParent, theName, theParentEntry, theIsInOperation ), + CAM_DataObject( theParent ) +{ }