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 };