Revision control
++ // Copyright (C) 2024 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
++
++ #include "statecontroller.h"
++
++ StateController::StateController(QObject *parent)
++ : QObject{parent}
++ {}
++
++ StateController *StateController::instance()
++ {
++ if (!s_instance)
++ s_instance = new StateController;
++
++ return s_instance;
++ }
++
++ void StateController::setDirty(bool dirty)
++ {
++ switch (currentState()) {
++ case InitState:
++ if (dirty)
++ setCurrentState(NewState);
++ break;
++
++ case NewState:
++ if (!dirty)
++ setCurrentState(InitState);
++ break;
++
++ case OpenState:
++ if (dirty)
++ setCurrentState(DirtyState);
++ break;
++
++ case DirtyState:
++ if (!dirty)
++ setCurrentState(OpenState);
++ break;
++
++ default:
++ break;
++ }
++ }
++
++ void StateController::changesSaved(const QString &filePath)
++ {
++ switch (currentState()) {
++ case NewState:
++ case DirtyState:
++ if (!filePath.isNull())
++ setFilePath(filePath);
++ setCurrentState(OpenState);
++ break;
++
++ default:
++ break;
++ }
++ }
++
++ void StateController::fileLoaded(const QString &filePath)
++ {
++ switch (currentState()) {
++ case InitState:
++ setFilePath(filePath);
++ setCurrentState(OpenState);
++ break;
++
++ case OpenState:
++ setFilePath(filePath);
++ emit stateChanged(OpenState, OpenState);
++ break;
++
++ default:
++ break;
++ }
++ }
++
++ void StateController::fileClosed()
++ {
++ switch (currentState()) {
++ case OpenState:
++ setFilePath();
++ setCurrentState(InitState);
++ break;
++
++ default:
++ break;
++ }
++ }
++
++ void StateController::setCurrentState(State state)
++ {
++ const State old = currentState();
++ if (old == state)
++ return;
++
++ m_currentState = state;
++ emit stateChanged(old, state);
++ }