Salome HOME
Show the desktop is maximized at first start
[modules/gui.git] / src / SalomeApp / SalomeApp_DataObject.cxx
1 #include "SalomeApp_DataObject.h"
2 #include "SalomeApp_RootObject.h"
3 #include "SalomeApp_Study.h"
4
5 #include <SUIT_DataObjectKey.h>
6 #include <SUIT_Application.h>
7 #include <SUIT_ResourceMgr.h>
8
9 #include <qobject.h>
10
11 /*!
12         Class: SalomeApp_DataObject::Key
13         Level: Internal
14 */
15
16 class SalomeApp_DataObject::Key : public SUIT_DataObjectKey
17 {
18 public:
19   Key( const QString& );
20   virtual ~Key();
21
22   virtual bool isLess( const SUIT_DataObjectKey* ) const;
23   virtual bool isEqual( const SUIT_DataObjectKey* ) const;
24
25 private:
26   QString myEntry;
27 };
28
29 SalomeApp_DataObject::Key::Key( const QString& entry )
30 : SUIT_DataObjectKey(),
31   myEntry( entry )
32 {
33 }
34
35 SalomeApp_DataObject::Key::~Key()
36 {
37 }
38
39 bool SalomeApp_DataObject::Key::isLess( const SUIT_DataObjectKey* other ) const
40 {
41   Key* that = (Key*)other;
42   return myEntry < that->myEntry;
43 }
44
45 bool SalomeApp_DataObject::Key::isEqual( const SUIT_DataObjectKey* other ) const
46 {
47   Key* that = (Key*)other;
48   return myEntry == that->myEntry;
49 }
50
51 /*!
52         Class: SalomeApp_DataObject
53         Level: Public
54 */
55
56 SalomeApp_DataObject::SalomeApp_DataObject( SUIT_DataObject* parent )
57 : CAM_DataObject( parent )
58 {
59 }
60
61 SalomeApp_DataObject::SalomeApp_DataObject( const _PTR(SObject)& sobj, SUIT_DataObject* parent )
62 : CAM_DataObject( parent )
63 {
64   myObject = sobj;
65 }
66
67 SalomeApp_DataObject::~SalomeApp_DataObject()
68 {
69 }
70
71 QString SalomeApp_DataObject::entry() const
72 {
73   if ( myObject )
74     return myObject->GetID().c_str();
75   return QString::null;
76 }
77
78 SUIT_DataObjectKey* SalomeApp_DataObject::key() const
79 {
80   QString str = entry();
81   return new Key( str );
82 }
83
84 QString SalomeApp_DataObject::name() const
85 {
86   if ( myObject )
87     return myObject->GetName().c_str();
88   return QString::null;
89   //return QString( "%1 [%2]" ).arg( myName ).arg( myEntry ); // for debug
90 }
91
92 QPixmap SalomeApp_DataObject::icon() const
93 {
94   _PTR(GenericAttribute) anAttr;
95   if ( myObject && myObject->FindAttribute( anAttr, "AttributePixMap" ) ){
96     _PTR(AttributePixMap) aPixAttr ( anAttr );
97     if ( aPixAttr->HasPixMap() ){
98       QString pixmapName = QObject::tr( aPixAttr->GetPixMap().c_str() );
99       SalomeApp_RootObject* aRoot = dynamic_cast<SalomeApp_RootObject*>( root() );
100       if ( aRoot && aRoot->study() ) {
101         QPixmap pixmap = aRoot->study()->application()->resourceMgr()->loadPixmap( componentDataType(), pixmapName ); 
102         return pixmap;
103       }
104     }
105   }
106   return QPixmap();
107 }
108
109 QColor SalomeApp_DataObject::color() const
110 {
111   _PTR(GenericAttribute) anAttr;
112   if ( myObject && myObject->FindAttribute( anAttr, "AttributeTextColor" ) ){
113     _PTR(AttributeTextColor) aColAttr (  anAttr );
114     QColor color( (int)aColAttr->TextColor().R, (int)aColAttr->TextColor().G, (int)aColAttr->TextColor().B );
115     return color;
116   }
117   return QColor();
118 }
119
120 QString SalomeApp_DataObject::toolTip() const
121 {
122   //return object()->Name();
123   return QString( "Object \'%1\', module \'%2\', ID=%3" ).arg( name() ).arg( componentDataType() ).arg( entry() );
124 }
125
126 SUIT_DataObject* SalomeApp_DataObject::componentObject() const
127 {
128   SUIT_DataObject* compObj = 0;  // for root object (invisible SALOME_ROOT_OBJECT) 
129
130   if ( parent() && parent() == root() ) 
131     compObj = (SUIT_DataObject*)this; // for component-level objects
132   else 
133   {
134     compObj = parent(); // for lower level objects
135     while ( compObj && compObj->parent() != root() )
136       compObj = compObj->parent();
137   }
138
139   return compObj;
140 }
141
142 QString SalomeApp_DataObject::componentDataType() const
143 {
144   const SalomeApp_DataObject* compObj = dynamic_cast<SalomeApp_DataObject*>( componentObject() );
145   if ( compObj && compObj->object() )
146   {
147     _PTR(SComponent) aComp ( compObj->object() );
148     if ( aComp )
149       return aComp->ComponentDataType().c_str();
150   }
151
152   return "";
153 }
154
155 _PTR(SObject) SalomeApp_DataObject::object() const
156 {
157   return myObject;
158 }
159
160
161 /*!
162         Class: SalomeApp_ModuleObject
163         Level: Public
164 */
165
166 SalomeApp_ModuleObject::SalomeApp_ModuleObject( SUIT_DataObject* parent )
167 : SalomeApp_DataObject( parent ), 
168   CAM_RootObject( parent ),
169   CAM_DataObject( parent )
170 {
171 }
172
173 SalomeApp_ModuleObject::SalomeApp_ModuleObject( const _PTR(SObject)& sobj, SUIT_DataObject* parent )
174 : SalomeApp_DataObject( sobj, parent ), 
175   CAM_RootObject( 0, parent ),
176   CAM_DataObject( parent )
177 {
178 }
179
180 SalomeApp_ModuleObject::SalomeApp_ModuleObject( CAM_DataModel* dm, const _PTR(SObject)& sobj, SUIT_DataObject* parent )
181 : SalomeApp_DataObject( sobj, parent ), 
182   CAM_RootObject( dm, parent ),
183   CAM_DataObject( parent )  
184 {
185 }
186
187 SalomeApp_ModuleObject::~SalomeApp_ModuleObject()
188 {
189 }