File indexing completed on 2024-05-12 05:10:49
0001 /* 0002 SPDX-FileCopyrightText: 2001 Cornelius Schumacher <schumacher@kde.org> 0003 SPDX-FileCopyrightText: 2009 Allen Winter <winter@kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #include "publishdialog_p.h" 0009 #include <Akonadi/AbstractEmailAddressSelectionDialog> 0010 #include <Akonadi/EmailAddressSelectionDialog> 0011 #include <KCalendarCore/Person> 0012 #include <KEmailAddress> 0013 0014 #include <KLocalizedString> 0015 #include <KPluginFactory> 0016 #include <QPointer> 0017 #include <QTreeView> 0018 0019 using namespace KCalendarCore; 0020 using namespace Akonadi; 0021 0022 PublishDialogPrivate::PublishDialogPrivate(PublishDialog *qq) 0023 : QObject() 0024 , q(qq) 0025 { 0026 } 0027 0028 void PublishDialogPrivate::addItem() 0029 { 0030 mUI.mNameLineEdit->setEnabled(true); 0031 mUI.mEmailLineEdit->setEnabled(true); 0032 QListWidgetItem *item = mUI.mListWidget->currentItem(); 0033 if (item) { 0034 if (!item->text().isEmpty()) { 0035 item = new QListWidgetItem(mUI.mListWidget); 0036 mUI.mListWidget->addItem(item); 0037 } 0038 } else { 0039 item = new QListWidgetItem(mUI.mListWidget); 0040 mUI.mListWidget->addItem(item); 0041 } 0042 0043 item->setSelected(true); 0044 mUI.mNameLineEdit->setPlaceholderText(i18n("(EmptyName)")); 0045 mUI.mEmailLineEdit->setPlaceholderText(i18n("(EmptyEmail)")); 0046 mUI.mListWidget->setCurrentItem(item); 0047 mUI.mRemove->setEnabled(true); 0048 } 0049 0050 void PublishDialogPrivate::removeItem() 0051 { 0052 if (mUI.mListWidget->selectedItems().isEmpty()) { 0053 return; 0054 } 0055 QListWidgetItem *item = mUI.mListWidget->selectedItems().at(0); 0056 0057 int row = mUI.mListWidget->row(item); 0058 mUI.mListWidget->takeItem(row); 0059 0060 if (!mUI.mListWidget->count()) { 0061 mUI.mNameLineEdit->setText(QString()); 0062 mUI.mNameLineEdit->setEnabled(false); 0063 mUI.mEmailLineEdit->setText(QString()); 0064 mUI.mEmailLineEdit->setEnabled(false); 0065 mUI.mRemove->setEnabled(false); 0066 return; 0067 } 0068 if (row > 0) { 0069 row--; 0070 } 0071 0072 mUI.mListWidget->setCurrentRow(row); 0073 } 0074 0075 void PublishDialogPrivate::insertAddresses(const KContacts::Addressee::List &list) 0076 { 0077 for (const KContacts::Addressee &contact : list) { 0078 mUI.mNameLineEdit->setEnabled(true); 0079 mUI.mEmailLineEdit->setEnabled(true); 0080 auto item = new QListWidgetItem(mUI.mListWidget); 0081 item->setSelected(true); 0082 mUI.mNameLineEdit->setText(contact.name()); 0083 mUI.mEmailLineEdit->setText(contact.preferredEmail()); 0084 mUI.mListWidget->addItem(item); 0085 } 0086 } 0087 0088 void PublishDialogPrivate::openAddressbook() 0089 { 0090 QPointer<Akonadi::AbstractEmailAddressSelectionDialog> dialog; 0091 0092 const KPluginMetaData editWidgetPlugin(QStringLiteral("pim6/akonadi/emailaddressselectionldapdialogplugin")); 0093 0094 const auto result = KPluginFactory::instantiatePlugin<Akonadi::AbstractEmailAddressSelectionDialog>(editWidgetPlugin, q); 0095 if (result) { 0096 dialog = result.plugin; 0097 } else { 0098 dialog = new Akonadi::EmailAddressSelectionDialog(q); 0099 } 0100 0101 dialog->view()->view()->setSelectionMode(QAbstractItemView::MultiSelection); 0102 connect(dialog.data(), &Akonadi::AbstractEmailAddressSelectionDialog::insertAddresses, this, &PublishDialogPrivate::insertAddresses); 0103 if (dialog->exec() == QDialog::Accepted) { 0104 const Akonadi::EmailAddressSelection::List selections = dialog->selectedAddresses(); 0105 if (!selections.isEmpty()) { 0106 for (const Akonadi::EmailAddressSelection &selection : selections) { 0107 mUI.mNameLineEdit->setEnabled(true); 0108 mUI.mEmailLineEdit->setEnabled(true); 0109 auto item = new QListWidgetItem(mUI.mListWidget); 0110 item->setSelected(true); 0111 mUI.mNameLineEdit->setText(selection.name()); 0112 mUI.mEmailLineEdit->setText(KEmailAddress::extractEmailAddress(KEmailAddress::normalizeAddressesAndEncodeIdn(selection.email()))); 0113 mUI.mListWidget->addItem(item); 0114 } 0115 0116 mUI.mRemove->setEnabled(true); 0117 } 0118 } 0119 delete dialog; 0120 } 0121 0122 void PublishDialogPrivate::updateItem() 0123 { 0124 if (mUI.mListWidget->selectedItems().isEmpty()) { 0125 return; 0126 } 0127 0128 Person person(mUI.mNameLineEdit->text(), mUI.mEmailLineEdit->text()); 0129 QListWidgetItem *item = mUI.mListWidget->selectedItems().at(0); 0130 item->setText(person.fullName()); 0131 } 0132 0133 void PublishDialogPrivate::updateInput() 0134 { 0135 if (mUI.mListWidget->selectedItems().isEmpty()) { 0136 return; 0137 } 0138 0139 mUI.mNameLineEdit->setEnabled(true); 0140 mUI.mEmailLineEdit->setEnabled(true); 0141 0142 QListWidgetItem *item = mUI.mListWidget->selectedItems().at(0); 0143 QString mail; 0144 QString name; 0145 KEmailAddress::extractEmailAddressAndName(item->text(), mail, name); 0146 mUI.mNameLineEdit->setText(name); 0147 mUI.mEmailLineEdit->setText(mail); 0148 } 0149 0150 #include "moc_publishdialog_p.cpp"