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 *)