File indexing completed on 2024-05-19 05:14:38
0001 /* 0002 This file is part of KAddressBook. 0003 0004 SPDX-FileCopyrightText: 2009 Tobias Koenig <tokoe@kde.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "modelcolumnmanager.h" 0010 #include "settings.h" 0011 0012 #include <KContacts/Addressee> 0013 0014 #include <KLocalizedString> 0015 0016 #include <QContextMenuEvent> 0017 #include <QEvent> 0018 #include <QHeaderView> 0019 #include <QMenu> 0020 #include <QTimer> 0021 #include <QWidget> 0022 0023 ModelColumnManager::ModelColumnManager(Akonadi::ContactsTreeModel *model, QObject *parent) 0024 : QObject(parent) 0025 , mModel(model) 0026 { 0027 } 0028 0029 void ModelColumnManager::load() 0030 { 0031 const QList<int> settingsColumns = Settings::contactModelColumns(); 0032 Akonadi::ContactsTreeModel::Columns columns; 0033 columns.reserve(settingsColumns.count()); 0034 0035 for (int column : settingsColumns) { 0036 columns.append(static_cast<Akonadi::ContactsTreeModel::Column>(column)); 0037 } 0038 0039 mModel->setColumns(columns); 0040 } 0041 0042 void ModelColumnManager::store() 0043 { 0044 const Akonadi::ContactsTreeModel::Columns columns = mModel->columns(); 0045 QList<int> settingsColumns; 0046 settingsColumns.reserve(columns.count()); 0047 0048 for (int column : columns) { 0049 settingsColumns.append(static_cast<int>(column)); 0050 } 0051 0052 Settings::setContactModelColumns(settingsColumns); 0053 } 0054 0055 void ModelColumnManager::setWidget(QWidget *widget) 0056 { 0057 mWidget = widget; 0058 mWidget->installEventFilter(this); 0059 } 0060 0061 bool ModelColumnManager::eventFilter(QObject *watched, QEvent *event) 0062 { 0063 if (watched == mWidget) { 0064 if (event->type() == QEvent::ContextMenu) { 0065 QMenu menu; 0066 0067 const Akonadi::ContactsTreeModel::Columns modelColumns = mModel->columns(); 0068 0069 QAction *fullNameAction = menu.addAction(i18n("Full Name")); 0070 fullNameAction->setCheckable(true); 0071 fullNameAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::FullName)); 0072 fullNameAction->setEnabled(false); 0073 0074 QAction *familyNameAction = menu.addAction(i18n("Family Name")); 0075 familyNameAction->setCheckable(true); 0076 familyNameAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::FamilyName)); 0077 0078 QAction *givenNameAction = menu.addAction(i18n("Given Name")); 0079 givenNameAction->setCheckable(true); 0080 givenNameAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::GivenName)); 0081 0082 QAction *birthdayAction = menu.addAction(KContacts::Addressee::birthdayLabel()); 0083 birthdayAction->setCheckable(true); 0084 birthdayAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::Birthday)); 0085 0086 QAction *homeAddressAction = menu.addAction(i18n("Home Address")); 0087 homeAddressAction->setCheckable(true); 0088 homeAddressAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::HomeAddress)); 0089 0090 QAction *businessAddressAction = menu.addAction(i18n("Business Address")); 0091 businessAddressAction->setCheckable(true); 0092 businessAddressAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::BusinessAddress)); 0093 0094 QAction *phoneNumbersAction = menu.addAction(i18n("Phone Numbers")); 0095 phoneNumbersAction->setCheckable(true); 0096 phoneNumbersAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::PhoneNumbers)); 0097 0098 QAction *preferredEmailAction = menu.addAction(i18n("Preferred EMail")); 0099 preferredEmailAction->setCheckable(true); 0100 preferredEmailAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::PreferredEmail)); 0101 0102 QAction *allEmailsAction = menu.addAction(i18n("All EMails")); 0103 allEmailsAction->setCheckable(true); 0104 allEmailsAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::AllEmails)); 0105 0106 QAction *organizationAction = menu.addAction(KContacts::Addressee::organizationLabel()); 0107 organizationAction->setCheckable(true); 0108 organizationAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::Organization)); 0109 0110 QAction *roleAction = menu.addAction(KContacts::Addressee::roleLabel()); 0111 roleAction->setCheckable(true); 0112 roleAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::Role)); 0113 0114 QAction *homepageAction = menu.addAction(KContacts::Addressee::urlLabel()); 0115 homepageAction->setCheckable(true); 0116 homepageAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::Homepage)); 0117 0118 QAction *noteAction = menu.addAction(KContacts::Addressee::noteLabel()); 0119 noteAction->setCheckable(true); 0120 noteAction->setChecked(modelColumns.contains(Akonadi::ContactsTreeModel::Note)); 0121 0122 if (menu.exec((static_cast<QContextMenuEvent *>(event))->globalPos())) { 0123 Akonadi::ContactsTreeModel::Columns columns; 0124 0125 if (fullNameAction->isChecked()) { 0126 columns << Akonadi::ContactsTreeModel::FullName; 0127 } 0128 if (familyNameAction->isChecked()) { 0129 columns << Akonadi::ContactsTreeModel::FamilyName; 0130 } 0131 if (givenNameAction->isChecked()) { 0132 columns << Akonadi::ContactsTreeModel::GivenName; 0133 } 0134 if (birthdayAction->isChecked()) { 0135 columns << Akonadi::ContactsTreeModel::Birthday; 0136 } 0137 if (homeAddressAction->isChecked()) { 0138 columns << Akonadi::ContactsTreeModel::HomeAddress; 0139 } 0140 if (businessAddressAction->isChecked()) { 0141 columns << Akonadi::ContactsTreeModel::BusinessAddress; 0142 } 0143 if (phoneNumbersAction->isChecked()) { 0144 columns << Akonadi::ContactsTreeModel::PhoneNumbers; 0145 } 0146 if (preferredEmailAction->isChecked()) { 0147 columns << Akonadi::ContactsTreeModel::PreferredEmail; 0148 } 0149 if (allEmailsAction->isChecked()) { 0150 columns << Akonadi::ContactsTreeModel::AllEmails; 0151 } 0152 if (organizationAction->isChecked()) { 0153 columns << Akonadi::ContactsTreeModel::Organization; 0154 } 0155 if (roleAction->isChecked()) { 0156 columns << Akonadi::ContactsTreeModel::Role; 0157 } 0158 if (homepageAction->isChecked()) { 0159 columns << Akonadi::ContactsTreeModel::Homepage; 0160 } 0161 if (noteAction->isChecked()) { 0162 columns << Akonadi::ContactsTreeModel::Note; 0163 } 0164 0165 mModel->setColumns(columns); 0166 QTimer::singleShot(0, this, &ModelColumnManager::adaptHeaderView); 0167 } 0168 0169 return true; 0170 } else { 0171 return false; 0172 } 0173 } 0174 0175 return false; 0176 } 0177 0178 void ModelColumnManager::adaptHeaderView() 0179 { 0180 auto view = qobject_cast<QHeaderView *>(mWidget); 0181 if (view) { 0182 view->resizeSections(QHeaderView::Stretch); 0183 0184 view->setDefaultAlignment(mModel->columns().count() == 1 ? Qt::AlignCenter : Qt::AlignLeft); 0185 } 0186 } 0187 0188 #include "moc_modelcolumnmanager.cpp"