File indexing completed on 2024-05-19 05:21:24
0001 /* 0002 This file is part of KDE Kontact. 0003 0004 SPDX-FileCopyrightText: 2001 Matthias Hoelzer-Kluepfel <mhk@kde.org> 0005 SPDX-FileCopyrightText: 2002-2005 Daniel Molkentin <molkentin@kde.org> 0006 SPDX-FileCopyrightText: 2003-2005 Cornelius Schumacher <schumacher@kde.org> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later 0009 */ 0010 0011 #pragma once 0012 0013 #include "kontact_export.h" 0014 #include <KontactInterface/Core> 0015 #include <KontactInterface/Plugin> 0016 0017 class KActionMenu; 0018 class KSqueezedTextLabel; 0019 class QAction; 0020 class QFrame; 0021 class QSplitter; 0022 class QStackedWidget; 0023 class IntroductionWebEngineView; 0024 class KToggleFullScreenAction; 0025 class KToggleAction; 0026 0027 using PluginList = QList<KontactInterface::Plugin *>; 0028 using ActionPluginList = QList<QAction *>; 0029 namespace Kontact 0030 { 0031 class SidePaneBase; 0032 0033 class KONTACT_EXPORT MainWindow : public KontactInterface::Core 0034 { 0035 Q_OBJECT 0036 Q_CLASSINFO("D-Bus Interface", "org.kde.kontact.KontactInterface") 0037 0038 public: 0039 MainWindow(); 0040 ~MainWindow() override; 0041 0042 [[nodiscard]] PluginList pluginList() const override 0043 { 0044 return mPlugins; 0045 } 0046 0047 void setInitialActivePluginModule(const QString &); 0048 0049 static bool pluginActionWeightLessThan(const QAction *left, const QAction *right); 0050 static bool pluginWeightLessThan(const KontactInterface::Plugin *left, const KontactInterface::Plugin *right); 0051 void showHideSideBar(bool show); 0052 0053 public Q_SLOTS: 0054 void selectPlugin(KontactInterface::Plugin *plugin) override; 0055 Q_SCRIPTABLE void selectPlugin(const QString &pluginName) override; 0056 void slotActionTriggered(QAction *action, const QString &identifier); 0057 0058 void updateConfig(); 0059 0060 protected Q_SLOTS: 0061 void initObject(); 0062 void initGUI(); 0063 void slotActivePartChanged(KParts::Part *part); 0064 void slotPreferences(); 0065 void slotNewClicked(); 0066 void slotQuit(); 0067 void slotNewToolbarConfig(); 0068 void slotShowIntroduction(); 0069 void slotShowStatusMsg(const QString &); 0070 void activateInitialPluginModule(); 0071 void slotOpenUrl(const QUrl &url); 0072 0073 private: 0074 void initWidgets(); 0075 void initAboutScreen(); 0076 void loadSettings(); 0077 void saveSettings(); 0078 0079 KontactInterface::Plugin *pluginFromName(const QString &identifier) const; 0080 void loadPlugins(); 0081 void unloadDisabledPlugins(); 0082 void updateShortcuts(); 0083 bool removePlugin(const QString &pluginName); 0084 void addPlugin(KontactInterface::Plugin *plugin); 0085 void partLoaded(KontactInterface::Plugin *plugin, KParts::Part *part) override; 0086 void setupActions(); 0087 bool queryClose() override; 0088 void readProperties(const KConfigGroup &config) override; 0089 void saveProperties(KConfigGroup &config) override; 0090 void paintAboutScreen(const QString &templateName, const QVariantHash &data); 0091 static QVariantHash introductionData(); 0092 KToolBar *findToolBar(const char *name); 0093 QString showHideSideBarMessage(bool hidden) const; 0094 0095 private Q_SLOTS: 0096 void pluginsChanged(); 0097 0098 void configureShortcuts(); 0099 void configureToolbars() override; 0100 void slotShowHideSideBar(); 0101 void slotSplitterMoved(int pos, int index); 0102 0103 private: 0104 void setHelpText(QAction *action, const QString &text); 0105 void slotFullScreen(bool t); 0106 void slotToggleMenubar(bool dontShowWarning); 0107 0108 QFrame *mTopWidget = nullptr; 0109 0110 QSplitter *mSplitter = nullptr; 0111 0112 KActionMenu *mNewActions = nullptr; 0113 SidePaneBase *mSidePane = nullptr; 0114 QStackedWidget *mPartsStack = nullptr; 0115 KontactInterface::Plugin *mCurrentPlugin = nullptr; 0116 KParts::PartManager *mPartManager = nullptr; 0117 PluginList mPlugins; 0118 PluginList mDelayedPreload; 0119 ActionPluginList mActionPlugins; 0120 QList<KPluginMetaData> mPluginMetaData; 0121 0122 IntroductionWebEngineView *mIntroPart = nullptr; 0123 KSqueezedTextLabel *mStatusMsgLabel = nullptr; 0124 0125 QString mInitialActiveModule; 0126 0127 QMap<QString, QPointer<QWidget>> mFocusWidgets; 0128 QMap<KontactInterface::Plugin *, QAction *> mPluginAction; 0129 0130 bool mReallyClose = false; 0131 int mSaveSideBarWidth = 10; 0132 QAction *mShowHideAction = nullptr; 0133 KToggleFullScreenAction *mShowFullScreenAction = nullptr; 0134 KToggleAction *mShowMenuBarAction = nullptr; 0135 }; 0136 } 0137 0138 Q_DECLARE_METATYPE(KontactInterface::Plugin *)