#include "XGUI_PartDataModel.h"
+#include "XGUI_Workshop.h"
#include <ModelAPI_PluginManager.h>
-#include <ModelAPI_Iterator.h>
#include <ModelAPI_Document.h>
#include <ModelAPI_Feature.h>
#include <ModelAPI_Data.h>
#include <ModelAPI_AttributeDocRef.h>
+#include <ModelAPI_Object.h>
#include <QIcon>
+#include <QBrush>
-XGUI_TopDataModel::XGUI_TopDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
+
+FeaturePtr featureObj(const FeaturePtr& theFeature)
+{
+ ObjectPtr aObject = boost::dynamic_pointer_cast<ModelAPI_Object>(theFeature);
+ if (aObject)
+ return aObject->featureRef();
+ return theFeature;
+}
+
+
+XGUI_TopDataModel::XGUI_TopDataModel(const DocumentPtr& theDocument, QObject* theParent)
: XGUI_FeaturesModel(theDocument, theParent)
{
}
// return a name
switch (theIndex.internalId()) {
case ParamsFolder:
- return tr("Parameters");
+ return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
case ParamObject:
{
- boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row());
+ FeaturePtr aFeature = featureObj(myDocument->feature(PARAMETERS_GROUP, theIndex.row()));
if (aFeature)
return aFeature->data()->getName().c_str();
}
case ConstructFolder:
- return tr("Constructions");
+ return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
case ConstructObject:
{
- boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
+ FeaturePtr aFeature = featureObj(myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row()));
if (aFeature)
return aFeature->data()->getName().c_str();
}
// return an Icon
switch (theIndex.internalId()) {
case ParamsFolder:
- return QIcon(":pictures/params_folder.png");
+ return QIcon(":pictures/params_folder.png");
case ConstructFolder:
- return QIcon(":pictures/constr_folder.png");
+ return QIcon(":pictures/constr_folder.png");
case ConstructObject:
- return QIcon(":pictures/point_ico.png");
+ {
+ FeaturePtr aFeature = featureObj(myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row()));
+ if (aFeature)
+ return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
+ }
}
break;
case Qt::ToolTipRole:
// return Tooltip
break;
+ case Qt::ForegroundRole:
+ return QBrush(myItemsColor);
+ break;
}
return QVariant();
}
return 2;
if (theParent.internalId() == ParamsFolder)
- return myDocument->featuresIterator(PARAMETERS_GROUP)->numIterationsLeft();
+ return myDocument->size(PARAMETERS_GROUP);
if (theParent.internalId() == ConstructFolder)
- return myDocument->featuresIterator(CONSTRUCTIONS_GROUP)->numIterationsLeft();
+ return myDocument->size(CONSTRUCTIONS_GROUP);
return 0;
}
case ConstructFolder:
return FeaturePtr();
case ParamObject:
- return myDocument->feature(PARAMETERS_GROUP, theIndex.row());
+ return featureObj(myDocument->feature(PARAMETERS_GROUP, theIndex.row()));
case ConstructObject:
- return myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
+ return featureObj(myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row()));
}
return FeaturePtr();
}
-QModelIndex XGUI_TopDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
+QModelIndex XGUI_TopDataModel::findParent(const FeaturePtr& theFeature) const
{
QString aGroup(theFeature->getGroup().c_str());
//******************************************************************
//******************************************************************
//******************************************************************
-XGUI_PartDataModel::XGUI_PartDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
+XGUI_PartDataModel::XGUI_PartDataModel(const DocumentPtr& theDocument, QObject* theParent)
: XGUI_PartModel(theDocument, theParent)
{
}
switch (theIndex.internalId()) {
case MyRoot:
{
- boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
+ FeaturePtr aFeature = featureObj(myDocument->feature(PARTS_GROUP, myId));
if (aFeature)
return aFeature->data()->getName().c_str();
}
case ParamsFolder:
- return tr("Parameters");
+ return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
case ConstructFolder:
- return tr("Constructions");
+ return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex));
+ case BodiesFolder:
+ return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex));
case ParamObject:
{
- boost::shared_ptr<ModelAPI_Feature> aFeature =
- featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
+ FeaturePtr aFeature = featureObj(featureDocument()->feature(PARAMETERS_GROUP, theIndex.row()));
if (aFeature)
return aFeature->data()->getName().c_str();
}
case ConstructObject:
{
- boost::shared_ptr<ModelAPI_Feature> aFeature =
- featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
+ FeaturePtr aFeature = featureObj(featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row()));
+ if (aFeature)
+ return aFeature->data()->getName().c_str();
+ }
+ case HistoryObject:
+ {
+ FeaturePtr aFeature = featureObj(featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3));
if (aFeature)
return aFeature->data()->getName().c_str();
}
case ParamsFolder:
return QIcon(":pictures/params_folder.png");
case ConstructFolder:
+ case BodiesFolder:
return QIcon(":pictures/constr_folder.png");
case ConstructObject:
- return QIcon(":pictures/point_ico.png");
+ {
+ FeaturePtr aFeature = featureObj(featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row()));
+ if (aFeature)
+ return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
+ }
+ case HistoryObject:
+ {
+ FeaturePtr aFeature = featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
+ if (aFeature)
+ return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind()));
+ }
}
break;
case Qt::ToolTipRole:
// return Tooltip
break;
+ case Qt::ForegroundRole:
+ return QBrush(myItemsColor);
+ break;
}
return QVariant();
}
return 0;
switch (parent.internalId()) {
case MyRoot:
- return 2;
+ return 3 + featureDocument()->size(FEATURES_GROUP);
case ParamsFolder:
- return featureDocument()->featuresIterator(PARAMETERS_GROUP)->numIterationsLeft();
+ return featureDocument()->size(PARAMETERS_GROUP);
case ConstructFolder:
- return featureDocument()->featuresIterator(CONSTRUCTIONS_GROUP)->numIterationsLeft();
+ return featureDocument()->size(CONSTRUCTIONS_GROUP);
+ case BodiesFolder:
+ return 0;
}
return 0;
}
return createIndex(0, 0, (qint32) ParamsFolder);
case 1:
return createIndex(1, 0, (qint32) ConstructFolder);
+ case 2:
+ return createIndex(2, 0, (qint32) BodiesFolder);
+ default:
+ return createIndex(theRow, theColumn, (qint32) HistoryObject);
}
case ParamsFolder:
return createIndex(theRow, 0, (qint32) ParamObject);
case ConstructFolder:
return createIndex(theRow, 0, (qint32) ConstructObject);
+ case BodiesFolder:
+ return createIndex(theRow, 0, (qint32) BodieswObject);
}
return QModelIndex();
}
return QModelIndex();
case ParamsFolder:
case ConstructFolder:
+ case BodiesFolder:
+ case HistoryObject:
return createIndex(0, 0, (qint32) MyRoot);
case ParamObject:
return createIndex(0, 0, (qint32) ParamsFolder);
}
-boost::shared_ptr<ModelAPI_Document> XGUI_PartDataModel::featureDocument() const
+DocumentPtr XGUI_PartDataModel::featureDocument() const
{
- boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
+ FeaturePtr aFeature = featureObj(myDocument->feature(PARTS_GROUP, myId));
return aFeature->data()->docRef("PartDocument")->value();
}
-
+
FeaturePtr XGUI_PartDataModel::feature(const QModelIndex& theIndex) const
{
switch (theIndex.internalId()) {
case MyRoot:
- return myDocument->feature(PARTS_GROUP, myId);
+ if (theIndex.row() < 3) {
+ return featureObj(myDocument->feature(PARTS_GROUP, myId));
+ } else
+ return featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3);
case ParamsFolder:
case ConstructFolder:
return FeaturePtr();
case ParamObject:
- return featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
+ return featureObj(featureDocument()->feature(PARAMETERS_GROUP, theIndex.row()));
case ConstructObject:
- return featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
+ return featureObj(featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row()));
}
return FeaturePtr();
}
-bool XGUI_PartDataModel::hasDocument(const boost::shared_ptr<ModelAPI_Document>& theDoc) const
+bool XGUI_PartDataModel::hasDocument(const DocumentPtr& theDoc) const
{
return (featureDocument() == theDoc);
}
-QModelIndex XGUI_PartDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
+QModelIndex XGUI_PartDataModel::findParent(const FeaturePtr& theFeature) const
{
QString aGroup(theFeature->getGroup().c_str());
return createIndex(1, 0, (qint32) ConstructFolder);
return QModelIndex();
}
+
+FeaturePtr XGUI_PartDataModel::part() const
+{
+ return featureObj(myDocument->feature(PARTS_GROUP, myId));
+}
\ No newline at end of file