#include "HYDROGUI_DataObject.h"
#include <SUIT_DataObject.h>
+#include <TDF_Tool.hxx>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <QPixmap>
HYDROGUI_DataObject::HYDROGUI_DataObject( SUIT_DataObject* theParent,
- Handle(HYDROData_Object) theData )
+ Handle(HYDROData_Entity) theData,
+ const QString& theParentEntry )
: CAM_DataObject( theParent ),
LightApp_DataObject( theParent ),
- myData( theData )
+ myData( theData ),
+ myParentEntry( theParentEntry ),
+ myIsValid( true )
{
- // 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
return QString();
}
-HYDROGUI_DataObject* HYDROGUI_DataObject::objectByEntry( const QString& theEntry )
+QFont HYDROGUI_DataObject::font( const int theId ) const
{
- 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;
-
- return ( HYDROGUI_DataObject* )aPtr;
+ 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 = "";
+ if ( aDataObject->IsMustBeUpdated() )
+ {
+ aNeedUpdate = "M_";
+ }
+ anIcon = QObject::tr( QString("HYDRO_%1TYPE%2_ICO").arg( aNeedUpdate ).arg( (int)aDataObject->GetKind() ).toAscii() );
+ }
+
+ return aResMgr->loadPixmap( "HYDRO", anIcon );
+ }
+ return LightApp_DataObject::icon( theId );
+}
+
+QString HYDROGUI_DataObject::dataObjectEntry( const Handle(HYDROData_Entity)& theObject,
+ const bool theWithPrefix )
+{
+ 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;
}
HYDROGUI_NamedObject::HYDROGUI_NamedObject( SUIT_DataObject* theParent,
- const QString& theName )
+ const QString& theName,
+ const QString& theParentEntry )
: CAM_DataObject( theParent ),
LightApp_DataObject( theParent ),
- myName( theName )
+ myName( theName ),
+ myParentEntry( theParentEntry )
{
}
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;
}
-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 );
+}
+
+HYDROGUI_DropTargetObject::HYDROGUI_DropTargetObject( SUIT_DataObject* theParent,
+ const QString& theName,
+ const QString& theParentEntry )
+: HYDROGUI_NamedObject( theParent, theName, theParentEntry ), CAM_DataObject( theParent )
{
- static const QString aPrefixN( "HN_" );
- if( theEntry.indexOf( aPrefixN ) != 0 )
- return QString(); // not HYDRO entry
-
- return theEntry.right( 3 );
}