Skip to content

Commit 4e5a75e

Browse files
committed
ProjectLoader: Clear loaded project before closing app
1 parent 9a2feca commit 4e5a75e

File tree

2 files changed

+47
-39
lines changed

2 files changed

+47
-39
lines changed

src/projectloader.cpp

+46-39
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ ProjectLoader::ProjectLoader(QObject *parent) :
3232
}
3333
});
3434

35+
connect(qApp, &QCoreApplication::aboutToQuit, this, &ProjectLoader::clear);
36+
3537
initTimer();
3638

3739
// Register pen blocks
@@ -64,45 +66,7 @@ void ProjectLoader::setFileName(const QString &newFileName)
6466

6567
m_fileName = newFileName;
6668

67-
// Stop the project
68-
if (m_engine)
69-
m_engine->stop();
70-
71-
// Reset stage model
72-
m_stage.init(nullptr);
73-
74-
if (m_stage.renderedTarget())
75-
m_stage.renderedTarget()->update();
76-
77-
// Delete old sprites
78-
for (SpriteModel *sprite : m_sprites)
79-
sprite->deleteLater();
80-
81-
m_sprites.clear();
82-
emit spritesChanged();
83-
84-
// Delete old clones
85-
for (SpriteModel *clone : m_clones)
86-
deleteCloneObject(clone);
87-
88-
m_clones.clear();
89-
emit clonesChanged();
90-
91-
// Delete old monitors
92-
for (MonitorModel *monitor : m_monitors) {
93-
emit monitorRemoved(monitor);
94-
monitor->deleteLater();
95-
}
96-
97-
m_monitors.clear();
98-
emit monitorsChanged();
99-
100-
// Clear the engine
101-
if (m_engine)
102-
m_engine->clear();
103-
104-
m_engine = nullptr;
105-
emit engineChanged();
69+
clear();
10670

10771
m_project.setFileName(m_fileName.toStdString());
10872
m_loadStatus = false;
@@ -248,6 +212,49 @@ void ProjectLoader::callLoad(ProjectLoader *loader)
248212
loader->load();
249213
}
250214

215+
void ProjectLoader::clear()
216+
{
217+
// Stop the project
218+
if (m_engine)
219+
m_engine->stop();
220+
221+
// Reset stage model
222+
m_stage.init(nullptr);
223+
224+
if (m_stage.renderedTarget())
225+
m_stage.renderedTarget()->update();
226+
227+
// Delete old sprites
228+
for (SpriteModel *sprite : m_sprites)
229+
sprite->deleteLater();
230+
231+
m_sprites.clear();
232+
emit spritesChanged();
233+
234+
// Delete old clones
235+
for (SpriteModel *clone : m_clones)
236+
deleteCloneObject(clone);
237+
238+
m_clones.clear();
239+
emit clonesChanged();
240+
241+
// Delete old monitors
242+
for (MonitorModel *monitor : m_monitors) {
243+
emit monitorRemoved(monitor);
244+
monitor->deleteLater();
245+
}
246+
247+
m_monitors.clear();
248+
emit monitorsChanged();
249+
250+
// Clear the engine
251+
if (m_engine)
252+
m_engine->clear();
253+
254+
m_engine = nullptr;
255+
emit engineChanged();
256+
}
257+
251258
void ProjectLoader::load()
252259
{
253260
m_unpositionedMonitors.clear();

src/projectloader.h

+1
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ class ProjectLoader : public QObject
130130

131131
private:
132132
static void callLoad(ProjectLoader *loader);
133+
void clear();
133134
void load();
134135
void initTimer();
135136
void redraw();

0 commit comments

Comments
 (0)