• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

kmail

  • sources
  • kde-4.12
  • kdepim
  • kmail
  • configuredialog
accountconfigorderdialog.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2012-2013 Montel Laurent <montel@kde.org>
3 
4  This program is free software; you can redistribute it and/or modify it
5  under the terms of the GNU General Public License, version 2, as
6  published by the Free Software Foundation.
7 
8  This program is distributed in the hope that it will be useful, but
9  WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License along
14  with this program; if not, write to the Free Software Foundation, Inc.,
15  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 
18 #include "accountconfigorderdialog.h"
19 #include "kmkernel.h"
20 
21 #include "mailcommon/util/mailutil.h"
22 
23 
24 #include <KLocale>
25 #include <KPushButton>
26 #include <KVBox>
27 
28 #include <Akonadi/AgentInstance>
29 #include <Akonadi/AgentManager>
30 
31 #include <KMime/KMimeMessage>
32 
33 #include <QListWidget>
34 #include <QHBoxLayout>
35 #include <QDebug>
36 
37 using namespace KMail;
38 
39 struct InstanceStruct {
40  QString name;
41  QIcon icon;
42 };
43 
44 
45 AccountConfigOrderDialog::AccountConfigOrderDialog(QWidget *parent)
46  :KDialog(parent)
47 {
48  setCaption( i18n("Edit Accounts Order") );
49  setButtons( Ok|Cancel );
50  setDefaultButton( Ok );
51 
52  QWidget *page = new QWidget( this );
53  setMainWidget( page );
54  QHBoxLayout * vlay = new QHBoxLayout( page );
55  mListAccount = new QListWidget(this);
56  mListAccount->setDragDropMode( QAbstractItemView::InternalMove );
57  vlay->addWidget(mListAccount);
58 
59  KVBox* upDownBox = new KVBox( page );
60  mUpButton = new KPushButton( upDownBox );
61  mUpButton->setIcon( KIcon(QLatin1String("go-up")) );
62  mUpButton->setToolTip( i18nc( "Move selected account up.", "Up" ) );
63  mUpButton->setEnabled( false ); // b/c no item is selected yet
64  mUpButton->setFocusPolicy( Qt::StrongFocus );
65  mUpButton->setAutoRepeat(true);
66 
67  mDownButton = new KPushButton( upDownBox );
68  mDownButton->setIcon( KIcon(QLatin1String("go-down")) );
69  mDownButton->setToolTip( i18nc( "Move selected account down.", "Down" ) );
70  mDownButton->setEnabled( false ); // b/c no item is selected yet
71  mDownButton->setFocusPolicy( Qt::StrongFocus );
72  mDownButton->setAutoRepeat(true);
73 
74  QWidget* spacer = new QWidget( upDownBox );
75  upDownBox->setStretchFactor( spacer, 100 );
76  vlay->addWidget( upDownBox );
77 
78 
79  connect( mUpButton, SIGNAL(clicked()), this, SLOT(slotMoveUp()) );
80  connect( mDownButton, SIGNAL(clicked()), this, SLOT(slotMoveDown()) );
81  connect( mListAccount, SIGNAL(itemSelectionChanged()), this, SLOT(slotEnableControls()));
82  connect( mListAccount->model(), SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),SLOT(slotEnableControls()) );
83 
84  connect( this, SIGNAL(okClicked()), SLOT(slotOk()) );
85  readConfig();
86  init();
87 }
88 
89 AccountConfigOrderDialog::~AccountConfigOrderDialog()
90 {
91  writeConfig();
92 }
93 
94 void AccountConfigOrderDialog::slotMoveUp()
95 {
96  if ( !mListAccount->currentItem() )
97  return;
98  const int pos = mListAccount->row( mListAccount->currentItem() );
99  mListAccount->blockSignals( true );
100  QListWidgetItem *item = mListAccount->takeItem( pos );
101  // now selected item is at idx(idx-1), so
102  // insert the other item at idx, ie. above(below).
103  mListAccount->insertItem( pos -1, item );
104  mListAccount->blockSignals( false );
105  mListAccount->setCurrentRow( pos - 1 );
106 }
107 
108 void AccountConfigOrderDialog::slotMoveDown()
109 {
110  if ( !mListAccount->currentItem() )
111  return;
112  const int pos = mListAccount->row( mListAccount->currentItem() );
113  mListAccount->blockSignals( true );
114  QListWidgetItem *item = mListAccount->takeItem( pos );
115  // now selected item is at idx(idx-1), so
116  // insert the other item at idx, ie. above(below).
117  mListAccount->insertItem( pos +1 , item );
118  mListAccount->blockSignals( false );
119  mListAccount->setCurrentRow( pos + 1 );
120 }
121 
122 
123 void AccountConfigOrderDialog::slotEnableControls()
124 {
125  QListWidgetItem *item = mListAccount->currentItem();
126 
127  mUpButton->setEnabled( item && mListAccount->currentRow()!=0 );
128  mDownButton->setEnabled( item && mListAccount->currentRow()!=mListAccount->count()-1 );
129 }
130 
131 void AccountConfigOrderDialog::init()
132 {
133  KConfigGroup group( KMKernel::self()->config(), "AccountOrder" );
134  const QStringList listOrderAccount = group.readEntry("order",QStringList());
135  QStringList instanceList;
136 
137  QMap<QString, InstanceStruct> mapInstance;
138  foreach ( const Akonadi::AgentInstance &instance, Akonadi::AgentManager::self()->instances() ) {
139  const QStringList capabilities( instance.type().capabilities() );
140  if ( instance.type().mimeTypes().contains( KMime::Message::mimeType() ) ) {
141  if ( capabilities.contains( QLatin1String("Resource") ) &&
142  !capabilities.contains( QLatin1String("Virtual") ) &&
143  !capabilities.contains( QLatin1String("MailTransport") ) )
144  {
145  const QString identifier = instance.identifier();
146  if (!identifier.contains(POP3_RESOURCE_IDENTIFIER)) {
147  instanceList<<instance.identifier();
148  InstanceStruct instanceStruct;
149  instanceStruct.name = instance.name();
150  if (identifier.startsWith(QLatin1String("akonadi_imap_resource"))) {
151  instanceStruct.name += QLatin1String(" (IMAP)");
152  } else if (identifier.startsWith(QLatin1String("akonadi_maildir_resource"))) {
153  instanceStruct.name += QLatin1String(" (Maildir)");
154  } else if (identifier.startsWith(QLatin1String("akonadi_mailbox_resource"))) {
155  instanceStruct.name += QLatin1String(" (Mailbox)");
156  } else if (identifier.startsWith(QLatin1String("akonadi_mixedmaildir_resource"))) {
157  instanceStruct.name += QLatin1String(" (Mixedmaildir)");
158  }
159  instanceStruct.icon = instance.type().icon();
160  mapInstance.insert(instance.identifier(),instanceStruct);
161  }
162  }
163  }
164  }
165  const int numberOfList(listOrderAccount.count());
166  for (int i = 0; i< numberOfList;++i) {
167  instanceList.removeOne(listOrderAccount.at(i));
168  }
169 
170  QStringList finalList (listOrderAccount);
171  finalList += instanceList;
172 
173  const int numberOfElement(finalList.count());
174  for (int i = 0; i <numberOfElement;++i) {
175  const QString identifier(finalList.at(i));
176  if (mapInstance.contains(identifier)) {
177  InstanceStruct tmp = mapInstance.value(identifier);
178  QListWidgetItem * item = new QListWidgetItem(tmp.icon,tmp.name,mListAccount);
179  item->setData(AccountConfigOrderDialog::IdentifierAccount, identifier);
180  mListAccount->addItem( item );
181  }
182  }
183 }
184 
185 void AccountConfigOrderDialog::slotOk()
186 {
187  KConfigGroup group( KMKernel::self()->config(), "AccountOrder" );
188 
189  QStringList order;
190  const int numberOfItems(mListAccount->count());
191  for (int i = 0; i<numberOfItems; ++i) {
192  order << mListAccount->item(i)->data(AccountConfigOrderDialog::IdentifierAccount).toString();
193  }
194 
195  group.writeEntry("order",order);
196  group.sync();
197 
198  KDialog::accept();
199 }
200 
201 void AccountConfigOrderDialog::readConfig()
202 {
203  KConfigGroup accountConfigDialog( KMKernel::self()->config(), "AccountConfigOrderDialog" );
204  const QSize size = accountConfigDialog.readEntry( "Size", QSize(600, 400) );
205  if ( size.isValid() ) {
206  resize( size );
207  }
208 }
209 
210 void AccountConfigOrderDialog::writeConfig()
211 {
212  KConfigGroup accountConfigDialog( KMKernel::self()->config(), "AccountConfigOrderDialog" );
213  accountConfigDialog.writeEntry( "Size", size() );
214  accountConfigDialog.sync();
215 }
216 
217 
218 
219 #include "accountconfigorderdialog.moc"
KVBox
QWidget
QListWidget
KDialog
KMKernel::self
static KMKernel * self()
normal control stuff
Definition: kmkernel.cpp:1451
accountconfigorderdialog.h
KMail::AccountConfigOrderDialog::~AccountConfigOrderDialog
~AccountConfigOrderDialog()
Definition: accountconfigorderdialog.cpp:89
QListWidgetItem
kmkernel.h
KMail::AccountConfigOrderDialog::AccountConfigOrderDialog
AccountConfigOrderDialog(QWidget *parent)
Definition: accountconfigorderdialog.cpp:45
QMap
Definition: kmmainwidget.h:58
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:58:51 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kmail

Skip menu "kmail"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal