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

libkleo

  • sources
  • kde-4.14
  • kdepim
  • libkleo
  • ui
dnattributeorderconfigwidget.cpp
Go to the documentation of this file.
1 /* -*- c++ -*-
2  dnattributeorderconfigwidget.cpp
3 
4  This file is part of libkleopatra, the KDE keymanagement library
5  Copyright (c) 2004 Klarävdalens Datakonsult AB
6 
7  Libkleopatra is free software; you can redistribute it and/or
8  modify it under the terms of the GNU General Public License as
9  published by the Free Software Foundation; either version 2 of the
10  License, or (at your option) any later version.
11 
12  Libkleopatra is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program; if not, write to the Free Software
19  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 
21  In addition, as a special exception, the copyright holders give
22  permission to link the code of this program with any edition of
23  the Qt library by Trolltech AS, Norway (or with modified versions
24  of Qt that use the same license as Qt), and distribute linked
25  combinations including the two. You must obey the GNU General
26  Public License in all respects for all of the code used other than
27  Qt. If you modify this file, you may extend this exception to
28  your version of the file, but you are not obligated to do so. If
29  you do not wish to do so, delete this exception statement from
30  your version.
31  */
32 
33 #include "dnattributeorderconfigwidget.h"
34 
35 #include "kleo/dn.h"
36 
37 #include <klocale.h>
38 #include <kdebug.h>
39 #include <kdialog.h>
40 #include <kiconloader.h>
41 #include <kconfig.h>
42 
43 #include <QToolButton>
44 #include <QGridLayout>
45 #include <QLayout>
46 #include <QLabel>
47 
48 #include <QTreeWidget>
49 #include <QHeaderView>
50 
51 #include <cassert>
52 
53 class Kleo::DNAttributeOrderConfigWidget::Private {
54 public:
55  enum { UUp=0, Up=1, Left=2, Right=3, Down=4, DDown=5 };
56 
57 #ifndef QT_NO_TREEWIDGET
58  QTreeWidget * availableLV;
59  QTreeWidget* currentLV;
60 #endif
61  QToolButton * navTB[6];
62 
63 #ifndef QT_NO_TREEWIDGET
64  QTreeWidgetItem * placeHolderItem;
65 #endif
66 
67  Kleo::DNAttributeMapper * mapper;
68 };
69 
70 #ifndef QT_NO_TREEWIDGET
71 static void prepare( QTreeWidget * lv ) {
72  lv->setAllColumnsShowFocus( true );
73  lv->header()->setStretchLastSection( true );
74  lv->setHeaderLabels( QStringList() << QString() << i18n("Description") );
75 }
76 #endif
77 
78 Kleo::DNAttributeOrderConfigWidget::DNAttributeOrderConfigWidget( DNAttributeMapper * mapper, QWidget * parent, Qt::WindowFlags f )
79  : QWidget( parent, f ), d( new Private )
80 {
81  assert( mapper );
82  d->mapper = mapper;
83 
84  QGridLayout * glay = new QGridLayout( this );
85  glay->setMargin( 0 );
86  glay->setSpacing( KDialog::spacingHint() );
87  glay->setColumnStretch( 0, 1 );
88  glay->setColumnStretch( 2, 1 );
89 
90  int row = -1;
91 
92  ++row;
93  glay->addWidget( new QLabel( i18n("Available attributes:"), this ), row, 0 );
94  glay->addWidget( new QLabel( i18n("Current attribute order:"), this ), row, 2 );
95 
96 
97  ++row;
98  glay->setRowStretch( row, 1 );
99 
100 #ifndef QT_NO_TREEWIDGET
101  d->availableLV = new QTreeWidget( this );
102  prepare( d->availableLV );
103  d->availableLV->sortItems( 0, Qt::AscendingOrder );
104  glay->addWidget( d->availableLV, row, 0 );
105 
106  d->currentLV = new QTreeWidget( this );
107  prepare( d->currentLV );
108  glay->addWidget( d->currentLV, row, 2 );
109 
110  connect( d->availableLV, SIGNAL(itemClicked(QTreeWidgetItem*,int)),
111  SLOT(slotAvailableSelectionChanged(QTreeWidgetItem*)) );
112  connect( d->currentLV, SIGNAL(itemClicked(QTreeWidgetItem*,int)),
113  SLOT(slotCurrentOrderSelectionChanged(QTreeWidgetItem*)) );
114 
115  d->placeHolderItem = new QTreeWidgetItem( d->availableLV );
116  d->placeHolderItem->setText( 0, QLatin1String("_X_") );
117  d->placeHolderItem->setText( 1, i18n("All others") );
118 #endif
119 
120  // the up/down/left/right arrow cross:
121 
122  QGridLayout * xlay = new QGridLayout();
123  xlay->setSpacing( 0 );
124  xlay->setObjectName( QLatin1String("xlay") );
125  xlay->setAlignment( Qt::AlignCenter );
126 
127  static const struct {
128  const char * icon;
129  int row, col;
130  const char * tooltip;
131  const char * slot;
132  bool autorepeat;
133  } navButtons[] = {
134  { "go-top", 0, 1, I18N_NOOP( "Move to top" ), SLOT(slotDoubleUpButtonClicked()), false },
135  { "go-up", 1, 1, I18N_NOOP( "Move one up" ), SLOT(slotUpButtonClicked()), true },
136  { "go-previous", 2, 0, I18N_NOOP( "Remove from current attribute order" ), SLOT(slotLeftButtonClicked()), false },
137  { "go-next", 2, 2, I18N_NOOP( "Add to current attribute order" ), SLOT(slotRightButtonClicked()), false },
138  { "go-down", 3, 1, I18N_NOOP( "Move one down" ), SLOT(slotDownButtonClicked()), true },
139  { "go-bottom", 4, 1, I18N_NOOP( "Move to bottom" ), SLOT(slotDoubleDownButtonClicked()), false }
140  };
141 
142  for ( unsigned int i = 0 ; i < sizeof navButtons / sizeof *navButtons ; ++i ) {
143  QToolButton * tb = d->navTB[i] = new QToolButton( this );
144  tb->setIcon( KIcon( QLatin1String(navButtons[i].icon) ) );
145  tb->setEnabled( false );
146  tb->setToolTip( i18n( navButtons[i].tooltip ) );
147  xlay->addWidget( tb, navButtons[i].row, navButtons[i].col );
148  tb->setAutoRepeat(navButtons[i].autorepeat);
149  connect( tb, SIGNAL(clicked()), navButtons[i].slot );
150  }
151 
152  glay->addLayout( xlay, row, 1 );
153 }
154 
155 Kleo::DNAttributeOrderConfigWidget::~DNAttributeOrderConfigWidget() {
156  delete d;
157 }
158 
159 void Kleo::DNAttributeOrderConfigWidget::load() {
160 #ifndef QT_NO_TREEWIDGET
161  // save the _X_ item:
162  takePlaceHolderItem();
163  // clear the rest:
164  d->availableLV->clear();
165  d->currentLV->clear();
166 
167  const QStringList order = d->mapper->attributeOrder();
168 
169  // fill the RHS listview:
170  QTreeWidgetItem* last = 0;
171  for ( QStringList::const_iterator it = order.begin() ; it != order.end() ; ++it ) {
172  const QString attr = (*it).toUpper();
173  if ( attr == QLatin1String("_X_") ) {
174  takePlaceHolderItem();
175  d->currentLV->insertTopLevelItem( d->currentLV->topLevelItemCount(), d->placeHolderItem );
176  last = d->placeHolderItem;
177  } else {
178  last = new QTreeWidgetItem( d->currentLV, last );
179  last->setText( 0, attr );
180  last->setText( 1, d->mapper->name2label( attr ) );
181  }
182  }
183 
184  // fill the LHS listview with what's left:
185 
186  const QStringList all = Kleo::DNAttributeMapper::instance()->names();
187  for ( QStringList::const_iterator it = all.begin() ; it != all.end() ; ++it ) {
188  if ( !order.contains( *it ) ) {
189  QTreeWidgetItem *item = new QTreeWidgetItem( d->availableLV );
190  item->setText( 0, *it );
191  item->setText( 1, d->mapper->name2label( *it ) );
192  }
193  }
194 
195  if ( !d->placeHolderItem->treeWidget() )
196  d->availableLV->addTopLevelItem( d->placeHolderItem );
197 #endif
198 }
199 
200 void Kleo::DNAttributeOrderConfigWidget::takePlaceHolderItem() {
201 #ifndef QT_NO_TREEWIDGET
202  if ( QTreeWidget* lv = d->placeHolderItem->treeWidget() )
203  lv->takeTopLevelItem( lv->indexOfTopLevelItem( d->placeHolderItem ) );
204 #endif
205 }
206 
207 void Kleo::DNAttributeOrderConfigWidget::save() const {
208 #ifndef QT_NO_TREEWIDGET
209  QStringList order;
210  for ( QTreeWidgetItemIterator it( d->currentLV ) ; (*it) ; ++it )
211  order.push_back( (*it)->text( 0 ) );
212 
213  d->mapper->setAttributeOrder( order );
214 #endif
215 }
216 
217 void Kleo::DNAttributeOrderConfigWidget::defaults() {
218  kDebug(5150) <<"Sorry, not implemented: Kleo::DNAttributeOrderConfigWidget::defaults()";
219 }
220 
221 
222 
223 void Kleo::DNAttributeOrderConfigWidget::slotAvailableSelectionChanged( QTreeWidgetItem * item ) {
224  d->navTB[Private::Right]->setEnabled( item );
225 }
226 
227 void Kleo::DNAttributeOrderConfigWidget::slotCurrentOrderSelectionChanged( QTreeWidgetItem * item ) {
228  enableDisableButtons( item );
229 }
230 
231 void Kleo::DNAttributeOrderConfigWidget::enableDisableButtons( QTreeWidgetItem * item ) {
232 #ifndef QT_NO_TREEWIDGET
233  d->navTB[Private::UUp ]->setEnabled( item && d->currentLV->itemAbove( item ) );
234  d->navTB[Private::Up ]->setEnabled( item && d->currentLV->itemAbove( item ) );
235  d->navTB[Private::Left ]->setEnabled( item );
236  d->navTB[Private::Down ]->setEnabled( item && d->currentLV->itemBelow( item ) );
237  d->navTB[Private::DDown]->setEnabled( item && d->currentLV->itemBelow( item ) );
238 #endif
239 }
240 
241 void Kleo::DNAttributeOrderConfigWidget::slotUpButtonClicked() {
242 #ifndef QT_NO_TREEWIDGET
243  if ( d->currentLV->selectedItems().size() <= 0 )
244  return;
245  QTreeWidgetItem * item = d->currentLV->selectedItems().first();
246  int itemIndex = d->currentLV->indexOfTopLevelItem( item );
247  if ( itemIndex <= 0 )
248  return;
249  d->currentLV->takeTopLevelItem( itemIndex );
250  d->currentLV->insertTopLevelItem( itemIndex - 1, item );
251  d->currentLV->clearSelection();
252  item->setSelected( true );
253  enableDisableButtons( item );
254  emit changed();
255 #endif
256 }
257 
258 void Kleo::DNAttributeOrderConfigWidget::slotDoubleUpButtonClicked() {
259 #ifndef QT_NO_TREEWIDGET
260  if ( d->currentLV->selectedItems().size() <= 0 )
261  return;
262  QTreeWidgetItem * item = d->currentLV->selectedItems().first();
263  int itemIndex = d->currentLV->indexOfTopLevelItem( item );
264  if ( itemIndex == 0 )
265  return;
266  d->currentLV->takeTopLevelItem( itemIndex );
267  d->currentLV->insertTopLevelItem( 0, item );
268  d->currentLV->clearSelection();
269  item->setSelected( true );
270  enableDisableButtons( item );
271  emit changed();
272 #endif
273 }
274 
275 void Kleo::DNAttributeOrderConfigWidget::slotDownButtonClicked() {
276 #ifndef QT_NO_TREEWIDGET
277  if ( d->currentLV->selectedItems().size() <= 0 )
278  return;
279  QTreeWidgetItem * item = d->currentLV->selectedItems().first();
280  int itemIndex = d->currentLV->indexOfTopLevelItem( item );
281  if ( itemIndex + 1 >= d->currentLV->topLevelItemCount() )
282  return;
283  d->currentLV->takeTopLevelItem( itemIndex );
284  d->currentLV->insertTopLevelItem( itemIndex + 1, item );
285  d->currentLV->clearSelection();
286  item->setSelected( true );
287  enableDisableButtons( item );
288  emit changed();
289 #endif
290 }
291 
292 void Kleo::DNAttributeOrderConfigWidget::slotDoubleDownButtonClicked() {
293 #ifndef QT_NO_TREEWIDGET
294  if ( d->currentLV->selectedItems().size() <= 0 )
295  return;
296  QTreeWidgetItem * item = d->currentLV->selectedItems().first();
297  const int itemIndex = d->currentLV->indexOfTopLevelItem( item );
298  if ( itemIndex + 1 >= d->currentLV->topLevelItemCount() )
299  return;
300  d->currentLV->takeTopLevelItem( itemIndex );
301  d->currentLV->addTopLevelItem( item );
302  d->currentLV->clearSelection();
303  item->setSelected( true );
304  enableDisableButtons( item );
305  emit changed();
306 #endif
307 }
308 
309 void Kleo::DNAttributeOrderConfigWidget::slotLeftButtonClicked() {
310 #ifndef QT_NO_TREEWIDGET
311  if ( d->currentLV->selectedItems().size() <= 0 )
312  return;
313  QTreeWidgetItem * right = d->currentLV->selectedItems().first();
314  QTreeWidgetItem * next = d->currentLV->itemBelow( right );
315  if ( !next )
316  next = d->currentLV->itemAbove( right );
317  d->currentLV->takeTopLevelItem( d->currentLV->indexOfTopLevelItem( right ) );
318  d->availableLV->addTopLevelItem( right );
319  d->availableLV->sortItems( 0, Qt::AscendingOrder );
320  if ( next )
321  next->setSelected( true );
322  enableDisableButtons( next );
323  emit changed();
324 #endif
325 }
326 
327 void Kleo::DNAttributeOrderConfigWidget::slotRightButtonClicked() {
328 #ifndef QT_NO_TREEWIDGET
329  if ( d->availableLV->selectedItems().size() <= 0 )
330  return;
331  QTreeWidgetItem * left = d->availableLV->selectedItems().first();
332  QTreeWidgetItem* next = d->availableLV->itemBelow( left );
333  if ( !next )
334  next = d->availableLV->itemAbove( left );
335  d->availableLV->takeTopLevelItem( d->availableLV->indexOfTopLevelItem( left ) );
336  int newRightIndex = d->currentLV->topLevelItemCount();
337  if ( d->currentLV->selectedItems().size() > 0 ) {
338  QTreeWidgetItem * right = d->currentLV->selectedItems().first();
339  newRightIndex = d->currentLV->indexOfTopLevelItem( right );
340  right->setSelected( false );
341  }
342  d->currentLV->insertTopLevelItem( newRightIndex, left );
343  left->setSelected( true );
344  enableDisableButtons( left );
345  d->navTB[Private::Right]->setEnabled( next );
346  if ( next )
347  next->setSelected( true );
348  emit changed();
349 #endif
350 }
351 
352 
353 
354 void Kleo::DNAttributeOrderConfigWidget::virtual_hook( int, void* ) {}
355 
QAbstractButton::setAutoRepeat
void setAutoRepeat(bool)
Kleo::DNAttributeOrderConfigWidget::defaults
void defaults()
Definition: dnattributeorderconfigwidget.cpp:217
QWidget
QString::toUpper
QString toUpper() const
QGridLayout::addWidget
void addWidget(QWidget *widget, int row, int column, QFlags< Qt::AlignmentFlag > alignment)
QList::push_back
void push_back(const T &value)
QTreeWidgetItemIterator
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
kdtools::all
bool all(InputIterator first, InputIterator last)
Definition: stl_util.h:213
QGridLayout
QWidget::icon
const QPixmap * icon() const
Kleo::DNAttributeOrderConfigWidget::save
void save() const
Definition: dnattributeorderconfigwidget.cpp:207
QAbstractButton::setIcon
void setIcon(const QIcon &icon)
QList::const_iterator
QGridLayout::setSpacing
void setSpacing(int spacing)
dn.h
Kleo::DNAttributeMapper
DN Attribute mapper.
Definition: dn.h:53
QTreeWidget
QWidget::setEnabled
void setEnabled(bool)
Kleo::DNAttributeOrderConfigWidget::virtual_hook
virtual void virtual_hook(int, void *)
Definition: dnattributeorderconfigwidget.cpp:354
QGridLayout::setRowStretch
void setRowStretch(int row, int stretch)
dnattributeorderconfigwidget.h
Kleo::DNAttributeMapper::names
QStringList names() const
Definition: dn.cpp:522
QObject::setObjectName
void setObjectName(const QString &name)
Kleo::DNAttributeOrderConfigWidget::DNAttributeOrderConfigWidget
DNAttributeOrderConfigWidget(DNAttributeMapper *mapper, QWidget *parent=0, Qt::WindowFlags f=0)
Definition: dnattributeorderconfigwidget.cpp:78
QTreeView::setAllColumnsShowFocus
void setAllColumnsShowFocus(bool enable)
QString
QLayout::setMargin
void setMargin(int margin)
QStringList
QList::end
iterator end()
QToolButton
QTreeWidget::setHeaderLabels
void setHeaderLabels(const QStringList &labels)
QGridLayout::addLayout
void addLayout(QLayout *layout, int row, int column, QFlags< Qt::AlignmentFlag > alignment)
QLayout::setAlignment
bool setAlignment(QWidget *w, QFlags< Qt::AlignmentFlag > alignment)
Kleo::DNAttributeOrderConfigWidget::~DNAttributeOrderConfigWidget
~DNAttributeOrderConfigWidget()
Definition: dnattributeorderconfigwidget.cpp:155
QTreeWidgetItem
QLatin1String
QGridLayout::setColumnStretch
void setColumnStretch(int column, int stretch)
QTreeWidgetItem::setSelected
void setSelected(bool select)
QTreeWidgetItem::setText
void setText(int column, const QString &text)
Qt::WindowFlags
typedef WindowFlags
QTreeView::header
QHeaderView * header() const
QWidget::setToolTip
void setToolTip(const QString &)
QHeaderView::setStretchLastSection
void setStretchLastSection(bool stretch)
QObject::connect
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QLabel
Kleo::DNAttributeOrderConfigWidget::load
void load()
Definition: dnattributeorderconfigwidget.cpp:159
QList::begin
iterator begin()
Kleo::DNAttributeMapper::instance
static const DNAttributeMapper * instance()
Definition: dn.cpp:508
prepare
static void prepare(QTreeWidget *lv)
Definition: dnattributeorderconfigwidget.cpp:71
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:33:38 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkleo

Skip menu "libkleo"
  • 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
  • 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