DocumentPtr aActiveDoc = ModelAPI_Session::get()->activeDocument();
QModelIndex aParent = theIndex.parent();
if (aActiveDoc == aPartDoc) {
- if ((theIndex.internalId() == HistoryObject) && (!aParent.isValid())) {
+ if (!aParent.isValid()) {
switch (theRole) {
case Qt::DecorationRole:
if (theIndex.row() == lastHistoryRow())
DocumentPtr PartSet_PartDataModel::partDocument() const
{
- DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
- ObjectPtr aObject = aRootDoc->object(ModelAPI_Feature::group(), myId);
- FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
- ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aFeature->firstResult());
- return aPart->partDoc();
+ ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(myPart->firstResult());
+ if (aPart.get()) // this may be null is Part feature is disabled
+ return aPart->partDoc();
+ return DocumentPtr();
}
ObjectPtr PartSet_PartDataModel::object(const QModelIndex& theIndex) const
return QModelIndex();
}
-ResultPartPtr PartSet_PartDataModel::part() const
-{
- DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
- ObjectPtr aObj = aRootDoc->object(ModelAPI_ResultPart::group(), myId);
- return std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
-}
-
QModelIndex PartSet_PartDataModel::objectIndex(const ObjectPtr& theObject) const
{
QModelIndex aIndex;
int PartSet_PartDataModel::lastHistoryRow() const
{
DocumentPtr aDoc = partDocument();
- FeaturePtr aFeature = aDoc->currentFeature();
- return getRowsNumber() + aDoc->index(aFeature);
+ 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) {
- SessionPtr aMgr = ModelAPI_Session::get();
ObjectPtr aObject = object(theIndex);
- DocumentPtr aDoc = partDocument();
- aMgr->startOperation(tr("History change").toStdString());
- aDoc->setCurrentFeature(std::dynamic_pointer_cast<ModelAPI_Feature>(aObject));
+ 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();
}
}