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>
12 XGUI_TopDataModel::XGUI_TopDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
13 : XGUI_FeaturesModel(theDocument, theParent)
17 XGUI_TopDataModel::~XGUI_TopDataModel()
22 QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const
27 switch (theIndex.internalId()) {
29 return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
32 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row());
34 return aFeature->data()->getName().c_str();
37 return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
40 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
42 return aFeature->data()->getName().c_str();
47 case Qt::DecorationRole:
49 switch (theIndex.internalId()) {
51 return QIcon(":pictures/params_folder.png");
53 return QIcon(":pictures/constr_folder.png");
56 FeaturePtr aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
58 return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
70 QVariant XGUI_TopDataModel::headerData(int section, Qt::Orientation orientation, int role) const
75 int XGUI_TopDataModel::rowCount(const QModelIndex& theParent) const
77 if (!theParent.isValid())
80 if (theParent.internalId() == ParamsFolder)
81 return myDocument->size(PARAMETERS_GROUP);
83 if (theParent.internalId() == ConstructFolder)
84 return myDocument->size(CONSTRUCTIONS_GROUP);
89 int XGUI_TopDataModel::columnCount(const QModelIndex &parent) const
94 QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelIndex& theParent) const
96 if (!theParent.isValid()) {
99 return createIndex(theRow, theColumn, (qint32) ParamsFolder);
101 return createIndex(theRow, theColumn, (qint32) ConstructFolder);
104 if (theParent.internalId() == ParamsFolder)
105 return createIndex(theRow, theColumn, (qint32) ParamObject);
107 if (theParent.internalId() == ConstructFolder)
108 return createIndex(theRow, theColumn, (qint32) ConstructObject);
110 return QModelIndex();
113 QModelIndex XGUI_TopDataModel::parent(const QModelIndex& theIndex) const
115 int aId = (int)theIndex.internalId();
118 case ConstructFolder:
119 return QModelIndex();
121 return createIndex(0, 0, (qint32) ParamsFolder);
122 case ConstructObject:
123 return createIndex(1, 0, (qint32) ConstructFolder);
125 return QModelIndex();
128 bool XGUI_TopDataModel::hasChildren(const QModelIndex& theParent) const
130 return rowCount(theParent) > 0;
133 FeaturePtr XGUI_TopDataModel::feature(const QModelIndex& theIndex) const
135 switch (theIndex.internalId()) {
137 case ConstructFolder:
140 return myDocument->feature(PARAMETERS_GROUP, theIndex.row());
141 case ConstructObject:
142 return myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
148 QModelIndex XGUI_TopDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
150 QString aGroup(theFeature->getGroup().c_str());
152 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
153 return createIndex(0, 0, (qint32) ParamsFolder);
154 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
155 return createIndex(1, 0, (qint32) ConstructFolder);
156 return QModelIndex();
159 QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const
161 if (theGroup.compare(PARAMETERS_GROUP) == 0)
162 return createIndex(0, 0, (qint32) ParamsFolder);
163 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
164 return createIndex(1, 0, (qint32) ConstructFolder);
165 return QModelIndex();
169 //******************************************************************
170 //******************************************************************
171 //******************************************************************
172 XGUI_PartDataModel::XGUI_PartDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
173 : XGUI_PartModel(theDocument, theParent)
178 XGUI_PartDataModel::~XGUI_PartDataModel()
182 QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) const
185 case Qt::DisplayRole:
187 switch (theIndex.internalId()) {
190 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
192 return aFeature->data()->getName().c_str();
195 return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
196 case ConstructFolder:
197 return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
199 return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex));
202 boost::shared_ptr<ModelAPI_Feature> aFeature =
203 featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
205 return aFeature->data()->getName().c_str();
207 case ConstructObject:
209 boost::shared_ptr<ModelAPI_Feature> aFeature =
210 featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
212 return aFeature->data()->getName().c_str();
216 boost::shared_ptr<ModelAPI_Feature> aFeature =
217 featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
219 return aFeature->data()->getName().c_str();
223 case Qt::DecorationRole:
225 switch (theIndex.internalId()) {
227 return QIcon(":pictures/part_ico.png");
229 return QIcon(":pictures/params_folder.png");
230 case ConstructFolder:
232 return QIcon(":pictures/constr_folder.png");
233 case ConstructObject:
235 FeaturePtr aFeature = featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
237 return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
241 boost::shared_ptr<ModelAPI_Feature> aFeature =
242 featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
244 return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
248 case Qt::ToolTipRole:
255 QVariant XGUI_PartDataModel::headerData(int section, Qt::Orientation orientation, int role) const
260 int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const
262 if (!parent.isValid())
263 if (myDocument->feature(PARTS_GROUP, myId))
267 switch (parent.internalId()) {
269 return 3 + featureDocument()->size(FEATURES_GROUP);
271 return featureDocument()->size(PARAMETERS_GROUP);
272 case ConstructFolder:
273 return featureDocument()->size(CONSTRUCTIONS_GROUP);
280 int XGUI_PartDataModel::columnCount(const QModelIndex &parent) const
285 QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelIndex &theParent) const
287 if (!theParent.isValid())
288 return createIndex(theRow, 0, (qint32) MyRoot);
290 int aId = (int)theParent.internalId();
295 return createIndex(0, 0, (qint32) ParamsFolder);
297 return createIndex(1, 0, (qint32) ConstructFolder);
299 return createIndex(2, 0, (qint32) BodiesFolder);
301 return createIndex(theRow, theColumn, (qint32) HistoryObject);
304 return createIndex(theRow, 0, (qint32) ParamObject);
305 case ConstructFolder:
306 return createIndex(theRow, 0, (qint32) ConstructObject);
308 return createIndex(theRow, 0, (qint32) BodieswObject);
310 return QModelIndex();
313 QModelIndex XGUI_PartDataModel::parent(const QModelIndex& theIndex) const
315 switch (theIndex.internalId()) {
317 return QModelIndex();
319 case ConstructFolder:
322 return createIndex(0, 0, (qint32) MyRoot);
324 return createIndex(0, 0, (qint32) ParamsFolder);
325 case ConstructObject:
326 return createIndex(1, 0, (qint32) ConstructFolder);
328 return QModelIndex();
331 bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const
333 return rowCount(theParent) > 0;
337 boost::shared_ptr<ModelAPI_Document> XGUI_PartDataModel::featureDocument() const
339 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
340 return aFeature->data()->docRef("PartDocument")->value();
343 FeaturePtr XGUI_PartDataModel::feature(const QModelIndex& theIndex) const
345 switch (theIndex.internalId()) {
347 if (theIndex.row() < 3)
348 return myDocument->feature(PARTS_GROUP, myId);
350 return featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
352 case ConstructFolder:
355 return featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
356 case ConstructObject:
357 return featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
362 bool XGUI_PartDataModel::hasDocument(const boost::shared_ptr<ModelAPI_Document>& theDoc) const
364 return (featureDocument() == theDoc);
368 QModelIndex XGUI_PartDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
370 QString aGroup(theFeature->getGroup().c_str());
372 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
373 return createIndex(0, 0, (qint32) ParamsFolder);
374 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
375 return createIndex(1, 0, (qint32) ConstructFolder);
376 return QModelIndex();
379 QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const
381 if (theGroup.compare(PARAMETERS_GROUP) == 0)
382 return createIndex(0, 0, (qint32) ParamsFolder);
383 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
384 return createIndex(1, 0, (qint32) ConstructFolder);
385 return QModelIndex();
388 FeaturePtr XGUI_PartDataModel::part() const
390 return myDocument->feature(PARTS_GROUP, myId);