+ updateParametersFeatures();
+ updateParametersPart();
+
+ myTable->scrollToItem(aCurrentItem);
+ myTable->setCurrentItem(aCurrentItem);
+ myTable->editItem(aCurrentItem);
+}
+
+void ParametersPlugin_WidgetParamsMgr::onRemove()
+{
+ QTreeWidgetItem* aCurrentItem = selectedItem();
+ if (!aCurrentItem)
+ return;
+
+ SessionPtr aMgr = ModelAPI_Session::get();
+ std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
+
+ int aCurrentPos = myParameters->indexOfChild(aCurrentItem);
+ FeaturePtr aCurFeature = myParametersList.at(aCurrentPos);
+
+ QObjectPtrList anObjects;
+ anObjects.append(aCurFeature);
+
+ std::map<FeaturePtr, std::set<FeaturePtr> > aReferences;
+ std::set<FeaturePtr> aFeatures;
+ ModuleBase_Tools::convertToFeatures(anObjects, aFeatures);
+ ModelAPI_Tools::findAllReferences(aFeatures, aReferences);
+
+ std::set<FeaturePtr> aFeatureRefsToDelete;
+ if (ModuleBase_Tools::askToDelete(aFeatures, aReferences, this, aFeatureRefsToDelete)) {
+ if (!aFeatureRefsToDelete.empty())
+ aFeatures.insert(aFeatureRefsToDelete.begin(), aFeatureRefsToDelete.end());
+ ModelAPI_Tools::removeFeatures(aFeatures, false);
+
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED));
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY));
+ updateParametersFeatures();
+ updateFeaturesPart();
+ updateParametersPart();
+ }
+}
+
+void ParametersPlugin_WidgetParamsMgr::onUp()
+{
+ QTreeWidgetItem* aCurrentItem = selectedItem();
+ if (!aCurrentItem)
+ return;
+
+ int aCurrentPos = myParameters->indexOfChild(aCurrentItem);
+ if (aCurrentPos == 0)
+ return;
+ FeaturePtr aCurFeature = myParametersList.at(aCurrentPos);
+
+ SessionPtr aMgr = ModelAPI_Session::get();
+ std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
+
+ if (aCurrentPos == 1)
+ aDoc->moveFeature(aCurFeature, FeaturePtr());
+ else
+ aDoc->moveFeature(aCurFeature, myParametersList.at(aCurrentPos - 2));
+
+ // add the updated also the feature that goes down
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
+ static Events_ID EVENT_UPD = Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED);
+ ModelAPI_EventCreator::get()->sendUpdated(myParametersList.at(aCurrentPos - 1), EVENT_UPD);
+ Events_Loop::loop()->flush(EVENT_UPD);
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED));
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY));
+ updateParametersFeatures();
+ updateParametersPart();
+ updateFeaturesPart();
+
+ if (aCurrentPos > 0) {
+ aCurrentItem = myParameters->child(aCurrentPos - 1);
+ myTable->setCurrentItem(aCurrentItem);
+ selectItemScroll(aCurrentItem);
+ }
+}
+
+void ParametersPlugin_WidgetParamsMgr::onDown()
+{
+ QTreeWidgetItem* aCurrentItem = selectedItem();
+ if (!aCurrentItem)
+ return;
+
+ int aCurrentPos = myParameters->indexOfChild(aCurrentItem);
+ if (aCurrentPos == (myParametersList.count() - 1))
+ return;
+ FeaturePtr aCurFeature = myParametersList.at(aCurrentPos);
+
+ SessionPtr aMgr = ModelAPI_Session::get();
+ std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
+ aDoc->moveFeature(aCurFeature, myParametersList.at(aCurrentPos + 1));
+ // add the updated also the feature that goes up
+ static Events_ID EVENT_UPD = Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED);
+ ModelAPI_EventCreator::get()->sendUpdated(myParametersList.at(aCurrentPos + 1), EVENT_UPD);
+
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED));
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED));
+ Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY));
+ updateParametersFeatures();
+ updateParametersPart();
+ updateFeaturesPart();
+
+ if (aCurrentPos < myParameters->childCount() - 1) {
+ aCurrentItem = myParameters->child(aCurrentPos + 1);
+ myTable->setCurrentItem(aCurrentItem);
+ selectItemScroll(aCurrentItem);
+ }
+}
+
+
+bool ParametersPlugin_WidgetParamsMgr::hasName(const QString& theName) const
+{
+ int aCurrent = myDelegate->editIndex().row();
+ int i = 0;
+ foreach(FeaturePtr aFeature, myParametersList) {
+ if ((i != aCurrent) && (aFeature->data()->name() == theName.toStdString()))
+ return true;
+ i++;
+ }
+ return false;
+}
+
+void ParametersPlugin_WidgetParamsMgr::sendWarning()
+{
+ QMessageBox::warning(this, tr("Warning"), myMessage);
+ QTreeWidgetItem* aItem = myTable->currentItem();
+ if (aItem)
+ myTable->editItem(aItem);
+}
+
+void ParametersPlugin_WidgetParamsMgr::onSelectionChanged()
+{
+ QList<QTreeWidgetItem*> aItemsList = myTable->selectedItems();
+ bool aIsValid = isValid();
+ if (aIsValid) {
+ bool isParameter = false;
+ foreach(QTreeWidgetItem* aItem, aItemsList) {
+ if (aItem->parent() == myParameters) {
+ isParameter = true;
+ break;
+ }
+ }
+ myInsertBtn->setEnabled(isParameter);
+ //myRemoveBtn->setEnabled(isParameter);
+ myUpBtn->setEnabled(isParameter);
+ myDownBtn->setEnabled(isParameter);
+ } else {
+ myInsertBtn->setEnabled(false);
+ //myRemoveBtn->setEnabled(false);
+ myUpBtn->setEnabled(false);
+ myDownBtn->setEnabled(false);
+ }
+ myRemoveBtn->setEnabled(!aItemsList.isEmpty());
+}
+
+void ParametersPlugin_WidgetParamsMgr::enableButtons(bool theEnable)
+{
+ myAddBtn->setEnabled(theEnable);
+ if (theEnable)
+ onSelectionChanged();
+ else {
+ myInsertBtn->setEnabled(theEnable);
+ //myRemoveBtn->setEnabled(theEnable);
+ myUpBtn->setEnabled(theEnable);
+ myDownBtn->setEnabled(theEnable);
+ }
+ myOkCancelBtn->button(QDialogButtonBox::Ok)->setEnabled(theEnable);
+}
+
+bool ParametersPlugin_WidgetParamsMgr::isValid()
+{
+ QTreeWidgetItem* aItem;
+ for(int i = 0; i < myParameters->childCount(); i++) {
+ aItem = myParameters->child(i);
+ if ((aItem->text(Col_Name) == NoName) ||
+ (aItem->text(Col_Equation) == NoValue) ||
+ (!ModelAPI_Expression::isVariable(aItem->text(Col_Name).toStdString())) ) {
+ return false;
+ }
+ }
+ return true;
+}
+