1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
3 // File: ParametersPlugin_WidgetParamsMgr.cpp
4 // Created: 11 Apr 2016
5 // Author: Vitaly SMETANNIKOV
7 #include "ParametersPlugin_WidgetParamsMgr.h"
8 #include "ParametersPlugin_Parameter.h"
9 #include "ParametersPlugin_Validators.h"
11 #include <Events_InfoMessage.h>
13 #include <ModelAPI_ResultParameter.h>
14 #include <ModelAPI_AttributeString.h>
15 #include <ModelAPI_AttributeRefList.h>
16 #include <ModelAPI_AttributeDouble.h>
17 #include <ModelAPI_AttributeInteger.h>
18 #include <ModelAPI_Events.h>
19 #include <ModelAPI_Session.h>
20 #include <ModelAPI_Tools.h>
21 #include <ModelAPI_Expression.h>
23 #include <ModuleBase_Tools.h>
25 #include <Events_Loop.h>
28 #include <QPushButton>
29 #include <QToolButton>
30 #include <QStyledItemDelegate>
32 #include <QMessageBox>
36 #include <QDialogButtonBox>
45 const char* NoName = "<NoName>";
46 const char* NoValue = "<NoValue>";
47 const char* NotValid = "<NotValid>";
51 * ItemDelegate object in order to redefine items behavior
53 class ParametersPlugin_ItemDelegate : public QStyledItemDelegate
57 /// \param thaParent a parent
58 ParametersPlugin_ItemDelegate(QObject* thaParent) :
59 QStyledItemDelegate(thaParent) {}
61 /// Redefinition of virtual method
62 /// \param painter a painter object
63 /// \param option the item options
64 /// \param index the current index
65 virtual void paint(QPainter* painter,
66 const QStyleOptionViewItem& option,
67 const QModelIndex& index ) const;
69 /// Redefinition of virtual method
70 /// \param parent a parent widget
71 /// \param option the item options
72 /// \param index the current index
73 virtual QWidget* createEditor(QWidget* parent,
74 const QStyleOptionViewItem& option,
75 const QModelIndex& index) const;
77 /// Returns True if the given index is editable item
78 /// \param theIndex an item index
79 bool isEditable(const QModelIndex& theIndex) const;
81 /// Returns currently editing index
82 QModelIndex editIndex() const { return myEditingIdx; }
85 mutable QModelIndex myEditingIdx;
88 bool ParametersPlugin_ItemDelegate::isEditable(const QModelIndex& theIndex) const
90 QModelIndex aParent = theIndex.parent();
91 if (aParent.isValid() && (aParent.row() == 0)) {
92 if (theIndex.column() == 2)
99 void ParametersPlugin_ItemDelegate::paint(QPainter* painter,
100 const QStyleOptionViewItem& option,
101 const QModelIndex& index ) const
103 QBrush aBrush = painter->brush();
104 QPen aPen = painter->pen();
105 //if (!isEditable(index))
106 // painter->setBrush(Qt::lightGray);
107 if (!index.parent().isValid())
108 painter->setBrush(Qt::lightGray);
110 painter->setPen(Qt::lightGray);
111 painter->drawRect(option.rect);
112 painter->setPen(aPen);
114 QStyledItemDelegate::paint(painter, option, index);
115 painter->setBrush(aBrush);
118 QWidget* ParametersPlugin_ItemDelegate::createEditor(QWidget* parent,
119 const QStyleOptionViewItem& option,
120 const QModelIndex& index) const
122 myEditingIdx = index;
123 return QStyledItemDelegate::createEditor(parent, option, index);
126 /////////////////////////////////////////////////////////////////////////////////////////////////
127 void ParametersPlugin_TreeWidget::closeEditor(QWidget* theEditor,
128 QAbstractItemDelegate::EndEditHint theHint)
130 if (theHint == QAbstractItemDelegate::EditNextItem) {
131 QModelIndex aCurrent = currentIndex();
132 QModelIndex aParent = model()->index(0, 0);
133 int aNbRows = model()->rowCount(aParent);
135 switch (aCurrent.column()) {
137 aIdx = model()->index(aCurrent.row(), 1, aParent);
140 if (aCurrent.row() < (aNbRows - 1))
141 aIdx = model()->index(aCurrent.row() + 1, 0, aParent);
143 QTreeWidget::closeEditor(theEditor, QAbstractItemDelegate::NoHint);
148 QTreeWidget::closeEditor(theEditor, theHint);
151 if (aIdx.isValid()) {
152 QTreeWidget::closeEditor(theEditor, QAbstractItemDelegate::NoHint);
153 setCurrentIndex(aIdx);
158 QTreeWidget::closeEditor(theEditor, theHint);
161 /////////////////////////////////////////////////////////////////////////////////////////////////
163 ParametersPlugin_WidgetParamsMgr::ParametersPlugin_WidgetParamsMgr(QWidget* theParent,
164 const Config_WidgetAPI* theData)
165 : ModuleBase_ModelDialogWidget(theParent, theData)
167 QVBoxLayout* aLayout = new QVBoxLayout(this);
169 myTable = new ParametersPlugin_TreeWidget(this);
170 myTable->setColumnCount(4);
171 QStringList aHeaders;
172 aHeaders << tr("Name") << tr("Expression") << tr("Result") << tr("Comment");
173 myTable->setHeaderLabels(aHeaders);
174 myTable->setColumnWidth(Col_Name, 200);
175 myTable->setColumnWidth(Col_Equation, 100);
176 myTable->setColumnWidth(Col_Result, 80);
177 myTable->setColumnWidth(Col_Comment, 200);
178 myTable->setMinimumWidth(600);
179 myTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
180 myTable->setSelectionMode(QAbstractItemView::SingleSelection);
182 connect(myTable, SIGNAL(doubleClicked(const QModelIndex&)),
183 SLOT(onDoubleClick(const QModelIndex&)));
184 connect(myTable, SIGNAL(itemSelectionChanged()), SLOT(onSelectionChanged()));
186 myDelegate = new ParametersPlugin_ItemDelegate(myTable);
187 connect(myDelegate, SIGNAL(closeEditor(QWidget*, QAbstractItemDelegate::EndEditHint)),
188 SLOT(onCloseEditor(QWidget*, QAbstractItemDelegate::EndEditHint)));
190 myTable->setItemDelegate(myDelegate);
191 aLayout->addWidget(myTable);
195 aNames<<tr("Parameters");
196 myParameters = new QTreeWidgetItem(aNames);
197 myParameters->setFlags(Qt::ItemIsEnabled);
198 myTable->addTopLevelItem(myParameters);
201 aNames<<tr("Features");
202 myFeatures = new QTreeWidgetItem(aNames);
203 myFeatures->setFlags(Qt::ItemIsEnabled);
204 myTable->addTopLevelItem(myFeatures);
206 QHBoxLayout* aBtnLayout = new QHBoxLayout(this);
208 myUpBtn = new QToolButton(this);
209 myUpBtn->setArrowType(Qt::UpArrow);
210 connect(myUpBtn, SIGNAL(clicked(bool)), SLOT(onUp()));
211 aBtnLayout->addWidget(myUpBtn);
213 myDownBtn = new QToolButton(this);
214 myDownBtn->setArrowType(Qt::DownArrow);
215 connect(myDownBtn, SIGNAL(clicked(bool)), SLOT(onDown()));
216 aBtnLayout->addWidget(myDownBtn);
218 aBtnLayout->addStretch();
220 myAddBtn = new QPushButton(tr("Add"), this);
221 connect(myAddBtn, SIGNAL(clicked(bool)), SLOT(onAdd()));
222 aBtnLayout->addWidget(myAddBtn);
224 myInsertBtn = new QPushButton(tr("Insert"), this);
225 connect(myInsertBtn, SIGNAL(clicked(bool)), SLOT(onInsert()));
226 aBtnLayout->addWidget(myInsertBtn);
228 myRemoveBtn = new QPushButton(tr("Remove"), this);
229 connect(myRemoveBtn, SIGNAL(clicked(bool)), SLOT(onRemove()));
230 aBtnLayout->addWidget(myRemoveBtn);
232 aLayout->addLayout(aBtnLayout);
234 onSelectionChanged();
237 QList<QWidget*> ParametersPlugin_WidgetParamsMgr::getControls() const
239 QList<QWidget*> aList;
244 void ParametersPlugin_WidgetParamsMgr::selectItemScroll(QTreeWidgetItem* aItem)
246 myTable->clearSelection();
247 QModelIndex aParent = myTable->model()->index(0, 0);
248 int aChildIdx = myParameters->indexOfChild(aItem);
249 QModelIndex aIndex = myTable->model()->index(aChildIdx, Col_Name, aParent);
250 myTable->selectionModel()->select(aIndex,
251 QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
252 myTable->scrollToItem(aItem);
256 bool ParametersPlugin_WidgetParamsMgr::storeValueCustom()
258 ParametersPlugin_ExpressionValidator aValidator;
259 std::list<std::string> aArgs;
260 std::string aAttrId = ParametersPlugin_Parameter::VARIABLE_ID();
261 Events_InfoMessage aErr;
263 foreach(FeaturePtr aFeature, myParametersList) {
264 if (!aValidator.isValid(aFeature->attribute(aAttrId), aArgs, aErr)) {
265 // TODO(spo): translate
266 QMessageBox::warning(this, tr("Warning"), aErr.messageString().c_str());
267 selectItemScroll(myParameters->child(aId));
275 bool ParametersPlugin_WidgetParamsMgr::restoreValueCustom()
280 void ParametersPlugin_WidgetParamsMgr::activateCustom()
282 updateParametersFeatures();
283 updateParametersPart();
284 updateFeaturesPart();
286 myFeatures->setExpanded(true);
287 myParameters->setExpanded(true);
290 void ParametersPlugin_WidgetParamsMgr::updateParametersFeatures()
292 myParametersList.clear();
293 FeaturePtr aFeature = feature();
294 DocumentPtr aDoc = aFeature->document();
296 FeaturePtr aParamFeature;
297 int aNbFeatures = aDoc->numInternalFeatures();
298 for (int i = 0; i < aNbFeatures; i++) {
299 aParamFeature = aDoc->internalFeature(i);
300 if (aParamFeature->getKind() == ParametersPlugin_Parameter::ID()) {
301 myParametersList.append(aParamFeature);
306 void ParametersPlugin_WidgetParamsMgr::updateFeaturesPart()
308 QList<FeaturePtr> aFeatureList;
309 updateItem(myFeatures, featuresItems(myParametersList, aFeatureList));
312 void ParametersPlugin_WidgetParamsMgr::updateParametersPart()
314 updateItem(myParameters, parametersItems(myParametersList));
315 bool aIsValid = isValid();
316 enableButtons(aIsValid);
320 QList<QStringList> ParametersPlugin_WidgetParamsMgr::
321 featuresItems(const QList<FeaturePtr>& theFeatures, QList<FeaturePtr>& theFeatureList) const
323 QList<QStringList> aItemsList;
324 ResultParameterPtr aParam;
325 foreach(FeaturePtr aParameter, theFeatures) {
326 aParam = std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aParameter->firstResult());
327 const std::set<std::shared_ptr<ModelAPI_Attribute>>& aRefs = aParam->data()->refsToMe();
328 std::set<std::shared_ptr<ModelAPI_Attribute> >::const_iterator aIt;
329 for(aIt = aRefs.cbegin(); aIt != aRefs.cend(); aIt++) {
330 std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
331 FeaturePtr aReferenced = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
332 if (aReferenced.get()) {
333 if (aReferenced->getKind() == ParametersPlugin_Parameter::ID()) {
334 // Find referenced feature Recursive
335 QList<FeaturePtr> aList;
336 aList.append(aReferenced);
337 QList<QStringList> aItems = featuresItems(aList, theFeatureList);
338 aItemsList.append(aItems);
340 if (!theFeatureList.contains(aReferenced)) {
341 QStringList aValNames;
342 aValNames << aReferenced->data()->name().c_str();
344 AttributeDoublePtr aDouble =
345 std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(aAttr);
347 aValNames << aDouble->text().c_str();
348 aValNames << QString::number(aDouble->value());
350 AttributeIntegerPtr aInt =
351 std::dynamic_pointer_cast<ModelAPI_AttributeInteger>(aAttr);
353 aValNames << aInt->text().c_str();
354 aValNames << QString::number(aInt->value());
357 aItemsList.append(aValNames);
358 theFeatureList.append(aReferenced);
368 QList<QStringList> ParametersPlugin_WidgetParamsMgr::
369 parametersItems(const QList<FeaturePtr>& theFeatures) const
371 std::list<std::string> aArgs;
373 QList<QStringList> aItemsList;
374 foreach(FeaturePtr aParameter, theFeatures) {
375 ResultPtr aParam = aParameter->firstResult();
378 std::string aName = aParameter->string(ParametersPlugin_Parameter::VARIABLE_ID())->value();
382 aValues << aName.c_str();
384 std::string aExpr = aParameter->string(ParametersPlugin_Parameter::EXPRESSION_ID())->value();
388 aValues << aExpr.c_str();
391 aParameter->data()->string(ParametersPlugin_Parameter::EXPRESSION_ERROR_ID())->value();
393 AttributeDoublePtr aValueAttribute = aParam->data()->real(ModelAPI_ResultParameter::VALUE());
394 aValues << QString::number(aValueAttribute->value());
396 aValues << aErr.c_str();
398 aValues << aParameter->string(ParametersPlugin_Parameter::COMMENT_ID())->value().c_str();
399 aItemsList.append(aValues);
405 void ParametersPlugin_WidgetParamsMgr::onDoubleClick(const QModelIndex& theIndex)
407 if (myDelegate->isEditable(theIndex)) {
408 myTable->setCurrentIndex(theIndex);
409 myTable->edit(theIndex);
413 void ParametersPlugin_WidgetParamsMgr::onCloseEditor(QWidget* theEditor,
414 QAbstractItemDelegate::EndEditHint theHint)
416 FeaturePtr aFeature = myParametersList.at(myDelegate->editIndex().row());
417 QTreeWidgetItem* aItem = myParameters->child(myDelegate->editIndex().row());
418 int aColumn = myDelegate->editIndex().column();
419 QString aText = aItem->text(aColumn);
420 bool isModified = false;
425 AttributeStringPtr aStringAttr = aFeature->string(ParametersPlugin_Parameter::VARIABLE_ID());
426 if (!aText.isEmpty()) {
427 while (aText.indexOf(" ") != -1) {
428 aText.replace(" ", "");
430 if (hasName(aText)) {
431 myMessage = tr("Name '%1' already exists.").arg(aText);
432 QTimer::singleShot(50, this, SLOT(sendWarning()));
435 aStringAttr->setValue(aText.toStdString());
442 AttributeStringPtr aStringAttr =
443 aFeature->string(ParametersPlugin_Parameter::EXPRESSION_ID());
444 if (!aText.isEmpty()) {
445 if (aText != aStringAttr->value().c_str()) {
446 aStringAttr->setValue(aText.toStdString());
455 AttributeStringPtr aStringAttr = aFeature->string(ParametersPlugin_Parameter::COMMENT_ID());
456 aStringAttr->setValue(aText.toStdString());
464 Events_Loop* aLoop = Events_Loop::loop();
465 aLoop->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED));
466 aLoop->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
467 aLoop->flush(Events_Loop::eventByName(EVENT_OBJECT_DELETED));
469 if (aColumn != Col_Comment)
470 updateParametersPart();
471 updateFeaturesPart();
473 onSelectionChanged();
476 void ParametersPlugin_WidgetParamsMgr::updateItem(QTreeWidgetItem* theItem,
477 const QList<QStringList>& theFeaturesList)
479 if (theFeaturesList.count() != theItem->childCount()) {
480 if (theItem->childCount() < theFeaturesList.count()) {
481 while (theItem->childCount() != theFeaturesList.count())
482 theItem->addChild(createNewItem(theItem));
484 while (theItem->childCount() != theFeaturesList.count())
485 theItem->removeChild(theItem->child(theItem->childCount() - 1));
489 foreach(QStringList aFeature, theFeaturesList) {
491 foreach(QString aText, aFeature) {
492 if (aText.length() > 0) {
493 theItem->child(i)->setText(aCol, aText);
494 theItem->child(i)->setToolTip(aCol, aText);
502 FeaturePtr ParametersPlugin_WidgetParamsMgr::createParameter() const
504 SessionPtr aMgr = ModelAPI_Session::get();
505 std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
507 FeaturePtr aFeature = aDoc->addFeature(ParametersPlugin_Parameter::ID());
508 if (aFeature.get()) {
509 Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_CREATED));
510 Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
516 QTreeWidgetItem* ParametersPlugin_WidgetParamsMgr::createNewItem(QTreeWidgetItem* theParent) const
522 QTreeWidgetItem* aItem = new QTreeWidgetItem(aValues);
523 if (theParent == myParameters) {
524 aItem->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
525 aItem->setForeground(2, Qt::darkGray);
527 aItem->setFlags(Qt::NoItemFlags);
532 void ParametersPlugin_WidgetParamsMgr::onAdd()
534 FeaturePtr aFeature = createParameter();
538 myParametersList.append(aFeature);
539 updateParametersPart();
541 QTreeWidgetItem* aItem = myParameters->child(myParameters->childCount() - 1);
543 myTable->scrollToItem(aItem);
544 myTable->setCurrentItem(aItem);
545 myTable->editItem(aItem);
547 enableButtons(false);
550 QTreeWidgetItem* ParametersPlugin_WidgetParamsMgr::selectedItem() const
552 QList<QTreeWidgetItem*> aItemsList = myTable->selectedItems();
553 if (aItemsList.count() == 0)
556 QTreeWidgetItem* aCurrentItem = aItemsList.first();
557 if (aCurrentItem->parent() != myParameters)
564 void ParametersPlugin_WidgetParamsMgr::onInsert()
566 QTreeWidgetItem* aCurrentItem = selectedItem();
570 SessionPtr aMgr = ModelAPI_Session::get();
571 std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
573 FeaturePtr aNewFeature = createParameter();
574 if (!aNewFeature.get())
577 int aCurrentPos = myParameters->indexOfChild(aCurrentItem);
578 if (aCurrentPos == 0) {
579 aDoc->moveFeature(aNewFeature, FeaturePtr());
581 FeaturePtr aCurFeature = myParametersList.at(aCurrentPos - 1);
582 aDoc->moveFeature(aNewFeature, aCurFeature);
584 updateParametersFeatures();
585 updateParametersPart();
587 myTable->scrollToItem(aCurrentItem);
588 myTable->setCurrentItem(aCurrentItem);
589 myTable->editItem(aCurrentItem);
592 void ParametersPlugin_WidgetParamsMgr::onRemove()
594 QTreeWidgetItem* aCurrentItem = selectedItem();
598 SessionPtr aMgr = ModelAPI_Session::get();
599 std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
601 int aCurrentPos = myParameters->indexOfChild(aCurrentItem);
602 FeaturePtr aCurFeature = myParametersList.at(aCurrentPos);
604 QObjectPtrList anObjects;
605 anObjects.append(aCurFeature);
607 std::map<FeaturePtr, std::set<FeaturePtr> > aReferences;
608 std::set<FeaturePtr> aFeatures;
609 ModuleBase_Tools::convertToFeatures(anObjects, aFeatures);
610 ModelAPI_Tools::findAllReferences(aFeatures, aReferences);
612 std::set<FeaturePtr> aFeatureRefsToDelete;
613 if (ModuleBase_Tools::askToDelete(aFeatures, aReferences, this, aFeatureRefsToDelete)) {
614 if (!aFeatureRefsToDelete.empty())
615 aFeatures.insert(aFeatureRefsToDelete.begin(), aFeatureRefsToDelete.end());
616 ModelAPI_Tools::removeFeatures(aFeatures, false);
618 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED));
619 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY));
620 updateParametersFeatures();
621 updateFeaturesPart();
622 updateParametersPart();
626 void ParametersPlugin_WidgetParamsMgr::onUp()
628 QTreeWidgetItem* aCurrentItem = selectedItem();
632 int aCurrentPos = myParameters->indexOfChild(aCurrentItem);
633 if (aCurrentPos == 0)
635 FeaturePtr aCurFeature = myParametersList.at(aCurrentPos);
637 SessionPtr aMgr = ModelAPI_Session::get();
638 std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
640 if (aCurrentPos == 1)
641 aDoc->moveFeature(aCurFeature, FeaturePtr());
643 aDoc->moveFeature(aCurFeature, myParametersList.at(aCurrentPos - 2));
645 // add the updated also the feature that goes down
646 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
647 static Events_ID EVENT_UPD = Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED);
648 ModelAPI_EventCreator::get()->sendUpdated(myParametersList.at(aCurrentPos - 1), EVENT_UPD);
649 Events_Loop::loop()->flush(EVENT_UPD);
650 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
651 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED));
652 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY));
653 updateParametersFeatures();
654 updateParametersPart();
655 updateFeaturesPart();
657 if (aCurrentPos > 0) {
658 aCurrentItem = myParameters->child(aCurrentPos - 1);
659 myTable->setCurrentItem(aCurrentItem);
660 selectItemScroll(aCurrentItem);
664 void ParametersPlugin_WidgetParamsMgr::onDown()
666 QTreeWidgetItem* aCurrentItem = selectedItem();
670 int aCurrentPos = myParameters->indexOfChild(aCurrentItem);
671 if (aCurrentPos == (myParametersList.count() - 1))
673 FeaturePtr aCurFeature = myParametersList.at(aCurrentPos);
675 SessionPtr aMgr = ModelAPI_Session::get();
676 std::shared_ptr<ModelAPI_Document> aDoc = aMgr->activeDocument();
677 aDoc->moveFeature(aCurFeature, myParametersList.at(aCurrentPos + 1));
678 // add the updated also the feature that goes up
679 static Events_ID EVENT_UPD = Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED);
680 ModelAPI_EventCreator::get()->sendUpdated(myParametersList.at(aCurrentPos + 1), EVENT_UPD);
682 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
683 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED));
684 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED));
685 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED));
686 Events_Loop::loop()->flush(Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY));
687 updateParametersFeatures();
688 updateParametersPart();
689 updateFeaturesPart();
691 if (aCurrentPos < myParameters->childCount() - 1) {
692 aCurrentItem = myParameters->child(aCurrentPos + 1);
693 myTable->setCurrentItem(aCurrentItem);
694 selectItemScroll(aCurrentItem);
699 bool ParametersPlugin_WidgetParamsMgr::hasName(const QString& theName) const
701 int aCurrent = myDelegate->editIndex().row();
703 foreach(FeaturePtr aFeature, myParametersList) {
704 if ((i != aCurrent) && (aFeature->data()->name() == theName.toStdString()))
711 void ParametersPlugin_WidgetParamsMgr::sendWarning()
713 QMessageBox::warning(this, tr("Warning"), myMessage);
714 QTreeWidgetItem* aItem = myTable->currentItem();
716 myTable->editItem(aItem);
719 void ParametersPlugin_WidgetParamsMgr::onSelectionChanged()
721 QList<QTreeWidgetItem*> aItemsList = myTable->selectedItems();
722 bool aIsValid = isValid();
724 bool isParameter = false;
725 foreach(QTreeWidgetItem* aItem, aItemsList) {
726 if (aItem->parent() == myParameters) {
731 myInsertBtn->setEnabled(isParameter);
732 //myRemoveBtn->setEnabled(isParameter);
733 myUpBtn->setEnabled(isParameter);
734 myDownBtn->setEnabled(isParameter);
736 myInsertBtn->setEnabled(false);
737 //myRemoveBtn->setEnabled(false);
738 myUpBtn->setEnabled(false);
739 myDownBtn->setEnabled(false);
741 myRemoveBtn->setEnabled(!aItemsList.isEmpty());
744 void ParametersPlugin_WidgetParamsMgr::enableButtons(bool theEnable)
746 myAddBtn->setEnabled(theEnable);
748 onSelectionChanged();
750 myInsertBtn->setEnabled(theEnable);
751 //myRemoveBtn->setEnabled(theEnable);
752 myUpBtn->setEnabled(theEnable);
753 myDownBtn->setEnabled(theEnable);
755 myOkCancelBtn->button(QDialogButtonBox::Ok)->setEnabled(theEnable);
758 bool ParametersPlugin_WidgetParamsMgr::isValid()
760 QTreeWidgetItem* aItem;
761 bool aIsValid = true;
762 for(int i = 0; i < myParameters->childCount(); i++) {
763 aItem = myParameters->child(i);
764 if ((aItem->text(Col_Name) == NoName) ||
765 (aItem->text(Col_Equation) == NoValue) ||
766 (!ModelAPI_Expression::isVariable(aItem->text(Col_Name).toStdString())) ) {