1 /*
2     SPDX-FileCopyrightText: 2007 Alexander Dymo <adymo@kdevelop.org>
3 
4     SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #ifndef KDEVPLATFORM_UICONTROLLER_H
8 #define KDEVPLATFORM_UICONTROLLER_H
9 
10 #include "shellexport.h"
11 
12 #include <KSharedConfig>
13 
14 #include <interfaces/iuicontroller.h>
15 #include <interfaces/iassistant.h>
16 #include <sublime/controller.h>
17 
18 class QListWidgetItem;
19 
20 namespace Sublime {
21     class ToolDocument;
22 }
23 
24 namespace KDevelop {
25 
26 class Core;
27 class MainWindow;
28 class UiControllerPrivate;
29 
30 class KDEVPLATFORMSHELL_EXPORT UiController: public Sublime::Controller, public IUiController
31 {
32     Q_OBJECT
33 
34 public:
35     explicit UiController(Core *core);
36     ~UiController() override;
37 
38     /** @return area for currently active sublime mainwindow or 0 if
39     no sublime mainwindow is active.*/
40     Sublime::Area *activeArea() override;
41     /** @return active sublime mainwindow or 0 if no such mainwindow is active.*/
42     Sublime::MainWindow *activeSublimeWindow();
43     /** @return active sublime mainwindow or 0 if no such mainwindow is active.*/
44     KParts::MainWindow *activeMainWindow() override;
45 
46     /** @return default main window - the main window for default area in the shell.
47     No guarantee is given that it always exists so this method may return 0.*/
48     MainWindow *defaultMainWindow();
49 
50     void switchToArea(const QString &areaName, SwitchMode switchMode) override;
51 
52     void addToolView(const QString &name, IToolViewFactory *factory, FindFlags state) override;
53     void removeToolView(IToolViewFactory *factory) override;
54 
55     QWidget* findToolView(const QString& name, IToolViewFactory *factory, FindFlags flags) override;
56     void raiseToolView(QWidget* toolViewWidget) override;
57 
58     void selectNewToolViewToAdd(MainWindow *mw);
59 
60     void initialize();
61     void cleanup();
62 
63     void showSettingsDialog();
64     Sublime::Controller* controller() override;
65 
66     void mainWindowAdded(Sublime::MainWindow* mainWindow);
67 
68     void saveAllAreas(const KSharedConfigPtr& config);
69     void saveArea(Sublime::Area* area, KConfigGroup & group);
70     void loadAllAreas(const KSharedConfigPtr& config);
71     void loadArea(Sublime::Area* area, const KConfigGroup & group);
72 
73     /*! @p status must implement KDevelop::IStatus */
74     void registerStatus(QObject* status) override;
75 
76     void showErrorMessage(const QString& message, int timeout) override;
77     void postMessage(Sublime::Message* message) override;
78 
79     /// Returns list of available view factories together with their ToolDocuments.
80     /// @see addToolView(), removeToolView(), findToolView()
81     const QHash<IToolViewFactory*, Sublime::ToolDocument*>& factoryDocuments() const;
82 
83     /// Adds a tool view in the active area to the dock area @p area.
84     /// @see activeArea()
85     void addToolViewToDockArea(KDevelop::IToolViewFactory* factory, Qt::DockWidgetArea area);
86 
87     bool toolViewPresent(Sublime::ToolDocument* doc, Sublime::Area* area);
88 
89     QWidget* activeToolViewActionListener() const override;
90 
91     QList<Sublime::Area*> allAreas() const override;
92 
93 public Q_SLOTS:
94     void raiseToolView(Sublime::View * view);
95 
96 private Q_SLOTS:
97     void addNewToolView(MainWindow* mw, QListWidgetItem* item);
98 
99     void slotAreaChanged(Sublime::Area* area);
100     void slotActiveToolViewChanged(Sublime::View* view);
101 
102 private:
103     void addToolViewIfWanted(IToolViewFactory* factory,
104                            Sublime::ToolDocument* doc,
105                            Sublime::Area* area);
106     Sublime::View* addToolViewToArea(IToolViewFactory* factory,
107                            Sublime::ToolDocument* doc,
108                            Sublime::Area* area, Sublime::Position p=Sublime::AllPositions);
109     void setupActions();
110 
111 private:
112     const QScopedPointer<class UiControllerPrivate> d_ptr;
113     Q_DECLARE_PRIVATE(UiController)
114     friend class UiControllerPrivate;
115 };
116 
117 }
118 
119 #endif
120 
121