Better wording
[kdepim.git] / kmail / identitypage.cpp
blob4dc640418bb8d0a5326d1a71357247d26192c605
1 /* -*- mode: C++; c-file-style: "gnu" -*-
2 * kmail: KDE mail client
3 * Copyright (C) 2000 Espen Sand, espen@kde.org
4 * Copyright (C) 2001-2003 Marc Mutz, mutz@kde.org
5 * Contains code segments and ideas from earlier kmail dialog code.
6 * Copyright (C) 2010 Volker Krause <vkrause@kde.org>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24 #include "identitypage.h"
26 #include "identitydialog.h"
27 #include "newidentitydialog.h"
28 #ifndef KCM_KPIMIDENTITIES_STANDALONE
29 #include "kmkernel.h"
30 #include "globalsettings.h"
31 #endif
33 #include <mailcommon/mailkernel.h>
34 #include <messageviewer/autoqpointer.h>
35 #include <kpimidentities/identity.h>
36 #include <kpimidentities/identitymanager.h>
38 #include <KDebug>
39 #include <KMessageBox>
40 #include <QMenu>
42 using namespace KMail;
44 QString IdentityPage::helpAnchor() const
46 return QString::fromLatin1( "configure-identity" );
49 IdentityPage::IdentityPage( const KComponentData &instance, QWidget *parent )
50 : ConfigModule( instance, parent ),
51 mIdentityDialog( 0 ),
52 mIdentityManager( 0 )
54 if ( !MailCommon::Kernel::self()->kernelIsRegistered() ) {
55 return;
57 mIdentityManager = KernelIf->identityManager();
59 mIPage.setupUi( this );
60 mIPage.mIdentityList->setIdentityManager( mIdentityManager );
62 connect( mIPage.mIdentityList, SIGNAL(itemSelectionChanged()),
63 SLOT(slotIdentitySelectionChanged()) );
64 connect( this, SIGNAL(changed(bool)),
65 SLOT(slotIdentitySelectionChanged()) );
66 connect( mIPage.mIdentityList, SIGNAL(rename(KMail::IdentityListViewItem*,QString)),
67 SLOT(slotRenameIdentity(KMail::IdentityListViewItem*,QString)) );
68 connect( mIPage.mIdentityList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
69 SLOT(slotModifyIdentity()) );
70 connect( mIPage.mIdentityList, SIGNAL(contextMenu(KMail::IdentityListViewItem*,QPoint)),
71 SLOT(slotContextMenu(KMail::IdentityListViewItem*,QPoint)) );
72 // ### connect dragged(...), ...
74 connect( mIPage.mButtonAdd, SIGNAL(clicked()),
75 this, SLOT(slotNewIdentity()) );
76 connect( mIPage.mModifyButton, SIGNAL(clicked()),
77 this, SLOT(slotModifyIdentity()) );
78 connect( mIPage.mRenameButton, SIGNAL(clicked()),
79 this, SLOT(slotRenameIdentity()) );
80 connect( mIPage.mRemoveButton, SIGNAL(clicked()),
81 this, SLOT(slotRemoveIdentity()) );
82 connect( mIPage.mSetAsDefaultButton, SIGNAL(clicked()),
83 this, SLOT(slotSetAsDefault()) );
86 IdentityPage::~IdentityPage()
90 void IdentityPage::load()
92 mOldNumberOfIdentities = mIdentityManager->shadowIdentities().count();
93 // Fill the list:
94 mIPage.mIdentityList->clear();
95 QTreeWidgetItem *item = 0;
96 KPIMIdentities::IdentityManager::Iterator end( mIdentityManager->modifyEnd() );
98 for ( KPIMIdentities::IdentityManager::Iterator it = mIdentityManager->modifyBegin(); it != end; ++it ) {
99 item = new IdentityListViewItem( mIPage.mIdentityList, item, *it );
101 if ( mIPage.mIdentityList->currentItem() ) {
102 mIPage.mIdentityList->currentItem()->setSelected( true );
106 void IdentityPage::save()
108 mIdentityManager->sort();
109 mIdentityManager->commit();
111 #ifndef KCM_KPIMIDENTITIES_STANDALONE
112 if( mOldNumberOfIdentities < 2 && mIPage.mIdentityList->topLevelItemCount() > 1 ) {
113 // have more than one identity, so better show the combo in the
114 // composer now:
115 int showHeaders = GlobalSettings::self()->headers();
116 showHeaders |= KMail::Composer::HDR_IDENTITY;
117 GlobalSettings::self()->setHeaders( showHeaders );
119 // and now the reverse
120 if( mOldNumberOfIdentities > 1 && mIPage.mIdentityList->topLevelItemCount() < 2 ) {
121 // have only one identity, so remove the combo in the composer:
122 int showHeaders = GlobalSettings::self()->headers();
123 showHeaders &= ~KMail::Composer::HDR_IDENTITY;
124 GlobalSettings::self()->setHeaders( showHeaders );
126 #endif
129 void IdentityPage::slotNewIdentity()
131 Q_ASSERT( !mIdentityDialog );
133 MessageViewer::AutoQPointer<NewIdentityDialog> dialog( new NewIdentityDialog(
134 mIdentityManager, this ) );
135 dialog->setObjectName( "new" );
137 if ( dialog->exec() == QDialog::Accepted && dialog ) {
138 QString identityName = dialog->identityName().trimmed();
139 Q_ASSERT( !identityName.isEmpty() );
142 // Construct a new Identity:
144 switch ( dialog->duplicateMode() ) {
145 case NewIdentityDialog::ExistingEntry:
147 KPIMIdentities::Identity &dupThis = mIdentityManager->modifyIdentityForName( dialog->duplicateIdentity() );
148 mIdentityManager->newFromExisting( dupThis, identityName );
149 break;
151 case NewIdentityDialog::ControlCenter:
152 mIdentityManager->newFromControlCenter( identityName );
153 break;
154 case NewIdentityDialog::Empty:
155 mIdentityManager->newFromScratch( identityName );
156 default: ;
160 // Insert into listview:
162 KPIMIdentities::Identity &newIdent = mIdentityManager->modifyIdentityForName( identityName );
163 QTreeWidgetItem *item = 0;
164 if ( !mIPage.mIdentityList->selectedItems().isEmpty() ) {
165 item = mIPage.mIdentityList->selectedItems()[0];
168 QTreeWidgetItem * newItem = 0;
169 if ( item ) {
170 newItem = new IdentityListViewItem( mIPage.mIdentityList, mIPage.mIdentityList->itemAbove( item ), newIdent );
171 } else {
172 newItem = new IdentityListViewItem( mIPage.mIdentityList, newIdent );
175 mIPage.mIdentityList->selectionModel()->clearSelection();
176 if ( newItem ) {
177 newItem->setSelected( true );
180 slotModifyIdentity();
181 updateButtons();
185 void IdentityPage::slotModifyIdentity()
187 Q_ASSERT( !mIdentityDialog );
189 IdentityListViewItem *item = 0;
190 if ( !mIPage.mIdentityList->selectedItems().isEmpty() ) {
191 item = dynamic_cast<IdentityListViewItem*>( mIPage.mIdentityList->selectedItems()[0] );
193 if ( !item ) {
194 return;
197 mIdentityDialog = new IdentityDialog( this );
198 mIdentityDialog->setIdentity( item->identity() );
200 // Hmm, an unmodal dialog would be nicer, but a modal one is easier ;-)
201 if ( mIdentityDialog->exec() == QDialog::Accepted ) {
202 mIdentityDialog->updateIdentity( item->identity() );
203 item->redisplay();
204 save();
207 delete mIdentityDialog;
208 mIdentityDialog = 0;
211 void IdentityPage::slotRemoveIdentity()
213 Q_ASSERT( !mIdentityDialog );
215 if ( mIdentityManager->shadowIdentities().count() < 2 ) {
216 kFatal() << "Attempted to remove the last identity!";
219 IdentityListViewItem *item = 0;
220 if ( !mIPage.mIdentityList->selectedItems().isEmpty() ) {
221 item = dynamic_cast<IdentityListViewItem*>( mIPage.mIdentityList->selectedItems()[0] );
223 if ( !item ) {
224 return;
227 QString msg = i18n( "<qt>Do you really want to remove the identity named "
228 "<b>%1</b>?</qt>", item->identity().identityName() );
229 if( KMessageBox::warningContinueCancel( this, msg, i18n("Remove Identity"),
230 KGuiItem(i18n("&Remove"),
231 "edit-delete") )
232 == KMessageBox::Continue ) {
233 if ( mIdentityManager->removeIdentity( item->identity().identityName() ) ) {
234 delete item;
235 if ( mIPage.mIdentityList->currentItem() ) {
236 mIPage.mIdentityList->currentItem()->setSelected( true );
238 refreshList();
239 updateButtons();
244 void IdentityPage::slotRenameIdentity()
246 Q_ASSERT( !mIdentityDialog );
248 QTreeWidgetItem *item = 0;
250 if ( !mIPage.mIdentityList->selectedItems().isEmpty() ) {
251 item = mIPage.mIdentityList->selectedItems()[0];
253 if ( !item ) return;
255 mIPage.mIdentityList->editItem( item );
258 void IdentityPage::slotRenameIdentity( KMail::IdentityListViewItem *item , const QString &text )
260 if ( !item ) return;
262 const QString newName = text.trimmed();
263 if ( !newName.isEmpty() &&
264 !mIdentityManager->shadowIdentities().contains( newName ) ) {
265 KPIMIdentities::Identity &ident = item->identity();
266 ident.setIdentityName( newName );
267 save();
269 item->redisplay();
272 void IdentityPage::slotContextMenu( IdentityListViewItem *item, const QPoint &pos )
274 QMenu *menu = new QMenu( this );
275 menu->addAction( i18n( "Add..." ), this, SLOT(slotNewIdentity()) );
276 if ( item ) {
277 menu->addAction( i18n( "Modify..." ), this, SLOT(slotModifyIdentity()) );
278 if ( mIPage.mIdentityList->topLevelItemCount() > 1 ) {
279 menu->addAction( i18n( "Remove" ), this, SLOT(slotRemoveIdentity()) );
281 if ( !item->identity().isDefault() ) {
282 menu->addAction( i18n( "Set as Default" ), this, SLOT(slotSetAsDefault()) );
285 menu->exec( pos );
286 delete menu;
290 void IdentityPage::slotSetAsDefault()
292 Q_ASSERT( !mIdentityDialog );
294 IdentityListViewItem *item = 0;
295 if ( !mIPage.mIdentityList->selectedItems().isEmpty() ) {
296 item = dynamic_cast<IdentityListViewItem*>( mIPage.mIdentityList->selectedItems()[0] );
298 if ( !item ) {
299 return;
302 mIdentityManager->setAsDefault( item->identity().uoid() );
303 refreshList();
306 void IdentityPage::refreshList()
308 const int numberOfTopLevel( mIPage.mIdentityList->topLevelItemCount() );
309 for ( int i = 0; i < numberOfTopLevel; ++i ) {
310 IdentityListViewItem *item = dynamic_cast<IdentityListViewItem*>( mIPage.mIdentityList->topLevelItem( i ) );
311 if ( item ) {
312 item->redisplay();
315 save();
318 void IdentityPage::slotIdentitySelectionChanged()
320 updateButtons();
323 void IdentityPage::updateButtons()
325 IdentityListViewItem *item = 0;
326 if ( !mIPage.mIdentityList->selectedItems().isEmpty() ) {
327 item = dynamic_cast<IdentityListViewItem*>( mIPage.mIdentityList->selectedItems()[0] );
329 mIPage.mRemoveButton->setEnabled( item && mIPage.mIdentityList->topLevelItemCount() > 1 );
330 mIPage.mModifyButton->setEnabled( item );
331 mIPage.mRenameButton->setEnabled( item );
332 mIPage.mSetAsDefaultButton->setEnabled( item && !item->identity().isDefault() );
335 #include "identitypage.moc"