X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_DataObject.cxx;h=e0183809bff9da876c0cd9f5bdcd50d93d4ed0e5;hb=5a485d8a51393f35f548a8397f9ba71fdeaaeb9b;hp=c1ff5a25008a4383774ac6ad7bdd369c08fdb270;hpb=d6aeef5b61d85b44493cd5d93ed9870cc513e68f;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_DataObject.cxx b/src/HYDROGUI/HYDROGUI_DataObject.cxx index c1ff5a25..e0183809 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,24 +18,47 @@ #include "HYDROGUI_DataObject.h" +#include +#include + +#include + #include +#include +#include +#include +#include +#include +#include + +#include HYDROGUI_DataObject::HYDROGUI_DataObject( SUIT_DataObject* theParent, - Handle(HYDROData_Object) theData ) + Handle(HYDROData_Entity) theData, + const QString& theParentEntry, + const bool theIsInOperation ) : CAM_DataObject( theParent ), LightApp_DataObject( theParent ), - myData( theData ) + myData( theData ), + myParentEntry( theParentEntry ), + myIsValid( true ), + myIsInOperation( theIsInOperation ) { - // unique identifier generated from pointer to this object, like: "HD_0x123457" - // "H" means "HYDRO", "D" means "data" to avoid conflicts with named objects - std::ostringstream aStream; - aStream << "HD_" << this; - myEntry = QString( aStream.str().c_str() ); } QString HYDROGUI_DataObject::entry() const { - return myEntry; + QString anEntry = HYDROGUI_DataObject::dataObjectEntry( modelObject() ); + if( isReference() ) + anEntry.prepend( myParentEntry + "_" ); + return anEntry; +} + +QString HYDROGUI_DataObject::refEntry() const +{ + if( !myParentEntry.isEmpty() ) + return HYDROGUI_DataObject::dataObjectEntry( modelObject() ); + return QString(); } QString HYDROGUI_DataObject::name() const @@ -49,44 +68,239 @@ QString HYDROGUI_DataObject::name() const return QString(); } -HYDROGUI_DataObject* HYDROGUI_DataObject::objectByEntry( const QString& theEntry ) +QFont HYDROGUI_DataObject::font( const int theId ) const +{ + QFont aFont = LightApp_DataObject::font( theId ); + if( theId == NameId ) + { + Handle(HYDROData_Entity) aDataObject = modelObject(); + if( !aDataObject.IsNull() && aDataObject->IsMustBeUpdated() ) + { + aFont.setItalic( true ); + aFont.setBold( true ); + } + } + return aFont; +} + +QColor HYDROGUI_DataObject::color( const ColorRole theRole, const int theId ) const +{ + 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() ) + { + Handle(HYDROData_Entity) aDataObject = modelObject(); + if( !aDataObject.IsNull() && aDataObject->IsMustBeUpdated() ) + { + switch ( theRole ) + { + 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; + } + } + } + + if ( !aColor.isValid() ) { + aColor = LightApp_DataObject::color( theRole, theId ); + } + + return aColor; +} + +QPixmap HYDROGUI_DataObject::icon( const int theId ) const +{ + SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); + if ( theId == NameId ) + { + QString anIcon; + Handle(HYDROData_Entity) aDataObject = modelObject(); + if( aDataObject.IsNull() ) + { + anIcon = QObject::tr( "HYDRO_TYPE0_ICO" ); // KIND_UNKNOWN + } + else + { + QString aNeedUpdate( aDataObject->IsMustBeUpdated() ? "M_" : "" ); + + int anObjectKind = (int)aDataObject->GetKind(); + 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 ).toAscii() ); + } + + return aResMgr->loadPixmap( "HYDRO", anIcon ); + } + return LightApp_DataObject::icon( theId ); +} + +QString HYDROGUI_DataObject::dataObjectEntry( const Handle(HYDROData_Entity)& theObject, + const bool theWithPrefix ) { - static const QString aPrefixD( "HD_" ); - if ( theEntry.indexOf( aPrefixD ) != 0 ) - return NULL; // not HYDRO entry - - std::istringstream aStream( theEntry.toLatin1().constData() + 3 ); // start reading just after "HD_" - void* aPtr = 0; - aStream >> aPtr; + QString aEntryStr = QString::null; + if( !theObject.IsNull() ) + { + TCollection_AsciiString aLabEntr; + TDF_Tool::Entry( theObject->Label(), aLabEntr ); + aEntryStr = aLabEntr.ToCString(); + if( theWithPrefix ) + aEntryStr.prepend( HYDROGUI_DataObject::entryPrefix() ); + } + return aEntryStr; +} + +void HYDROGUI_DataObject::setIsValid( const bool theIsValid ) +{ + myIsValid = theIsValid; +} + +bool HYDROGUI_DataObject::isValid() const +{ + return myIsValid; +} - return ( HYDROGUI_DataObject* )aPtr; +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 = LightApp_DataObject::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& theName, + const QString& theParentEntry, + const bool theIsInOperation ) : CAM_DataObject( theParent ), LightApp_DataObject( theParent ), - myName( theName ) + myName( theName ), + myParentEntry( theParentEntry ), + myIsInOperation( theIsInOperation ) { } QString HYDROGUI_NamedObject::entry() const { - // unique identifier generated from pointer to this object, like: "HD_0x123457" - // "H" means "HYDRO", "N" means "named" to avoid conflicts with data objects - return "HN_" + myName; + QString anEntry = HYDROGUI_DataObject::entryPrefix() + name(); + if( !myParentEntry.isEmpty() ) + anEntry.prepend( myParentEntry + "_" ); + return anEntry; } QString HYDROGUI_NamedObject::name() const { - return myName; + return myName.toUpper(); } -QString HYDROGUI_NamedObject::nameByEntry( const QString& theEntry ) +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 LightApp_DataObject::icon( theId ); +} + +QFont HYDROGUI_NamedObject::font( const int theId ) const +{ + QFont aFont = LightApp_DataObject::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 ) { - static const QString aPrefixN( "HN_" ); - if( theEntry.indexOf( aPrefixN ) != 0 ) - return QString(); // not HYDRO entry - - return theEntry.right( 3 ); }