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

mailcommon

  • sources
  • kde-4.14
  • kdepim
  • mailcommon
  • folder
accountconfigorderdialog.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2012-2015 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 "mailcommon/mailcommonsettings_base.h"
20 #include "pimcommon/util/pimutil.h"
21 #include "mailcommon/util/mailutil.h"
22 
23 #include <KLocalizedString>
24 #include <KPushButton>
25 #include <KVBox>
26 
27 #include <Akonadi/AgentInstance>
28 #include <Akonadi/AgentManager>
29 
30 #include <KMime/KMimeMessage>
31 
32 #include <QListWidget>
33 #include <QHBoxLayout>
34 #include <QCheckBox>
35 
36 using namespace MailCommon;
37 
38 struct InstanceStruct {
39  QString name;
40  QIcon icon;
41 };
42 
43 
44 AccountConfigOrderDialog::AccountConfigOrderDialog(QWidget *parent)
45  :KDialog(parent)
46 {
47  setCaption( i18n("Edit Accounts Order") );
48  setButtons( Ok|Cancel );
49  setDefaultButton( Ok );
50 
51  QWidget *page = new QWidget( this );
52  setMainWidget( page );
53 
54  QVBoxLayout *vbox = new QVBoxLayout;
55  page->setLayout(vbox);
56 
57  mEnableAccountOrder = new QCheckBox(i18n("Use custom order"));
58  connect(mEnableAccountOrder, SIGNAL(clicked(bool)), this, SLOT(slotEnableAccountOrder(bool)));
59  vbox->addWidget(mEnableAccountOrder);
60 
61  QHBoxLayout * vlay = new QHBoxLayout;
62  vbox->addLayout(vlay);
63 
64  mListAccount = new QListWidget(this);
65  mListAccount->setDragDropMode( QAbstractItemView::InternalMove );
66  vlay->addWidget(mListAccount);
67 
68  KVBox* upDownBox = new KVBox( page );
69  mUpButton = new KPushButton( upDownBox );
70  mUpButton->setIcon( KIcon(QLatin1String("go-up")) );
71  mUpButton->setToolTip( i18nc( "Move selected account up.", "Up" ) );
72  mUpButton->setEnabled( false ); // b/c no item is selected yet
73  mUpButton->setFocusPolicy( Qt::StrongFocus );
74  mUpButton->setAutoRepeat(true);
75 
76  mDownButton = new KPushButton( upDownBox );
77  mDownButton->setIcon( KIcon(QLatin1String("go-down")) );
78  mDownButton->setToolTip( i18nc( "Move selected account down.", "Down" ) );
79  mDownButton->setEnabled( false ); // b/c no item is selected yet
80  mDownButton->setFocusPolicy( Qt::StrongFocus );
81  mDownButton->setAutoRepeat(true);
82 
83  QWidget* spacer = new QWidget( upDownBox );
84  upDownBox->setStretchFactor( spacer, 100 );
85  vlay->addWidget( upDownBox );
86 
87 
88  connect( mUpButton, SIGNAL(clicked()), this, SLOT(slotMoveUp()) );
89  connect( mDownButton, SIGNAL(clicked()), this, SLOT(slotMoveDown()) );
90  connect( mListAccount, SIGNAL(itemSelectionChanged()), this, SLOT(slotEnableControls()));
91  connect( mListAccount->model(), SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),SLOT(slotEnableControls()) );
92 
93  connect( this, SIGNAL(okClicked()), SLOT(slotOk()) );
94  readConfig();
95  init();
96 }
97 
98 AccountConfigOrderDialog::~AccountConfigOrderDialog()
99 {
100  writeConfig();
101 }
102 
103 void AccountConfigOrderDialog::slotEnableAccountOrder(bool state)
104 {
105  mListAccount->setEnabled(state);
106  mUpButton->setEnabled(state);
107  mDownButton->setEnabled(state);
108  if (state)
109  slotEnableControls();
110 }
111 
112 void AccountConfigOrderDialog::slotMoveUp()
113 {
114  if ( !mListAccount->currentItem() )
115  return;
116  const int pos = mListAccount->row( mListAccount->currentItem() );
117  mListAccount->blockSignals( true );
118  QListWidgetItem *item = mListAccount->takeItem( pos );
119  // now selected item is at idx(idx-1), so
120  // insert the other item at idx, ie. above(below).
121  mListAccount->insertItem( pos -1, item );
122  mListAccount->blockSignals( false );
123  mListAccount->setCurrentRow( pos - 1 );
124 }
125 
126 void AccountConfigOrderDialog::slotMoveDown()
127 {
128  if ( !mListAccount->currentItem() )
129  return;
130  const int pos = mListAccount->row( mListAccount->currentItem() );
131  mListAccount->blockSignals( true );
132  QListWidgetItem *item = mListAccount->takeItem( pos );
133  // now selected item is at idx(idx-1), so
134  // insert the other item at idx, ie. above(below).
135  mListAccount->insertItem( pos +1 , item );
136  mListAccount->blockSignals( false );
137  mListAccount->setCurrentRow( pos + 1 );
138 }
139 
140 
141 void AccountConfigOrderDialog::slotEnableControls()
142 {
143  QListWidgetItem *item = mListAccount->currentItem();
144 
145  mUpButton->setEnabled( item && mListAccount->currentRow()!=0 );
146  mDownButton->setEnabled( item && mListAccount->currentRow()!=mListAccount->count()-1 );
147 }
148 
149 void AccountConfigOrderDialog::init()
150 {
151  const QStringList listOrderAccount = MailCommon::MailCommonSettings::self()->order();
152  QStringList instanceList;
153 
154  QMap<QString, InstanceStruct> mapInstance;
155  foreach ( const Akonadi::AgentInstance &instance, Akonadi::AgentManager::self()->instances() ) {
156  const QStringList capabilities( instance.type().capabilities() );
157  if ( instance.type().mimeTypes().contains( KMime::Message::mimeType() ) ) {
158  if ( capabilities.contains( QLatin1String("Resource") ) &&
159  !capabilities.contains( QLatin1String("Virtual") ) &&
160  !capabilities.contains( QLatin1String("MailTransport") ) )
161  {
162  const QString identifier = instance.identifier();
163  if (!identifier.contains(POP3_RESOURCE_IDENTIFIER)) {
164  instanceList<<instance.identifier();
165  InstanceStruct instanceStruct;
166  instanceStruct.name = instance.name();
167  if (PimCommon::Util::isImapResource(identifier)) {
168  instanceStruct.name += QLatin1String(" (IMAP)");
169  } else if (identifier.startsWith(QLatin1String("akonadi_maildir_resource"))) {
170  instanceStruct.name += QLatin1String(" (Maildir)");
171  } else if (identifier.startsWith(QLatin1String("akonadi_mailbox_resource"))) {
172  instanceStruct.name += QLatin1String(" (Mailbox)");
173  } else if (identifier.startsWith(QLatin1String("akonadi_mixedmaildir_resource"))) {
174  instanceStruct.name += QLatin1String(" (Mixedmaildir)");
175  } else {
176  qDebug()<<" Unknown resource type "<<identifier;
177  }
178  instanceStruct.icon = instance.type().icon();
179  mapInstance.insert(instance.identifier(),instanceStruct);
180  }
181  }
182  }
183  }
184  const int numberOfList(listOrderAccount.count());
185  for (int i = 0; i< numberOfList;++i) {
186  instanceList.removeOne(listOrderAccount.at(i));
187  }
188 
189  QStringList finalList (listOrderAccount);
190  finalList += instanceList;
191 
192  const int numberOfElement(finalList.count());
193  for (int i = 0; i <numberOfElement;++i) {
194  const QString identifier(finalList.at(i));
195  if (mapInstance.contains(identifier)) {
196  InstanceStruct tmp = mapInstance.value(identifier);
197  QListWidgetItem * item = new QListWidgetItem(tmp.icon,tmp.name,mListAccount);
198  item->setData(AccountConfigOrderDialog::IdentifierAccount, identifier);
199  mListAccount->addItem( item );
200  }
201  }
202  mEnableAccountOrder->setChecked(MailCommon::MailCommonSettings::self()->enableAccountOrder());
203  slotEnableAccountOrder(MailCommon::MailCommonSettings::self()->enableAccountOrder());
204 }
205 
206 void AccountConfigOrderDialog::slotOk()
207 {
208  QStringList order;
209  const int numberOfItems(mListAccount->count());
210  for (int i = 0; i<numberOfItems; ++i) {
211  order << mListAccount->item(i)->data(AccountConfigOrderDialog::IdentifierAccount).toString();
212  }
213 
214  MailCommon::MailCommonSettings::self()->setOrder(order);
215  MailCommon::MailCommonSettings::self()->setEnableAccountOrder(mEnableAccountOrder->isChecked());
216  MailCommon::MailCommonSettings::self()->writeConfig();
217  KDialog::accept();
218 }
219 
220 void AccountConfigOrderDialog::readConfig()
221 {
222  KConfigGroup accountConfigDialog( MailCommon::MailCommonSettings::self()->config(), "AccountConfigOrderDialog" );
223  const QSize size = accountConfigDialog.readEntry( "Size", QSize(600, 400) );
224  if ( size.isValid() ) {
225  resize( size );
226  }
227 }
228 
229 void AccountConfigOrderDialog::writeConfig()
230 {
231  KConfigGroup accountConfigDialog( MailCommon::MailCommonSettings::self()->config(), "AccountConfigOrderDialog" );
232  accountConfigDialog.writeEntry( "Size", size() );
233  accountConfigDialog.sync();
234 }
235 
236 
237 
QModelIndex
QWidget
QSize::isValid
bool isValid() const
QListWidget::currentItem
QListWidgetItem * currentItem() const
QMap::contains
bool contains(const Key &key) const
QList::at
const T & at(int i) const
QMap
QAbstractItemView::setDragDropMode
void setDragDropMode(DragDropMode behavior)
QListWidgetItem
QHBoxLayout
KDialog
QListWidget::insertItem
void insertItem(int row, QListWidgetItem *item)
QListWidget
QListWidget::addItem
void addItem(const QString &label)
accountconfigorderdialog.h
QWidget::setEnabled
void setEnabled(bool)
QBoxLayout::addWidget
void addWidget(QWidget *widget, int stretch, QFlags< Qt::AlignmentFlag > alignment)
QList::count
int count(const T &value) const
QWidget::setLayout
void setLayout(QLayout *layout)
QListWidget::takeItem
QListWidgetItem * takeItem(int row)
QCheckBox
QString::startsWith
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
QListWidgetItem::data
virtual QVariant data(int role) const
QVBoxLayout
QString
QListWidget::item
QListWidgetItem * item(int row) const
QListWidget::count
count
QListWidget::setCurrentRow
void setCurrentRow(int row)
QStringList
MailCommon::AccountConfigOrderDialog::AccountConfigOrderDialog
AccountConfigOrderDialog(QWidget *parent)
Definition: accountconfigorderdialog.cpp:44
QObject::blockSignals
bool blockSignals(bool block)
QString::contains
bool contains(QChar ch, Qt::CaseSensitivity cs) const
QSize
QListWidget::row
int row(const QListWidgetItem *item) const
QListWidgetItem::setData
virtual void setData(int role, const QVariant &value)
QAbstractButton::setChecked
void setChecked(bool)
QLatin1String
QMap::insert
iterator insert(const Key &key, const T &value)
QAbstractItemView::model
QAbstractItemModel * model() const
QVariant::toString
QString toString() const
QList::removeOne
bool removeOne(const T &value)
mailutil.h
MailCommon::AccountConfigOrderDialog::~AccountConfigOrderDialog
~AccountConfigOrderDialog()
Definition: accountconfigorderdialog.cpp:98
QIcon
QBoxLayout::addLayout
void addLayout(QLayout *layout, int stretch)
QMap::value
const T value(const Key &key) const
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:31:40 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

mailcommon

Skip menu "mailcommon"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

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
  • pimprint

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