File indexing completed on 2024-05-19 05:14:37

0001 /*
0002   This file is part of KAddressBook.
0003 
0004   SPDX-FileCopyrightText: 2007 Tobias Koenig <tokoe@kde.org>
0005 
0006   SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #pragma once
0010 
0011 #include "kaddressbook_export.h"
0012 #include <Akonadi/Item>
0013 #include <QItemSelection>
0014 #include <QWidget>
0015 
0016 namespace GrantleeTheme
0017 {
0018 class ThemeManager;
0019 }
0020 class QAction;
0021 namespace Akonadi
0022 {
0023 class ContactViewer;
0024 class ContactGroupViewer;
0025 class StandardContactActionManager;
0026 }
0027 namespace Akonadi
0028 {
0029 class Collection;
0030 class ContactsFilterProxyModel;
0031 class EntityMimeTypeFilterModel;
0032 class EntityTreeView;
0033 class Item;
0034 class EntityTreeModel;
0035 }
0036 namespace PimCommon
0037 {
0038 class AbstractGenericPluginInterface;
0039 }
0040 
0041 namespace KAddressBookGrantlee
0042 {
0043 class GrantleeContactFormatter;
0044 class GrantleeContactGroupFormatter;
0045 }
0046 namespace KAddressBookImportExport
0047 {
0048 class PluginInterface;
0049 }
0050 class ContactSwitcher;
0051 class KActionCollection;
0052 class KXMLGUIClient;
0053 class ModelColumnManager;
0054 class QAbstractItemModel;
0055 class QItemSelectionModel;
0056 class QModelIndex;
0057 class QSplitter;
0058 class QStackedWidget;
0059 class QuickSearchWidget;
0060 class QActionGroup;
0061 class CategorySelectWidget;
0062 class CategoryFilterProxyModel;
0063 class ManageShowCollectionProperties;
0064 class KADDRESSBOOK_EXPORT MainWidget : public QWidget
0065 {
0066     Q_OBJECT
0067 
0068 public:
0069     explicit MainWidget(KXMLGUIClient *guiClient, QWidget *parent = nullptr);
0070     ~MainWidget() override;
0071 
0072     void updateQuickSearchText();
0073     [[nodiscard]] const Akonadi::Item::List collectSelectedAllContactsItem();
0074 
0075     /**
0076      * Returns the address book collection that is currently
0077      * selected by the user or an invalid collection if no
0078      * address book is selected.
0079      */
0080     [[nodiscard]] Akonadi::Collection currentAddressBook() const;
0081 
0082     [[nodiscard]] Akonadi::Item::List selectedItems(bool &canceled);
0083     void initializePluginActions();
0084 
0085     [[nodiscard]] bool canClose() const;
0086 
0087 public Q_SLOTS:
0088     void newContact();
0089     void newGroup();
0090     void print();
0091     void printPreview();
0092     void configure();
0093 
0094     void handleCommandLine(const QStringList &arguments);
0095 
0096 protected:
0097     [[nodiscard]] bool event(QEvent *e) override;
0098 
0099 private Q_SLOTS:
0100     void slotImportExportActivated(PimCommon::AbstractGenericPluginInterface *interface);
0101     void delayedInit();
0102 
0103     void itemSelected(const Akonadi::Item &item);
0104     void itemSelectionChanged(const QModelIndex &, const QModelIndex &);
0105     void selectFirstItem();
0106 
0107     void setActivateViewMode(QAction *action);
0108     void setQRCodeShow(bool on);
0109 
0110     void restoreState();
0111     void saveState();
0112 
0113     void slotGrantleeThemeSelected();
0114     void slotGrantleeThemesUpdated();
0115     void slotCheckNewCalendar(const QModelIndex &parent, int begin, int end);
0116 
0117     void slotDebugAkonadiSearch();
0118     void slotServerSideSubscription();
0119     void slotCurrentCollectionChanged(const Akonadi::Collection &col);
0120     void setFocusToTreeView();
0121 
0122 private:
0123     const Akonadi::Item::List collectSelectedAllContactsItem(QItemSelectionModel *model);
0124     void initGrantleeThemeName();
0125     void setupGui();
0126     void setupActions(KActionCollection *);
0127     bool showQRCodes();
0128     void setViewMode(int mode);
0129     void saveSplitterStates() const;
0130     void restoreSplitterStates();
0131     void initializeImportExportPlugin(KActionCollection *collection);
0132     void slotGeneralPaletteChanged();
0133     Akonadi::EntityTreeModel *entityTreeModel() const;
0134 
0135     QAbstractItemModel *allContactsModel();
0136 
0137     Akonadi::EntityMimeTypeFilterModel *mCollectionTree = nullptr;
0138     Akonadi::EntityMimeTypeFilterModel *mItemTree = nullptr;
0139     Akonadi::EntityMimeTypeFilterModel *mAllContactsModel = nullptr;
0140     Akonadi::ContactsFilterProxyModel *mContactsFilterModel = nullptr;
0141     CategoryFilterProxyModel *mCategoryFilterModel = nullptr;
0142 
0143     QuickSearchWidget *mQuickSearchWidget = nullptr;
0144     Akonadi::EntityTreeView *mCollectionView = nullptr;
0145     Akonadi::EntityTreeView *mItemView = nullptr;
0146     CategorySelectWidget *mCategorySelectWidget = nullptr;
0147 
0148     QWidget *mDetailsPane = nullptr;
0149     QStackedWidget *mDetailsViewStack = nullptr;
0150     ContactSwitcher *mContactSwitcher = nullptr;
0151 
0152     QSplitter *mMainWidgetSplitter1 = nullptr;
0153     QSplitter *mMainWidgetSplitter2 = nullptr;
0154     Akonadi::ContactViewer *mContactDetails = nullptr;
0155     Akonadi::ContactGroupViewer *mContactGroupDetails = nullptr;
0156     QWidget *mEmptyDetails = nullptr;
0157     Akonadi::StandardContactActionManager *mActionManager = nullptr;
0158     QItemSelectionModel *mCollectionSelectionModel = nullptr;
0159 
0160     QActionGroup *mViewModeGroup = nullptr;
0161 
0162     ModelColumnManager *mModelColumnManager = nullptr;
0163     KXMLGUIClient *const mXmlGuiClient;
0164     KAddressBookGrantlee::GrantleeContactFormatter *mFormatter = nullptr;
0165     KAddressBookGrantlee::GrantleeContactGroupFormatter *mGroupFormatter = nullptr;
0166     GrantleeTheme::ThemeManager *mGrantleeThemeManager = nullptr;
0167     QAction *mQuickSearchAction = nullptr;
0168     QAction *mServerSideSubscription = nullptr;
0169     QList<KAddressBookImportExport::PluginInterface *> mImportExportPluginInterfaceList;
0170     ManageShowCollectionProperties *mManageShowCollectionProperties = nullptr;
0171 
0172     Akonadi::Item mPendingSelection;
0173 };