1 #include "XGUI_PartDataModel.h"
2 #include "XGUI_Workshop.h"
4 #include <ModelAPI_PluginManager.h>
5 #include <ModelAPI_Document.h>
6 #include <ModelAPI_Feature.h>
7 #include <ModelAPI_Data.h>
8 #include <ModelAPI_AttributeDocRef.h>
13 XGUI_TopDataModel::XGUI_TopDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
14 : XGUI_FeaturesModel(theDocument, theParent)
18 XGUI_TopDataModel::~XGUI_TopDataModel()
23 QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const
28 switch (theIndex.internalId()) {
30 return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
33 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row());
35 return aFeature->data()->getName().c_str();
38 return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
41 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
43 return aFeature->data()->getName().c_str();
48 case Qt::DecorationRole:
50 switch (theIndex.internalId()) {
52 return QIcon(":pictures/params_folder.png");
54 return QIcon(":pictures/constr_folder.png");
57 FeaturePtr aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
59 return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
67 case Qt::ForegroundRole:
68 return QBrush(myItemsColor);
74 QVariant XGUI_TopDataModel::headerData(int section, Qt::Orientation orientation, int role) const
79 int XGUI_TopDataModel::rowCount(const QModelIndex& theParent) const
81 if (!theParent.isValid())
84 if (theParent.internalId() == ParamsFolder)
85 return myDocument->size(PARAMETERS_GROUP);
87 if (theParent.internalId() == ConstructFolder)
88 return myDocument->size(CONSTRUCTIONS_GROUP);
93 int XGUI_TopDataModel::columnCount(const QModelIndex &parent) const
98 QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelIndex& theParent) const
100 if (!theParent.isValid()) {
103 return createIndex(theRow, theColumn, (qint32) ParamsFolder);
105 return createIndex(theRow, theColumn, (qint32) ConstructFolder);
108 if (theParent.internalId() == ParamsFolder)
109 return createIndex(theRow, theColumn, (qint32) ParamObject);
111 if (theParent.internalId() == ConstructFolder)
112 return createIndex(theRow, theColumn, (qint32) ConstructObject);
114 return QModelIndex();
117 QModelIndex XGUI_TopDataModel::parent(const QModelIndex& theIndex) const
119 int aId = (int)theIndex.internalId();
122 case ConstructFolder:
123 return QModelIndex();
125 return createIndex(0, 0, (qint32) ParamsFolder);
126 case ConstructObject:
127 return createIndex(1, 0, (qint32) ConstructFolder);
129 return QModelIndex();
132 bool XGUI_TopDataModel::hasChildren(const QModelIndex& theParent) const
134 return rowCount(theParent) > 0;
137 FeaturePtr XGUI_TopDataModel::feature(const QModelIndex& theIndex) const
139 switch (theIndex.internalId()) {
141 case ConstructFolder:
144 return myDocument->feature(PARAMETERS_GROUP, theIndex.row());
145 case ConstructObject:
146 return myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
152 QModelIndex XGUI_TopDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
154 QString aGroup(theFeature->getGroup().c_str());
156 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
157 return createIndex(0, 0, (qint32) ParamsFolder);
158 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
159 return createIndex(1, 0, (qint32) ConstructFolder);
160 return QModelIndex();
163 QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const
165 if (theGroup.compare(PARAMETERS_GROUP) == 0)
166 return createIndex(0, 0, (qint32) ParamsFolder);
167 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
168 return createIndex(1, 0, (qint32) ConstructFolder);
169 return QModelIndex();
173 //******************************************************************
174 //******************************************************************
175 //******************************************************************
176 XGUI_PartDataModel::XGUI_PartDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
177 : XGUI_PartModel(theDocument, theParent)
182 XGUI_PartDataModel::~XGUI_PartDataModel()
186 QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) const
189 case Qt::DisplayRole:
191 switch (theIndex.internalId()) {
194 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
196 return aFeature->data()->getName().c_str();
199 return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
200 case ConstructFolder:
201 return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
203 return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex));
206 boost::shared_ptr<ModelAPI_Feature> aFeature =
207 featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
209 return aFeature->data()->getName().c_str();
211 case ConstructObject:
213 boost::shared_ptr<ModelAPI_Feature> aFeature =
214 featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
216 return aFeature->data()->getName().c_str();
220 boost::shared_ptr<ModelAPI_Feature> aFeature =
221 featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
223 return aFeature->data()->getName().c_str();
227 case Qt::DecorationRole:
229 switch (theIndex.internalId()) {
231 return QIcon(":pictures/part_ico.png");
233 return QIcon(":pictures/params_folder.png");
234 case ConstructFolder:
236 return QIcon(":pictures/constr_folder.png");
237 case ConstructObject:
239 FeaturePtr aFeature = featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
241 return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
245 boost::shared_ptr<ModelAPI_Feature> aFeature =
246 featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
248 return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
252 case Qt::ToolTipRole:
255 case Qt::ForegroundRole:
256 return QBrush(myItemsColor);
262 QVariant XGUI_PartDataModel::headerData(int section, Qt::Orientation orientation, int role) const
267 int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const
269 if (!parent.isValid())
270 if (myDocument->feature(PARTS_GROUP, myId))
274 switch (parent.internalId()) {
276 return 3 + featureDocument()->size(FEATURES_GROUP);
278 return featureDocument()->size(PARAMETERS_GROUP);
279 case ConstructFolder:
280 return featureDocument()->size(CONSTRUCTIONS_GROUP);
287 int XGUI_PartDataModel::columnCount(const QModelIndex &parent) const
292 QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelIndex &theParent) const
294 if (!theParent.isValid())
295 return createIndex(theRow, 0, (qint32) MyRoot);
297 int aId = (int)theParent.internalId();
302 return createIndex(0, 0, (qint32) ParamsFolder);
304 return createIndex(1, 0, (qint32) ConstructFolder);
306 return createIndex(2, 0, (qint32) BodiesFolder);
308 return createIndex(theRow, theColumn, (qint32) HistoryObject);
311 return createIndex(theRow, 0, (qint32) ParamObject);
312 case ConstructFolder:
313 return createIndex(theRow, 0, (qint32) ConstructObject);
315 return createIndex(theRow, 0, (qint32) BodieswObject);
317 return QModelIndex();
320 QModelIndex XGUI_PartDataModel::parent(const QModelIndex& theIndex) const
322 switch (theIndex.internalId()) {
324 return QModelIndex();
326 case ConstructFolder:
329 return createIndex(0, 0, (qint32) MyRoot);
331 return createIndex(0, 0, (qint32) ParamsFolder);
332 case ConstructObject:
333 return createIndex(1, 0, (qint32) ConstructFolder);
335 return QModelIndex();
338 bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const
340 return rowCount(theParent) > 0;
344 boost::shared_ptr<ModelAPI_Document> XGUI_PartDataModel::featureDocument() const
346 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
347 return aFeature->data()->docRef("PartDocument")->value();
350 FeaturePtr XGUI_PartDataModel::feature(const QModelIndex& theIndex) const
352 switch (theIndex.internalId()) {
354 if (theIndex.row() < 3)
355 return myDocument->feature(PARTS_GROUP, myId);
357 return featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
359 case ConstructFolder:
362 return featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
363 case ConstructObject:
364 return featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
369 bool XGUI_PartDataModel::hasDocument(const boost::shared_ptr<ModelAPI_Document>& theDoc) const
371 return (featureDocument() == theDoc);
375 QModelIndex XGUI_PartDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
377 QString aGroup(theFeature->getGroup().c_str());
379 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
380 return createIndex(0, 0, (qint32) ParamsFolder);
381 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
382 return createIndex(1, 0, (qint32) ConstructFolder);
383 return QModelIndex();
386 QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const
388 if (theGroup.compare(PARAMETERS_GROUP) == 0)
389 return createIndex(0, 0, (qint32) ParamsFolder);
390 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
391 return createIndex(1, 0, (qint32) ConstructFolder);
392 return QModelIndex();
395 FeaturePtr XGUI_PartDataModel::part() const
397 return myDocument->feature(PARTS_GROUP, myId);