From 0281e543acd0ef758638cec70b0da88153bf2cea Mon Sep 17 00:00:00 2001 From: Adeel Asghar Date: Thu, 2 Nov 2023 14:27:16 +0100 Subject: [PATCH] Added a context menu to allow setting final and each modifiers (#11019) Fixes #5395, Fixes #5405, Fixes #5489, Fixes #5737, Fixes #7750 and Fixes #10226 Apply the modifiers with one call of `setElementModifierValue`. Added a new button for final and each context menu. Improved the handling of modifiers. --- OMEdit/OMEditLIB/Element/Element.cpp | 3 +- .../OMEditLIB/Element/ElementProperties.cpp | 302 ++++++++++++++---- OMEdit/OMEditLIB/Element/ElementProperties.h | 35 +- OMEdit/OMEditLIB/Modeling/Commands.cpp | 10 +- OMEdit/OMEditLIB/Modeling/Model.cpp | 67 ++-- OMEdit/OMEditLIB/Modeling/Model.h | 13 +- .../Modeling/ModelWidgetContainer.cpp | 24 +- .../OMEditLIB/Modeling/ModelWidgetContainer.h | 1 - OMEdit/OMEditLIB/OMC/OMCProxy.cpp | 59 +++- OMEdit/OMEditLIB/OMC/OMCProxy.h | 2 + .../OMEditLIB/Resources/icons/drop-menu.svg | 106 ++++++ .../Resources/icons/fill-horizontal.svg | 95 +++--- .../Resources/icons/fill-vertical.svg | 91 +++--- OMEdit/OMEditLIB/resource_omedit.qrc | 1 + 14 files changed, 606 insertions(+), 203 deletions(-) create mode 100644 OMEdit/OMEditLIB/Resources/icons/drop-menu.svg diff --git a/OMEdit/OMEditLIB/Element/Element.cpp b/OMEdit/OMEditLIB/Element/Element.cpp index 397a1375069..44c835dfbe7 100644 --- a/OMEdit/OMEditLIB/Element/Element.cpp +++ b/OMEdit/OMEditLIB/Element/Element.cpp @@ -3568,7 +3568,8 @@ void Element::duplicate() ModelInstance::Component *pModelInstanceComponent = GraphicsView::createModelInstanceComponent(mpGraphicsView->getModelWidget()->getModelInstance(), name, getClassName()); mpGraphicsView->addElementToView(pModelInstanceComponent, false, true, false, QPointF(0, 0), getOMCPlacementAnnotation(gridStep), false); // set modifiers - GraphicsView::setModifiers(mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure(), name, "", mpModelComponent->getModifier()); + MainWindow::instance()->getOMCProxy()->setElementModifierValue(mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure(), name, + mpModelComponent->getModifier().toString()); } else { mpElementInfo->getModifiersMap(MainWindow::instance()->getOMCProxy(), mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getNameStructure(), this); ElementInfo *pElementInfo = new ElementInfo(mpElementInfo); diff --git a/OMEdit/OMEditLIB/Element/ElementProperties.cpp b/OMEdit/OMEditLIB/Element/ElementProperties.cpp index e2d90a284d7..61715ad01a4 100644 --- a/OMEdit/OMEditLIB/Element/ElementProperties.cpp +++ b/OMEdit/OMEditLIB/Element/ElementProperties.cpp @@ -51,6 +51,70 @@ #include #include +/*! + * \class FinalEachToolButton + * \brief Creates a toolbutton with drop menu for final and each modifiers. + */ +/*! + * \brief FinalEachToolButton::FinalEachToolButton + * \param canHaveEach + * \param parent + */ +FinalEachToolButton::FinalEachToolButton(bool canHaveEach, QWidget *parent) + : QToolButton(parent) +{ + setIcon(QIcon(":/Resources/icons/drop-menu.svg")); + setAutoRaise(true); + // create a menu + mpFinalEachMenu = new QMenu; + // final action + mpFinalAction = new QAction("final"); + mpFinalAction->setCheckable(true); + mpFinalEachMenu->addAction(mpFinalAction); + // each action + mpEachAction = new QAction("each"); + mpEachAction->setCheckable(true); + if (canHaveEach) { + mpFinalEachMenu->addAction(mpEachAction); + } + connect(this, SIGNAL(clicked()), SLOT(showParameterMenu())); +} + +void FinalEachToolButton::setFinal(bool final) +{ + mpFinalAction->setChecked(final); + mFinalDefault = final; +} + +void FinalEachToolButton::setEach(bool each) +{ + mpEachAction->setChecked(each); + mEachDefault = each; +} + +/*! + * \brief FinalEachToolButton::isModified + * \return true if final or each are modified. + */ +bool FinalEachToolButton::isModified() const +{ + if (mFinalDefault != isFinal() || mEachDefault != isEach()) { + return true; + } else { + return false; + } +} + +/*! + * \brief FinalEachToolButton::showParameterMenu + * Slot activated when clicked SIGNAL is raised. + * Shows the menu. + */ +void FinalEachToolButton::showParameterMenu() +{ + mpFinalEachMenu->exec(mapToGlobal(QPoint(0, 0))); +} + /*! * \class Parameter * \brief Defines one parameter. Creates name, value, unit and comment GUI controls. @@ -187,6 +251,7 @@ Parameter::Parameter(ModelInstance::Element *pElement, ElementParameters *pEleme mpFixedCheckBox = new FixedCheckBox; connect(mpFixedCheckBox, SIGNAL(clicked()), SLOT(showFixedMenu())); setFixedState("", true); + mpFixedFinalEachMenuButton = new FinalEachToolButton(mpModelInstanceElement->getDimensions().isArray()); // set the value type based on element type. if (mpModelInstanceElement->getRootType().compare(QStringLiteral("Boolean")) == 0) { if (mpModelInstanceElement->getAnnotation()->getChoices().isCheckBox() || mpModelInstanceElement->getAnnotation()-> getChoices().isDymolaCheckBox()) { @@ -205,7 +270,7 @@ Parameter::Parameter(ModelInstance::Element *pElement, ElementParameters *pEleme } if (mpModelInstanceElement->getModel() || mpModelInstanceElement->isShortClassDefinition()) { mpEditRedeclareClassButton = new QToolButton; - mpEditRedeclareClassButton->setIcon( QIcon(":/Resources/icons/edit-icon.svg")); + mpEditRedeclareClassButton->setIcon(QIcon(":/Resources/icons/edit-icon.svg")); mpEditRedeclareClassButton->setToolTip(tr("Edit")); mpEditRedeclareClassButton->setAutoRaise(true); connect(mpEditRedeclareClassButton, SIGNAL(clicked()), SLOT(editRedeclareClassButtonClicked())); @@ -217,6 +282,8 @@ Parameter::Parameter(ModelInstance::Element *pElement, ElementParameters *pEleme } else { mValueType = Parameter::Normal; } + // final and each menu + mpFinalEachMenuButton = new FinalEachToolButton(mpModelInstanceElement->getDimensions().isArray()); mValueCheckBoxModified = false; mDefaultValue = ""; mpFileSelectorButton = new QToolButton; @@ -261,6 +328,8 @@ Parameter::Parameter(ModelInstance::Element *pElement, ElementParameters *pEleme mpUnitComboBox->setCurrentIndex(1); } connect(mpUnitComboBox, SIGNAL(currentIndexChanged(int)), SLOT(unitComboBoxChanged(int))); + mpDisplayUnitFinalEachMenuButton = new FinalEachToolButton(mpModelInstanceElement->getDimensions().isArray()); + // comment const QString comment = mpModelInstanceElement->getComment(); mpCommentLabel = new Label(comment); @@ -270,7 +339,7 @@ Parameter::Parameter(ModelInstance::Element *pElement, ElementParameters *pEleme } else if (mValueType == Parameter::ReplaceableComponent) { QString value = "redeclare " % mpModelInstanceElement->getType() % " " % mpModelInstanceElement->getName(); - QString modifiers = mpModelInstanceElement->getModifier().getValueWithSubModifiers(); + QString modifiers = mpModelInstanceElement->getModifier().toString(); if (!modifiers.isEmpty()) { if (modifiers.startsWith("(")) { value = value % modifiers; @@ -280,7 +349,7 @@ Parameter::Parameter(ModelInstance::Element *pElement, ElementParameters *pEleme } setValueWidget(value, true, mUnit); } else { - mpElementParameters->applyFinalStartFixedAndDisplayUnitModifiers(this, mpModelInstanceElement->getModifier(), true, false); + mpElementParameters->applyFinalStartFixedAndDisplayUnitModifiers(this, mpModelInstanceElement->getModifier(), true, false, true); } update(); } @@ -454,12 +523,12 @@ bool Parameter::isValueModified() case Parameter::ReplaceableComponent: case Parameter::Choices: case Parameter::ChoicesAllMatching: - return mpValueComboBox->lineEdit()->isModified(); + return mpValueComboBox->lineEdit()->isModified() || isValueModifiedHelper(); case Parameter::CheckBox: - return mValueCheckBoxModified; + return mValueCheckBoxModified || isValueModifiedHelper(); case Parameter::Normal: default: - return mpValueTextBox->isModified(); + return mpValueTextBox->isModified() || isValueModifiedHelper(); } } @@ -737,6 +806,30 @@ void Parameter::updateValueBinding(const FlatModelica::Expression expression) } } +/*! + * \brief Parameter::isValueModifiedHelper + * \return + */ +bool Parameter::isValueModifiedHelper() const +{ + const QString unit = mpUnitComboBox->itemData(mpUnitComboBox->currentIndex()).toString(); + /* if final each are modified + * OR if fixed is modified + * OR if fixed final each are modified + * OR if displayUnit is modified + * OR if displayUnit final each are modified + */ + if ((mpFinalEachMenuButton && mpFinalEachMenuButton->isModified()) + || (isShowStartAndFixed() && getFixedState().compare(getOriginalFixedValue()) != 0) + || (isShowStartAndFixed() && mpFixedFinalEachMenuButton && mpFixedFinalEachMenuButton->isModified()) + || (mpUnitComboBox->isEnabled() && !unit.isEmpty() && mDisplayUnit.compare(unit) != 0) + || (mpDisplayUnitFinalEachMenuButton && mpDisplayUnitFinalEachMenuButton->isModified())) { + return true; + } else { + return false; + } +} + /*! * \brief Parameter::editRedeclareClassButtonClicked * Slot activate when mpEditRedeclareClassButton clicked signal is raised. @@ -1161,14 +1254,15 @@ QString ElementParameters::getElementParentClassName() const * \param modifier * \param defaultValue * \param isElementModification + * \param checkFinal */ -void ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(Parameter *pParameter, const ModelInstance::Modifier &modifier, bool defaultValue, bool isElementModification) +void ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(Parameter *pParameter, const ModelInstance::Modifier &modifier, bool defaultValue, bool isElementModification, bool checkFinal) { if (pParameter) { /* Ticket #2531 * Check if parameter is marked final. */ - if (modifier.isFinal() || (!isElementModification && modifier.isRedeclare() && !modifier.isReplaceable())) { + if ((checkFinal && modifier.isFinal()) || (!isElementModification && modifier.isRedeclare() && !modifier.isReplaceable())) { mParametersList.removeOne(pParameter); delete pParameter; } else { @@ -1186,23 +1280,30 @@ void ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(Parameter *p pParameter->setShowStartAndFixed(true); } if (hasStart) { - pParameter->setValueWidget(StringHandler::removeFirstLastQuotes(modifier.getModifier("start")), defaultValue, pParameter->getUnit(), mNested); + ModelInstance::Modifier startModifier = modifier.getModifier("start"); + pParameter->setValueWidget(StringHandler::removeFirstLastQuotes(startModifier.getValue()), defaultValue, pParameter->getUnit(), mNested); + pParameter->getFinalEachMenu()->setFinal(startModifier.isFinal()); + pParameter->getFinalEachMenu()->setEach(startModifier.isEach()); } if (hasFixed) { - pParameter->setFixedState(StringHandler::removeFirstLastQuotes(modifier.getModifier("fixed")), defaultValue); + ModelInstance::Modifier fixedModifier = modifier.getModifier("fixed"); + pParameter->setFixedState(StringHandler::removeFirstLastQuotes(fixedModifier.getValue()), defaultValue); + pParameter->getFixedFinalEachMenu()->setFinal(fixedModifier.isFinal()); + pParameter->getFixedFinalEachMenu()->setEach(fixedModifier.isEach()); } } else { pParameter->setValueWidget(value, defaultValue, pParameter->getUnit(), mNested); } } else { // if not builtin type then use all sub modifiers - QString modifierValue = modifier.getValueWithSubModifiers(); + QString modifierValue = modifier.toString(); if (modifierValue.startsWith("(")) { modifierValue = pParameter->getModelInstanceElement()->getName() % modifierValue; } pParameter->setValueWidget(modifierValue, defaultValue, pParameter->getUnit(), mNested); } // displayUnit - QString displayUnit = StringHandler::removeFirstLastQuotes(modifier.getModifier("displayUnit")); + ModelInstance::Modifier displayUnitModifier = modifier.getModifier("displayUnit"); + QString displayUnit = StringHandler::removeFirstLastQuotes(displayUnitModifier.getValue()); if (!displayUnit.isEmpty()) { int index = pParameter->getUnitComboBox()->findData(displayUnit); if (index < 0) { @@ -1212,12 +1313,19 @@ void ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(Parameter *p if (index > -1 && (pOMCProxy->convertUnits(pParameter->getUnitComboBox()->itemData(0).toString(), displayUnit)).unitsCompatible) { pParameter->getUnitComboBox()->addItem(Utilities::convertUnitToSymbol(displayUnit), displayUnit); - index ++; + index++; } } if (index > -1) { + bool signalsState = pParameter->getUnitComboBox()->blockSignals(true); pParameter->getUnitComboBox()->setCurrentIndex(index); + pParameter->getUnitComboBox()->blockSignals(signalsState); pParameter->setDisplayUnit(displayUnit); + if (!defaultValue) { + pParameter->setHasDisplayUnit(true); + } + pParameter->getDisplayUnitFinalEachMenu()->setFinal(displayUnitModifier.isFinal()); + pParameter->getDisplayUnitFinalEachMenu()->setEach(displayUnitModifier.isEach()); } } } @@ -1317,8 +1425,10 @@ void ElementParameters::setUpDialog() pGroupBoxGridLayout->addWidget(pParameter->getNameLabel(), layoutIndex, columnIndex++); if (pParameter->isShowStartAndFixed()) { pGroupBoxGridLayout->addWidget(pParameter->getFixedCheckBox(), layoutIndex, columnIndex++); + pGroupBoxGridLayout->addWidget(pParameter->getFixedFinalEachMenu(), layoutIndex, columnIndex++); } else { pGroupBoxGridLayout->addItem(new QSpacerItem(1, 1), layoutIndex, columnIndex++); + pGroupBoxGridLayout->addItem(new QSpacerItem(1, 1), layoutIndex, columnIndex++); } pGroupBoxGridLayout->addWidget(pParameter->getValueWidget(), layoutIndex, columnIndex++); @@ -1327,7 +1437,7 @@ void ElementParameters::setUpDialog() } else { pGroupBoxGridLayout->addItem(new QSpacerItem(1, 1), layoutIndex, columnIndex++); } - + pGroupBoxGridLayout->addWidget(pParameter->getFinalEachMenu(), layoutIndex, columnIndex++); if (pParameter->getLoadSelectorFilter().compare("-") != 0 || pParameter->getLoadSelectorCaption().compare("-") != 0 || pParameter->getSaveSelectorFilter().compare("-") != 0 || pParameter->getSaveSelectorCaption().compare("-") != 0) { pGroupBoxGridLayout->addWidget(pParameter->getFileSelectorButton(), layoutIndex, columnIndex++); @@ -1343,8 +1453,10 @@ void ElementParameters::setUpDialog() } else { pGroupBoxGridLayout->addWidget(pParameter->getUnitComboBox(), layoutIndex, columnIndex++); } + pGroupBoxGridLayout->addWidget(pParameter->getDisplayUnitFinalEachMenu(), layoutIndex, columnIndex++); } else { pGroupBoxGridLayout->addItem(new QSpacerItem(1, 1), layoutIndex, columnIndex++); + pGroupBoxGridLayout->addItem(new QSpacerItem(1, 1), layoutIndex, columnIndex++); } pGroupBoxGridLayout->addWidget(pParameter->getCommentLabel(), layoutIndex, columnIndex++); } @@ -1467,7 +1579,7 @@ void ElementParameters::fetchElementExtendsModifiers(ModelInstance::Model *pMode fetchElementExtendsModifiers(pExtend->getModel()); foreach (auto modifier, pExtend->getModifier().getModifiers()) { Parameter *pParameter = findParameter(modifier.getName()); - applyFinalStartFixedAndDisplayUnitModifiers(pParameter, modifier, true, false); + applyFinalStartFixedAndDisplayUnitModifiers(pParameter, modifier, true, false, true); } } } @@ -1481,7 +1593,12 @@ void ElementParameters::fetchElementModifiers() { foreach (auto modifier, mpElement->getModifier().getModifiers()) { Parameter *pParameter = findParameter(modifier.getName()); - ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(pParameter, modifier, mInherited || mNested, true); + ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(pParameter, modifier, mInherited || mNested, true, false); + // set final and each checkboxes in the menu + if (pParameter && !pParameter->isShowStartAndFixed()) { + pParameter->getFinalEachMenu()->setFinal(modifier.isFinal()); + pParameter->getFinalEachMenu()->setEach(modifier.isEach()); + } } } @@ -1503,7 +1620,7 @@ void ElementParameters::fetchClassExtendsModifiers(ModelInstance::Element *pMode if (modifier.getName().compare(mpElement->getName()) == 0) { foreach (auto subModifier, modifier.getModifiers()) { Parameter *pParameter = findParameter(subModifier.getName()); - applyFinalStartFixedAndDisplayUnitModifiers(pParameter, subModifier, hasParentElement, false); + applyFinalStartFixedAndDisplayUnitModifiers(pParameter, subModifier, hasParentElement, false, true); } break; } @@ -1526,7 +1643,12 @@ void ElementParameters::applyModifiers(const ModelInstance::Modifier modifiers, if (mNested) { foreach (auto modifier, modifiers.getModifiers()) { Parameter *pParameter = findParameter(modifier.getName()); - ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(pParameter, modifier, defaultValue, false); + ElementParameters::applyFinalStartFixedAndDisplayUnitModifiers(pParameter, modifier, defaultValue, false, !mNested); + // set final and each checkboxes in the menu + if (pParameter && !pParameter->isShowStartAndFixed()) { + pParameter->getFinalEachMenu()->setFinal(modifier.isFinal()); + pParameter->getFinalEachMenu()->setEach(modifier.isEach()); + } } } } @@ -1589,6 +1711,9 @@ typedef struct { QString mKey; QString mValue; bool mIsReplaceable; + bool mFinal; + bool mEach; + bool mStartAndFixed; } ElementModifier; /*! @@ -1612,8 +1737,14 @@ void ElementParameters::updateElementParameters() } ElementModifier elementModifier; elementModifier.mKey = pParameter->getNameLabel()->text(); + if (pParameter->isShowStartAndFixed()) { + elementModifier.mKey.replace(".start", ""); + } QString elementModifierValue = pParameter->getValue(); elementModifier.mIsReplaceable = (pParameter->getValueType() == Parameter::ReplaceableClass || pParameter->getValueType() == Parameter::ReplaceableComponent); + elementModifier.mFinal = pParameter->getFinalEachMenu()->isFinal(); + elementModifier.mEach = pParameter->getFinalEachMenu()->isEach(); + elementModifier.mStartAndFixed = pParameter->isShowStartAndFixed(); // convert the value to display unit if (!pParameter->getUnit().isEmpty() && pParameter->getUnit().compare(pParameter->getUnitComboBox()->itemData(pParameter->getUnitComboBox()->currentIndex()).toString()) != 0) { bool ok = true; @@ -1629,32 +1760,61 @@ void ElementParameters::updateElementParameters() elementModifierValue = Utilities::arrayExpressionUnitConversion(pOMCProxy, elementModifierValue, pParameter->getUnitComboBox()->itemData(pParameter->getUnitComboBox()->currentIndex()).toString(), pParameter->getUnit()); } } - elementModifier.mValue = elementModifierValue; + + QStringList subModifiers; + // if value is changed if (pParameter->isValueModified()) { valueChanged = true; - elementModifiersList.append(elementModifier); - } - if (pParameter->isShowStartAndFixed() && (pParameter->getFixedState().compare(pParameter->getOriginalFixedValue()) != 0)) { - valueChanged = true; - elementModifier.mKey.replace(".start", ".fixed"); - elementModifier.mValue = pParameter->getFixedState(); - elementModifiersList.append(elementModifier); - } - // remove the .start or .fixed from modifier key - if (pParameter->isShowStartAndFixed()) { - if (elementModifier.mKey.endsWith(".start")) { - elementModifier.mKey.chop(QString(".start").length()); + // set start value + if (pParameter->isShowStartAndFixed()) { + QString startModifier; + if (pParameter->getFinalEachMenu()->isEach()) { + startModifier.append("each "); + } + if (pParameter->getFinalEachMenu()->isFinal()) { + startModifier.append("final "); + } + if (elementModifierValue.isEmpty()) { + subModifiers.append(startModifier.append("start")); + } else { + subModifiers.append(startModifier.append("start=" % elementModifierValue)); + } + // set fixed + QString fixedModifier; + if (pParameter->getFixedFinalEachMenu()->isEach()) { + fixedModifier.append("each "); + } + if (pParameter->getFixedFinalEachMenu()->isFinal()) { + fixedModifier.append("final "); + } + if (pParameter->getFixedState().isEmpty()) { + subModifiers.append(fixedModifier.append("fixed")); + } else { + subModifiers.append(fixedModifier.append("fixed=" % pParameter->getFixedState())); + } } - if (elementModifier.mKey.endsWith(".fixed")) { - elementModifier.mKey.chop(QString(".fixed").length()); + // set displayUnit + const QString unit = pParameter->getUnitComboBox()->itemData(pParameter->getUnitComboBox()->currentIndex()).toString(); + // if displayUnit is changed OR if we already have the displayUnit modifier then set it + if (pParameter->getUnitComboBox()->isEnabled() && !unit.isEmpty() && (pParameter->hasDisplayUnit() || pParameter->getDisplayUnit().compare(unit) != 0)) { + QString displayUnitModifier; + if (pParameter->getDisplayUnitFinalEachMenu()->isEach()) { + displayUnitModifier.append("each "); + } + if (pParameter->getDisplayUnitFinalEachMenu()->isFinal()) { + displayUnitModifier.append("final "); + } + subModifiers.append(displayUnitModifier.append("displayUnit=\"" % unit % "\"")); + } + // join the submodifiers + if (!subModifiers.isEmpty()) { + elementModifier.mKey.append("(" % subModifiers.join(",") % ")"); + } + if (pParameter->isShowStartAndFixed()) { + elementModifier.mValue = ""; + } else { + elementModifier.mValue = elementModifierValue; } - } - // if displayUnit is changed - const QString unit = pParameter->getUnitComboBox()->itemData(pParameter->getUnitComboBox()->currentIndex()).toString(); - if (pParameter->getUnitComboBox()->isEnabled() && !unit.isEmpty() && pParameter->getDisplayUnit().compare(unit) != 0) { - valueChanged = true; - elementModifier.mKey = elementModifier.mKey % ".displayUnit"; - elementModifier.mValue = "\"" + unit + "\""; elementModifiersList.append(elementModifier); } } @@ -1684,39 +1844,57 @@ void ElementParameters::updateElementParameters() } // if valueChanged is true then put the change in the undo stack. if (valueChanged) { - if (mNested) { - QStringList modifications; - foreach (ElementModifier elementModifier, elementModifiersList) { - QString modifierValue = elementModifier.mValue.trimmed(); - if (!modifierValue.isEmpty()) { - if (elementModifier.mIsReplaceable) { - modifications.append(modifierValue); - } else { - modifications.append(elementModifier.mKey % "=" % modifierValue); - } + // apply the new Component modifiers if any + QStringList modifiersList; + foreach (ElementModifier elementModifier, elementModifiersList) { + QString modifierValue; + if (elementModifier.mValue.isEmpty()) { + modifierValue = QString(elementModifier.mKey); + } else if (elementModifier.mValue.startsWith(QStringLiteral("redeclare")) || elementModifier.mValue.startsWith(elementModifier.mKey)) { + modifierValue = QString(elementModifier.mValue); + } else { + modifierValue = QString(elementModifier.mKey % " = " % elementModifier.mValue); + } + // if startandfixed then the final and each are handled with the start value. + if (!elementModifier.mStartAndFixed) { + QString modifier; + // if each + if (elementModifier.mEach) { + modifier.append("each "); + } + // if final + if (elementModifier.mFinal) { + modifier.append("final "); + } + // handle redeclare + if (modifierValue.startsWith(QStringLiteral("redeclare"))) { + modifierValue.replace("redeclare ", "redeclare " % modifier); + } else { + modifierValue.prepend(modifier); } } - if (modifications.isEmpty()) { + modifiersList.append(modifierValue); + } + if (mNested) { + if (modifiersList.isEmpty()) { mModification.clear(); } else { - mModification = "(" % modifications.join(",") % ")"; + mModification = "(" % modifiersList.join(", ") % ")"; } } else { - // apply the new Component modifiers if any - foreach (ElementModifier elementModifier, elementModifiersList) { - QString modifierKey = QString(mpElement->getName() % "." % elementModifier.mKey); - QString modifierValue = elementModifier.mValue; + QString modifiers = modifiersList.join(", "); + if (!modifiers.isEmpty()) { // if the element is inherited then add the modifier value into the extends. if (mInherited) { - pOMCProxy->setExtendsModifierValue(className, mpElement->getTopLevelExtendName(), modifierKey, modifierValue); + pOMCProxy->setExtendsModifierValue(className, mpElement->getTopLevelExtendName(), mpElement->getName(), modifiers); } else { - pOMCProxy->setElementModifierValue(className, modifierKey, modifierValue); + pOMCProxy->setElementModifierValue(className, mpElement->getName(), modifiers); } + ModelInfo newModelInfo = pModelWidget->createModelInfo(); + pModelWidget->getUndoStack()->push(new OMCUndoCommand(pModelWidget->getLibraryTreeItem(), oldModelInfo, newModelInfo, + QString("Update Element %1 Parameters").arg(mpElement->getName()))); + pModelWidget->updateModelText(); } - ModelInfo newModelInfo = pModelWidget->createModelInfo(); - pModelWidget->getUndoStack()->push(new OMCUndoCommand(pModelWidget->getLibraryTreeItem(), oldModelInfo, newModelInfo, - QString("Update Element %1 Parameters").arg(mpElement->getName()))); - pModelWidget->updateModelText(); } } accept(); diff --git a/OMEdit/OMEditLIB/Element/ElementProperties.h b/OMEdit/OMEditLIB/Element/ElementProperties.h index d8727509494..10890bea5d2 100644 --- a/OMEdit/OMEditLIB/Element/ElementProperties.h +++ b/OMEdit/OMEditLIB/Element/ElementProperties.h @@ -39,6 +39,27 @@ #include +class FinalEachToolButton : public QToolButton +{ + Q_OBJECT +public: + FinalEachToolButton(bool canHaveEach, QWidget *parent = nullptr); + + void setFinal(bool final); + bool isFinal() const {return mpFinalAction->isChecked();} + void setEach(bool each); + bool isEach() const {return mpEachAction->isChecked();} + bool isModified() const; +private: + QMenu *mpFinalEachMenu; + QAction *mpFinalAction; + bool mFinalDefault = false; + QAction *mpEachAction; + bool mEachDefault = false; +public slots: + void showParameterMenu(); +}; + class ElementParametersOld; class ElementParameters; class Parameter : public QObject @@ -74,7 +95,8 @@ class Parameter : public QObject void updateNameLabel(); Label* getNameLabel() {return mpNameLabel;} FixedCheckBox* getFixedCheckBox() {return mpFixedCheckBox;} - QString getOriginalFixedValue() {return mOriginalFixedValue;} + QString getOriginalFixedValue() const {return mOriginalFixedValue;} + FinalEachToolButton *getFixedFinalEachMenu() const {return mpFixedFinalEachMenuButton;} void setValueType(ValueType valueType) {mValueType = valueType;} void setValueWidget(QString value, bool defaultValue, QString fromUnit, bool valueModified = false, bool adjustSize = true, bool unitComboBoxChanged = false); ValueType getValueType() {return mValueType;} @@ -82,6 +104,7 @@ class Parameter : public QObject bool isValueModified(); QString getValue(); QToolButton *getEditRedeclareClassButton() const {return mpEditRedeclareClassButton;} + FinalEachToolButton *getFinalEachMenu() const {return mpFinalEachMenuButton;} QToolButton* getFileSelectorButton() {return mpFileSelectorButton;} void setLoadSelectorFilter(QString loadSelectorFilter) {mLoadSelectorFilter = loadSelectorFilter;} QString getLoadSelectorFilter() {return mLoadSelectorFilter;} @@ -91,10 +114,13 @@ class Parameter : public QObject QString getSaveSelectorFilter() {return mSaveSelectorFilter;} void setSaveSelectorCaption(QString saveSelectorCaption) {mSaveSelectorCaption = saveSelectorCaption;} QString getSaveSelectorCaption() {return mSaveSelectorCaption;} + void setHasDisplayUnit(bool hasDisplayUnit) {mHasDisplayUnit = hasDisplayUnit;} + bool hasDisplayUnit() const {return mHasDisplayUnit;} QString getUnit() {return mUnit;} void setDisplayUnit(QString displayUnit) {mDisplayUnit = displayUnit;} QString getDisplayUnit() {return mDisplayUnit;} QComboBox* getUnitComboBox() {return mpUnitComboBox;} + FinalEachToolButton *getDisplayUnitFinalEachMenu() const {return mpDisplayUnitFinalEachMenuButton;} Label* getCommentLabel() {return mpCommentLabel;} void setFixedState(QString fixed, bool defaultValue); QString getFixedState() const; @@ -122,6 +148,7 @@ class Parameter : public QObject Label *mpNameLabel; FixedCheckBox *mpFixedCheckBox; QString mOriginalFixedValue; + FinalEachToolButton *mpFixedFinalEachMenuButton = 0; ValueType mValueType; bool mValueCheckBoxModified; QString mDefaultValue; @@ -129,16 +156,20 @@ class Parameter : public QObject QLineEdit *mpValueTextBox; QCheckBox *mpValueCheckBox; QToolButton *mpEditRedeclareClassButton = 0; + FinalEachToolButton *mpFinalEachMenuButton = 0; QToolButton *mpFileSelectorButton; + bool mHasDisplayUnit = false; QString mUnit; QString mDisplayUnit; QString mPreviousUnit; QComboBox *mpUnitComboBox; + FinalEachToolButton *mpDisplayUnitFinalEachMenuButton = 0; Label *mpCommentLabel; void createValueWidget(); void enableDisableUnitComboBox(const QString &value); void updateValueBinding(const FlatModelica::Expression expression); + bool isValueModifiedHelper() const; public slots: void editRedeclareClassButtonClicked(); void fileSelectorButtonClicked(); @@ -193,7 +224,7 @@ class ElementParameters : public QDialog GraphicsView *getGraphicsView() const {return mpGraphicsView;} bool isInherited() const {return mInherited;} QString getModification() const {return mModification;} - void applyFinalStartFixedAndDisplayUnitModifiers(Parameter *pParameter, const ModelInstance::Modifier &modifier, bool defaultValue, bool isElementModification); + void applyFinalStartFixedAndDisplayUnitModifiers(Parameter *pParameter, const ModelInstance::Modifier &modifier, bool defaultValue, bool isElementModification, bool checkFinal); void updateParameters(); private: ModelInstance::Element *mpElement; diff --git a/OMEdit/OMEditLIB/Modeling/Commands.cpp b/OMEdit/OMEditLIB/Modeling/Commands.cpp index da91b616ca8..0705080bf56 100644 --- a/OMEdit/OMEditLIB/Modeling/Commands.cpp +++ b/OMEdit/OMEditLIB/Modeling/Commands.cpp @@ -566,7 +566,7 @@ void UpdateElementAttributesCommand::updateComponentModifiers(Element *pComponen for (modifiersIterator = modifiers.begin(); modifiersIterator != modifiers.end(); ++modifiersIterator) { QString modifierName = QString(pComponent->getName()).append(".").append(modifiersIterator.key()); QString modifierValue = modifiersIterator.value(); - if (MainWindow::instance()->getOMCProxy()->setElementModifierValue(modelName, modifierName, modifierValue)) { + if (MainWindow::instance()->getOMCProxy()->setElementModifierValueOld(modelName, modifierName, modifierValue)) { modifierValueChanged = true; } } @@ -606,7 +606,7 @@ void UpdateElementParametersCommand::redoInternal() for (componentModifier = mNewComponentModifiersMap.begin(); componentModifier != mNewComponentModifiersMap.end(); ++componentModifier) { QString modifierValue = componentModifier.value(); QString modifierKey = QString(mpComponent->getName()).append(".").append(componentModifier.key()); - pOMCProxy->setElementModifierValue(className, modifierKey, modifierValue); + pOMCProxy->setElementModifierValueOld(className, modifierKey, modifierValue); } // we want to load modifiers even if they are loaded already mpComponent->getElementInfo()->setModifiersLoaded(false); @@ -618,7 +618,7 @@ void UpdateElementParametersCommand::redoInternal() QMap::iterator componentExtendsModifier; for (componentExtendsModifier = mNewComponentExtendsModifiersMap.begin(); componentExtendsModifier != mNewComponentExtendsModifiersMap.end(); ++componentExtendsModifier) { QString modifierValue = componentExtendsModifier.value(); - pOMCProxy->setExtendsModifierValue(className, inheritedClassName, componentExtendsModifier.key(), modifierValue); + pOMCProxy->setExtendsModifierValueOld(className, inheritedClassName, componentExtendsModifier.key(), modifierValue); } mpComponent->getGraphicsView()->getModelWidget()->fetchExtendsModifiers(inheritedClassName); } @@ -641,7 +641,7 @@ void UpdateElementParametersCommand::undo() for (componentModifier = mOldComponentModifiersMap.begin(); componentModifier != mOldComponentModifiersMap.end(); ++componentModifier) { QString modifierValue = componentModifier.value(); QString modifierKey = QString(mpComponent->getName()).append(".").append(componentModifier.key()); - pOMCProxy->setElementModifierValue(className, modifierKey, modifierValue); + pOMCProxy->setElementModifierValueOld(className, modifierKey, modifierValue); } // we want to load modifiers even if they are loaded already mpComponent->getElementInfo()->setModifiersLoaded(false); @@ -655,7 +655,7 @@ void UpdateElementParametersCommand::undo() QMap::iterator componentExtendsModifier; for (componentExtendsModifier = mOldComponentExtendsModifiersMap.begin(); componentExtendsModifier != mOldComponentExtendsModifiersMap.end(); ++componentExtendsModifier) { QString modifierValue = componentExtendsModifier.value(); - pOMCProxy->setExtendsModifierValue(className, inheritedClassName, componentExtendsModifier.key(), modifierValue); + pOMCProxy->setExtendsModifierValueOld(className, inheritedClassName, componentExtendsModifier.key(), modifierValue); } mpComponent->getGraphicsView()->getModelWidget()->fetchExtendsModifiers(inheritedClassName); } diff --git a/OMEdit/OMEditLIB/Modeling/Model.cpp b/OMEdit/OMEditLIB/Modeling/Model.cpp index a899ae6a149..ad31f56d959 100644 --- a/OMEdit/OMEditLIB/Modeling/Model.cpp +++ b/OMEdit/OMEditLIB/Modeling/Model.cpp @@ -720,41 +720,50 @@ namespace ModelInstance } } - QString Modifier::getValueWithSubModifiers() const + QString Modifier::toString() const { - if (mModifiers.isEmpty()) { + if (isRedeclare()) { return mValue; } else { - QStringList modifiers; + QString value; + value.append(printRedeclare()); + value.append(printEach()); + value.append(printFinal()); + value.append(printReplaceable()); + value.append(mName); + QStringList subModifiers; foreach (auto subModifier, mModifiers) { - if (subModifier.getModifiers().isEmpty()) { - modifiers.append(subModifier.getName() % "=" % subModifier.getValue()); - } else { - modifiers.append(subModifier.getName() % subModifier.getValueWithSubModifiers()); - } + subModifiers.append(subModifier.toString()); + } + if (!subModifiers.isEmpty()) { + value.append("(" % subModifiers.join(", ") % ")"); + } + if (mValue.isEmpty()) { + return value; + } else { + return value.append(mName.isEmpty() ? mValue : " = " % mValue); } - return "(" % modifiers.join(",") % ")"; } } - QString Modifier::getModifier(const QString &m) const + Modifier Modifier::getModifier(const QString &m) const { - foreach (auto modifier, mModifiers) { + foreach (Modifier modifier, mModifiers) { if (modifier.getName().compare(m) == 0) { - return modifier.getValue(); + return modifier; } } - return ""; + return Modifier(); + } + + QString Modifier::getModifierValue(const QString &m) const + { + return getModifier(m).getValue(); } bool Modifier::hasModifier(const QString &m) const { - foreach (auto modifier, mModifiers) { - if (modifier.getName().compare(m) == 0) { - return true; - } - } - return false; + return getModifier(m).getName().compare(m) == 0; } QString Modifier::getModifierValue(QStringList qualifiedModifierName) const @@ -787,6 +796,26 @@ namespace ModelInstance return ""; } + QString Modifier::printEach() const + { + return isEach() ? "each " : ""; + } + + QString Modifier::printFinal() const + { + return isFinal() ? "final " : ""; + } + + QString Modifier::printRedeclare() const + { + return isRedeclare() ? "redeclare " : ""; + } + + QString Modifier::printReplaceable() const + { + return isReplaceable() ? "replaceable " : ""; + } + Replaceable::Replaceable(Model *pParentModel) { mpParentModel = pParentModel; diff --git a/OMEdit/OMEditLIB/Modeling/Model.h b/OMEdit/OMEditLIB/Modeling/Model.h index 717131ce8d6..cc6a4738054 100644 --- a/OMEdit/OMEditLIB/Modeling/Model.h +++ b/OMEdit/OMEditLIB/Modeling/Model.h @@ -460,15 +460,22 @@ namespace ModelInstance void setName(const QString &name) {mName = name;} const QString &getValue() const {return mValue;} QString getValueWithoutQuotes() const {return StringHandler::removeFirstLastQuotes(getValue());} - QString getValueWithSubModifiers() const; - QString getModifier(const QString &m) const; - bool hasModifier(const QString &m) const; + QString toString() const; + Modifier getModifier(const QString &m) const; + QString getModifierValue(const QString &m) const; + bool hasModifier(const QString &modifier) const; const QList &getModifiers() const {return mModifiers;} bool isFinal() const {return mFinal;} bool isEach() const {return mEach;} bool isRedeclare() const {return mRedeclare;} bool isReplaceable() const {return mReplaceable;} QString getModifierValue(QStringList qualifiedModifierName) const; + + QString printEach() const; + QString printFinal() const; + QString printRedeclare() const; + QString printReplaceable() const; + private: QString mName; QString mValue; diff --git a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp index 04f55690552..ab375620b5f 100644 --- a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp +++ b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.cpp @@ -931,25 +931,6 @@ ModelInstance::Component *GraphicsView::createModelInstanceComponent(ModelInstan return pComponent; } -/*! - * \brief GraphicsView::setModifiers - * Sets the modifiers on Element. - * \param modelName - * \param name - * \param modifierNames - * \param modifier - */ -void GraphicsView::setModifiers(const QString &modelName, const QString &name, QString modifierNames, const ModelInstance::Modifier modifier) -{ - foreach (auto subModifier, modifier.getModifiers()) { - if (!subModifier.getValue().isEmpty()) { - const QString modifierName = name % "." % modifierNames % subModifier.getName(); - MainWindow::instance()->getOMCProxy()->setElementModifierValue(modelName, modifierName, subModifier.getValue()); - } - GraphicsView::setModifiers(modelName, name, modifierNames % subModifier.getName() % ".", subModifier); - } -} - bool GraphicsView::addComponent(QString className, QPointF position) { MainWindow *pMainWindow = MainWindow::instance(); @@ -3132,7 +3113,7 @@ bool GraphicsView::updateElementConnectorSizingParameter(GraphicsView *pGraphics return true; } else { QString modifierKey = QString("%1.%2").arg(pElement->getRootParentElement()->getName()).arg(parameter); - MainWindow::instance()->getOMCProxy()->setElementModifierValue(className, modifierKey, QString::number(numberOfElementConnections)); + MainWindow::instance()->getOMCProxy()->setElementModifierValueOld(className, modifierKey, QString::number(numberOfElementConnections)); return true; } } @@ -3977,7 +3958,8 @@ void GraphicsView::pasteItems() ModelInstance::Component *pModelInstanceComponent = GraphicsView::createModelInstanceComponent(mpModelWidget->getModelInstance(), name, className); addElementToView(pModelInstanceComponent, false, true, false, QPointF(0, 0), pComponent->getOMCPlacementAnnotation(QPointF(0, 0)), false); // set modifiers - GraphicsView::setModifiers(mpModelWidget->getLibraryTreeItem()->getNameStructure(), name, "", pMimeData->getModifiers().at(index)); + MainWindow::instance()->getOMCProxy()->setElementModifierValue(mpModelWidget->getLibraryTreeItem()->getNameStructure(), name, + pMimeData->getModifiers().at(index).toString()); } else { ElementInfo *pComponentInfo = new ElementInfo(pComponent->getElementInfo()); pComponentInfo->setName(name); diff --git a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h index dc9cde900f2..31c809646dd 100644 --- a/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h +++ b/OMEdit/OMEditLIB/Modeling/ModelWidgetContainer.h @@ -246,7 +246,6 @@ class GraphicsView : public QGraphicsView QAction* getFlipVerticalAction() {return mpFlipVerticalAction;} bool performElementCreationChecks(LibraryTreeItem *pLibraryTreeItem, QString *name, QString *defaultPrefix); static ModelInstance::Component* createModelInstanceComponent(ModelInstance::Model *pModelInstance, const QString &name, const QString &className); - static void setModifiers(const QString &modelName, const QString &name, QString modifierNames, const ModelInstance::Modifier modifier); bool addComponent(QString className, QPointF position); void addComponentToView(QString name, LibraryTreeItem *pLibraryTreeItem, QString annotation, QPointF position, ElementInfo *pComponentInfo, bool addObject, bool openingClass, bool emitComponentAdded); diff --git a/OMEdit/OMEditLIB/OMC/OMCProxy.cpp b/OMEdit/OMEditLIB/OMC/OMCProxy.cpp index 370f7ba1853..96e4f56f084 100644 --- a/OMEdit/OMEditLIB/OMC/OMCProxy.cpp +++ b/OMEdit/OMEditLIB/OMC/OMCProxy.cpp @@ -1081,14 +1081,16 @@ QString OMCProxy::getElementModifierValue(QString className, QString name) } /*! - * \brief OMCProxy::setElementModifierValue + * \brief OMCProxy::setElementModifierValueOld * Sets the element modifier value. * \param className - is the name of the class whose modifier value is set. * \param modifierName - is the name of the modifier whose value is set. * \param modifierValue - is the value to set. * \return true on success. + * \deprecated + * \see OMCProxy::setElementModifierValue(QString className, QString modifierName, QString modifierValue) */ -bool OMCProxy::setElementModifierValue(QString className, QString modifierName, QString modifierValue) +bool OMCProxy::setElementModifierValueOld(QString className, QString modifierName, QString modifierValue) { const QString sapi = QString("setElementModifierValue"); QString expression; @@ -1112,6 +1114,28 @@ bool OMCProxy::setElementModifierValue(QString className, QString modifierName, } } +/*! + * \brief OMCProxy::setElementModifierValue + * Sets the element modifier value. + * \param className - is the name of the class whose modifier value is set. + * \param modifierName - is the name of the modifier whose value is set. + * \param modifierValue - is the value to set. + * \return true on success. + */ +bool OMCProxy::setElementModifierValue(QString className, QString modifierName, QString modifierValue) +{ + const QString expression = "setElementModifierValue(" % className % ", " % modifierName % ", $Code((" % modifierValue % ")))"; + sendCommand(expression); + if (StringHandler::unparseBool(getResult())) { + return true; + } else { + QString msg = tr("Unable to set the element modifier value using command %1").arg(expression); + MessageItem messageItem(MessageItem::Modelica, msg, Helper::scriptingKind, Helper::errorLevel); + MessagesWidget::instance()->addGUIMessage(messageItem); + return false; + } +} + /*! * \brief OMCProxy::removeElementModifiers * Removes all the modifiers of a component. @@ -1161,15 +1185,17 @@ QString OMCProxy::getExtendsModifierValue(QString className, QString extendsClas } /*! - * \brief OMCProxy::setExtendsModifierValue + * \brief OMCProxy::setExtendsModifierValueOld * Sets the extends modifier value. * \param className - is the name of the class whose modifier value is set. * \param extendsClassName - is the name of the extends class. * \param modifierName - is the name of the modifier whose value is set. * \param modifierValue - is the value to set. * \return true on success. + * \deprecated + * \see OMCProxy::setExtendsModifierValue(QString className, QString extendsClassName, QString modifierName, QString modifierValue) */ -bool OMCProxy::setExtendsModifierValue(QString className, QString extendsClassName, QString modifierName, QString modifierValue) +bool OMCProxy::setExtendsModifierValueOld(QString className, QString extendsClassName, QString modifierName, QString modifierValue) { const QString sapi = QString("setExtendsModifierValue"); QString expression; @@ -1193,6 +1219,29 @@ bool OMCProxy::setExtendsModifierValue(QString className, QString extendsClassNa } } +/*! + * \brief OMCProxy::setExtendsModifierValue + * Sets the extends modifier value. + * \param className - is the name of the class whose modifier value is set. + * \param extendsClassName - is the name of the extends class. + * \param modifierName - is the name of the modifier whose value is set. + * \param modifierValue - is the value to set. + * \return true on success. + */ +bool OMCProxy::setExtendsModifierValue(QString className, QString extendsClassName, QString modifierName, QString modifierValue) +{ + const QString expression = "setExtendsModifierValue(" % className % ", " % extendsClassName % ", " % modifierName % ", $Code((" % modifierValue % ")))"; + sendCommand(expression); + if (StringHandler::unparseBool(getResult())) { + return true; + } else { + QString msg = tr("Unable to set the extends modifier value using command %1").arg(expression); + MessageItem messageItem(MessageItem::Modelica, msg, Helper::scriptingKind, Helper::errorLevel); + MessagesWidget::instance()->addGUIMessage(messageItem); + return false; + } +} + /*! Gets the extends class modifier final prefix. \param className - is the name of the class. @@ -3525,7 +3574,7 @@ QJsonObject OMCProxy::modifierToJSON(const QString &modifier, bool prettyPrint) { QString modifierJson = mpOMCInterface->modifierToJSON(modifier, prettyPrint); printMessagesStringInternal(); - if (!modifierJson.isEmpty()) { + if (!modifierJson.isEmpty() && modifierJson.compare(QStringLiteral("null")) != 0) { QJsonParseError jsonParserError; QJsonDocument doc = QJsonDocument::fromJson(modifierJson.toUtf8(), &jsonParserError); if (doc.isNull()) { diff --git a/OMEdit/OMEditLIB/OMC/OMCProxy.h b/OMEdit/OMEditLIB/OMC/OMCProxy.h index a55d8f1b421..42069770fd6 100644 --- a/OMEdit/OMEditLIB/OMC/OMCProxy.h +++ b/OMEdit/OMEditLIB/OMC/OMCProxy.h @@ -134,11 +134,13 @@ class OMCProxy : public QObject QString getParameterValue(const QString &className, const QString ¶meter); QStringList getElementModifierNames(QString className, QString name); QString getElementModifierValue(QString className, QString name); + bool setElementModifierValueOld(QString className, QString modifierName, QString modifierValue); bool setElementModifierValue(QString className, QString modifierName, QString modifierValue); bool removeElementModifiers(QString className, QString name); QString getElementModifierValues(QString className, QString name); QStringList getExtendsModifierNames(QString className, QString extendsClassName); QString getExtendsModifierValue(QString className, QString extendsClassName, QString modifierName); + bool setExtendsModifierValueOld(QString className, QString extendsClassName, QString modifierName, QString modifierValue); bool setExtendsModifierValue(QString className, QString extendsClassName, QString modifierName, QString modifierValue); bool isExtendsModifierFinal(QString className, QString extendsClassName, QString modifierName); bool removeExtendsModifiers(QString className, QString extendsClassName); diff --git a/OMEdit/OMEditLIB/Resources/icons/drop-menu.svg b/OMEdit/OMEditLIB/Resources/icons/drop-menu.svg new file mode 100644 index 00000000000..45f4bd5357a --- /dev/null +++ b/OMEdit/OMEditLIB/Resources/icons/drop-menu.svg @@ -0,0 +1,106 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/OMEdit/OMEditLIB/Resources/icons/fill-horizontal.svg b/OMEdit/OMEditLIB/Resources/icons/fill-horizontal.svg index ff35d40d8b4..344dc2a6c15 100644 --- a/OMEdit/OMEditLIB/Resources/icons/fill-horizontal.svg +++ b/OMEdit/OMEditLIB/Resources/icons/fill-horizontal.svg @@ -2,19 +2,19 @@ + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + sodipodi:docname="fill-horizontal.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + inkscape:window-width="1920" + inkscape:window-height="1003" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:pagecheckerboard="0"> + + - - - - + + + + + + + diff --git a/OMEdit/OMEditLIB/Resources/icons/fill-vertical.svg b/OMEdit/OMEditLIB/Resources/icons/fill-vertical.svg index b42b8cec688..8774394c857 100644 --- a/OMEdit/OMEditLIB/Resources/icons/fill-vertical.svg +++ b/OMEdit/OMEditLIB/Resources/icons/fill-vertical.svg @@ -2,19 +2,19 @@ + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + sodipodi:docname="fill-vertical.svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + inkscape:window-width="1920" + inkscape:window-height="1003" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:pagecheckerboard="0" /> - - - - + + + + + + + diff --git a/OMEdit/OMEditLIB/resource_omedit.qrc b/OMEdit/OMEditLIB/resource_omedit.qrc index 61cc06a2348..09335ac07ae 100644 --- a/OMEdit/OMEditLIB/resource_omedit.qrc +++ b/OMEdit/OMEditLIB/resource_omedit.qrc @@ -215,5 +215,6 @@ Resources/icons/completerAnnotation.svg Resources/icons/import-tlmmodel.svg Resources/icons/auto_scale.svg + Resources/icons/drop-menu.svg