diff --git a/editors/HWDesign/HWDesignDiagram.cpp b/editors/HWDesign/HWDesignDiagram.cpp index 5380a5d1f..f15286efd 100644 --- a/editors/HWDesign/HWDesignDiagram.cpp +++ b/editors/HWDesign/HWDesignDiagram.cpp @@ -243,14 +243,14 @@ void HWDesignDiagram::updateHierComponent() QList > busIfs; // Search all graphics items in the scene. - for (QGraphicsItem *item : items()) + for (QGraphicsItem* item : items()) { // Check if the item is a diagram interface and its bus interface is defined. if (auto diagIf = dynamic_cast(item)) { if (diagIf->getBusInterface() != nullptr && !diagIf->isInvalid()) { - busIfs.append(diagIf->getBusInterface()); + busIfs.append(diagIf->getBusInterface()); } } } @@ -271,26 +271,30 @@ void HWDesignDiagram::updateHierComponent() } } - QList > toRemove; - - // Remove interfaces deleted in the design from the component. - for (auto componentInterface : *componentInterfaces) + if (manuallyDeletedInterfaces_) { - bool busExists = std::find_if(busIfs.cbegin(), busIfs.cend(), [&componentInterface](auto diagramInterface) + QList > toRemove; + // Remove interfaces deleted in the design from the component. + for (auto componentInterface : *componentInterfaces) + { + bool busExists = std::find_if(busIfs.cbegin(), busIfs.cend(), [&componentInterface](auto diagramInterface) + { + return componentInterface->name() == diagramInterface->name(); + }) != busIfs.cend(); + + if (!busExists) { - return componentInterface->name() == diagramInterface->name(); - }) != busIfs.cend(); + toRemove.append(componentInterface); + } + } - if (!busExists) + for (auto interfaceToRemove : toRemove) { - toRemove.append(componentInterface); + componentInterfaces->removeAll(interfaceToRemove); } } - for (auto interfaceToRemove : toRemove) - { - componentInterfaces->removeAll(interfaceToRemove); - } + manuallyDeletedInterfaces_ = false; } //----------------------------------------------------------------------------- @@ -410,6 +414,14 @@ HWConnectionEndpoint* HWDesignDiagram::getHierarchicalInterface(QString const& b return nullptr; } +//----------------------------------------------------------------------------- +// Function: HWDesignDiagram::getInterfacesToDelete() +//----------------------------------------------------------------------------- +void HWDesignDiagram::setInterfacesHaveBeenDeleted(bool haveBeenDeleted) +{ + manuallyDeletedInterfaces_ = true; +} + //----------------------------------------------------------------------------- // Function: HWDesignDiagram::onCopyAction() //----------------------------------------------------------------------------- diff --git a/editors/HWDesign/HWDesignDiagram.h b/editors/HWDesign/HWDesignDiagram.h index 08aa51321..d352ff8d9 100644 --- a/editors/HWDesign/HWDesignDiagram.h +++ b/editors/HWDesign/HWDesignDiagram.h @@ -117,7 +117,7 @@ class HWDesignDiagram : public ComponentDesignDiagram { QSharedPointer component; //!< The referenced component. QSharedPointer instance; - + ComponentInstanceCopyData() : component(), instance() @@ -155,8 +155,8 @@ class HWDesignDiagram : public ComponentDesignDiagram */ ColumnCopyData() : desc(), - components(), - interfaces() + components(), + interfaces() { } }; @@ -176,7 +176,7 @@ class HWDesignDiagram : public ComponentDesignDiagram { } }; - + /*! * The constructor. * @@ -186,15 +186,15 @@ class HWDesignDiagram : public ComponentDesignDiagram * @param [in] designParameterFinder Parameter finder for design parameters. * @param [in] parent Owner of this diagram. */ - HWDesignDiagram(LibraryInterface *lh, QSharedPointer editProvider, + HWDesignDiagram(LibraryInterface* lh, QSharedPointer editProvider, QSharedPointer designAndInstancesParameterFinder, QSharedPointer designParameterFinder, DesignWidget* parent = 0); - /*! + /*! * The destructor. */ - ~HWDesignDiagram() final = default; + ~HWDesignDiagram() final = default; /*! * Set the IP-XACT document that is viewed in HWDesignDiagram. @@ -206,7 +206,7 @@ class HWDesignDiagram : public ComponentDesignDiagram */ HWComponentItem* getComponentItem(QString const& instanceName); - /*! + /*! * Reflects the changes in the design to the top-level component. */ virtual void updateHierComponent(); @@ -239,15 +239,22 @@ class HWDesignDiagram : public ComponentDesignDiagram virtual HWConnectionEndpoint* getDiagramAdHocPort(QString const& portName); /*! - * Returns the bus interface item of the corresponding design component bus interface with the given name + * Returns the bus interface item of the corresponding design component bus interface with the given name * or nullptr if not found. - * + * * @param [in] busRef The interface name. - * + * * @return The hierarchical bus interface item found or null. */ HWConnectionEndpoint* getHierarchicalInterface(QString const& busRef) const; + /*! + * Sets the value of the flag indicating if interfaces have been deleted in the design diagram. + * + * @param [in] haveBeenDeleted Flag value to set. + */ + void setInterfacesHaveBeenDeleted(bool haveBeenDeleted); + public slots: /*! @@ -926,6 +933,9 @@ public slots: //! Parameter finder for design parameter reference tree QSharedPointer designAndInstancesParameterFinder_; + + //! Flag indicating if interfaces have been deleted from the design diagram. + bool manuallyDeletedInterfaces_ = false; }; #endif // HWDESIGNDIAGRAM_H diff --git a/editors/HWDesign/HWDesignWidget.cpp b/editors/HWDesign/HWDesignWidget.cpp index 9b3c0ecb5..5d2646302 100644 --- a/editors/HWDesign/HWDesignWidget.cpp +++ b/editors/HWDesign/HWDesignWidget.cpp @@ -514,6 +514,7 @@ void HWDesignWidget::deleteSelectedBusInterfaceItems(QList selec new InterfaceDeleteCommand(getDiagram(), diagIf, removePorts, cmd.data()); connect(childCmd, SIGNAL(interfaceDeleted()), this, SIGNAL(clearItemSelection()), Qt::UniqueConnection); + static_cast(getDiagram())->setInterfacesHaveBeenDeleted(true); childCmd->redo(); } @@ -917,14 +918,15 @@ void HWDesignWidget::loadBusInterfaceChanges(QSharedPointer lib designComponentInterfaces.append(compBusif); } - // Remove deleted interfaces (aka if interface exists in design component but not in component loaded from disk) + auto hwDiagram = static_cast(getDiagram()); + + // Remove deleted interfaces (aka if interface exists in design component but not in component loaded from disk). for (auto designComponentInterfaceIt = designComponentInterfaces.begin(); designComponentInterfaceIt != designComponentInterfaces.end();) { if (auto foundInterface = Search::findByName((*designComponentInterfaceIt)->name(), libraryComponentInterfaces); foundInterface == nullptr) { // Remove connections and routes from design, if interface had no connections - auto hwDiagram = static_cast(getDiagram()); if (auto endpointItem = hwDiagram->getHierarchicalInterface((*designComponentInterfaceIt)->name())) { auto busItem = static_cast(endpointItem); @@ -939,6 +941,8 @@ void HWDesignWidget::loadBusInterfaceChanges(QSharedPointer lib design->getInterconnections()->removeOne(interconnectionItem->getInterconnection()); } } + + hwDiagram->removeItem(busItem); } designComponentInterfaceIt = designComponentInterfaces.erase(designComponentInterfaceIt); diff --git a/editors/common/DesignWidget.cpp b/editors/common/DesignWidget.cpp index 940178ab2..eff6d27c9 100644 --- a/editors/common/DesignWidget.cpp +++ b/editors/common/DesignWidget.cpp @@ -227,6 +227,8 @@ QSharedPointer DesignWidget::getEditProvider() const //----------------------------------------------------------------------------- bool DesignWidget::save() { + getDiagram()->updateHierComponent(); + // Create the design. QSharedPointer design = getDiagram()->getDesign(); QSharedPointer designConf = getDiagram()->getDesignConfiguration(); diff --git a/version.h b/version.h index 1d75c8044..eeaea562c 100644 --- a/version.h +++ b/version.h @@ -10,20 +10,20 @@ #ifndef VERSIONNO__H #define VERSIONNO__H -#define VERSION_FULL 3.13.484.0 +#define VERSION_FULL 3.13.513.0 #define VERSION_BASEYEAR 0 -#define VERSION_DATE "2024-07-08" -#define VERSION_TIME "13:18:48" +#define VERSION_DATE "2024-07-10" +#define VERSION_TIME "13:40:57" #define VERSION_MAJOR 3 #define VERSION_MINOR 13 -#define VERSION_BUILDNO 484 +#define VERSION_BUILDNO 513 #define VERSION_EXTEND 0 -#define VERSION_FILE 3,13,484,0 -#define VERSION_PRODUCT 3,13,484,0 -#define VERSION_FILESTR "3,13,484,0" -#define VERSION_PRODUCTSTR "3,13,484,0" +#define VERSION_FILE 3,13,513,0 +#define VERSION_PRODUCT 3,13,513,0 +#define VERSION_FILESTR "3,13,513,0" +#define VERSION_PRODUCTSTR "3,13,513,0" #endif