File indexing completed on 2024-04-28 04:37:15

0001 /*
0002     SPDX-FileCopyrightText: 2007 Alexander Dymo <adymo@kdevelop.org>
0003     SPDX-FileCopyrightText: 2007 Kris Wong <kris.p.wong@gmail.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef KDEVPLATFORM_CORE_H
0009 #define KDEVPLATFORM_CORE_H
0010 
0011 #include "shellexport.h"
0012 #include <interfaces/icore.h>
0013 
0014 namespace KDevelop {
0015 
0016 class UiController;
0017 class PluginController;
0018 class ProjectController;
0019 class LanguageController;
0020 class PartController;
0021 class DocumentController;
0022 class RunController;
0023 class SessionController;
0024 class CorePrivate;
0025 class SourceFormatterController;
0026 class ProgressManager;
0027 class SelectionController;
0028 class DocumentationController;
0029 class DebugController;
0030 class WorkingSetController;
0031 class RuntimeController;
0032 class TestController;
0033 
0034 class KDEVPLATFORMSHELL_EXPORT Core: public ICore
0035 {
0036     Q_OBJECT
0037 
0038 public:
0039     enum Setup { Default=0, NoUi=1 };
0040 
0041     static QString version();
0042 
0043     /** Initialize the core of the kdevplatform application
0044       * returns false if the initialization fails, which may happen
0045       * if the same session is already active in another instance
0046       *
0047       * @param mode the mode in which to run
0048       * @param session the name or uuid of the session to be loaded
0049       *
0050       */
0051     static bool initialize(Setup mode=Default, const QString& session = {});
0052 
0053     /**
0054      * \brief Provide access an instance of Core
0055      */
0056     static Core *self();
0057 
0058     ~Core() override;
0059 
0060     IUiController *uiController() override;
0061     IPluginController *pluginController() override;
0062     IProjectController *projectController() override;
0063     ILanguageController *languageController() override;
0064     IPartController *partController() override;
0065     IDocumentController *documentController() override;
0066     IRunController *runController() override;
0067     ISourceFormatterController* sourceFormatterController() override;
0068     ISelectionController* selectionController() override;
0069     IDocumentationController* documentationController() override;
0070     IDebugController* debugController() override;
0071     ITestController* testController() override;
0072     IRuntimeController* runtimeController() override;
0073     ISession *activeSession() override;
0074     ISessionLock::Ptr activeSessionLock() override;
0075     QString sessionTemporaryDirectoryPath() const override;
0076 
0077     /// The following methods may only be used within the shell.
0078 
0079     UiController *uiControllerInternal();
0080     PluginController *pluginControllerInternal();
0081     ProjectController *projectControllerInternal();
0082     LanguageController *languageControllerInternal();
0083     PartController *partControllerInternal();
0084     DocumentController *documentControllerInternal();
0085     RunController *runControllerInternal();
0086     DocumentationController *documentationControllerInternal();
0087     DebugController *debugControllerInternal();
0088     WorkingSetController* workingSetControllerInternal();
0089     SourceFormatterController* sourceFormatterControllerInternal();
0090     TestController* testControllerInternal();
0091     RuntimeController* runtimeControllerInternal();
0092 
0093     /// @internal
0094     SessionController *sessionController();
0095     /// @internal
0096     ProgressManager *progressController();
0097 
0098     void cleanup();
0099 
0100     bool shuttingDown() const override;
0101 
0102     Core::Setup setupFlags() const;
0103 
0104 public Q_SLOTS:
0105     void shutdown();
0106 
0107 protected:
0108     friend class CorePrivate;
0109     explicit Core( KDevelop::CorePrivate* dd, QObject* parent = nullptr );
0110     KDevelop::CorePrivate *d;
0111     static Core *m_self;
0112 private:
0113     explicit Core(QObject *parent = nullptr);
0114 };
0115 
0116 }
0117 
0118 #endif
0119