Better wording
[kdepim.git] / calendarsupport / publishdialog.cpp
blobe45c13198ebde87d53d34d28eb9bc4d03c00a921
1 /*
2 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
3 Copyright (c) 2009 Allen Winter <winter@kde.org>
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
24 // TODO: validate hand-entered email addresses
25 // TODO: don't allow duplicates; at least remove dupes when passing back
26 // TODO: the list in PublishDialog::addresses()
28 #include "publishdialog.h"
30 #include <Akonadi/Contact/EmailAddressSelectionDialog>
32 #include <KCalCore/Attendee>
33 #include <KCalCore/Person>
35 #include <KPIMUtils/Email>
37 #include <KLineEdit>
38 #include <KLocale>
40 #include <QTreeView>
42 PublishDialog::PublishDialog( QWidget *parent )
43 : KDialog( parent )
45 setCaption( i18n( "Select Addresses" ) );
46 setButtons( Ok|Cancel|Help );
47 setHelp( "group-scheduling", "korganizer" );
48 QWidget *widget = new QWidget( this );
49 widget->setObjectName( "PublishFreeBusy" );
50 mUI.setupUi( widget );
51 setMainWidget( widget );
52 mUI.mListWidget->setSelectionMode( QAbstractItemView::SingleSelection );
53 mUI.mNameLineEdit->setEnabled( false );
54 mUI.mEmailLineEdit->setEnabled( false );
56 setButtonToolTip( Ok, i18n( "Send email to these recipients" ) );
57 setButtonWhatsThis( Ok, i18n( "Clicking the <b>Ok</b> button will cause "
58 "an email to be sent to the recipients you "
59 "have entered." ) );
60 setButtonToolTip( Cancel, i18n( "Cancel recipient selection and the email" ) );
61 setButtonWhatsThis( Cancel, i18n( "Clicking the <b>Cancel</b> button will "
62 "cause the email operation to be terminated." ) );
64 setButtonWhatsThis( Help, i18n( "Click the <b>Help</b> button to read "
65 "more information about Group Scheduling." ) );
67 mUI.mNew->setIcon( KIcon( "list-add" ) );
68 mUI.mRemove->setIcon( KIcon( "list-remove" ) );
69 mUI.mRemove->setEnabled( false );
70 mUI.mSelectAddressee->setIcon( KIcon( "view-pim-contacts" ) );
72 connect( mUI.mListWidget, SIGNAL(itemSelectionChanged()),
73 SLOT(updateInput()) );
74 connect( mUI.mNew, SIGNAL(clicked()),
75 SLOT(addItem()) );
76 connect( mUI.mRemove, SIGNAL(clicked()),
77 SLOT(removeItem()) );
78 connect( mUI.mSelectAddressee, SIGNAL(clicked()),
79 SLOT(openAddressbook()) );
80 connect( mUI.mNameLineEdit, SIGNAL(textChanged(QString)),
81 SLOT(updateItem()) );
82 connect( mUI.mEmailLineEdit, SIGNAL(textChanged(QString)),
83 SLOT(updateItem()) );
86 PublishDialog::~PublishDialog()
90 void PublishDialog::addAttendee( const Attendee::Ptr &attendee )
92 mUI.mNameLineEdit->setEnabled( true );
93 mUI.mEmailLineEdit->setEnabled( true );
94 QListWidgetItem *item = new QListWidgetItem( mUI.mListWidget );
95 Person person( attendee->name(), attendee->email() );
96 item->setText( person.fullName() );
97 mUI.mListWidget->addItem( item );
98 mUI.mRemove->setEnabled( !mUI.mListWidget->selectedItems().isEmpty() );
101 QString PublishDialog::addresses()
103 QString to;
104 QListWidgetItem *item;
105 const int count = mUI.mListWidget->count();
106 for ( int i=0; i<count; ++i ) {
107 item = mUI.mListWidget->item( i );
108 if( !item->text().isEmpty() ) {
109 to += item->text();
110 if ( i < count-1 ) {
111 to += ", ";
115 return to;
118 void PublishDialog::addItem()
120 mUI.mNameLineEdit->setEnabled( true );
121 mUI.mEmailLineEdit->setEnabled( true );
122 QListWidgetItem *item = new QListWidgetItem( mUI.mListWidget );
123 mUI.mListWidget->addItem( item );
124 mUI.mListWidget->setItemSelected( item, true );
125 mUI.mNameLineEdit->setClickMessage( i18n( "(EmptyName)" ) );
126 mUI.mEmailLineEdit->setClickMessage( i18n( "(EmptyEmail)" ) );
128 mUI.mRemove->setEnabled( true );
131 void PublishDialog::removeItem()
133 if ( mUI.mListWidget->selectedItems().isEmpty() ) {
134 return;
136 QListWidgetItem *item;
137 item = mUI.mListWidget->selectedItems().first();
139 int row = mUI.mListWidget->row( item );
140 mUI.mListWidget->takeItem( row );
142 if ( !mUI.mListWidget->count() ) {
143 mUI.mNameLineEdit->setText( QString() );
144 mUI.mNameLineEdit->setEnabled( false );
145 mUI.mEmailLineEdit->setText( QString() );
146 mUI.mEmailLineEdit->setEnabled( false );
147 mUI.mRemove->setEnabled( false );
148 return;
150 if ( row > 0 ) {
151 row--;
154 mUI.mListWidget->setCurrentRow( row );
157 void PublishDialog::openAddressbook()
159 QWeakPointer<Akonadi::EmailAddressSelectionDialog> dialog(
160 new Akonadi::EmailAddressSelectionDialog( this ) );
161 dialog.data()->view()->view()->setSelectionMode( QAbstractItemView::MultiSelection );
163 if ( dialog.data()->exec() == QDialog::Accepted ) {
165 Akonadi::EmailAddressSelectionDialog *dialogPtr = dialog.data();
166 if ( dialogPtr ) {
167 const Akonadi::EmailAddressSelection::List selections = dialogPtr->selectedAddresses();
168 if ( !selections.isEmpty() ) {
169 foreach ( const Akonadi::EmailAddressSelection &selection, selections ) {
170 mUI.mNameLineEdit->setEnabled( true );
171 mUI.mEmailLineEdit->setEnabled( true );
172 QListWidgetItem *item = new QListWidgetItem( mUI.mListWidget );
173 mUI.mListWidget->setItemSelected( item, true );
174 mUI.mNameLineEdit->setText( selection.name() );
175 mUI.mEmailLineEdit->setText( selection.email() );
176 mUI.mListWidget->addItem( item );
179 mUI.mRemove->setEnabled( true );
183 delete dialog.data();
186 void PublishDialog::updateItem()
188 if ( !mUI.mListWidget->selectedItems().count() ) {
189 return;
192 Person person( mUI.mNameLineEdit->text(), mUI.mEmailLineEdit->text() );
193 QListWidgetItem *item = mUI.mListWidget->selectedItems().first();
194 item->setText( person.fullName() );
197 void PublishDialog::updateInput()
199 if ( !mUI.mListWidget->selectedItems().count() ) {
200 return;
203 mUI.mNameLineEdit->setEnabled( true );
204 mUI.mEmailLineEdit->setEnabled( true );
206 QListWidgetItem *item = mUI.mListWidget->selectedItems().first();
207 QString mail, name;
208 KPIMUtils::extractEmailAddressAndName( item->text(), mail, name );
209 mUI.mNameLineEdit->setText( name );
210 mUI.mEmailLineEdit->setText( mail );
213 #include "publishdialog.moc"