X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_PartDataModel.cpp;h=ea8c1a51a9ebed97ff22272368516875ed531882;hb=058edf4f920184f6d5a58e11b65991d35330ad16;hp=f68b5fc4a0bc80549363786452244953ecbde345;hpb=0e2657c401cfc2297fba4f1d799eaf14da193318;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_PartDataModel.cpp b/src/XGUI/XGUI_PartDataModel.cpp index f68b5fc4a..ea8c1a51a 100644 --- a/src/XGUI/XGUI_PartDataModel.cpp +++ b/src/XGUI/XGUI_PartDataModel.cpp @@ -1,16 +1,28 @@ #include "XGUI_PartDataModel.h" +#include "XGUI_Workshop.h" #include -#include #include #include #include #include +#include #include +#include -XGUI_TopDataModel::XGUI_TopDataModel(const std::shared_ptr& theDocument, QObject* theParent) - : XGUI_FeaturesModel(theDocument, theParent) + +//FeaturePtr featureObj(const FeaturePtr& theFeature) +//{ +// ObjectPtr aObject = boost::dynamic_pointer_cast(theFeature); +// if (aObject) +// return aObject->featureRef(); +// return theFeature; +//} + + +XGUI_TopDataModel::XGUI_TopDataModel(QObject* theParent) + : XGUI_FeaturesModel(theParent) { } @@ -26,18 +38,22 @@ QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const // return a name switch (theIndex.internalId()) { case ParamsFolder: - return tr("Parameters"); + return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex)); case ParamObject: { - std::shared_ptr aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row()); - return aFeature->data()->getName().c_str(); + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + FeaturePtr aFeature = aRootDoc->feature(PARAMETERS_GROUP, theIndex.row()); + if (aFeature) + return boost::dynamic_pointer_cast(aFeature)->getName().c_str(); } case ConstructFolder: - return tr("Constructions"); + return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex)); case ConstructObject: { - std::shared_ptr aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row()); - return aFeature->data()->getName().c_str(); + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + FeaturePtr aFeature = aRootDoc->feature(CONSTRUCTIONS_GROUP, theIndex.row()); + if (aFeature) + return boost::dynamic_pointer_cast(aFeature)->getName().c_str(); } } break; @@ -46,17 +62,25 @@ QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const // 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"); + { + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + FeaturePtr aFeature = aRootDoc->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(); } @@ -71,11 +95,12 @@ int XGUI_TopDataModel::rowCount(const QModelIndex& theParent) const if (!theParent.isValid()) return 2; + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); if (theParent.internalId() == ParamsFolder) - return myDocument->featuresIterator(PARAMETERS_GROUP)->numIterationsLeft(); + return aRootDoc->size(PARAMETERS_GROUP); if (theParent.internalId() == ConstructFolder) - return myDocument->featuresIterator(CONSTRUCTIONS_GROUP)->numIterationsLeft(); + return aRootDoc->size(CONSTRUCTIONS_GROUP); return 0; } @@ -90,16 +115,16 @@ QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelInde if (!theParent.isValid()) { switch (theRow) { case 0: - return createIndex(theRow, theColumn, (quintptr) ParamsFolder); + return createIndex(theRow, theColumn, (qint32) ParamsFolder); case 1: - return createIndex(theRow, theColumn, (quintptr) ConstructFolder); + return createIndex(theRow, theColumn, (qint32) ConstructFolder); } } else { if (theParent.internalId() == ParamsFolder) - return createIndex(theRow, theColumn, (quintptr) ParamObject); + return createIndex(theRow, theColumn, (qint32) ParamObject); if (theParent.internalId() == ConstructFolder) - return createIndex(theRow, theColumn, (quintptr) ConstructObject); + return createIndex(theRow, theColumn, (qint32) ConstructObject); } return QModelIndex(); } @@ -112,9 +137,9 @@ QModelIndex XGUI_TopDataModel::parent(const QModelIndex& theIndex) const case ConstructFolder: return QModelIndex(); case ParamObject: - return createIndex(0, 0, (quintptr) ParamsFolder); + return createIndex(0, 0, (qint32) ParamsFolder); case ConstructObject: - return createIndex(1, 0, (quintptr) ConstructFolder); + return createIndex(1, 0, (qint32) ConstructFolder); } return QModelIndex(); } @@ -129,21 +154,67 @@ FeaturePtr XGUI_TopDataModel::feature(const QModelIndex& theIndex) const switch (theIndex.internalId()) { case ParamsFolder: case ConstructFolder: - return 0; + return FeaturePtr(); case ParamObject: - return myDocument->feature(PARAMETERS_GROUP, theIndex.row()); + { + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + return aRootDoc->feature(PARAMETERS_GROUP, theIndex.row()); + } case ConstructObject: - return myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row()); + { + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + return aRootDoc->feature(CONSTRUCTIONS_GROUP, theIndex.row()); + } } - return 0; + return FeaturePtr(); +} + + +QModelIndex XGUI_TopDataModel::findParent(const FeaturePtr& theFeature) const +{ + return findGroup(theFeature->getGroup().c_str()); } +QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const +{ + if (theGroup.compare(PARAMETERS_GROUP) == 0) + return createIndex(0, 0, (qint32) ParamsFolder); + if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0) + return createIndex(1, 0, (qint32) ConstructFolder); + return QModelIndex(); +} + +QModelIndex XGUI_TopDataModel::featureIndex(const FeaturePtr& theFeature) const +{ + QModelIndex aIndex; + if (theFeature) { + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + std::string aGroup = theFeature->getGroup(); + int aNb = aRootDoc->size(aGroup); + int aRow = -1; + for (int i = 0; i < aNb; i++) { + if (aRootDoc->feature(aGroup, i) == theFeature) { + aRow = i; + break; + } + } + if (aRow != -1) { + if (aGroup.compare(PARAMETERS_GROUP) == 0) + return createIndex(aRow, 0, (qint32) ParamObject); + if (aGroup.compare(CONSTRUCTIONS_GROUP) == 0) + return createIndex(aRow, 0, (qint32) ConstructObject); + } + } + return aIndex; +} + + //****************************************************************** //****************************************************************** //****************************************************************** -XGUI_PartDataModel::XGUI_PartDataModel(const std::shared_ptr& theDocument, QObject* theParent) - : XGUI_PartModel(theDocument, theParent) +XGUI_PartDataModel::XGUI_PartDataModel(QObject* theParent) + : XGUI_PartModel(theParent) { } @@ -160,24 +231,34 @@ QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) cons switch (theIndex.internalId()) { case MyRoot: { - std::shared_ptr aFeature = myDocument->feature(PARTS_GROUP, myId); - return aFeature->data()->getName().c_str(); + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + FeaturePtr aFeature = aRootDoc->feature(PARTS_GROUP, myId); + if (aFeature) + return boost::dynamic_pointer_cast(aFeature)->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: { - std::shared_ptr aFeature = - featureDocument()->feature(PARAMETERS_GROUP, theIndex.row()); - return aFeature->data()->getName().c_str(); + FeaturePtr aFeature = featureDocument()->feature(PARAMETERS_GROUP, theIndex.row()); + if (aFeature) + return boost::dynamic_pointer_cast(aFeature)->getName().c_str(); } case ConstructObject: { - std::shared_ptr aFeature = - featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row()); - return aFeature->data()->getName().c_str(); + FeaturePtr aFeature = featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row()); + if (aFeature) + return boost::dynamic_pointer_cast(aFeature)->getName().c_str(); + } + case HistoryObject: + { + FeaturePtr aFeature = featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3); + if (aFeature) + return aFeature->data()->getName().c_str(); } } break; @@ -189,14 +270,28 @@ QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) cons 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 = 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(); } @@ -208,18 +303,22 @@ QVariant XGUI_PartDataModel::headerData(int section, Qt::Orientation orientation int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const { - if (!parent.isValid()) - if (myDocument->feature(PARTS_GROUP, myId)) + if (!parent.isValid()) { + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + if (aRootDoc->feature(PARTS_GROUP, myId)) return 1; else 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; } @@ -232,21 +331,27 @@ int XGUI_PartDataModel::columnCount(const QModelIndex &parent) const QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelIndex &theParent) const { if (!theParent.isValid()) - return createIndex(theRow, 0, (quintptr) MyRoot); + return createIndex(theRow, 0, (qint32) MyRoot); int aId = (int)theParent.internalId(); switch (aId) { case MyRoot: switch (theRow) { case 0: - return createIndex(0, 0, (quintptr) ParamsFolder); + return createIndex(0, 0, (qint32) ParamsFolder); case 1: - return createIndex(1, 0, (quintptr) ConstructFolder); + 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, (quintptr) ParamObject); + return createIndex(theRow, 0, (qint32) ParamObject); case ConstructFolder: - return createIndex(theRow, 0, (quintptr) ConstructObject); + return createIndex(theRow, 0, (qint32) ConstructObject); + case BodiesFolder: + return createIndex(theRow, 0, (qint32) BodiesObject); } return QModelIndex(); } @@ -258,11 +363,13 @@ QModelIndex XGUI_PartDataModel::parent(const QModelIndex& theIndex) const return QModelIndex(); case ParamsFolder: case ConstructFolder: - return createIndex(0, 0, (quintptr) MyRoot); + case BodiesFolder: + case HistoryObject: + return createIndex(0, 0, (qint32) MyRoot); case ParamObject: - return createIndex(0, 0, (quintptr) ParamsFolder); + return createIndex(0, 0, (qint32) ParamsFolder); case ConstructObject: - return createIndex(1, 0, (quintptr) ConstructFolder); + return createIndex(1, 0, (qint32) ConstructFolder); } return QModelIndex(); } @@ -273,24 +380,86 @@ bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const } -std::shared_ptr XGUI_PartDataModel::featureDocument() const +DocumentPtr XGUI_PartDataModel::featureDocument() const { - std::shared_ptr aFeature = myDocument->feature(PARTS_GROUP, myId); + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + FeaturePtr aFeature = aRootDoc->feature(PARTS_GROUP, myId, true); 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); + { + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + return aRootDoc->feature(PARTS_GROUP, myId); + } case ParamsFolder: case ConstructFolder: - return 0; + case BodiesFolder: + return FeaturePtr(); case ParamObject: return featureDocument()->feature(PARAMETERS_GROUP, theIndex.row()); case ConstructObject: return featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row()); + //case BodiesObject: + // return featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row()); + case HistoryObject: + return featureDocument()->feature(FEATURES_GROUP, theIndex.row() - 3); } - return 0; + return FeaturePtr(); +} + +bool XGUI_PartDataModel::hasDocument(const DocumentPtr& theDoc) const +{ + return (featureDocument() == theDoc); +} + + +QModelIndex XGUI_PartDataModel::findParent(const FeaturePtr& theFeature) const +{ + return findGroup(theFeature->getGroup().c_str()); +} + +QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const +{ + if (theGroup.compare(PARAMETERS_GROUP) == 0) + return createIndex(0, 0, (qint32) ParamsFolder); + if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0) + return createIndex(1, 0, (qint32) ConstructFolder); + return QModelIndex(); +} + +FeaturePtr XGUI_PartDataModel::part() const +{ + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + return aRootDoc->feature(PARTS_GROUP, myId, true); +} + +QModelIndex XGUI_PartDataModel::featureIndex(const FeaturePtr& theFeature) const +{ + QModelIndex aIndex; + if (theFeature) { + if (part() == theFeature) + return aIndex; + + std::string aGroup = theFeature->getGroup(); + DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + int aNb = aRootDoc->size(aGroup); + int aRow = -1; + for (int i = 0; i < aNb; i++) { + if (aRootDoc->feature(aGroup, i) == theFeature) { + aRow = i; + break; + } + } + if (aRow != -1) { + if (aGroup.compare(PARAMETERS_GROUP) == 0) + return createIndex(aRow, 0, (qint32) ParamObject); + if (aGroup.compare(CONSTRUCTIONS_GROUP) == 0) + return createIndex(aRow, 0, (qint32) ConstructObject); + } + } + return aIndex; }