/***************************************************************************
- * Copyright (C) 2005-09 by the Quassel Project *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef QTUIAPPLICATION_H_
-#define QTUIAPPLICATION_H_
+#pragma once
-#ifdef HAVE_KDE
-# include <KApplication>
-#else
-# include <QApplication>
-#endif
+#include "qtui-export.h"
+#include <memory>
+
+#include <QApplication>
#include <QSessionManager>
+#include "client.h"
+#include "qtuisettings.h"
#include "quassel.h"
#include "uisettings.h"
class QtUi;
-#ifdef HAVE_KDE
-class QtUiApplication : public KApplication, public Quassel {
-#else
-class QtUiApplication : public QApplication, public Quassel {
-#endif
-
- Q_OBJECT
+class QTUI_EXPORT QtUiApplication : public QApplication
+{
+ Q_OBJECT
public:
- QtUiApplication(int &, char **);
- ~QtUiApplication();
- virtual bool init();
+ QtUiApplication(int&, char**);
+
+ virtual void init();
- void resumeSessionIfPossible();
- virtual void commitData(QSessionManager &manager);
- virtual void saveState(QSessionManager &manager);
+ void resumeSessionIfPossible();
+ inline bool isAboutToQuit() const { return _aboutToQuit; }
- inline bool isAboutToQuit() const { return _aboutToQuit; }
+ void commitData(QSessionManager& manager);
+ void saveState(QSessionManager& manager);
+
+protected:
+ virtual Quassel::QuitHandler quitHandler();
private:
- bool _aboutToQuit;
-};
+ /**
+ * Migrate settings if neccessary and possible
+ *
+ * If unsuccessful (major version changed, minor version upgrade failed), returning false, the
+ * settings are in an unknown state and the client should quit.
+ *
+ * @return True if settings successfully migrated, otherwise false
+ */
+ bool migrateSettings();
-#endif
+ /**
+ * Migrate from one minor settings version to the next
+ *
+ * Settings can only be migrated one version at a time. Start from the current version, calling
+ * this function for each intermediate version up until the latest version.
+ *
+ * @param[in] settings Current settings instance
+ * @param[in] newVersion Next target version for migration, at most 1 from the current version
+ * @return True if minor revision of settings successfully migrated, otherwise false
+ */
+ bool applySettingsMigration(QtUiSettings settings, const uint newVersion);
+
+protected:
+ std::unique_ptr<Client> _client;
+
+private:
+ bool _aboutToQuit{false};
+};