1 #include "XGUI_PartDataModel.h"
3 #include <ModelAPI_PluginManager.h>
4 #include <ModelAPI_Document.h>
5 #include <ModelAPI_Feature.h>
6 #include <ModelAPI_Data.h>
7 #include <ModelAPI_AttributeDocRef.h>
11 XGUI_TopDataModel::XGUI_TopDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
12 : XGUI_FeaturesModel(theDocument, theParent)
16 XGUI_TopDataModel::~XGUI_TopDataModel()
21 QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const
26 switch (theIndex.internalId()) {
28 return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
31 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row());
33 return aFeature->data()->getName().c_str();
36 return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
39 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
41 return aFeature->data()->getName().c_str();
46 case Qt::DecorationRole:
48 switch (theIndex.internalId()) {
50 return QIcon(":pictures/params_folder.png");
52 return QIcon(":pictures/constr_folder.png");
54 return QIcon(":pictures/point_ico.png");
65 QVariant XGUI_TopDataModel::headerData(int section, Qt::Orientation orientation, int role) const
70 int XGUI_TopDataModel::rowCount(const QModelIndex& theParent) const
72 if (!theParent.isValid())
75 if (theParent.internalId() == ParamsFolder)
76 return myDocument->size(PARAMETERS_GROUP);
78 if (theParent.internalId() == ConstructFolder)
79 return myDocument->size(CONSTRUCTIONS_GROUP);
84 int XGUI_TopDataModel::columnCount(const QModelIndex &parent) const
89 QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelIndex& theParent) const
91 if (!theParent.isValid()) {
94 return createIndex(theRow, theColumn, (qint32) ParamsFolder);
96 return createIndex(theRow, theColumn, (qint32) ConstructFolder);
99 if (theParent.internalId() == ParamsFolder)
100 return createIndex(theRow, theColumn, (qint32) ParamObject);
102 if (theParent.internalId() == ConstructFolder)
103 return createIndex(theRow, theColumn, (qint32) ConstructObject);
105 return QModelIndex();
108 QModelIndex XGUI_TopDataModel::parent(const QModelIndex& theIndex) const
110 int aId = (int)theIndex.internalId();
113 case ConstructFolder:
114 return QModelIndex();
116 return createIndex(0, 0, (qint32) ParamsFolder);
117 case ConstructObject:
118 return createIndex(1, 0, (qint32) ConstructFolder);
120 return QModelIndex();
123 bool XGUI_TopDataModel::hasChildren(const QModelIndex& theParent) const
125 return rowCount(theParent) > 0;
128 FeaturePtr XGUI_TopDataModel::feature(const QModelIndex& theIndex) const
130 switch (theIndex.internalId()) {
132 case ConstructFolder:
135 return myDocument->feature(PARAMETERS_GROUP, theIndex.row());
136 case ConstructObject:
137 return myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
143 QModelIndex XGUI_TopDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
145 QString aGroup(theFeature->getGroup().c_str());
147 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
148 return createIndex(0, 0, (qint32) ParamsFolder);
149 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
150 return createIndex(1, 0, (qint32) ConstructFolder);
151 return QModelIndex();
154 QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const
156 if (theGroup.compare(PARAMETERS_GROUP) == 0)
157 return createIndex(0, 0, (qint32) ParamsFolder);
158 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
159 return createIndex(1, 0, (qint32) ConstructFolder);
160 return QModelIndex();
164 //******************************************************************
165 //******************************************************************
166 //******************************************************************
167 XGUI_PartDataModel::XGUI_PartDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
168 : XGUI_PartModel(theDocument, theParent)
173 XGUI_PartDataModel::~XGUI_PartDataModel()
177 QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) const
180 case Qt::DisplayRole:
182 switch (theIndex.internalId()) {
185 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
187 return aFeature->data()->getName().c_str();
190 return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
191 case ConstructFolder:
192 return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
194 return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex));
197 boost::shared_ptr<ModelAPI_Feature> aFeature =
198 featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
200 return aFeature->data()->getName().c_str();
202 case ConstructObject:
204 boost::shared_ptr<ModelAPI_Feature> aFeature =
205 featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
207 return aFeature->data()->getName().c_str();
211 case Qt::DecorationRole:
213 switch (theIndex.internalId()) {
215 return QIcon(":pictures/part_ico.png");
217 return QIcon(":pictures/params_folder.png");
218 case ConstructFolder:
220 return QIcon(":pictures/constr_folder.png");
221 case ConstructObject:
222 return QIcon(":pictures/point_ico.png");
225 case Qt::ToolTipRole:
232 QVariant XGUI_PartDataModel::headerData(int section, Qt::Orientation orientation, int role) const
237 int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const
239 if (!parent.isValid())
240 if (myDocument->feature(PARTS_GROUP, myId))
244 switch (parent.internalId()) {
248 return featureDocument()->size(PARAMETERS_GROUP);
249 case ConstructFolder:
250 return featureDocument()->size(CONSTRUCTIONS_GROUP);
257 int XGUI_PartDataModel::columnCount(const QModelIndex &parent) const
262 QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelIndex &theParent) const
264 if (!theParent.isValid())
265 return createIndex(theRow, 0, (qint32) MyRoot);
267 int aId = (int)theParent.internalId();
272 return createIndex(0, 0, (qint32) ParamsFolder);
274 return createIndex(1, 0, (qint32) ConstructFolder);
276 return createIndex(1, 0, (qint32) BodiesFolder);
279 return createIndex(theRow, 0, (qint32) ParamObject);
280 case ConstructFolder:
281 return createIndex(theRow, 0, (qint32) ConstructObject);
283 return createIndex(theRow, 0, (qint32) BodieswObject);
285 return QModelIndex();
288 QModelIndex XGUI_PartDataModel::parent(const QModelIndex& theIndex) const
290 switch (theIndex.internalId()) {
292 return QModelIndex();
294 case ConstructFolder:
296 return createIndex(0, 0, (qint32) MyRoot);
298 return createIndex(0, 0, (qint32) ParamsFolder);
299 case ConstructObject:
300 return createIndex(1, 0, (qint32) ConstructFolder);
302 return QModelIndex();
305 bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const
307 return rowCount(theParent) > 0;
311 boost::shared_ptr<ModelAPI_Document> XGUI_PartDataModel::featureDocument() const
313 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
314 return aFeature->data()->docRef("PartDocument")->value();
317 FeaturePtr XGUI_PartDataModel::feature(const QModelIndex& theIndex) const
319 switch (theIndex.internalId()) {
321 return myDocument->feature(PARTS_GROUP, myId);
323 case ConstructFolder:
326 return featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
327 case ConstructObject:
328 return featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
333 bool XGUI_PartDataModel::hasDocument(const boost::shared_ptr<ModelAPI_Document>& theDoc) const
335 return (featureDocument() == theDoc);
339 QModelIndex XGUI_PartDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
341 QString aGroup(theFeature->getGroup().c_str());
343 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
344 return createIndex(0, 0, (qint32) ParamsFolder);
345 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
346 return createIndex(1, 0, (qint32) ConstructFolder);
347 return QModelIndex();
350 QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const
352 if (theGroup.compare(PARAMETERS_GROUP) == 0)
353 return createIndex(0, 0, (qint32) ParamsFolder);
354 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
355 return createIndex(1, 0, (qint32) ConstructFolder);
356 return QModelIndex();