Skip to content

Commit d33c48f

Browse files
committed
Replace monitor added/removed handlers with signals
1 parent aec4178 commit d33c48f

File tree

5 files changed

+25
-32
lines changed

5 files changed

+25
-32
lines changed

include/scratchcpp/iengine.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -346,11 +346,11 @@ class LIBSCRATCHCPP_EXPORT IEngine
346346
/*! Sets the list of monitors. */
347347
virtual void setMonitors(const std::vector<std::shared_ptr<Monitor>> &newMonitors) = 0;
348348

349-
/*! Sets the function which is called when a monitor is added. */
350-
virtual void setAddMonitorHandler(const std::function<void(Monitor *)> &handler) = 0;
349+
/*! Emits when a monitor is added. */
350+
virtual sigslot::signal<Monitor *> &monitorAdded() = 0;
351351

352-
/*! Sets the function which is called when a monitor is removed. */
353-
virtual void setRemoveMonitorHandler(const std::function<void(Monitor *, IMonitorHandler *)> &handler) = 0;
352+
/*! Emits when a monitor is removed. */
353+
virtual sigslot::signal<Monitor *, IMonitorHandler *> &monitorRemoved() = 0;
354354

355355
/*! Returns the function which is called when a question is asked, for example using the 'ask and wait' block. */
356356
virtual const std::function<void(const std::string &)> &questionAsked() const = 0;

src/engine/internal/engine.cpp

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,8 @@ void Engine::clear()
6060
{
6161
stop();
6262

63-
if (m_removeMonitorHandler) {
64-
for (auto monitor : m_monitors)
65-
m_removeMonitorHandler(monitor.get(), monitor->impl->iface);
66-
}
63+
for (auto monitor : m_monitors)
64+
m_monitorRemoved(monitor.get(), monitor->impl->iface);
6765

6866
m_sections.clear();
6967
m_targets.clear();
@@ -1220,28 +1218,25 @@ const std::vector<std::shared_ptr<Monitor>> &Engine::monitors() const
12201218

12211219
void Engine::setMonitors(const std::vector<std::shared_ptr<Monitor>> &newMonitors)
12221220
{
1223-
if (m_addMonitorHandler) {
1224-
m_monitors.clear();
1221+
m_monitors.clear();
12251222

1226-
for (auto monitor : newMonitors) {
1227-
m_monitors.push_back(monitor);
1228-
m_addMonitorHandler(monitor.get());
1229-
}
1230-
} else
1231-
m_monitors = newMonitors;
1223+
for (auto monitor : newMonitors) {
1224+
m_monitors.push_back(monitor);
1225+
m_monitorAdded(monitor.get());
1226+
}
12321227

12331228
// Create missing monitors
12341229
createMissingMonitors();
12351230
}
12361231

1237-
void Engine::setAddMonitorHandler(const std::function<void(Monitor *)> &handler)
1232+
sigslot::signal<Monitor *> &Engine::monitorAdded()
12381233
{
1239-
m_addMonitorHandler = handler;
1234+
return m_monitorAdded;
12401235
}
12411236

1242-
void Engine::setRemoveMonitorHandler(const std::function<void(Monitor *, IMonitorHandler *)> &handler)
1237+
sigslot::signal<Monitor *, IMonitorHandler *> &Engine::monitorRemoved()
12431238
{
1244-
m_removeMonitorHandler = handler;
1239+
return m_monitorRemoved;
12451240
}
12461241

12471242
const std::function<void(const std::string &)> &Engine::questionAsked() const
@@ -1633,9 +1628,7 @@ void Engine::addVarOrListMonitor(std::shared_ptr<Monitor> monitor, Target *targe
16331628
monitor->setY(rect.top());
16341629

16351630
m_monitors.push_back(monitor);
1636-
1637-
if (m_addMonitorHandler)
1638-
m_addMonitorHandler(monitor.get());
1631+
m_monitorAdded(monitor.get());
16391632

16401633
monitor->setVisible(false);
16411634
}

src/engine/internal/engine.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ class Engine : public IEngine
143143

144144
const std::vector<std::shared_ptr<Monitor>> &monitors() const override;
145145
void setMonitors(const std::vector<std::shared_ptr<Monitor>> &newMonitors) override;
146-
void setAddMonitorHandler(const std::function<void(Monitor *)> &handler) override;
147-
void setRemoveMonitorHandler(const std::function<void(Monitor *, IMonitorHandler *)> &handler) override;
146+
sigslot::signal<Monitor *> &monitorAdded() override;
147+
sigslot::signal<Monitor *, IMonitorHandler *> &monitorRemoved() override;
148148

149149
const std::function<void(const std::string &)> &questionAsked() const override;
150150
void setQuestionAsked(const std::function<void(const std::string &)> &f) override;
@@ -272,8 +272,8 @@ class Engine : public IEngine
272272
bool m_stopEventLoop = false;
273273
std::mutex m_stopEventLoopMutex;
274274

275-
std::function<void(Monitor *)> m_addMonitorHandler = nullptr;
276-
std::function<void(Monitor *, IMonitorHandler *)> m_removeMonitorHandler = nullptr;
275+
sigslot::signal<Monitor *> m_monitorAdded;
276+
sigslot::signal<Monitor *, IMonitorHandler *> m_monitorRemoved;
277277
std::function<void(const std::string &)> m_questionAsked = nullptr;
278278
std::function<void(const std::string &)> m_questionAnswered = nullptr;
279279
};

test/engine/engine_test.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ TEST(EngineTest, Clear)
106106

107107
AddRemoveMonitorMock removeMonitorMock;
108108
auto handler = std::bind(&AddRemoveMonitorMock::monitorRemoved, &removeMonitorMock, std::placeholders::_1, std::placeholders::_2);
109-
engine.setRemoveMonitorHandler(std::function<void(Monitor *, IMonitorHandler *)>(handler));
109+
engine.monitorRemoved().connect(handler);
110110
engine.setMonitors({ monitor1, monitor2, monitor3, monitor4 });
111111

112112
EXPECT_CALL(removeMonitorMock, monitorRemoved(monitor1.get(), &iface1));
@@ -1581,7 +1581,7 @@ TEST(EngineTest, Monitors)
15811581

15821582
AddRemoveMonitorMock addMonitorMock;
15831583
auto handler = std::bind(&AddRemoveMonitorMock::monitorAdded, &addMonitorMock, std::placeholders::_1);
1584-
engine.setAddMonitorHandler(std::function<void(Monitor *)>(handler));
1584+
engine.monitorAdded().connect(handler);
15851585
engine.setMonitors({});
15861586

15871587
EXPECT_CALL(addMonitorMock, monitorAdded(m1.get()));
@@ -1691,7 +1691,7 @@ TEST(EngineTest, CreateMissingMonitors)
16911691
Engine engine;
16921692
AddRemoveMonitorMock addMonitorMock;
16931693
auto handler = std::bind(&AddRemoveMonitorMock::monitorAdded, &addMonitorMock, std::placeholders::_1);
1694-
engine.setAddMonitorHandler(std::function<void(Monitor *)>(handler));
1694+
engine.monitorAdded().connect(handler);
16951695

16961696
EXPECT_CALL(addMonitorMock, monitorAdded(m1.get()));
16971697
EXPECT_CALL(addMonitorMock, monitorAdded(m2.get()));

test/mocks/enginemock.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,8 +124,8 @@ class EngineMock : public IEngine
124124

125125
MOCK_METHOD(const std::vector<std::shared_ptr<Monitor>> &, monitors, (), (const, override));
126126
MOCK_METHOD(void, setMonitors, (const std::vector<std::shared_ptr<Monitor>> &), (override));
127-
MOCK_METHOD(void, setAddMonitorHandler, (const std::function<void(Monitor *)> &), (override));
128-
MOCK_METHOD(void, setRemoveMonitorHandler, (const std::function<void(Monitor *, IMonitorHandler *)> &), (override));
127+
MOCK_METHOD(sigslot::signal<Monitor *> &, monitorAdded, (), (override));
128+
MOCK_METHOD((sigslot::signal<Monitor *, IMonitorHandler *> &), monitorRemoved, (), (override));
129129

130130
MOCK_METHOD(const std::function<void(const std::string &)> &, questionAsked, (), (const, override));
131131
MOCK_METHOD(void, setQuestionAsked, (const std::function<void(const std::string &)> &), (override));

0 commit comments

Comments
 (0)