QVariant PartSet_TopDataModel::data(const QModelIndex& theIndex, int theRole) const
{
+ if (theIndex.column() == 1)
+ return QVariant();
+
switch (theRole) {
case Qt::DisplayRole:
// return a name
QVariant PartSet_PartDataModel::data(const QModelIndex& theIndex, int theRole) const
{
+ DocumentPtr aPartDoc = partDocument();
+ if (theIndex.column() == 1) {
+ DocumentPtr aActiveDoc = ModelAPI_Session::get()->activeDocument();
+ QModelIndex aParent = theIndex.parent();
+ if (aActiveDoc == aPartDoc) {
+ if (!aParent.isValid()) {
+ switch (theRole) {
+ case Qt::DecorationRole:
+ if (theIndex.row() == lastHistoryRow())
+ return QIcon(":pictures/arrow.png");
+ }
+ }
+ }
+ return QVariant();
+ }
+
switch (theRole) {
case Qt::DisplayRole:
// return a name
switch (theIndex.internalId()) {
- case MyRoot: {
- DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
- ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId);
- if (aObject)
- return std::dynamic_pointer_cast<ModelAPI_Object>(aObject)->data()->name().c_str();
- }
+ //case MyRoot: {
+ // DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
+ // ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId);
+ // if (aObject)
+ // return std::dynamic_pointer_cast<ModelAPI_Object>(aObject)->data()->name().c_str();
+ //}
case ParamsFolder:
return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex));
case ConstructFolder:
case GroupsFolder:
return tr("Groups") + QString(" (%1)").arg(rowCount(theIndex));
case ParamObject: {
- ObjectPtr aObject = partDocument()->object(ModelAPI_ResultParameter::group(),
- theIndex.row());
+ ObjectPtr aObject = aPartDoc->object(ModelAPI_ResultParameter::group(), theIndex.row());
if (aObject) {
ResultParameterPtr aParam = std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aObject);
AttributeDoublePtr aValueAttribute = aParam->data()->real(ModelAPI_ResultParameter::VALUE());
}
break;
case ConstructObject: {
- ObjectPtr aObject = partDocument()->object(ModelAPI_ResultConstruction::group(),
- theIndex.row());
+ ObjectPtr aObject = aPartDoc->object(ModelAPI_ResultConstruction::group(), theIndex.row());
if (aObject)
return std::dynamic_pointer_cast<ModelAPI_Object>(aObject)->data()->name().c_str();
}
break;
case BodiesObject: {
- ObjectPtr aObject = partDocument()->object(ModelAPI_ResultBody::group(), theIndex.row());
+ ObjectPtr aObject = aPartDoc->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());
+ ObjectPtr aObject = aPartDoc->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() - getRowsNumber());
+ ObjectPtr aObject = aPartDoc->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber());
if (aObject)
return aObject->data()->name().c_str();
}
case Qt::DecorationRole:
// return an Icon
switch (theIndex.internalId()) {
- case MyRoot:
- return QIcon(":pictures/part_ico.png");
+ //case MyRoot:
+ // return QIcon(":pictures/part_ico.png");
case ParamsFolder:
return QIcon(":pictures/params_folder.png");
case ConstructFolder:
case BodiesObject: {
std::string aGroup = theIndex.internalId() == ConstructObject ?
ModelAPI_ResultConstruction::group() : ModelAPI_ResultBody::group();
- ObjectPtr anObject = partDocument()->object(aGroup, theIndex.row());
+ ObjectPtr anObject = aPartDoc->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() - getRowsNumber());
+ ObjectPtr aObject = aPartDoc->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber());
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObject);
if (aFeature)
return PartSet_DocumentDataModel::featureIcon(aFeature);
// return Tooltip
break;
case Qt::ForegroundRole:
+ if (theIndex.internalId() == HistoryObject) {
+ if (theIndex.row() > lastHistoryRow())
+ return QBrush(Qt::lightGray);
+ }
return QBrush(myItemsColor);
- break;
}
return QVariant();
}
int PartSet_PartDataModel::rowCount(const QModelIndex& parent) const
{
if (!parent.isValid()) {
- DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
- if (aRootDoc->object(ModelAPI_ResultPart::group(), myId))
- return 1;
- else
+ DocumentPtr aDoc = partDocument();
+ if (aDoc.get()) {
+ return getRowsNumber() + aDoc->size(ModelAPI_Feature::group());
+ } else
return 0;
}
switch (parent.internalId()) {
- case MyRoot:
- {
- DocumentPtr aDoc = partDocument();
- if (aDoc) {
- return getRowsNumber() + aDoc->size(ModelAPI_Feature::group());
- } else
- return 0;
- }
case ParamsFolder:
return partDocument()->size(ModelAPI_ResultParameter::group());
case ConstructFolder:
int PartSet_PartDataModel::columnCount(const QModelIndex &parent) const
{
- return 1;
+ return 2;
}
QModelIndex PartSet_PartDataModel::index(int theRow, int theColumn, const QModelIndex &theParent) const
{
- if (!theParent.isValid())
- return createIndex(theRow, 0, (qint32) MyRoot);
-
- int aId = (int) theParent.internalId();
- switch (aId) {
- case MyRoot:
- switch (theRow) {
- case 0:
- return createIndex(theRow, 0, (qint32) ParamsFolder);
- case 1:
- return createIndex(theRow, 0, (qint32) ConstructFolder);
- case 2:
- 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:
+ if (!theParent.isValid()) {
+ switch (theRow) {
+ case 0:
+ return createIndex(theRow, theColumn, (qint32) ParamsFolder);
+ case 1:
+ return createIndex(theRow, theColumn, (qint32) ConstructFolder);
+ case 2:
+ return createIndex(theRow, theColumn, (qint32) BodiesFolder);
+ case 3:
+ {
+ int aSize = partDocument()->size(ModelAPI_ResultGroup::group());
+ if (aSize > 0)
+ return createIndex(theRow, theColumn, (qint32) GroupsFolder);
+ else
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) BodiesObject);
- case GroupsFolder:
- return createIndex(theRow, 0, (qint32) GroupObject);
+ }
+ default:
+ return createIndex(theRow, theColumn, (qint32) HistoryObject);
+ }
+ } else {
+ int aId = (int) theParent.internalId();
+ switch (aId) {
+ case ParamsFolder:
+ return createIndex(theRow, theColumn, (qint32) ParamObject);
+ case ConstructFolder:
+ return createIndex(theRow, theColumn, (qint32) ConstructObject);
+ case BodiesFolder:
+ return createIndex(theRow, theColumn, (qint32) BodiesObject);
+ case GroupsFolder:
+ return createIndex(theRow, theColumn, (qint32) GroupObject);
+ }
}
return QModelIndex();
}
QModelIndex PartSet_PartDataModel::parent(const QModelIndex& theIndex) const
{
switch (theIndex.internalId()) {
- case MyRoot:
- return QModelIndex();
case ParamsFolder:
case ConstructFolder:
case BodiesFolder:
case GroupsFolder:
case HistoryObject:
- return createIndex(0, 0, (qint32) MyRoot);
+ return QModelIndex();
case ParamObject:
return createIndex(0, 0, (qint32) ParamsFolder);
DocumentPtr PartSet_PartDataModel::partDocument() const
{
DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
- ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId);
- ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObject);
- if (aPart)
+ ObjectPtr aObject = aRootDoc->object(ModelAPI_Feature::group(), myId);
+ FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
+ ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aFeature->firstResult());
+ if (aPart.get()) // this may be null is Part feature is disabled
return aPart->partDoc();
- return DocumentPtr(); // null if not found
+ return DocumentPtr();
}
ObjectPtr PartSet_PartDataModel::object(const QModelIndex& theIndex) const
{
switch (theIndex.internalId()) {
- case MyRoot: {
- DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
- return aRootDoc->object(ModelAPI_ResultPart::group(), myId);
- }
case ParamsFolder:
case ConstructFolder:
case BodiesFolder:
if (aSize == 0) // If there are no groups then do not show group folder
return 3;
return 4;
-}
\ No newline at end of file
+}
+
+int PartSet_PartDataModel::lastHistoryRow() const
+{
+ DocumentPtr aDoc = partDocument();
+ FeaturePtr aFeature = aDoc->currentFeature(true);
+ if (aFeature.get())
+ return getRowsNumber() + aDoc->index(aFeature);
+ else
+ return getRowsNumber() - 1;
+}
+
+void PartSet_PartDataModel::setLastHistoryItem(const QModelIndex& theIndex)
+{
+ SessionPtr aMgr = ModelAPI_Session::get();
+ DocumentPtr aDoc = partDocument();
+ std::string aOpName = tr("History change").toStdString();
+ if (theIndex.internalId() == HistoryObject) {
+ ObjectPtr aObject = object(theIndex);
+ aMgr->startOperation(aOpName);
+ aDoc->setCurrentFeature(std::dynamic_pointer_cast<ModelAPI_Feature>(aObject), true);
+ aMgr->finishOperation();
+ } else {
+ aMgr->startOperation(aOpName);
+ aDoc->setCurrentFeature(FeaturePtr(), true);
+ aMgr->finishOperation();
+ }
+}
+
+QModelIndex PartSet_PartDataModel::lastHistoryItem() const
+{
+ return index(lastHistoryRow(), 1);
+}
+
+Qt::ItemFlags PartSet_PartDataModel::flags(const QModelIndex& theIndex) const
+{
+ Qt::ItemFlags aFlags = Qt::ItemIsSelectable;
+ if (object(theIndex)) {
+ aFlags |= Qt::ItemIsEditable;
+ }
+ if (theIndex.internalId() == HistoryObject) {
+ if (theIndex.row() <= lastHistoryRow() || (theIndex.column() == 1))
+ aFlags |= Qt::ItemIsEnabled;
+ } else
+ aFlags |= Qt::ItemIsEnabled;
+ return aFlags;
+}