X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_PartDataModel.cpp;h=567ad5677e050e0d4923001afdbc3a23f2a75709;hb=c2651507a52942e0632863b1e5e384396a285d25;hp=6f6fc8f041563b24abf474234423e978b32dd567;hpb=428673f6b49a1997bf97ebbe5e00501c76439c20;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_PartDataModel.cpp b/src/XGUI/XGUI_PartDataModel.cpp index 6f6fc8f04..567ad5677 100644 --- a/src/XGUI/XGUI_PartDataModel.cpp +++ b/src/XGUI/XGUI_PartDataModel.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + #include "XGUI_PartDataModel.h" #include "XGUI_Workshop.h" @@ -12,13 +14,14 @@ #include #include #include +#include #include #include //ObjectPtr featureObj(const ObjectPtr& theFeature) //{ -// ObjectPtr aObject = boost::dynamic_pointer_cast(theFeature); +// ObjectPtr aObject = std::dynamic_pointer_cast(theFeature); // if (aObject) // return aObject->featureRef(); // return theFeature; @@ -42,7 +45,7 @@ QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const case ParamsFolder: return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex)); case ParamObject: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultParameters::group(), theIndex.row()); if (aObject) return aObject->data()->name().c_str(); @@ -51,35 +54,39 @@ QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const case ConstructFolder: return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex)); case ConstructObject: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultConstruction::group(), theIndex.row()); if (aObject) return aObject->data()->name().c_str(); } break; - case BodiesFolder: - return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex)); - case BodiesObject: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); - ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultBody::group(), theIndex.row()); - if (aObject) - return aObject->data()->name().c_str(); - } + //case GroupsFolder: + // return tr("Groups") + QString(" (%1)").arg(rowCount(theIndex)); + //case GroupObject: { + // DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); + // ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultGroup::group(), + // theIndex.row()); + // if (aObject) + // return aObject->data()->name().c_str(); + //} + // break; } break; case Qt::DecorationRole: + { // return an Icon switch (theIndex.internalId()) { case ParamsFolder: return QIcon(":pictures/params_folder.png"); - case BodiesFolder: case ConstructFolder: return QIcon(":pictures/constr_folder.png"); case ConstructObject: - case BodiesObject: return QIcon(":pictures/constr_object.png"); + //case GroupsFolder: + // return QIcon(":pictures/constr_folder.png"); + } } break; @@ -101,17 +108,18 @@ QVariant XGUI_TopDataModel::headerData(int section, Qt::Orientation orientation, int XGUI_TopDataModel::rowCount(const QModelIndex& theParent) const { if (!theParent.isValid()) - return 3; + return 2; // In case of groups using it has to be +1 - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); if (theParent.internalId() == ParamsFolder) return aRootDoc->size(ModelAPI_ResultParameters::group()); if (theParent.internalId() == ConstructFolder) return aRootDoc->size(ModelAPI_ResultConstruction::group()); - if (theParent.internalId() == BodiesFolder) - return aRootDoc->size(ModelAPI_ResultBody::group()); + //if (theParent.internalId() == GroupsFolder) + // return aRootDoc->size(ModelAPI_ResultGroup::group()); + return 0; } @@ -128,8 +136,8 @@ QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelInde return createIndex(theRow, theColumn, (qint32) ParamsFolder); case 1: return createIndex(theRow, theColumn, (qint32) ConstructFolder); - case 2: - return createIndex(theRow, theColumn, (qint32) BodiesFolder); + //case 2: + // return createIndex(theRow, theColumn, (qint32) GroupsFolder); } } else { if (theParent.internalId() == ParamsFolder) @@ -138,8 +146,8 @@ QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelInde if (theParent.internalId() == ConstructFolder) return createIndex(theRow, theColumn, (qint32) ConstructObject); - if (theParent.internalId() == BodiesFolder) - return createIndex(theRow, theColumn, (qint32) BodiesObject); + //if (theParent.internalId() == GroupsFolder) + // return createIndex(theRow, theColumn, (qint32) GroupObject); } return QModelIndex(); } @@ -150,14 +158,14 @@ QModelIndex XGUI_TopDataModel::parent(const QModelIndex& theIndex) const switch (aId) { case ParamsFolder: case ConstructFolder: - case BodiesFolder: + //case GroupsFolder: return QModelIndex(); case ParamObject: return createIndex(0, 0, (qint32) ParamsFolder); case ConstructObject: return createIndex(1, 0, (qint32) ConstructFolder); - case BodiesObject: - return createIndex(2, 0, (qint32) BodiesFolder); + //case GroupObject: + // return createIndex(2, 0, (qint32) GroupsFolder); } return QModelIndex(); } @@ -172,20 +180,19 @@ ObjectPtr XGUI_TopDataModel::object(const QModelIndex& theIndex) const switch (theIndex.internalId()) { case ParamsFolder: case ConstructFolder: - case BodiesFolder: return ObjectPtr(); case ParamObject: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); return aRootDoc->object(ModelAPI_ResultParameters::group(), theIndex.row()); } case ConstructObject: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); return aRootDoc->object(ModelAPI_ResultConstruction::group(), theIndex.row()); } - case BodiesObject: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); - return aRootDoc->object(ModelAPI_ResultBody::group(), theIndex.row()); - } + //case GroupObject: { + // DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); + // return aRootDoc->object(ModelAPI_ResultGroup::group(), theIndex.row()); + //} } return ObjectPtr(); } @@ -201,8 +208,8 @@ QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const return createIndex(0, 0, (qint32) ParamsFolder); if (theGroup == ModelAPI_ResultConstruction::group()) return createIndex(1, 0, (qint32) ConstructFolder); - if (theGroup == ModelAPI_ResultBody::group()) - return createIndex(2, 0, (qint32) BodiesFolder); + //if (theGroup == ModelAPI_ResultGroup::group()) + // return createIndex(2, 0, (qint32) ConstructFolder); return QModelIndex(); } @@ -210,7 +217,7 @@ QModelIndex XGUI_TopDataModel::objectIndex(const ObjectPtr& theObject) const { QModelIndex aIndex; if (theObject) { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); std::string aGroup = theObject->groupName(); int aNb = aRootDoc->size(aGroup); int aRow = -1; @@ -225,8 +232,8 @@ QModelIndex XGUI_TopDataModel::objectIndex(const ObjectPtr& theObject) const return createIndex(aRow, 0, (qint32) ParamObject); if (aGroup == ModelAPI_ResultConstruction::group()) return createIndex(aRow, 0, (qint32) ConstructObject); - if (aGroup == ModelAPI_ResultBody::group()) - return createIndex(aRow, 0, (qint32) BodiesObject); + //if (aGroup == ModelAPI_ResultGroup::group()) + // return createIndex(aRow, 0, (qint32) GroupObject); } } return aIndex; @@ -251,10 +258,10 @@ QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) cons // return a name switch (theIndex.internalId()) { case MyRoot: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId); if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); + return std::dynamic_pointer_cast(aObject)->data()->name().c_str(); } case ParamsFolder: return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex)); @@ -262,25 +269,35 @@ QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) cons return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex)); case BodiesFolder: return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex)); + case GroupsFolder: + return tr("Groups") + QString(" (%1)").arg(rowCount(theIndex)); case ParamObject: { ObjectPtr aObject = partDocument()->object(ModelAPI_ResultParameters::group(), theIndex.row()); if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); + return std::dynamic_pointer_cast(aObject)->data()->name().c_str(); } + break; case ConstructObject: { ObjectPtr aObject = partDocument()->object(ModelAPI_ResultConstruction::group(), theIndex.row()); if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); + return std::dynamic_pointer_cast(aObject)->data()->name().c_str(); } + break; case BodiesObject: { ObjectPtr aObject = partDocument()->object(ModelAPI_ResultBody::group(), theIndex.row()); if (aObject) return aObject->data()->name().c_str(); + } + break; + case GroupObject: { + ObjectPtr aObject = partDocument()->object(ModelAPI_ResultGroup::group(), theIndex.row()); + if (aObject) + return aObject->data()->name().c_str(); } case HistoryObject: { - ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - 3); + ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber()); if (aObject) return aObject->data()->name().c_str(); } @@ -296,14 +313,25 @@ QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) cons case ConstructFolder: case BodiesFolder: return QIcon(":pictures/constr_folder.png"); + case GroupsFolder: + return QIcon(":pictures/constr_folder.png"); case ConstructObject: - case BodiesObject: + case GroupObject: + case BodiesObject: { + std::string aGroup = theIndex.internalId() == ConstructObject ? + ModelAPI_ResultConstruction::group() : ModelAPI_ResultBody::group(); + ObjectPtr anObject = partDocument()->object(aGroup, theIndex.row()); + if (anObject && anObject->data() && + anObject->data()->execState() == ModelAPI_StateMustBeUpdated) { + return QIcon(":pictures/constr_object_modified.png"); + } return QIcon(":pictures/constr_object.png"); + } case HistoryObject: { - ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - 3); - FeaturePtr aFeature = boost::dynamic_pointer_cast(aObject); + ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber()); + FeaturePtr aFeature = std::dynamic_pointer_cast(aObject); if (aFeature) - return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind())); + return XGUI_Workshop::featureIcon(aFeature); } } break; @@ -325,7 +353,7 @@ QVariant XGUI_PartDataModel::headerData(int section, Qt::Orientation orientation int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); if (aRootDoc->object(ModelAPI_ResultPart::group(), myId)) return 1; else @@ -335,9 +363,9 @@ int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const case MyRoot: { DocumentPtr aDoc = partDocument(); - if (aDoc) - return 3 + aDoc->size(ModelAPI_Feature::group()); - else + if (aDoc) { + return getRowsNumber() + aDoc->size(ModelAPI_Feature::group()); + } else return 0; } case ParamsFolder: @@ -346,6 +374,8 @@ int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const return partDocument()->size(ModelAPI_ResultConstruction::group()); case BodiesFolder: return partDocument()->size(ModelAPI_ResultBody::group()); + case GroupsFolder: + return partDocument()->size(ModelAPI_ResultGroup::group()); } return 0; } @@ -365,11 +395,19 @@ QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelInd case MyRoot: switch (theRow) { case 0: - return createIndex(0, 0, (qint32) ParamsFolder); + return createIndex(theRow, 0, (qint32) ParamsFolder); case 1: - return createIndex(1, 0, (qint32) ConstructFolder); + return createIndex(theRow, 0, (qint32) ConstructFolder); case 2: - return createIndex(2, 0, (qint32) BodiesFolder); + return createIndex(theRow, 0, (qint32) BodiesFolder); + case 3: + { + int aSize = partDocument()->size(ModelAPI_ResultGroup::group()); + if (aSize > 0) + return createIndex(theRow, 0, (qint32) GroupsFolder); + else + return createIndex(theRow, theColumn, (qint32) HistoryObject); + } default: return createIndex(theRow, theColumn, (qint32) HistoryObject); } @@ -379,6 +417,8 @@ QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelInd return createIndex(theRow, 0, (qint32) ConstructObject); case BodiesFolder: return createIndex(theRow, 0, (qint32) BodiesObject); + case GroupsFolder: + return createIndex(theRow, 0, (qint32) GroupObject); } return QModelIndex(); } @@ -391,14 +431,18 @@ QModelIndex XGUI_PartDataModel::parent(const QModelIndex& theIndex) const case ParamsFolder: case ConstructFolder: case BodiesFolder: + case GroupsFolder: case HistoryObject: return createIndex(0, 0, (qint32) MyRoot); + case ParamObject: return createIndex(0, 0, (qint32) ParamsFolder); case ConstructObject: return createIndex(1, 0, (qint32) ConstructFolder); case BodiesObject: return createIndex(2, 0, (qint32) BodiesFolder); + case GroupObject: + return createIndex(3, 0, (qint32) GroupsFolder); } return QModelIndex(); } @@ -410,31 +454,37 @@ bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const DocumentPtr XGUI_PartDataModel::partDocument() const { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId); - ResultPartPtr aPart = boost::dynamic_pointer_cast(aObject); - return aPart->partDoc(); + ResultPartPtr aPart = std::dynamic_pointer_cast(aObject); + if (aPart) + return aPart->partDoc(); + return DocumentPtr(); // null if not found } ObjectPtr XGUI_PartDataModel::object(const QModelIndex& theIndex) const { switch (theIndex.internalId()) { case MyRoot: { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); return aRootDoc->object(ModelAPI_ResultPart::group(), myId); } case ParamsFolder: case ConstructFolder: case BodiesFolder: + case GroupsFolder: return ObjectPtr(); + case ParamObject: return partDocument()->object(ModelAPI_ResultParameters::group(), theIndex.row()); case ConstructObject: return partDocument()->object(ModelAPI_ResultConstruction::group(), theIndex.row()); case BodiesObject: return partDocument()->object(ModelAPI_ResultBody::group(), theIndex.row()); + case GroupObject: + return partDocument()->object(ModelAPI_ResultGroup::group(), theIndex.row()); case HistoryObject: - return partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - 3); + return partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber()); } return ObjectPtr(); } @@ -451,20 +501,22 @@ QModelIndex XGUI_PartDataModel::findParent(const ObjectPtr& theObject) const QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const { - if (theGroup.compare(ModelAPI_ResultParameters::group()) == 0) + if (theGroup == ModelAPI_ResultParameters::group()) return createIndex(0, 0, (qint32) ParamsFolder); - if (theGroup.compare(ModelAPI_ResultConstruction::group()) == 0) + if (theGroup == ModelAPI_ResultConstruction::group()) return createIndex(1, 0, (qint32) ConstructFolder); - if (theGroup.compare(ModelAPI_ResultBody::group()) == 0) + if (theGroup == ModelAPI_ResultBody::group()) return createIndex(2, 0, (qint32) BodiesFolder); + if (theGroup == ModelAPI_ResultGroup::group()) + return createIndex(3, 0, (qint32) GroupsFolder); return QModelIndex(); } ResultPartPtr XGUI_PartDataModel::part() const { - DocumentPtr aRootDoc = ModelAPI_Session::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); ObjectPtr aObj = aRootDoc->object(ModelAPI_ResultPart::group(), myId); - return boost::dynamic_pointer_cast(aObj); + return std::dynamic_pointer_cast(aObj); } QModelIndex XGUI_PartDataModel::objectIndex(const ObjectPtr& theObject) const @@ -492,8 +544,19 @@ QModelIndex XGUI_PartDataModel::objectIndex(const ObjectPtr& theObject) const return createIndex(aRow, 0, (qint32) ConstructObject); else if (aGroup == ModelAPI_ResultBody::group()) return createIndex(aRow, 0, (qint32) BodiesObject); + else if (aGroup == ModelAPI_ResultGroup::group()) + return createIndex(aRow, 0, (qint32) GroupObject); else - return createIndex(aRow + 3, 0, (qint32) HistoryObject); + return createIndex(aRow + getRowsNumber(), 0, (qint32) HistoryObject); } return aIndex; } + + +int XGUI_PartDataModel::getRowsNumber() const +{ + int aSize = partDocument()->size(ModelAPI_ResultGroup::group()); + if (aSize == 0) // If there are no groups then do not show group folder + return 3; + return 4; +} \ No newline at end of file