From 4cfd86d035c9cbb31b791e2cf99af517a4514a0e Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Sun, 25 Feb 2024 21:11:42 -0700 Subject: [PATCH 1/5] Initial commit --- .../ConstructionObjectVectorController.cpp | 34 +----- .../ConstructionObjectVectorController.hpp | 12 --- src/openstudio_lib/ConstructionsView.cpp | 2 +- .../DefaultConstructionSetsView.cpp | 2 +- src/openstudio_lib/HVACSystemsController.cpp | 102 +++--------------- src/openstudio_lib/HVACSystemsController.hpp | 27 ----- src/openstudio_lib/LoadsView.cpp | 2 +- .../MainRightColumnController.cpp | 28 ++--- src/openstudio_lib/MaterialsView.cpp | 2 +- src/openstudio_lib/ModelObjectListView.cpp | 70 ++++++++---- src/openstudio_lib/ModelObjectListView.hpp | 15 ++- .../ModelObjectTypeListView.cpp | 10 +- .../ModelObjectTypeListView.hpp | 6 +- src/openstudio_lib/OSItemList.cpp | 15 +-- src/openstudio_lib/OSItemList.hpp | 3 - src/openstudio_lib/OSVectorController.cpp | 27 ++++- src/openstudio_lib/OSVectorController.hpp | 15 ++- src/openstudio_lib/ScheduleSetsView.cpp | 2 +- src/openstudio_lib/SpaceTypesView.cpp | 2 +- src/openstudio_lib/ThermalZonesView.cpp | 2 +- 20 files changed, 154 insertions(+), 224 deletions(-) diff --git a/src/openstudio_lib/ConstructionObjectVectorController.cpp b/src/openstudio_lib/ConstructionObjectVectorController.cpp index ff74590a5..463c167ea 100644 --- a/src/openstudio_lib/ConstructionObjectVectorController.cpp +++ b/src/openstudio_lib/ConstructionObjectVectorController.cpp @@ -43,51 +43,27 @@ #include #include -#include -#include namespace openstudio { // ConstructionObjectVectorController ConstructionObjectVectorController::ConstructionObjectVectorController(QWidget* parentWidget) - : ModelObjectVectorController(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()), m_parentWidget(parentWidget) {} + : ModelObjectVectorController(), m_parentWidget(parentWidget) {} -ConstructionObjectVectorController::~ConstructionObjectVectorController() { - delete m_reportItemsMutex; -} - -void ConstructionObjectVectorController::reportItemsLater() { - m_reportScheduled = true; - - QTimer::singleShot(0, this, &ConstructionObjectVectorController::reportItems); -} - -void ConstructionObjectVectorController::reportItems() { - if (!m_reportItemsMutex->tryLock()) { - return; - } - - if (m_reportScheduled) { - m_reportScheduled = false; - - ModelObjectVectorController::reportItems(); - } - - m_reportItemsMutex->unlock(); -} +ConstructionObjectVectorController::~ConstructionObjectVectorController() {} void ConstructionObjectVectorController::onChangeRelationship(const model::ModelObject& /*modelObject*/, int /*index*/, Handle /*newHandle*/, Handle /*oldHandle*/) { - reportItemsLater(); + reportItems(); } void ConstructionObjectVectorController::onDataChange(const model::ModelObject& /*modelObject*/) { - reportItemsLater(); + reportItems(); } void ConstructionObjectVectorController::onChange(const model::ModelObject& /*modelObject*/) { - reportItemsLater(); + reportItems(); } std::vector ConstructionObjectVectorController::makeVector() { diff --git a/src/openstudio_lib/ConstructionObjectVectorController.hpp b/src/openstudio_lib/ConstructionObjectVectorController.hpp index 05a79efe9..16173c021 100644 --- a/src/openstudio_lib/ConstructionObjectVectorController.hpp +++ b/src/openstudio_lib/ConstructionObjectVectorController.hpp @@ -33,8 +33,6 @@ #include "ModelObjectVectorController.hpp" #include -class QMutex; - namespace openstudio { class ConstructionObjectVectorController : public ModelObjectVectorController @@ -49,13 +47,6 @@ class ConstructionObjectVectorController : public ModelObjectVectorController void setParentWidget(QWidget* parentWidget); - public slots: - - // reportItemsLater should be used as it wraps the call to reportItems in a QTimer::singleShot - // which eventually calls ModelObjectVector::reportItems - void reportItemsLater(); - void reportItems(); - protected: virtual void onChangeRelationship(const model::ModelObject& modelObject, int index, Handle newHandle, Handle oldHandle) override; @@ -76,9 +67,6 @@ class ConstructionObjectVectorController : public ModelObjectVectorController void insert(const OSItemId& itemId, int insertPosition = -1, boost::optional erasePosition_ = boost::none); - bool m_reportScheduled; - QMutex* m_reportItemsMutex; - enum LayerType { FENESTRATION, diff --git a/src/openstudio_lib/ConstructionsView.cpp b/src/openstudio_lib/ConstructionsView.cpp index 98a0e3d2f..3839e3af9 100644 --- a/src/openstudio_lib/ConstructionsView.cpp +++ b/src/openstudio_lib/ConstructionsView.cpp @@ -47,7 +47,7 @@ namespace openstudio { ConstructionsView::ConstructionsView(bool isIP, const openstudio::model::Model& model, QWidget* parent) - : ModelSubTabView(new ModelObjectTypeListView(ConstructionsView::modelObjectTypesAndNames(), model, true, OSItemType::ListItem, parent), + : ModelSubTabView(new ModelObjectTypeListView(ConstructionsView::modelObjectTypesAndNames(), model, true, OSItemType::ListItem, false, parent), new ConstructionsInspectorView(isIP, model, parent), false, parent) { connect(this, &ConstructionsView::toggleUnitsClicked, modelObjectInspectorView(), &ModelObjectInspectorView::toggleUnitsClicked); } diff --git a/src/openstudio_lib/DefaultConstructionSetsView.cpp b/src/openstudio_lib/DefaultConstructionSetsView.cpp index 4e095a0c3..7317646ba 100644 --- a/src/openstudio_lib/DefaultConstructionSetsView.cpp +++ b/src/openstudio_lib/DefaultConstructionSetsView.cpp @@ -46,7 +46,7 @@ namespace openstudio { DefaultConstructionSetsView::DefaultConstructionSetsView(const openstudio::model::Model& model, const QString& tabLabel, bool hasSubTabs, QWidget* parent) - : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_DefaultConstructionSet, model, true, parent), + : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_DefaultConstructionSet, model, true, false, parent), new DefaultConstructionSetInspectorView(model, parent), false, parent) {} } // namespace openstudio diff --git a/src/openstudio_lib/HVACSystemsController.cpp b/src/openstudio_lib/HVACSystemsController.cpp index 9e5eabf90..48dd3a831 100644 --- a/src/openstudio_lib/HVACSystemsController.cpp +++ b/src/openstudio_lib/HVACSystemsController.cpp @@ -1603,11 +1603,9 @@ void HVACLayoutController::updateLater() { } SystemAvailabilityVectorController::SystemAvailabilityVectorController() - : ModelObjectVectorController(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) {} + : ModelObjectVectorController() {} -SystemAvailabilityVectorController::~SystemAvailabilityVectorController() { - delete m_reportItemsMutex; -} +SystemAvailabilityVectorController::~SystemAvailabilityVectorController() {} void SystemAvailabilityVectorController::attach(const model::ModelObject& modelObject) { detach(); @@ -1618,10 +1616,10 @@ void SystemAvailabilityVectorController::attach(const model::ModelObject& modelO m_model = m_modelObject->model(); m_model->getImpl() - ->onChange.connect(this); + ->onChange.connect(this); } - reportItemsLater(); + reportItems(); } void SystemAvailabilityVectorController::detach() { @@ -1631,32 +1629,12 @@ void SystemAvailabilityVectorController::detach() { if (m_model) { m_model->getImpl() - ->onChange.disconnect(this); + ->onChange.disconnect(this); m_model.reset(); } - reportItemsLater(); -} - -void SystemAvailabilityVectorController::reportItemsLater() { - m_reportScheduled = true; - - QTimer::singleShot(0, this, &SystemAvailabilityVectorController::reportItems); -} - -void SystemAvailabilityVectorController::reportItems() { - if (!m_reportItemsMutex->tryLock()) { - return; - } - - if (m_reportScheduled) { - m_reportScheduled = false; - - ModelObjectVectorController::reportItems(); - } - - m_reportItemsMutex->unlock(); + reportItems(); } boost::optional SystemAvailabilityVectorController::airLoopHVAC() { @@ -1699,11 +1677,9 @@ void SystemAvailabilityVectorController::onReplaceItem(OSItem* /*currentItem*/, } SupplyAirTempScheduleVectorController::SupplyAirTempScheduleVectorController() - : ModelObjectVectorController(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) {} + : ModelObjectVectorController() {} -SupplyAirTempScheduleVectorController::~SupplyAirTempScheduleVectorController() { - delete m_reportItemsMutex; -} +SupplyAirTempScheduleVectorController::~SupplyAirTempScheduleVectorController() {} void SystemAvailabilityVectorController::onDropZoneItemClicked(OSItem* item) { OSAppBase::instance()->currentDocument()->mainRightColumnController()->inspectModelObjectByItem(item, false); @@ -1718,10 +1694,10 @@ void SupplyAirTempScheduleVectorController::attach(const model::ModelObject& mod m_model = m_modelObject->model(); m_model->getImpl() - ->onChange.connect(this); + ->onChange.connect(this); } - reportItemsLater(); + reportItems(); } void SupplyAirTempScheduleVectorController::detach() { @@ -1731,32 +1707,10 @@ void SupplyAirTempScheduleVectorController::detach() { if (m_model) { m_model->getImpl() - ->onChange.disconnect(this); + ->onChange.disconnect(this); m_model.reset(); } - - reportItemsLater(); -} - -void SupplyAirTempScheduleVectorController::reportItemsLater() { - m_reportScheduled = true; - - QTimer::singleShot(0, this, &SupplyAirTempScheduleVectorController::reportItems); -} - -void SupplyAirTempScheduleVectorController::reportItems() { - if (!m_reportItemsMutex->tryLock()) { - return; - } - - if (m_reportScheduled) { - m_reportScheduled = false; - - ModelObjectVectorController::reportItems(); - } - - m_reportItemsMutex->unlock(); } boost::optional SupplyAirTempScheduleVectorController::setpointManagerScheduled() { @@ -1812,11 +1766,9 @@ void SupplyAirTempScheduleVectorController::onDropZoneItemClicked(OSItem* item) // CTOR AvailabilityManagerObjectVectorController::AvailabilityManagerObjectVectorController() - : ModelObjectVectorController(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) {} + : ModelObjectVectorController() {} -AvailabilityManagerObjectVectorController::~AvailabilityManagerObjectVectorController() { - delete m_reportItemsMutex; -} +AvailabilityManagerObjectVectorController::~AvailabilityManagerObjectVectorController() {} void AvailabilityManagerObjectVectorController::attach(const model::ModelObject& modelObject) { detach(); @@ -1827,10 +1779,10 @@ void AvailabilityManagerObjectVectorController::attach(const model::ModelObject& m_model = m_modelObject->model(); m_model->getImpl() - ->onChange.connect(this); + ->onChange.connect(this); } - reportItemsLater(); + reportItems(); } void AvailabilityManagerObjectVectorController::detach() { @@ -1840,32 +1792,12 @@ void AvailabilityManagerObjectVectorController::detach() { if (m_model) { m_model->getImpl() - ->onChange.disconnect(this); + ->onChange.disconnect(this); m_model.reset(); } - reportItemsLater(); -} - -void AvailabilityManagerObjectVectorController::reportItemsLater() { - m_reportScheduled = true; - - QTimer::singleShot(0, this, &AvailabilityManagerObjectVectorController::reportItems); -} - -void AvailabilityManagerObjectVectorController::reportItems() { - if (!m_reportItemsMutex->tryLock()) { - return; - } - - if (m_reportScheduled) { - m_reportScheduled = false; - - ModelObjectVectorController::reportItems(); - } - - m_reportItemsMutex->unlock(); + reportItems(); } // ACTUAL STUFF diff --git a/src/openstudio_lib/HVACSystemsController.hpp b/src/openstudio_lib/HVACSystemsController.hpp index 1d8082493..210c8146f 100644 --- a/src/openstudio_lib/HVACSystemsController.hpp +++ b/src/openstudio_lib/HVACSystemsController.hpp @@ -330,10 +330,6 @@ class SystemAvailabilityVectorController : public ModelObjectVectorController public slots: - void reportItemsLater(); - - void reportItems(); - void onDropZoneItemClicked(OSItem* item); protected: @@ -342,11 +338,6 @@ class SystemAvailabilityVectorController : public ModelObjectVectorController void onReplaceItem(OSItem* currentItem, const OSItemId& replacementItemId) override; void onDrop(const OSItemId& itemId) override; - - private: - bool m_reportScheduled; - - QMutex* m_reportItemsMutex; }; class SupplyAirTempScheduleVectorController : public ModelObjectVectorController @@ -366,10 +357,6 @@ class SupplyAirTempScheduleVectorController : public ModelObjectVectorController public slots: - void reportItemsLater(); - - void reportItems(); - void onDropZoneItemClicked(OSItem* item); protected: @@ -378,11 +365,6 @@ class SupplyAirTempScheduleVectorController : public ModelObjectVectorController void onReplaceItem(OSItem* currentItem, const OSItemId& replacementItemId) override; void onDrop(const OSItemId& itemId) override; - - private: - bool m_reportScheduled; - - QMutex* m_reportItemsMutex; }; class AvailabilityManagerObjectVectorController : public ModelObjectVectorController @@ -404,10 +386,6 @@ class AvailabilityManagerObjectVectorController : public ModelObjectVectorContro public slots: - void reportItemsLater(); - - void reportItems(); - void onDropZoneItemClicked(OSItem* item); protected: @@ -422,11 +400,6 @@ class AvailabilityManagerObjectVectorController : public ModelObjectVectorContro virtual void onReplaceItem(OSItem* currentItem, const OSItemId& replacementItemId) override; virtual void onDrop(const OSItemId& itemId) override; - - private: - bool m_reportScheduled; - - QMutex* m_reportItemsMutex; }; } // namespace openstudio diff --git a/src/openstudio_lib/LoadsView.cpp b/src/openstudio_lib/LoadsView.cpp index 054049ce8..10a4db253 100644 --- a/src/openstudio_lib/LoadsView.cpp +++ b/src/openstudio_lib/LoadsView.cpp @@ -57,7 +57,7 @@ namespace openstudio { LoadsView::LoadsView(bool isIP, const openstudio::model::Model& model, QWidget* parent) - : ModelSubTabView(new ModelObjectTypeListView(LoadsView::modelObjectTypesAndNames(), model, true, OSItemType::CollapsibleListHeader, parent), + : ModelSubTabView(new ModelObjectTypeListView(LoadsView::modelObjectTypesAndNames(), model, true, OSItemType::CollapsibleListHeader, false, parent), new LoadsInspectorView(isIP, model, parent), false, parent) { connect(this, &LoadsView::toggleUnitsClicked, modelObjectInspectorView(), &ModelObjectInspectorView::toggleUnitsClicked); } diff --git a/src/openstudio_lib/MainRightColumnController.cpp b/src/openstudio_lib/MainRightColumnController.cpp index 896e760ea..a00ce25da 100644 --- a/src/openstudio_lib/MainRightColumnController.cpp +++ b/src/openstudio_lib/MainRightColumnController.cpp @@ -262,7 +262,7 @@ void MainRightColumnController::configureForSchedulesSubTab(int subTabID) { model::Model lib = doc->componentLibrary(); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsType(OSItemType::LibraryItem); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); @@ -277,7 +277,7 @@ void MainRightColumnController::configureForSchedulesSubTab(int subTabID) { setMyModelView(myModelList); // my library - auto* myLibraryList = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader); + auto* myLibraryList = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader, true); myLibraryList->setItemsDraggable(true); myLibraryList->setItemsRemoveable(false); myLibraryList->setItemsType(OSItemType::LibraryItem); @@ -300,7 +300,7 @@ void MainRightColumnController::configureForSchedulesSubTab(int subTabID) { model::Model lib = doc->componentLibrary(); // my library - auto* myLibraryList = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader); + auto* myLibraryList = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader, true); myLibraryList->setItemsDraggable(true); myLibraryList->setItemsRemoveable(false); myLibraryList->setItemsType(OSItemType::LibraryItem); @@ -330,7 +330,7 @@ void MainRightColumnController::configureForConstructionsSubTab(int subTabID) { model::Model lib = doc->componentLibrary(); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -367,7 +367,7 @@ void MainRightColumnController::configureForConstructionsSubTab(int subTabID) { model::Model lib = doc->componentLibrary(); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -435,7 +435,7 @@ void MainRightColumnController::configureForConstructionsSubTab(int subTabID) { model::Model lib = doc->componentLibrary(); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -508,7 +508,7 @@ void MainRightColumnController::configureForLoadsSubTab(int subTabID) { // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -572,7 +572,7 @@ void MainRightColumnController::configureForSpaceTypesSubTab(int subTabID) { std::shared_ptr doc = OSAppBase::instance()->currentDocument(); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -652,7 +652,7 @@ void MainRightColumnController::configureForFacilitySubTab(int subTabID) { std::shared_ptr doc = OSAppBase::instance()->currentDocument(); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -697,7 +697,7 @@ void MainRightColumnController::configureForFacilitySubTab(int subTabID) { // Library model::Model lib = doc->componentLibrary(); - auto* myLibraryList = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader); + auto* myLibraryList = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader, true); myLibraryList->setItemsDraggable(true); myLibraryList->setItemsRemoveable(false); myLibraryList->setItemsType(OSItemType::LibraryItem); @@ -757,7 +757,7 @@ void MainRightColumnController::configureForSpacesSubTab(int subTabID) { std::shared_ptr doc = OSAppBase::instance()->currentDocument(); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -870,7 +870,7 @@ void MainRightColumnController::configureForThermalZonesSubTab(int subTabID) { // My Model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); @@ -889,7 +889,7 @@ void MainRightColumnController::configureForThermalZonesSubTab(int subTabID) { // Library model::Model lib = doc->componentLibrary(); - auto* libraryWidget = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader); + auto* libraryWidget = new ModelObjectTypeListView(lib, true, OSItemType::CollapsibleListHeader, true); libraryWidget->setItemsDraggable(true); libraryWidget->setItemsRemoveable(false); libraryWidget->setItemsType(OSItemType::LibraryItem); @@ -936,7 +936,7 @@ void MainRightColumnController::configureForHVACSystemsSubTab(int subTabID) { setEditView(nullptr); // my model - auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader); + auto* myModelList = new ModelObjectTypeListView(m_model, true, OSItemType::CollapsibleListHeader, false); myModelList->setItemsDraggable(true); myModelList->setItemsRemoveable(false); myModelList->setItemsType(OSItemType::LibraryItem); diff --git a/src/openstudio_lib/MaterialsView.cpp b/src/openstudio_lib/MaterialsView.cpp index 468fca1ba..409aadbab 100644 --- a/src/openstudio_lib/MaterialsView.cpp +++ b/src/openstudio_lib/MaterialsView.cpp @@ -57,7 +57,7 @@ namespace openstudio { MaterialsView::MaterialsView(bool isIP, const openstudio::model::Model& model, const QString& tabLabel, bool hasSubTabs, QWidget* parent) - : ModelSubTabView(new ModelObjectTypeListView(MaterialsView::modelObjectTypesAndNames(), model, true, OSItemType::CollapsibleListHeader, parent), + : ModelSubTabView(new ModelObjectTypeListView(MaterialsView::modelObjectTypesAndNames(), model, true, OSItemType::CollapsibleListHeader, false, parent), new MaterialsInspectorView(isIP, model, parent), false, parent) { // ModelObjectTypeListView will call reportItems for each IddObjectType, this results in inspector being build for each IddObjecType then thrown away connect(this, &MaterialsView::toggleUnitsClicked, modelObjectInspectorView(), &ModelObjectInspectorView::toggleUnitsClicked); diff --git a/src/openstudio_lib/ModelObjectListView.cpp b/src/openstudio_lib/ModelObjectListView.cpp index e05b3a559..77f6a2810 100644 --- a/src/openstudio_lib/ModelObjectListView.cpp +++ b/src/openstudio_lib/ModelObjectListView.cpp @@ -51,17 +51,26 @@ #include #include +#include +#include namespace openstudio { -ModelObjectListController::ModelObjectListController(const openstudio::IddObjectType& iddObjectType, const model::Model& model, bool showLocalBCL) - : m_iddObjectType(iddObjectType), m_model(model), m_showLocalBCL(showLocalBCL) { +ModelObjectListController::ModelObjectListController(const openstudio::IddObjectType& iddObjectType, const model::Model& model, bool isLibrary) + : m_iddObjectType(iddObjectType), m_model(model), m_isLibrary(isLibrary), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) { - // model.getImpl().get()->addWorkspaceObjectPtr.connect(this); - connect(OSAppBase::instance(), &OSAppBase::workspaceObjectAddedPtr, this, &ModelObjectListController::objectAdded, Qt::QueuedConnection); + if (!m_isLibrary) { + + // model.getImpl().get()->addWorkspaceObjectPtr.connect(this); + connect(OSAppBase::instance(), &OSAppBase::workspaceObjectAddedPtr, this, &ModelObjectListController::objectAdded, Qt::QueuedConnection); - //model.getImpl().get()->removeWorkspaceObjectPtr.connect(this); - connect(OSAppBase::instance(), &OSAppBase::workspaceObjectRemovedPtr, this, &ModelObjectListController::objectRemoved, Qt::QueuedConnection); + //model.getImpl().get()->removeWorkspaceObjectPtr.connect(this); + connect(OSAppBase::instance(), &OSAppBase::workspaceObjectRemovedPtr, this, &ModelObjectListController::objectRemoved, Qt::QueuedConnection); + } +} + +ModelObjectListController::~ModelObjectListController() { + delete m_reportItemsMutex; } IddObjectType ModelObjectListController::iddObjectType() const { @@ -71,29 +80,54 @@ IddObjectType ModelObjectListController::iddObjectType() const { void ModelObjectListController::objectAdded(std::shared_ptr impl, const openstudio::IddObjectType& iddObjectType, const openstudio::UUID& handle) { if (iddObjectType == m_iddObjectType) { - std::vector ids = this->makeVector(); - emit itemIds(ids); + m_reportItemsMutex->lock(); - for (const OSItemId& id : ids) { - if (id.itemId() == toQString(impl->handle())) { - emit selectedItemId(id); - break; - } - } + m_reportScheduled = true; + m_selectedHandle = handle; + QTimer::singleShot(0, this, &ModelObjectListController::reportItemsImpl); + + m_reportItemsMutex->unlock(); } } void ModelObjectListController::objectRemoved(std::shared_ptr impl, const openstudio::IddObjectType& iddObjectType, const openstudio::UUID& handle) { if (iddObjectType == m_iddObjectType) { - emit itemIds(makeVector()); + m_reportItemsMutex->lock(); + + m_reportScheduled = true; + QTimer::singleShot(0, this, &ModelObjectListController::reportItemsImpl); + + m_reportItemsMutex->unlock(); } } +void ModelObjectListController::reportItemsImpl() { + m_reportItemsMutex->lock(); + + if (m_reportScheduled) { + m_reportScheduled = false; + std::vector ids = this->makeVector(); + emit itemIds(ids); + + if (m_selectedHandle) { + m_selectedHandle.reset(); + for (const OSItemId& id : ids) { + if (id.itemId() == toQString(*m_selectedHandle)) { + emit selectedItemId(id); + break; + } + } + } + } + + m_reportItemsMutex->unlock(); +} + std::vector ModelObjectListController::makeVector() { std::vector result; - if (m_showLocalBCL) { + if (m_isLibrary) { std::vector> pairs; pairs.push_back(std::make_pair("OpenStudio Type", m_iddObjectType.valueDescription())); @@ -150,8 +184,8 @@ std::vector ModelObjectListController::makeVector() { } ModelObjectListView::ModelObjectListView(const openstudio::IddObjectType& iddObjectType, const model::Model& model, bool addScrollArea, - bool showLocalBCL, QWidget* parent) - : OSItemList(new ModelObjectListController(iddObjectType, model, showLocalBCL), addScrollArea, parent) {} + bool isLibrary, QWidget* parent) + : OSItemList(new ModelObjectListController(iddObjectType, model, isLibrary), addScrollArea, parent) {} boost::optional ModelObjectListView::selectedModelObject() const { OSItem* selectedItem = this->selectedItem(); diff --git a/src/openstudio_lib/ModelObjectListView.hpp b/src/openstudio_lib/ModelObjectListView.hpp index d12d40593..75f3fc2f2 100644 --- a/src/openstudio_lib/ModelObjectListView.hpp +++ b/src/openstudio_lib/ModelObjectListView.hpp @@ -37,6 +37,8 @@ #include #include "../model_editor/QMetaTypes.hpp" +class QMutex; + namespace openstudio { class ModelObjectListController : public OSVectorController @@ -44,9 +46,9 @@ class ModelObjectListController : public OSVectorController Q_OBJECT public: - ModelObjectListController(const openstudio::IddObjectType& iddObjectType, const model::Model& model, bool showLocalBCL = false); + ModelObjectListController(const openstudio::IddObjectType& iddObjectType, const model::Model& model, bool isLibrary); - virtual ~ModelObjectListController() {} + virtual ~ModelObjectListController(); IddObjectType iddObjectType() const; @@ -60,7 +62,12 @@ class ModelObjectListController : public OSVectorController private: openstudio::IddObjectType m_iddObjectType; model::Model m_model; - bool m_showLocalBCL; + bool m_isLibrary; + bool m_reportScheduled; + boost::optional m_selectedHandle; + QMutex* m_reportItemsMutex; + + void reportItemsImpl(); }; class ModelObjectListView : public OSItemList @@ -68,7 +75,7 @@ class ModelObjectListView : public OSItemList Q_OBJECT public: - ModelObjectListView(const openstudio::IddObjectType& iddObjectType, const model::Model& model, bool addScrollArea, bool showLocalBCL = false, + ModelObjectListView(const openstudio::IddObjectType& iddObjectType, const model::Model& model, bool addScrollArea, bool isLibrary, QWidget* parent = nullptr); virtual ~ModelObjectListView() {} diff --git a/src/openstudio_lib/ModelObjectTypeListView.cpp b/src/openstudio_lib/ModelObjectTypeListView.cpp index 3ffc09387..32cd35ec7 100644 --- a/src/openstudio_lib/ModelObjectTypeListView.cpp +++ b/src/openstudio_lib/ModelObjectTypeListView.cpp @@ -42,18 +42,18 @@ namespace openstudio { -ModelObjectTypeListView::ModelObjectTypeListView(const model::Model& model, bool addScrollArea, OSItemType headerType, bool showLocalBCL, +ModelObjectTypeListView::ModelObjectTypeListView(const model::Model& model, bool addScrollArea, OSItemType headerType, bool isLibrary, QWidget* parent) - : OSCollapsibleItemList(addScrollArea, parent), m_model(model), m_headerType(headerType), m_showLocalBCL(showLocalBCL) {} + : OSCollapsibleItemList(addScrollArea, parent), m_model(model), m_headerType(headerType), m_isLibrary(isLibrary) {} ModelObjectTypeListView::ModelObjectTypeListView(const std::vector>& modelObjectTypesAndNames, - const model::Model& model, bool addScrollArea, OSItemType headerType, bool showLocalBCL, + const model::Model& model, bool addScrollArea, OSItemType headerType, bool isLibrary, QWidget* parent) : OSCollapsibleItemList(addScrollArea, parent), m_modelObjectTypesAndNames(modelObjectTypesAndNames), m_model(model), m_headerType(headerType), - m_showLocalBCL(showLocalBCL) { + m_isLibrary(isLibrary) { for (auto modelObjectTypeAndName = m_modelObjectTypesAndNames.rbegin(); modelObjectTypeAndName != m_modelObjectTypesAndNames.rend(); ++modelObjectTypeAndName) { addModelObjectType(modelObjectTypeAndName->first, modelObjectTypeAndName->second); @@ -62,7 +62,7 @@ ModelObjectTypeListView::ModelObjectTypeListView(const std::vector>& modelObjectTypesAndNames, const model::Model& model, - bool addScrollArea, OSItemType headerType, bool showLocalBCL = false, QWidget* parent = nullptr); + bool addScrollArea, OSItemType headerType, bool isLibrary, QWidget* parent = nullptr); virtual ~ModelObjectTypeListView() {} @@ -66,7 +66,7 @@ class ModelObjectTypeListView : public OSCollapsibleItemList model::Model m_model; OSItemType m_headerType; - bool m_showLocalBCL; + bool m_isLibrary; }; } // namespace openstudio diff --git a/src/openstudio_lib/OSItemList.cpp b/src/openstudio_lib/OSItemList.cpp index 723b7e973..f03c29cb4 100644 --- a/src/openstudio_lib/OSItemList.cpp +++ b/src/openstudio_lib/OSItemList.cpp @@ -48,8 +48,7 @@ OSItemList::OSItemList(OSVectorController* vectorController, bool addScrollArea, m_selectedItem(nullptr), m_itemsDraggable(false), m_itemsRemoveable(false), - m_type(OSItemType::ListItem), - m_dirty(false) { + m_type(OSItemType::ListItem) { // for now we will allow this item list to manage memory of OS_ASSERT(!m_vectorController->parent()); m_vectorController->setParent(this); @@ -203,15 +202,6 @@ void OSItemList::setItemIds(const std::vector& itemIds) { } } selectItem(firstItem()); - - m_dirty = true; - QTimer::singleShot(0, this, &OSItemList::refresh); -} - -void OSItemList::refresh() { - if (m_dirty) { - m_dirty = false; - } } void OSItemList::addItem(OSItem* item, bool selectItem) { @@ -234,9 +224,6 @@ void OSItemList::addItem(OSItem* item, bool selectItem) { if (selectItem) { this->selectItem(item); } - - m_dirty = true; - QTimer::singleShot(0, this, &OSItemList::refresh); } void OSItemList::selectItem(OSItem* selectItem) { diff --git a/src/openstudio_lib/OSItemList.hpp b/src/openstudio_lib/OSItemList.hpp index 6cc36ce25..922103845 100644 --- a/src/openstudio_lib/OSItemList.hpp +++ b/src/openstudio_lib/OSItemList.hpp @@ -89,8 +89,6 @@ class OSItemList : public OSItemSelector void setItemIds(const std::vector& itemIds); - void refresh(); - signals: void itemsRequested(); @@ -105,7 +103,6 @@ class OSItemList : public OSItemSelector bool m_itemsDraggable; bool m_itemsRemoveable; OSItemType m_type; - bool m_dirty; }; } // namespace openstudio diff --git a/src/openstudio_lib/OSVectorController.cpp b/src/openstudio_lib/OSVectorController.cpp index b5aed33c1..e30dbc275 100644 --- a/src/openstudio_lib/OSVectorController.cpp +++ b/src/openstudio_lib/OSVectorController.cpp @@ -29,12 +29,35 @@ #include "OSVectorController.hpp" +#include +#include + namespace openstudio { -OSVectorController::OSVectorController() : QObject() {} +OSVectorController::OSVectorController() : QObject(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) {} + +OSVectorController::~OSVectorController() { + delete m_reportItemsMutex; +} void OSVectorController::reportItems() { - emit itemIds(this->makeVector()); + m_reportItemsMutex->lock(); + + m_reportScheduled = true; + QTimer::singleShot(0, this, &OSVectorController::reportItemsImpl); + + m_reportItemsMutex->unlock(); +} + +void OSVectorController::reportItemsImpl() { + m_reportItemsMutex->lock(); + + if (m_reportScheduled) { + m_reportScheduled = false; + emit itemIds(this->makeVector()); + } + + m_reportItemsMutex->unlock(); } void OSVectorController::removeItem(OSItem* item) { diff --git a/src/openstudio_lib/OSVectorController.hpp b/src/openstudio_lib/OSVectorController.hpp index f96f84ee6..4ef3bc60a 100644 --- a/src/openstudio_lib/OSVectorController.hpp +++ b/src/openstudio_lib/OSVectorController.hpp @@ -39,6 +39,8 @@ #include #include // Signal-Slot replacement +class QMutex; + namespace openstudio { class OSVectorController @@ -52,7 +54,7 @@ class OSVectorController // for now, each controller must be parented by a widget OSVectorController(); - virtual ~OSVectorController() {} + virtual ~OSVectorController(); public slots: @@ -82,6 +84,17 @@ class OSVectorController virtual void onDrop(const OSItemId& itemId); virtual void onMakeNewItem(); + + private: + + bool m_reportScheduled; + + QMutex* m_reportItemsMutex; + + private slots: + + void reportItemsImpl(); + }; } // namespace openstudio diff --git a/src/openstudio_lib/ScheduleSetsView.cpp b/src/openstudio_lib/ScheduleSetsView.cpp index 8f5f02615..0e918c8bb 100644 --- a/src/openstudio_lib/ScheduleSetsView.cpp +++ b/src/openstudio_lib/ScheduleSetsView.cpp @@ -49,7 +49,7 @@ namespace openstudio { ScheduleSetsView::ScheduleSetsView(const openstudio::model::Model& model, QWidget* parent) - : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_DefaultScheduleSet, model, true, parent), new ScheduleSetInspectorView(model, parent), + : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_DefaultScheduleSet, model, true, false, parent), new ScheduleSetInspectorView(model, parent), false, parent) {} std::vector> ScheduleSetsView::modelObjectTypesAndNames() { diff --git a/src/openstudio_lib/SpaceTypesView.cpp b/src/openstudio_lib/SpaceTypesView.cpp index 1c6c2160b..71bbd1547 100644 --- a/src/openstudio_lib/SpaceTypesView.cpp +++ b/src/openstudio_lib/SpaceTypesView.cpp @@ -54,7 +54,7 @@ namespace openstudio { SpaceTypesView::SpaceTypesView(bool isIP, const openstudio::model::Model& model, QWidget* parent) - : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_SpaceType, model, true, parent), new SpaceTypeInspectorView(isIP, model, parent), + : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_SpaceType, model, true, false, parent), new SpaceTypeInspectorView(isIP, model, parent), true, // Note: "true" creates a GridView SubTabView parent) { auto* modelObjectListView = qobject_cast(this->itemSelector()); diff --git a/src/openstudio_lib/ThermalZonesView.cpp b/src/openstudio_lib/ThermalZonesView.cpp index 6a50c8a40..079ae2d55 100644 --- a/src/openstudio_lib/ThermalZonesView.cpp +++ b/src/openstudio_lib/ThermalZonesView.cpp @@ -43,7 +43,7 @@ namespace openstudio { ThermalZonesView::ThermalZonesView(bool isIP, const model::Model& model, QWidget* parent) - : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_ThermalZone, model, true, parent), new ThermalZoneView(isIP, model, parent), true, + : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_ThermalZone, model, true, false, parent), new ThermalZoneView(isIP, model, parent), true, parent) { connect(itemSelector(), &OSItemSelector::selectionCleared, inspectorView(), &OSInspectorView::clearSelection); From 265eec0a89f0a3346b80f8c5f60de3bc41299ef1 Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Sun, 25 Feb 2024 21:12:14 -0700 Subject: [PATCH 2/5] clang format --- src/openstudio_lib/HVACSystemsController.cpp | 27 +++++++------------ src/openstudio_lib/MaterialsView.cpp | 5 ++-- src/openstudio_lib/ModelObjectListView.cpp | 4 +-- .../ModelObjectTypeListView.cpp | 2 +- src/openstudio_lib/OSVectorController.hpp | 4 +-- src/openstudio_lib/ScheduleSetsView.cpp | 4 +-- src/openstudio_lib/ThermalZonesView.cpp | 4 +-- 7 files changed, 20 insertions(+), 30 deletions(-) diff --git a/src/openstudio_lib/HVACSystemsController.cpp b/src/openstudio_lib/HVACSystemsController.cpp index 48dd3a831..d2b26285f 100644 --- a/src/openstudio_lib/HVACSystemsController.cpp +++ b/src/openstudio_lib/HVACSystemsController.cpp @@ -1602,8 +1602,7 @@ void HVACLayoutController::updateLater() { QTimer::singleShot(0, this, &HVACLayoutController::update); } -SystemAvailabilityVectorController::SystemAvailabilityVectorController() - : ModelObjectVectorController() {} +SystemAvailabilityVectorController::SystemAvailabilityVectorController() : ModelObjectVectorController() {} SystemAvailabilityVectorController::~SystemAvailabilityVectorController() {} @@ -1615,8 +1614,7 @@ void SystemAvailabilityVectorController::attach(const model::ModelObject& modelO if (m_modelObject) { m_model = m_modelObject->model(); - m_model->getImpl() - ->onChange.connect(this); + m_model->getImpl()->onChange.connect(this); } reportItems(); @@ -1628,8 +1626,7 @@ void SystemAvailabilityVectorController::detach() { } if (m_model) { - m_model->getImpl() - ->onChange.disconnect(this); + m_model->getImpl()->onChange.disconnect(this); m_model.reset(); } @@ -1676,8 +1673,7 @@ void SystemAvailabilityVectorController::onReplaceItem(OSItem* /*currentItem*/, onDrop(replacementItemId); } -SupplyAirTempScheduleVectorController::SupplyAirTempScheduleVectorController() - : ModelObjectVectorController() {} +SupplyAirTempScheduleVectorController::SupplyAirTempScheduleVectorController() : ModelObjectVectorController() {} SupplyAirTempScheduleVectorController::~SupplyAirTempScheduleVectorController() {} @@ -1693,8 +1689,7 @@ void SupplyAirTempScheduleVectorController::attach(const model::ModelObject& mod if (m_modelObject) { m_model = m_modelObject->model(); - m_model->getImpl() - ->onChange.connect(this); + m_model->getImpl()->onChange.connect(this); } reportItems(); @@ -1706,8 +1701,7 @@ void SupplyAirTempScheduleVectorController::detach() { } if (m_model) { - m_model->getImpl() - ->onChange.disconnect(this); + m_model->getImpl()->onChange.disconnect(this); m_model.reset(); } @@ -1765,8 +1759,7 @@ void SupplyAirTempScheduleVectorController::onDropZoneItemClicked(OSItem* item) // CLASSIC ONES // CTOR -AvailabilityManagerObjectVectorController::AvailabilityManagerObjectVectorController() - : ModelObjectVectorController() {} +AvailabilityManagerObjectVectorController::AvailabilityManagerObjectVectorController() : ModelObjectVectorController() {} AvailabilityManagerObjectVectorController::~AvailabilityManagerObjectVectorController() {} @@ -1778,8 +1771,7 @@ void AvailabilityManagerObjectVectorController::attach(const model::ModelObject& if (m_modelObject) { m_model = m_modelObject->model(); - m_model->getImpl() - ->onChange.connect(this); + m_model->getImpl()->onChange.connect(this); } reportItems(); @@ -1791,8 +1783,7 @@ void AvailabilityManagerObjectVectorController::detach() { } if (m_model) { - m_model->getImpl() - ->onChange.disconnect(this); + m_model->getImpl()->onChange.disconnect(this); m_model.reset(); } diff --git a/src/openstudio_lib/MaterialsView.cpp b/src/openstudio_lib/MaterialsView.cpp index 409aadbab..c3f1d5d9a 100644 --- a/src/openstudio_lib/MaterialsView.cpp +++ b/src/openstudio_lib/MaterialsView.cpp @@ -57,8 +57,9 @@ namespace openstudio { MaterialsView::MaterialsView(bool isIP, const openstudio::model::Model& model, const QString& tabLabel, bool hasSubTabs, QWidget* parent) - : ModelSubTabView(new ModelObjectTypeListView(MaterialsView::modelObjectTypesAndNames(), model, true, OSItemType::CollapsibleListHeader, false, parent), - new MaterialsInspectorView(isIP, model, parent), false, parent) { + : ModelSubTabView( + new ModelObjectTypeListView(MaterialsView::modelObjectTypesAndNames(), model, true, OSItemType::CollapsibleListHeader, false, parent), + new MaterialsInspectorView(isIP, model, parent), false, parent) { // ModelObjectTypeListView will call reportItems for each IddObjectType, this results in inspector being build for each IddObjecType then thrown away connect(this, &MaterialsView::toggleUnitsClicked, modelObjectInspectorView(), &ModelObjectInspectorView::toggleUnitsClicked); } diff --git a/src/openstudio_lib/ModelObjectListView.cpp b/src/openstudio_lib/ModelObjectListView.cpp index 77f6a2810..f207374cc 100644 --- a/src/openstudio_lib/ModelObjectListView.cpp +++ b/src/openstudio_lib/ModelObjectListView.cpp @@ -60,7 +60,7 @@ ModelObjectListController::ModelObjectListController(const openstudio::IddObject : m_iddObjectType(iddObjectType), m_model(model), m_isLibrary(isLibrary), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) { if (!m_isLibrary) { - + // model.getImpl().get()->addWorkspaceObjectPtr.connect(this); connect(OSAppBase::instance(), &OSAppBase::workspaceObjectAddedPtr, this, &ModelObjectListController::objectAdded, Qt::QueuedConnection); @@ -109,7 +109,7 @@ void ModelObjectListController::reportItemsImpl() { m_reportScheduled = false; std::vector ids = this->makeVector(); emit itemIds(ids); - + if (m_selectedHandle) { m_selectedHandle.reset(); for (const OSItemId& id : ids) { diff --git a/src/openstudio_lib/ModelObjectTypeListView.cpp b/src/openstudio_lib/ModelObjectTypeListView.cpp index 32cd35ec7..38a06fc82 100644 --- a/src/openstudio_lib/ModelObjectTypeListView.cpp +++ b/src/openstudio_lib/ModelObjectTypeListView.cpp @@ -42,7 +42,7 @@ namespace openstudio { -ModelObjectTypeListView::ModelObjectTypeListView(const model::Model& model, bool addScrollArea, OSItemType headerType, bool isLibrary, +ModelObjectTypeListView::ModelObjectTypeListView(const model::Model& model, bool addScrollArea, OSItemType headerType, bool isLibrary, QWidget* parent) : OSCollapsibleItemList(addScrollArea, parent), m_model(model), m_headerType(headerType), m_isLibrary(isLibrary) {} diff --git a/src/openstudio_lib/OSVectorController.hpp b/src/openstudio_lib/OSVectorController.hpp index 4ef3bc60a..92f29c4d1 100644 --- a/src/openstudio_lib/OSVectorController.hpp +++ b/src/openstudio_lib/OSVectorController.hpp @@ -85,8 +85,7 @@ class OSVectorController virtual void onMakeNewItem(); - private: - + private: bool m_reportScheduled; QMutex* m_reportItemsMutex; @@ -94,7 +93,6 @@ class OSVectorController private slots: void reportItemsImpl(); - }; } // namespace openstudio diff --git a/src/openstudio_lib/ScheduleSetsView.cpp b/src/openstudio_lib/ScheduleSetsView.cpp index 0e918c8bb..dc6988d47 100644 --- a/src/openstudio_lib/ScheduleSetsView.cpp +++ b/src/openstudio_lib/ScheduleSetsView.cpp @@ -49,8 +49,8 @@ namespace openstudio { ScheduleSetsView::ScheduleSetsView(const openstudio::model::Model& model, QWidget* parent) - : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_DefaultScheduleSet, model, true, false, parent), new ScheduleSetInspectorView(model, parent), - false, parent) {} + : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_DefaultScheduleSet, model, true, false, parent), + new ScheduleSetInspectorView(model, parent), false, parent) {} std::vector> ScheduleSetsView::modelObjectTypesAndNames() { std::vector> result; diff --git a/src/openstudio_lib/ThermalZonesView.cpp b/src/openstudio_lib/ThermalZonesView.cpp index 079ae2d55..526085fbe 100644 --- a/src/openstudio_lib/ThermalZonesView.cpp +++ b/src/openstudio_lib/ThermalZonesView.cpp @@ -43,8 +43,8 @@ namespace openstudio { ThermalZonesView::ThermalZonesView(bool isIP, const model::Model& model, QWidget* parent) - : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_ThermalZone, model, true, false, parent), new ThermalZoneView(isIP, model, parent), true, - parent) { + : ModelSubTabView(new ModelObjectListView(IddObjectType::OS_ThermalZone, model, true, false, parent), new ThermalZoneView(isIP, model, parent), + true, parent) { connect(itemSelector(), &OSItemSelector::selectionCleared, inspectorView(), &OSInspectorView::clearSelection); From 953f826767f647c62ed4ca10ad7ce36a1a37242e Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Tue, 27 Feb 2024 21:53:50 -0700 Subject: [PATCH 3/5] Fix crash --- src/openstudio_lib/ModelObjectListView.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openstudio_lib/ModelObjectListView.cpp b/src/openstudio_lib/ModelObjectListView.cpp index f207374cc..291d0d743 100644 --- a/src/openstudio_lib/ModelObjectListView.cpp +++ b/src/openstudio_lib/ModelObjectListView.cpp @@ -111,13 +111,13 @@ void ModelObjectListController::reportItemsImpl() { emit itemIds(ids); if (m_selectedHandle) { - m_selectedHandle.reset(); for (const OSItemId& id : ids) { if (id.itemId() == toQString(*m_selectedHandle)) { emit selectedItemId(id); break; } } + m_selectedHandle.reset(); } } From 07bce344959b654c18932d2205ecc0f84840e057 Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Sat, 16 Mar 2024 18:19:03 -0600 Subject: [PATCH 4/5] Only schedule an update if one is not already scheduled --- src/openstudio_lib/ModelObjectListView.cpp | 13 +++++++++---- src/openstudio_lib/OSVectorController.cpp | 6 ++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/openstudio_lib/ModelObjectListView.cpp b/src/openstudio_lib/ModelObjectListView.cpp index 291d0d743..04ac79aed 100644 --- a/src/openstudio_lib/ModelObjectListView.cpp +++ b/src/openstudio_lib/ModelObjectListView.cpp @@ -82,9 +82,12 @@ void ModelObjectListController::objectAdded(std::shared_ptrlock(); - m_reportScheduled = true; + m_selectedHandle = handle; - QTimer::singleShot(0, this, &ModelObjectListController::reportItemsImpl); + if (!m_reportScheduled) { + m_reportScheduled = true; + QTimer::singleShot(0, this, &ModelObjectListController::reportItemsImpl); + } m_reportItemsMutex->unlock(); } @@ -95,8 +98,10 @@ void ModelObjectListController::objectRemoved(std::shared_ptrlock(); - m_reportScheduled = true; - QTimer::singleShot(0, this, &ModelObjectListController::reportItemsImpl); + if (!m_reportScheduled) { + m_reportScheduled = true; + QTimer::singleShot(0, this, &ModelObjectListController::reportItemsImpl); + } m_reportItemsMutex->unlock(); } diff --git a/src/openstudio_lib/OSVectorController.cpp b/src/openstudio_lib/OSVectorController.cpp index e30dbc275..fb933bb4b 100644 --- a/src/openstudio_lib/OSVectorController.cpp +++ b/src/openstudio_lib/OSVectorController.cpp @@ -43,8 +43,10 @@ OSVectorController::~OSVectorController() { void OSVectorController::reportItems() { m_reportItemsMutex->lock(); - m_reportScheduled = true; - QTimer::singleShot(0, this, &OSVectorController::reportItemsImpl); + if (!m_reportScheduled) { + m_reportScheduled = true; + QTimer::singleShot(0, this, &OSVectorController::reportItemsImpl); + } m_reportItemsMutex->unlock(); } From 882fc82a00b565715517a50df212124fa8f6216a Mon Sep 17 00:00:00 2001 From: Dan Macumber Date: Sat, 16 Mar 2024 18:21:56 -0600 Subject: [PATCH 5/5] Clang format --- src/openstudio_lib/ModelObjectListView.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/openstudio_lib/ModelObjectListView.cpp b/src/openstudio_lib/ModelObjectListView.cpp index 04ac79aed..82ce4c055 100644 --- a/src/openstudio_lib/ModelObjectListView.cpp +++ b/src/openstudio_lib/ModelObjectListView.cpp @@ -82,10 +82,9 @@ void ModelObjectListController::objectAdded(std::shared_ptrlock(); - m_selectedHandle = handle; if (!m_reportScheduled) { - m_reportScheduled = true; + m_reportScheduled = true; QTimer::singleShot(0, this, &ModelObjectListController::reportItemsImpl); }