1 /* 2 This file is part of KAddressBook. 3 4 SPDX-FileCopyrightText: 2007 Tobias Koenig <tokoe@kde.org> 5 6 SPDX-License-Identifier: GPL-2.0-or-later 7 */ 8 9 #pragma once 10 11 #include "kaddressbook_export.h" 12 #include <Akonadi/Item> 13 #include <QItemSelection> 14 #include <QWidget> 15 16 namespace GrantleeTheme 17 { 18 class ThemeManager; 19 } 20 class QAction; 21 namespace Akonadi 22 { 23 class Collection; 24 class ContactGroupViewer; 25 class ContactViewer; 26 class ContactsFilterProxyModel; 27 class EntityMimeTypeFilterModel; 28 class EntityTreeView; 29 class Item; 30 class StandardContactActionManager; 31 class EntityTreeModel; 32 } 33 namespace PimCommon 34 { 35 class AbstractGenericPluginInterface; 36 } 37 38 namespace KAddressBookGrantlee 39 { 40 class GrantleeContactFormatter; 41 class GrantleeContactGroupFormatter; 42 } 43 namespace KAddressBookImportExport 44 { 45 class PluginInterface; 46 } 47 class ContactSwitcher; 48 class KActionCollection; 49 class KXMLGUIClient; 50 class ModelColumnManager; 51 class QAbstractItemModel; 52 class QItemSelectionModel; 53 class QModelIndex; 54 class QSplitter; 55 class QStackedWidget; 56 class QuickSearchWidget; 57 class QActionGroup; 58 class CategorySelectWidget; 59 class CategoryFilterProxyModel; 60 class ManageShowCollectionProperties; 61 class KADDRESSBOOK_EXPORT MainWidget : public QWidget 62 { 63 Q_OBJECT 64 65 public: 66 explicit MainWidget(KXMLGUIClient *guiClient, QWidget *parent = nullptr); 67 ~MainWidget() override; 68 69 void updateQuickSearchText(); 70 const Akonadi::Item::List collectSelectedAllContactsItem(); 71 72 /** 73 * Returns the address book collection that is currently 74 * selected by the user or an invalid collection if no 75 * address book is selected. 76 */ 77 Akonadi::Collection currentAddressBook() const; 78 79 Akonadi::Item::List selectedItems(); 80 void initializePluginActions(); 81 82 public Q_SLOTS: 83 void newContact(); 84 void newGroup(); 85 void print(); 86 void printPreview(); 87 void configure(); 88 89 void handleCommandLine(const QStringList &arguments); 90 91 private Q_SLOTS: 92 void slotImportExportActivated(PimCommon::AbstractGenericPluginInterface *interface); 93 void delayedInit(); 94 95 void itemSelected(const Akonadi::Item &item); 96 void itemSelectionChanged(const QModelIndex &, const QModelIndex &); 97 void selectFirstItem(); 98 99 void setActivateViewMode(QAction *action); 100 void setQRCodeShow(bool on); 101 102 void restoreState(); 103 void saveState(); 104 105 void slotGrantleeThemeSelected(); 106 void slotGrantleeThemesUpdated(); 107 void slotCheckNewCalendar(const QModelIndex &parent, int begin, int end); 108 109 void slotDebugAkonadiSearch(); 110 void slotServerSideSubscription(); 111 void slotCurrentCollectionChanged(const Akonadi::Collection &col); 112 void setFocusToTreeView(); 113 114 private: 115 const Akonadi::Item::List collectSelectedAllContactsItem(QItemSelectionModel *model); 116 void initGrantleeThemeName(); 117 void setupGui(); 118 void setupActions(KActionCollection *); 119 bool showQRCodes(); 120 void setViewMode(int mode); 121 void saveSplitterStates() const; 122 void restoreSplitterStates(); 123 void initializeImportExportPlugin(KActionCollection *collection); 124 Akonadi::EntityTreeModel *entityTreeModel() const; 125 126 QAbstractItemModel *allContactsModel(); 127 128 Akonadi::EntityMimeTypeFilterModel *mCollectionTree = nullptr; 129 Akonadi::EntityMimeTypeFilterModel *mItemTree = nullptr; 130 Akonadi::EntityMimeTypeFilterModel *mAllContactsModel = nullptr; 131 Akonadi::ContactsFilterProxyModel *mContactsFilterModel = nullptr; 132 CategoryFilterProxyModel *mCategoryFilterModel = nullptr; 133 134 QuickSearchWidget *mQuickSearchWidget = nullptr; 135 Akonadi::EntityTreeView *mCollectionView = nullptr; 136 Akonadi::EntityTreeView *mItemView = nullptr; 137 CategorySelectWidget *mCategorySelectWidget = nullptr; 138 139 QWidget *mDetailsPane = nullptr; 140 QStackedWidget *mDetailsViewStack = nullptr; 141 ContactSwitcher *mContactSwitcher = nullptr; 142 143 QSplitter *mMainWidgetSplitter1 = nullptr; 144 QSplitter *mMainWidgetSplitter2 = nullptr; 145 Akonadi::ContactViewer *mContactDetails = nullptr; 146 Akonadi::ContactGroupViewer *mContactGroupDetails = nullptr; 147 QWidget *mEmptyDetails = nullptr; 148 Akonadi::StandardContactActionManager *mActionManager = nullptr; 149 QItemSelectionModel *mCollectionSelectionModel = nullptr; 150 151 QActionGroup *mViewModeGroup = nullptr; 152 153 ModelColumnManager *mModelColumnManager = nullptr; 154 KXMLGUIClient *mXmlGuiClient = nullptr; 155 KAddressBookGrantlee::GrantleeContactFormatter *mFormatter = nullptr; 156 KAddressBookGrantlee::GrantleeContactGroupFormatter *mGroupFormatter = nullptr; 157 GrantleeTheme::ThemeManager *mGrantleeThemeManager = nullptr; 158 QAction *mQuickSearchAction = nullptr; 159 QAction *mServerSideSubscription = nullptr; 160 QList<KAddressBookImportExport::PluginInterface *> mImportExportPluginInterfaceList; 161 ManageShowCollectionProperties *mManageShowCollectionProperties = nullptr; 162 163 Akonadi::Item mPendingSelection; 164 }; 165 166