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

0001 /*
0002     SPDX-FileCopyrightText: 2007 Alexander Dymo <adymo@kdevelop.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #ifndef KDEVPLATFORM_UICONTROLLER_H
0008 #define KDEVPLATFORM_UICONTROLLER_H
0009 
0010 #include "shellexport.h"
0011 
0012 #include <KSharedConfig>
0013 
0014 #include <interfaces/iuicontroller.h>
0015 #include <interfaces/iassistant.h>
0016 #include <sublime/controller.h>
0017 
0018 class QListWidgetItem;
0019 
0020 namespace Sublime {
0021     class ToolDocument;
0022 }
0023 
0024 namespace KDevelop {
0025 
0026 class Core;
0027 class MainWindow;
0028 class UiControllerPrivate;
0029 
0030 class KDEVPLATFORMSHELL_EXPORT UiController: public Sublime::Controller, public IUiController
0031 {
0032     Q_OBJECT
0033 
0034 public:
0035     explicit UiController(Core *core);
0036     ~UiController() override;
0037 
0038     /** @return area for currently active sublime mainwindow or 0 if
0039     no sublime mainwindow is active.*/
0040     Sublime::Area *activeArea() override;
0041     /** @return active sublime mainwindow or 0 if no such mainwindow is active.*/
0042     Sublime::MainWindow *activeSublimeWindow();
0043     /** @return active sublime mainwindow or 0 if no such mainwindow is active.*/
0044     KParts::MainWindow *activeMainWindow() override;
0045 
0046     /** @return default main window - the main window for default area in the shell.
0047     No guarantee is given that it always exists so this method may return 0.*/
0048     MainWindow *defaultMainWindow();
0049 
0050     void switchToArea(const QString &areaName, SwitchMode switchMode) override;
0051 
0052     void addToolView(const QString &name, IToolViewFactory *factory, FindFlags state) override;
0053     void removeToolView(IToolViewFactory *factory) override;
0054 
0055     QWidget* findToolView(const QString& name, IToolViewFactory *factory, FindFlags flags) override;
0056     void raiseToolView(QWidget* toolViewWidget) override;
0057 
0058     void selectNewToolViewToAdd(MainWindow *mw);
0059 
0060     void initialize();
0061     void cleanup();
0062 
0063     void showSettingsDialog();
0064     Sublime::Controller* controller() override;
0065 
0066     void mainWindowAdded(Sublime::MainWindow* mainWindow);
0067 
0068     void saveAllAreas(const KSharedConfigPtr& config);
0069     void saveArea(Sublime::Area* area, KConfigGroup & group);
0070     void loadAllAreas(const KSharedConfigPtr& config);
0071     void loadArea(Sublime::Area* area, const KConfigGroup & group);
0072 
0073     /*! @p status must implement KDevelop::IStatus */
0074     void registerStatus(QObject* status) override;
0075 
0076     void showErrorMessage(const QString& message, int timeout) override;
0077     void postMessage(Sublime::Message* message) override;
0078 
0079     /// Returns list of available view factories together with their ToolDocuments.
0080     /// @see addToolView(), removeToolView(), findToolView()
0081     const QHash<IToolViewFactory*, Sublime::ToolDocument*>& factoryDocuments() const;
0082 
0083     /// Adds a tool view in the active area to the dock area @p area.
0084     /// @see activeArea()
0085     void addToolViewToDockArea(KDevelop::IToolViewFactory* factory, Qt::DockWidgetArea area);
0086 
0087     bool toolViewPresent(Sublime::ToolDocument* doc, Sublime::Area* area);
0088 
0089     QWidget* activeToolViewActionListener() const override;
0090 
0091     QList<Sublime::Area*> allAreas() const override;
0092 
0093 public Q_SLOTS:
0094     void raiseToolView(Sublime::View * view);
0095 
0096 private Q_SLOTS:
0097     void addNewToolView(MainWindow* mw, QListWidgetItem* item);
0098 
0099     void slotAreaChanged(Sublime::Area* area);
0100     void slotActiveToolViewChanged(Sublime::View* view);
0101 
0102 private:
0103     void addToolViewIfWanted(IToolViewFactory* factory,
0104                            Sublime::ToolDocument* doc,
0105                            Sublime::Area* area);
0106     Sublime::View* addToolViewToArea(IToolViewFactory* factory,
0107                            Sublime::ToolDocument* doc,
0108                            Sublime::Area* area, Sublime::Position p=Sublime::AllPositions);
0109     void setupActions();
0110 
0111 private:
0112     const QScopedPointer<class UiControllerPrivate> d_ptr;
0113     Q_DECLARE_PRIVATE(UiController)
0114     friend class UiControllerPrivate;
0115 };
0116 
0117 }
0118 
0119 #endif
0120