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

kgpg

  • sources
  • kde-4.14
  • kdeutils
  • kgpg
keytreeview.cpp
Go to the documentation of this file.
1 /* Copyright 2008 Rolf Eike Beer <kde@opensource.sf-tec.de>
2  *
3  * This program is free software; you can redistribute it and/or
4  * modify it under the terms of the GNU General Public License as
5  * published by the Free Software Foundation; either version 2 of
6  * the License or (at your option) version 3 or any later version
7  * accepted by the membership of KDE e.V. (or its successor approved
8  * by the membership of KDE e.V.), which shall act as a proxy
9  * defined in Section 14 of version 3 of the license.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 #include "keytreeview.h"
20 
21 #include "model/keylistproxymodel.h"
22 #include "model/kgpgitemmodel.h"
23 #include "model/kgpgitemnode.h"
24 #include "transactions/kgpgexport.h"
25 #include "transactions/kgpgimport.h"
26 
27 #include <KConfigGroup>
28 #include <KLocale>
29 #include <KMessageBox>
30 #include <QDragMoveEvent>
31 #include <QDropEvent>
32 #include <QHeaderView>
33 
34 KeyTreeView::KeyTreeView(QWidget *parent, KeyListProxyModel *model)
35  : QTreeView(parent), m_proxy(model)
36 {
37  setModel(model);
38  setDragEnabled(true);
39  setDragDropMode(DragDrop);
40  setAcceptDrops(true);
41  setEditTriggers(QTreeView::NoEditTriggers);
42 }
43 
44 QList<KGpgNode *>
45 KeyTreeView::selectedNodes(bool *psame, KgpgCore::KgpgItemType *pt) const
46 {
47  QModelIndexList selidx = selectedIndexes();
48  QList<KGpgNode *> ndlist;
49  KgpgItemType tp = 0;
50  bool sametype = true;
51 
52  if (selidx.count() == 0) {
53  if (pt != NULL)
54  *pt = tp;
55  if (psame != NULL)
56  *psame = sametype;
57  return ndlist;
58  }
59 
60  tp = m_proxy->nodeForIndex(selidx[0])->getType();
61 
62  for (int i = 0; i < selidx.count(); i++) {
63  if (selidx[i].column() != 0)
64  continue;
65  KGpgNode *nd = m_proxy->nodeForIndex(selidx[i]);
66 
67  if (nd->getType() != tp) {
68  tp |= nd->getType();
69  sametype = false;
70  }
71 
72  ndlist << nd;
73  }
74 
75  if (pt != NULL)
76  *pt = tp;
77  if (psame != NULL)
78  *psame = sametype;
79  return ndlist;
80 }
81 
82 KGpgNode *
83 KeyTreeView::selectedNode() const
84 {
85  QModelIndexList selidx = selectedIndexes();
86 
87  if (selidx.isEmpty())
88  return NULL;
89 
90  return m_proxy->nodeForIndex(selidx[0]);
91 }
92 
93 void
94 KeyTreeView::selectNode(KGpgNode *nd)
95 {
96  if (nd == NULL)
97  return;
98 
99  QModelIndex idx = m_proxy->nodeIndex(nd);
100 
101  selectionModel()->select(idx, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
102  selectionModel()->setCurrentIndex(idx, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
103 }
104 
105 void
106 KeyTreeView::restoreLayout(KConfigGroup &cg)
107 {
108  QStringList cols(cg.readEntry("ColumnWidths", QStringList()));
109  int i = 0;
110 
111  QStringList::ConstIterator it(cols.constBegin());
112  const QStringList::ConstIterator itEnd(cols.constEnd());
113  for (; it != itEnd; ++it)
114  setColumnWidth(i++, (*it).toInt());
115 
116  while (i < model()->columnCount(QModelIndex())) {
117  int width = 100;
118  switch (i) {
119  case KEYCOLUMN_NAME:
120  width = 250;
121  break;
122  case KEYCOLUMN_EMAIL:
123  width = 150;
124  break;
125  case KEYCOLUMN_TRUST:
126  // the trust column needs to be only that big as the header which is done automatically
127  i++;
128  continue;
129  }
130  setColumnWidth(i, width);
131  i++;
132  }
133 
134  if (cg.hasKey("SortColumn")) {
135  Qt::SortOrder order = cg.readEntry("SortAscending", true) ? Qt::AscendingOrder : Qt::DescendingOrder;
136  sortByColumn(cg.readEntry("SortColumn", 0), order);
137  }
138 }
139 
140 void
141 KeyTreeView::saveLayout(KConfigGroup &cg) const
142 {
143  QStringList widths;
144 
145  const int colCount = model()->columnCount();
146 
147  for (int i = 0; i < colCount; ++i) {
148  widths << QString::number(columnWidth(i));
149  }
150  cg.writeEntry("ColumnWidths", widths);
151  cg.writeEntry( "SortColumn", header ()->sortIndicatorSection () );
152  cg.writeEntry( "SortAscending", ( header()->sortIndicatorOrder () == Qt::AscendingOrder ) );
153 }
154 
155 void
156 KeyTreeView::contentsDragMoveEvent(QDragMoveEvent *e)
157 {
158  e->setAccepted(KUrl::List::canDecode(e->mimeData()));
159 }
160 
161 void
162 KeyTreeView::contentsDropEvent(QDropEvent *o)
163 {
164  KUrl::List uriList = KUrl::List::fromMimeData(o->mimeData());
165  if (!uriList.isEmpty()) {
166  if (KMessageBox::questionYesNo(this, i18n("<p>Do you want to import file <b>%1</b> into your key ring?</p>",
167  uriList.first().path()), QString(), KGuiItem(i18n("Import")),
168  KGuiItem(i18n("Do Not Import"))) != KMessageBox::Yes)
169  return;
170 
171  emit importDrop(uriList);
172  }
173 }
174 
175 void
176 KeyTreeView::startDrag(Qt::DropActions supportedActions)
177 {
178  QList<KGpgNode *> nodes = selectedNodes();
179 
180  if (nodes.isEmpty())
181  return;
182 
183  KGpgNode *nd = nodes.first();
184  QString keyid = nd->getId();
185 
186  if (!(nd->getType() & ITYPE_PUBLIC))
187  return;
188 
189  KGpgExport *exp = new KGpgExport(this, QStringList(keyid));
190  exp->start();
191 
192  int result = exp->waitForFinished();
193 
194  if (result == KGpgTransaction::TS_OK) {
195  QMimeData *m = new QMimeData();
196  m->setText(QString::fromLatin1( exp->getOutputData() ));
197  QDrag *drag = new QDrag(this);
198  drag->setMimeData(m);
199  drag->exec(supportedActions, Qt::IgnoreAction);
200  // do NOT delete drag.
201  }
202 
203  delete exp;
204 }
205 
206 void
207 KeyTreeView::resizeColumnsToContents()
208 {
209  for (int i = m_proxy->columnCount() - 1; i >= 0; i--)
210  resizeColumnToContents(i);
211 }
212 
213 void
214 KeyTreeView::keyPressEvent(QKeyEvent *event)
215 {
216  if (event->key() == Qt::Key_Return) {
217  if (!event->isAutoRepeat())
218  emit returnPressed();
219 
220  return;
221  }
222  QTreeView::keyPressEvent(event);
223 }
224 
225 bool
226 KeyTreeView::isEditing() const
227 {
228  return (state() == EditingState);
229 }
230 
231 #include "keytreeview.moc"
QModelIndex
keytreeview.h
QWidget
KeyTreeView::selectNode
void selectNode(KGpgNode *nd)
Definition: keytreeview.cpp:94
kgpgimport.h
KEYCOLUMN_TRUST
#define KEYCOLUMN_TRUST
Definition: kgpgitemmodel.h:32
KGpgTransaction::TS_OK
everything went fine
Definition: kgpgtransaction.h:60
QDropEvent::mimeData
const QMimeData * mimeData() const
KGpgExport::getOutputData
const QByteArray & getOutputData() const
return the data read from standard output
Definition: kgpgexport.cpp:117
QDrag::setMimeData
void setMimeData(QMimeData *data)
KeyTreeView::isEditing
bool isEditing() const
Definition: keytreeview.cpp:226
QAbstractItemView::selectionModel
QItemSelectionModel * selectionModel() const
QDragMoveEvent
KGpgExport
export one or more keys from keyring
Definition: kgpgexport.h:32
KeyTreeView::restoreLayout
void restoreLayout(KConfigGroup &cg)
Definition: keytreeview.cpp:106
KeyListProxyModel::nodeForIndex
KGpgNode * nodeForIndex(const QModelIndex &index) const
Definition: keylistproxymodel.cpp:484
KeyTreeView::contentsDropEvent
virtual void contentsDropEvent(QDropEvent *e)
Definition: keytreeview.cpp:162
QAbstractItemView::setDragDropMode
void setDragDropMode(DragDropMode behavior)
KeyTreeView::selectedNodes
QList< KGpgNode * > selectedNodes(bool *psame=NULL, KgpgCore::KgpgItemType *pt=NULL) const
Definition: keytreeview.cpp:45
KGpgTransaction::waitForFinished
int waitForFinished(const int msecs=-1)
blocks until the transaction is complete
Definition: kgpgtransaction.cpp:681
KeyTreeView::contentsDragMoveEvent
virtual void contentsDragMoveEvent(QDragMoveEvent *e)
Definition: keytreeview.cpp:156
QKeyEvent::isAutoRepeat
bool isAutoRepeat() const
QTreeView::sortByColumn
void sortByColumn(int column, Qt::SortOrder order)
KGpgTransaction::start
void start()
Start the operation.
Definition: kgpgtransaction.cpp:390
KeyTreeView::selectedNode
KGpgNode * selectedNode() const
Definition: keytreeview.cpp:83
QMimeData
QWidget::width
int width() const
QDrag::exec
Qt::DropAction exec(QFlags< Qt::DropAction > supportedActions)
KeyTreeView::importDrop
void importDrop(const KUrl::List &urls)
KGpgNode::getType
virtual KgpgCore::KgpgItemType getType() const =0
Returns the item type of this object.
QTreeView::columnWidth
int columnWidth(int column) const
QTreeView::setColumnWidth
void setColumnWidth(int column, int width)
QString::number
QString number(int n, int base)
KeyTreeView::returnPressed
void returnPressed()
QEvent::setAccepted
void setAccepted(bool accepted)
QTreeView::resizeColumnToContents
void resizeColumnToContents(int column)
kgpgitemmodel.h
QDropEvent
QList::isEmpty
bool isEmpty() const
QDrag
QItemSelectionModel::select
virtual void select(const QModelIndex &index, QFlags< QItemSelectionModel::SelectionFlag > command)
KgpgCore::ITYPE_PUBLIC
public key
Definition: kgpgkey.h:93
QSortFilterProxyModel::columnCount
virtual int columnCount(const QModelIndex &parent) const
QMimeData::setText
void setText(const QString &text)
QAbstractItemView::setEditTriggers
void setEditTriggers(QFlags< QAbstractItemView::EditTrigger > triggers)
QList::first
T & first()
QString
QList< KGpgNode * >
kgpgexport.h
QStringList
kgpgitemnode.h
QWidget::setAcceptDrops
void setAcceptDrops(bool on)
QKeyEvent::key
int key() const
KGpgNode
The abstract base class for all classes representing keyring data.
Definition: KGpgNode.h:42
QAbstractItemView::state
State state() const
KeyListProxyModel
Definition: keylistproxymodel.h:30
KeyTreeView::saveLayout
void saveLayout(KConfigGroup &cg) const
Definition: keytreeview.cpp:141
QKeyEvent
QTreeView
Qt::DropActions
typedef DropActions
KGpgNode::getId
virtual QString getId() const
Definition: KGpgNode.cpp:318
QTreeView::setModel
virtual void setModel(QAbstractItemModel *model)
QAbstractItemModel::columnCount
virtual int columnCount(const QModelIndex &parent) const =0
KeyTreeView::resizeColumnsToContents
void resizeColumnsToContents()
Definition: keytreeview.cpp:207
QList::ConstIterator
typedef ConstIterator
QTreeView::selectedIndexes
virtual QModelIndexList selectedIndexes() const
QString::fromLatin1
QString fromLatin1(const char *str, int size)
QItemSelectionModel::setCurrentIndex
void setCurrentIndex(const QModelIndex &index, QFlags< QItemSelectionModel::SelectionFlag > command)
KeyListProxyModel::nodeIndex
QModelIndex nodeIndex(KGpgNode *node)
Definition: keylistproxymodel.cpp:492
KeyTreeView::KeyTreeView
KeyTreeView(QWidget *parent=0, KeyListProxyModel *model=0)
Definition: keytreeview.cpp:34
QTreeView::header
QHeaderView * header() const
QAbstractItemView::model
QAbstractItemModel * model() const
QTreeView::keyPressEvent
virtual void keyPressEvent(QKeyEvent *event)
KeyTreeView::keyPressEvent
virtual void keyPressEvent(QKeyEvent *event)
Definition: keytreeview.cpp:214
KEYCOLUMN_EMAIL
#define KEYCOLUMN_EMAIL
Definition: kgpgitemmodel.h:31
KEYCOLUMN_NAME
#define KEYCOLUMN_NAME
Definition: kgpgitemmodel.h:30
QAbstractItemView::setDragEnabled
void setDragEnabled(bool enable)
keylistproxymodel.h
KeyTreeView::startDrag
virtual void startDrag(Qt::DropActions)
Definition: keytreeview.cpp:176
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:42:08 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kgpg

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

kdeutils API Reference

Skip menu "kdeutils API Reference"
  • ark
  • filelight
  • kcalc
  • kcharselect
  • kdf
  • kfloppy
  • kgpg
  • ktimer
  • kwallet
  • sweeper

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