1 #include "XGUI_PartDataModel.h"
3 #include <ModelAPI_PluginManager.h>
4 #include <ModelAPI_Iterator.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");
32 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row());
34 return aFeature->data()->getName().c_str();
37 return tr("Constructions");
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");
55 return QIcon(":pictures/point_ico.png");
66 QVariant XGUI_TopDataModel::headerData(int section, Qt::Orientation orientation, int role) const
71 int XGUI_TopDataModel::rowCount(const QModelIndex& theParent) const
73 if (!theParent.isValid())
76 if (theParent.internalId() == ParamsFolder)
77 return myDocument->featuresIterator(PARAMETERS_GROUP)->numIterationsLeft();
79 if (theParent.internalId() == ConstructFolder)
80 return myDocument->featuresIterator(CONSTRUCTIONS_GROUP)->numIterationsLeft();
85 int XGUI_TopDataModel::columnCount(const QModelIndex &parent) const
90 QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelIndex& theParent) const
92 if (!theParent.isValid()) {
95 return createIndex(theRow, theColumn, (qint32) ParamsFolder);
97 return createIndex(theRow, theColumn, (qint32) ConstructFolder);
100 if (theParent.internalId() == ParamsFolder)
101 return createIndex(theRow, theColumn, (qint32) ParamObject);
103 if (theParent.internalId() == ConstructFolder)
104 return createIndex(theRow, theColumn, (qint32) ConstructObject);
106 return QModelIndex();
109 QModelIndex XGUI_TopDataModel::parent(const QModelIndex& theIndex) const
111 int aId = (int)theIndex.internalId();
114 case ConstructFolder:
115 return QModelIndex();
117 return createIndex(0, 0, (qint32) ParamsFolder);
118 case ConstructObject:
119 return createIndex(1, 0, (qint32) ConstructFolder);
121 return QModelIndex();
124 bool XGUI_TopDataModel::hasChildren(const QModelIndex& theParent) const
126 return rowCount(theParent) > 0;
129 FeaturePtr XGUI_TopDataModel::feature(const QModelIndex& theIndex) const
131 switch (theIndex.internalId()) {
133 case ConstructFolder:
136 return myDocument->feature(PARAMETERS_GROUP, theIndex.row());
137 case ConstructObject:
138 return myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
144 QModelIndex XGUI_TopDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
146 QString aGroup(theFeature->getGroup().c_str());
148 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
149 return createIndex(0, 0, (qint32) ParamsFolder);
150 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
151 return createIndex(1, 0, (qint32) ConstructFolder);
152 return QModelIndex();
155 QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const
157 if (theGroup.compare(PARAMETERS_GROUP) == 0)
158 return createIndex(0, 0, (qint32) ParamsFolder);
159 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
160 return createIndex(1, 0, (qint32) ConstructFolder);
161 return QModelIndex();
165 //******************************************************************
166 //******************************************************************
167 //******************************************************************
168 XGUI_PartDataModel::XGUI_PartDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
169 : XGUI_PartModel(theDocument, theParent)
174 XGUI_PartDataModel::~XGUI_PartDataModel()
178 QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) const
181 case Qt::DisplayRole:
183 switch (theIndex.internalId()) {
186 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
188 return aFeature->data()->getName().c_str();
191 return tr("Parameters");
192 case ConstructFolder:
193 return tr("Constructions");
196 boost::shared_ptr<ModelAPI_Feature> aFeature =
197 featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
199 return aFeature->data()->getName().c_str();
201 case ConstructObject:
203 boost::shared_ptr<ModelAPI_Feature> aFeature =
204 featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
206 return aFeature->data()->getName().c_str();
210 case Qt::DecorationRole:
212 switch (theIndex.internalId()) {
214 return QIcon(":pictures/part_ico.png");
216 return QIcon(":pictures/params_folder.png");
217 case ConstructFolder:
218 return QIcon(":pictures/constr_folder.png");
219 case ConstructObject:
220 return QIcon(":pictures/point_ico.png");
223 case Qt::ToolTipRole:
230 QVariant XGUI_PartDataModel::headerData(int section, Qt::Orientation orientation, int role) const
235 int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const
237 if (!parent.isValid())
238 if (myDocument->feature(PARTS_GROUP, myId))
242 switch (parent.internalId()) {
246 return featureDocument()->featuresIterator(PARAMETERS_GROUP)->numIterationsLeft();
247 case ConstructFolder:
248 return featureDocument()->featuresIterator(CONSTRUCTIONS_GROUP)->numIterationsLeft();
253 int XGUI_PartDataModel::columnCount(const QModelIndex &parent) const
258 QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelIndex &theParent) const
260 if (!theParent.isValid())
261 return createIndex(theRow, 0, (qint32) MyRoot);
263 int aId = (int)theParent.internalId();
268 return createIndex(0, 0, (qint32) ParamsFolder);
270 return createIndex(1, 0, (qint32) ConstructFolder);
273 return createIndex(theRow, 0, (qint32) ParamObject);
274 case ConstructFolder:
275 return createIndex(theRow, 0, (qint32) ConstructObject);
277 return QModelIndex();
280 QModelIndex XGUI_PartDataModel::parent(const QModelIndex& theIndex) const
282 switch (theIndex.internalId()) {
284 return QModelIndex();
286 case ConstructFolder:
287 return createIndex(0, 0, (qint32) MyRoot);
289 return createIndex(0, 0, (qint32) ParamsFolder);
290 case ConstructObject:
291 return createIndex(1, 0, (qint32) ConstructFolder);
293 return QModelIndex();
296 bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const
298 return rowCount(theParent) > 0;
302 boost::shared_ptr<ModelAPI_Document> XGUI_PartDataModel::featureDocument() const
304 boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
305 return aFeature->data()->docRef("PartDocument")->value();
308 FeaturePtr XGUI_PartDataModel::feature(const QModelIndex& theIndex) const
310 switch (theIndex.internalId()) {
312 return myDocument->feature(PARTS_GROUP, myId);
314 case ConstructFolder:
317 return featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
318 case ConstructObject:
319 return featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
324 bool XGUI_PartDataModel::hasDocument(const boost::shared_ptr<ModelAPI_Document>& theDoc) const
326 return (featureDocument() == theDoc);
330 QModelIndex XGUI_PartDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
332 QString aGroup(theFeature->getGroup().c_str());
334 if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
335 return createIndex(0, 0, (qint32) ParamsFolder);
336 if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
337 return createIndex(1, 0, (qint32) ConstructFolder);
338 return QModelIndex();
341 QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const
343 if (theGroup.compare(PARAMETERS_GROUP) == 0)
344 return createIndex(0, 0, (qint32) ParamsFolder);
345 if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
346 return createIndex(1, 0, (qint32) ConstructFolder);
347 return QModelIndex();