Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 5 additions & 29 deletions src/openstudio_lib/ConstructionObjectVectorController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,51 +43,27 @@
#include <openstudio/utilities/idd/IddEnums.hxx>

#include <QMessageBox>
#include <QTimer>
#include <QMutex>

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() {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only a few OSVectorController derived classes were specialized to have the reportItemsLater slot which schedules a call to OSVectorController::reportItems. This PR pulls that functionality into the OSVectorController. Now reportItems will schedule a call to a reportItemsImpl method that will run once so we don't report (and redraw) the same objects multipe times per execute loop.

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<OSItemId> ConstructionObjectVectorController::makeVector() {
Expand Down
12 changes: 0 additions & 12 deletions src/openstudio_lib/ConstructionObjectVectorController.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@
#include "ModelObjectVectorController.hpp"
#include <openstudio/utilities/core/Logger.hpp>

class QMutex;

namespace openstudio {

class ConstructionObjectVectorController : public ModelObjectVectorController
Expand All @@ -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;

Expand All @@ -76,9 +67,6 @@ class ConstructionObjectVectorController : public ModelObjectVectorController

void insert(const OSItemId& itemId, int insertPosition = -1, boost::optional<int> erasePosition_ = boost::none);

bool m_reportScheduled;
QMutex* m_reportItemsMutex;

enum LayerType
{
FENESTRATION,
Expand Down
2 changes: 1 addition & 1 deletion src/openstudio_lib/ConstructionsView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion src/openstudio_lib/DefaultConstructionSetsView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
111 changes: 17 additions & 94 deletions src/openstudio_lib/HVACSystemsController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1602,12 +1602,9 @@ void HVACLayoutController::updateLater() {
QTimer::singleShot(0, this, &HVACLayoutController::update);
}

SystemAvailabilityVectorController::SystemAvailabilityVectorController()
: ModelObjectVectorController(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) {}
SystemAvailabilityVectorController::SystemAvailabilityVectorController() : ModelObjectVectorController() {}

SystemAvailabilityVectorController::~SystemAvailabilityVectorController() {
delete m_reportItemsMutex;
}
SystemAvailabilityVectorController::~SystemAvailabilityVectorController() {}

void SystemAvailabilityVectorController::attach(const model::ModelObject& modelObject) {
detach();
Expand All @@ -1617,11 +1614,10 @@ void SystemAvailabilityVectorController::attach(const model::ModelObject& modelO
if (m_modelObject) {
m_model = m_modelObject->model();

m_model->getImpl<model::detail::Model_Impl>()
->onChange.connect<SystemAvailabilityVectorController, &SystemAvailabilityVectorController::reportItemsLater>(this);
m_model->getImpl<model::detail::Model_Impl>()->onChange.connect<OSVectorController, &OSVectorController::reportItems>(this);
}

reportItemsLater();
reportItems();
}

void SystemAvailabilityVectorController::detach() {
Expand All @@ -1630,33 +1626,12 @@ void SystemAvailabilityVectorController::detach() {
}

if (m_model) {
m_model->getImpl<model::detail::Model_Impl>()
->onChange.disconnect<SystemAvailabilityVectorController, &SystemAvailabilityVectorController::reportItemsLater>(this);
m_model->getImpl<model::detail::Model_Impl>()->onChange.disconnect<OSVectorController, &OSVectorController::reportItems>(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<model::AirLoopHVAC> SystemAvailabilityVectorController::airLoopHVAC() {
Expand Down Expand Up @@ -1698,12 +1673,9 @@ void SystemAvailabilityVectorController::onReplaceItem(OSItem* /*currentItem*/,
onDrop(replacementItemId);
}

SupplyAirTempScheduleVectorController::SupplyAirTempScheduleVectorController()
: ModelObjectVectorController(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) {}
SupplyAirTempScheduleVectorController::SupplyAirTempScheduleVectorController() : ModelObjectVectorController() {}

SupplyAirTempScheduleVectorController::~SupplyAirTempScheduleVectorController() {
delete m_reportItemsMutex;
}
SupplyAirTempScheduleVectorController::~SupplyAirTempScheduleVectorController() {}

void SystemAvailabilityVectorController::onDropZoneItemClicked(OSItem* item) {
OSAppBase::instance()->currentDocument()->mainRightColumnController()->inspectModelObjectByItem(item, false);
Expand All @@ -1717,11 +1689,10 @@ void SupplyAirTempScheduleVectorController::attach(const model::ModelObject& mod
if (m_modelObject) {
m_model = m_modelObject->model();

m_model->getImpl<model::detail::Model_Impl>()
->onChange.connect<SupplyAirTempScheduleVectorController, &SupplyAirTempScheduleVectorController::reportItemsLater>(this);
m_model->getImpl<model::detail::Model_Impl>()->onChange.connect<OSVectorController, &OSVectorController::reportItems>(this);
}

reportItemsLater();
reportItems();
}

void SupplyAirTempScheduleVectorController::detach() {
Expand All @@ -1730,33 +1701,10 @@ void SupplyAirTempScheduleVectorController::detach() {
}

if (m_model) {
m_model->getImpl<model::detail::Model_Impl>()
->onChange.disconnect<SupplyAirTempScheduleVectorController, &SupplyAirTempScheduleVectorController::reportItemsLater>(this);
m_model->getImpl<model::detail::Model_Impl>()->onChange.disconnect<OSVectorController, &OSVectorController::reportItems>(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<model::SetpointManagerScheduled> SupplyAirTempScheduleVectorController::setpointManagerScheduled() {
Expand Down Expand Up @@ -1811,12 +1759,9 @@ void SupplyAirTempScheduleVectorController::onDropZoneItemClicked(OSItem* item)
// CLASSIC ONES

// CTOR
AvailabilityManagerObjectVectorController::AvailabilityManagerObjectVectorController()
: ModelObjectVectorController(), m_reportScheduled(false), m_reportItemsMutex(new QMutex()) {}
AvailabilityManagerObjectVectorController::AvailabilityManagerObjectVectorController() : ModelObjectVectorController() {}

AvailabilityManagerObjectVectorController::~AvailabilityManagerObjectVectorController() {
delete m_reportItemsMutex;
}
AvailabilityManagerObjectVectorController::~AvailabilityManagerObjectVectorController() {}

void AvailabilityManagerObjectVectorController::attach(const model::ModelObject& modelObject) {
detach();
Expand All @@ -1826,11 +1771,10 @@ void AvailabilityManagerObjectVectorController::attach(const model::ModelObject&
if (m_modelObject) {
m_model = m_modelObject->model();

m_model->getImpl<model::detail::Model_Impl>()
->onChange.connect<AvailabilityManagerObjectVectorController, &AvailabilityManagerObjectVectorController::reportItemsLater>(this);
m_model->getImpl<model::detail::Model_Impl>()->onChange.connect<OSVectorController, &OSVectorController::reportItems>(this);
}

reportItemsLater();
reportItems();
}

void AvailabilityManagerObjectVectorController::detach() {
Expand All @@ -1839,33 +1783,12 @@ void AvailabilityManagerObjectVectorController::detach() {
}

if (m_model) {
m_model->getImpl<model::detail::Model_Impl>()
->onChange.disconnect<AvailabilityManagerObjectVectorController, &AvailabilityManagerObjectVectorController::reportItemsLater>(this);
m_model->getImpl<model::detail::Model_Impl>()->onChange.disconnect<OSVectorController, &OSVectorController::reportItems>(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
Expand Down
27 changes: 0 additions & 27 deletions src/openstudio_lib/HVACSystemsController.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,10 +330,6 @@ class SystemAvailabilityVectorController : public ModelObjectVectorController

public slots:

void reportItemsLater();

void reportItems();

void onDropZoneItemClicked(OSItem* item);

protected:
Expand All @@ -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
Expand All @@ -366,10 +357,6 @@ class SupplyAirTempScheduleVectorController : public ModelObjectVectorController

public slots:

void reportItemsLater();

void reportItems();

void onDropZoneItemClicked(OSItem* item);

protected:
Expand All @@ -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
Expand All @@ -404,10 +386,6 @@ class AvailabilityManagerObjectVectorController : public ModelObjectVectorContro

public slots:

void reportItemsLater();

void reportItems();

void onDropZoneItemClicked(OSItem* item);

protected:
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/openstudio_lib/LoadsView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
Loading