/* Copyright (C) 2012 Sebastian Herbord. All rights reserved. This file is part of Mod Organizer. Mod Organizer is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Mod Organizer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Mod Organizer. If not, see . */ #ifndef MOAPPLICATION_H #define MOAPPLICATION_H #include "env.h" #include #include class Settings; class MOMultiProcess; class Instance; class PluginContainer; class OrganizerCore; class NexusInterface; namespace MOBase { class IPluginGame; } class MOApplication : public QApplication { Q_OBJECT public: MOApplication(int& argc, char** argv); // called from main() only once for stuff that persists across "restarts" // void firstTimeSetup(MOMultiProcess& multiProcess); // called from main() each time MO "restarts", loads settings, plugins, // OrganizerCore and the current instance // int setup(MOMultiProcess& multiProcess, bool forceSelect); // shows splash, starts an api check, shows the main window and blocks until // MO exits // int run(MOMultiProcess& multiProcess); // called from main() when MO "restarts", must clean up everything so setup() // starts fresh // void resetForRestart(); // undefined if setup() wasn't called // OrganizerCore& core(); // wraps QApplication::notify() in a catch, reports errors and ignores them // bool notify(QObject* receiver, QEvent* event) override; public slots: bool setStyleFile(const QString& style); private slots: void updateStyle(const QString& fileName); private: QFileSystemWatcher m_styleWatcher; QString m_defaultStyle; std::unique_ptr m_modules; std::shared_ptr m_instance; std::unique_ptr m_settings; std::unique_ptr m_nexus; std::unique_ptr m_plugins; std::unique_ptr m_core; void externalMessage(const QString& message); std::shared_ptr getCurrentInstance(bool forceSelect); std::optional setupInstanceLoop(Instance& currentInstance, PluginContainer& pc); void purgeOldFiles(); }; class MOSplash { public: MOSplash(const Settings& settings, const QString& dataPath, const MOBase::IPluginGame* game); void close(); private: std::unique_ptr ss_; QString getSplashPath(const Settings& settings, const QString& dataPath, const MOBase::IPluginGame* game) const; }; #endif // MOAPPLICATION_H