1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#ifndef STATECONTROLLER_H
#define STATECONTROLLER_H
#include <QObject>
class StateController : public QObject
{
Q_OBJECT
public:
// _________
// | |<-------------------------------------*
// |InitState|<-------------------* |
// |_________*----* _________ | |
// | | | | setDirty(false) |
// setDirty(true) *->|NewState *--* |
// | |_________*---* |
// | __________ | changesSaved() |
// fileLoaded() *->| |<-* | fileClosed()
// | |-------------------*
// *--*OpenState |<------------------*
// | | *-* |
// fileLoaded() *->|__________* | |
// | |
// | ___________ | changesSaved()
// | | | | or
// setDirty(true) *->|DirtyState | | setDirty(false)
// |___________*--*
enum State {
InitState,
NewState,
OpenState,
DirtyState,
};
public:
explicit StateController(QObject *parent = nullptr);
State currentState() const { return m_currentState; }
QString filePath() const { return m_filePath; }
static StateController* instance();
public slots:
void setDirty(bool dirty);
void changesSaved(const QString &filePath = {});
void fileLoaded(const QString &filePath);
void fileClosed();
signals:
void stateChanged(State from, State to);
private:
void setCurrentState(State state);
void setFilePath(const QString &filePath = {}) { m_filePath = filePath; }
private:
State m_currentState = InitState;
QString m_filePath;
static inline StateController *s_instance = nullptr;
};
#endif // STATECONTROLLER_H
|