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

kleopatra

  • sources
  • kde-4.12
  • kdepim
  • kleopatra
  • utils
kleo_kicondialog.cpp
Go to the documentation of this file.
1 /* vi: ts=8 sts=4 sw=4
2  *
3  * This file is part of the KDE project, module kfile.
4  * Copyright (C) 2000 Geert Jansen <jansen@kde.org>
5  * (C) 2000 Kurt Granroth <granroth@kde.org>
6  * (C) 1997 Christoph Neerfeld <chris@kde.org>
7  * (C) 2002 Carsten Pfeiffer <pfeiffer@kde.org>
8  *
9  * This is free software; it comes under the GNU Library General
10  * Public License, version 2. See the file "COPYING.LIB" for the
11  * exact licensing terms.
12  */
13 
14 #include <config-kleopatra.h>
15 
16 #include "kleo_kicondialog.h"
17 
18 #include <kbuttongroup.h>
19 #include <klistwidgetsearchline.h>
20 #include <kapplication.h>
21 #include <klocale.h>
22 #include <kstandarddirs.h>
23 #include <kiconloader.h>
24 
25 #include <QLayout>
26 #include <QLabel>
27 #include <QComboBox>
28 #include <QtCore/QTimer>
29 #include <QRadioButton>
30 #include <QtCore/QFileInfo>
31 #include <QProgressBar>
32 #include <QPainter>
33 #include <QFileDialog>
34 #include <QtSvg/QSvgRenderer>
35 
36 using namespace Kleo::KioAvoidance;
37 
38 class KIconCanvas::KIconCanvasPrivate
39 {
40  public:
41  KIconCanvasPrivate(KIconCanvas *qq) { q = qq; m_bLoading = false; }
42  ~KIconCanvasPrivate() {}
43  KIconCanvas *q;
44  bool m_bLoading;
45  QStringList mFiles;
46  QTimer *mpTimer;
47 
48  // slots
49  void _k_slotLoadFiles();
50  void _k_slotCurrentChanged(QListWidgetItem *item);
51 };
52 
56 class IconPath : public QString
57 {
58 protected:
59  QString m_iconName;
60 
61 public:
62  IconPath(const QString &ip) : QString (ip)
63  {
64  int n = lastIndexOf('/');
65  m_iconName = (n==-1) ? static_cast<QString>(*this) : mid(n+1);
66  }
67 
68 
69  IconPath() : QString ()
70  { }
71 
72  bool operator== (const IconPath &ip) const
73  { return m_iconName == ip.m_iconName; }
74 
75  bool operator< (const IconPath &ip) const
76  { return m_iconName < ip.m_iconName; }
77 
78 };
79 
80 /*
81  * KIconCanvas: Iconview for the iconloader dialog.
82  */
83 
84 KIconCanvas::KIconCanvas(QWidget *parent)
85  : KListWidget(parent), d(new KIconCanvasPrivate(this))
86 {
87  setViewMode(IconMode);
88  setUniformItemSizes(true);
89  setMovement(Static);
90  setIconSize(QSize(60, 60));
91  d->mpTimer = new QTimer(this);
92  connect(d->mpTimer, SIGNAL(timeout()), this, SLOT(_k_slotLoadFiles()));
93  connect(this, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
94  this, SLOT(_k_slotCurrentChanged(QListWidgetItem*)));
95  setGridSize(QSize(80,80));
96 }
97 
98 KIconCanvas::~KIconCanvas()
99 {
100  delete d->mpTimer;
101  delete d;
102 }
103 
104 void KIconCanvas::loadFiles(const QStringList& files)
105 {
106  clear();
107  d->mFiles = files;
108  emit startLoading(d->mFiles.count());
109  d->mpTimer->setSingleShot(true);
110  d->mpTimer->start(10);
111  d->m_bLoading = false;
112 }
113 
114 void KIconCanvas::KIconCanvasPrivate::_k_slotLoadFiles()
115 {
116  q->setResizeMode(QListWidget::Fixed);
117 #ifndef QT_NO_CURSOR
118  QApplication::setOverrideCursor(Qt::WaitCursor);
119 #endif
120 
121  // disable updates to not trigger paint events when adding child items
122  q->setUpdatesEnabled(false);
123 
124  m_bLoading = true;
125  int i;
126  QStringList::ConstIterator it;
127  uint emitProgress = 10; // so we will emit it once in the beginning
128  QStringList::ConstIterator end(mFiles.end());
129  for (it=mFiles.begin(), i=0; it!=end; ++it, i++)
130  {
131  if ( emitProgress >= 10 ) {
132  emit q->progress(i);
133  emitProgress = 0;
134  }
135 
136  emitProgress++;
137 
138  if (!m_bLoading) { // user clicked on a button that will load another set of icons
139  break;
140  }
141  QImage img;
142 
143  // Use the extension as the format. Works for XPM and PNG, but not for SVG
144  QString path= *it;
145  QString ext = path.right(3).toUpper();
146 
147  if (ext != "SVG" && ext != "VGZ")
148  img.load(*it);
149 #ifndef QT_NO_SVGRENDERER
150  else {
151  // Special stuff for SVG icons
152  img = QImage(60, 60, QImage::Format_ARGB32_Premultiplied);
153  img.fill(0);
154  QSvgRenderer renderer(*it);
155  if (renderer.isValid()) {
156  QPainter p(&img);
157  renderer.render(&p);
158  }
159  }
160 #endif // QT_NO_SVGRENDERER
161 
162  if (img.isNull())
163  continue;
164  if (img.width() > 60 || img.height() > 60)
165  {
166  if (img.width() > img.height())
167  {
168  int height = (int) ((60.0 / img.width()) * img.height());
169  img = img.scaled(60, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
170  } else
171  {
172  int width = (int) ((60.0 / img.height()) * img.width());
173  img = img.scaled(width, 60, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
174  }
175  }
176  QPixmap pm = QPixmap::fromImage(img);
177  QFileInfo fi(*it);
178  QListWidgetItem *item = new QListWidgetItem(pm, fi.completeBaseName(), q);
179  item->setData(Qt::UserRole, *it);
180  item->setToolTip(fi.completeBaseName());
181  }
182 
183  // enable updates since we have to draw the whole view now
184  q->setUpdatesEnabled(true);
185 
186 #ifndef QT_NO_CURSOR
187  QApplication::restoreOverrideCursor();
188 #endif
189  m_bLoading = false;
190  emit q->finished();
191  q->setResizeMode(QListWidget::Adjust);
192 }
193 
194 QString KIconCanvas::getCurrent() const
195 {
196  if (!currentItem())
197  return QString();
198  return currentItem()->data(Qt::UserRole).toString();
199 }
200 
201 void KIconCanvas::stopLoading()
202 {
203  d->m_bLoading = false;
204 }
205 
206 void KIconCanvas::KIconCanvasPrivate::_k_slotCurrentChanged(QListWidgetItem *item)
207 {
208  emit q->nameChanged((item != 0L) ? item->text() : QString());
209 }
210 
211 class KIconDialog::KIconDialogPrivate
212 {
213  public:
214  KIconDialogPrivate(KIconDialog *qq) {
215  q = qq;
216  m_bStrictIconSize = true;
217  m_bLockUser = false;
218  m_bLockCustomDir = false;
219  searchLine = 0;
220  mNumOfSteps = 1;
221  }
222  ~KIconDialogPrivate() {}
223 
224  void init();
225  void showIcons();
226  void setContext( KIconLoader::Context context );
227 
228  // slots
229  void _k_slotContext(int);
230  void _k_slotStartLoading(int);
231  void _k_slotProgress(int);
232  void _k_slotFinished();
233  void _k_slotAcceptIcons();
234 #ifndef QT_NO_FILEDIALOG
235  void _k_slotBrowse();
236 #endif
237  void _k_slotOtherIconClicked();
238  void _k_slotSystemIconClicked();
239 
240  KIconDialog *q;
241 
242  int mGroupOrSize;
243  KIconLoader::Context mContext;
244 
245  QStringList mFileList;
246  QComboBox *mpCombo;
247 #ifndef QT_NO_FILEDIALOG
248  QPushButton *mpBrowseBut;
249 #endif
250  QRadioButton *mpSystemIcons, *mpOtherIcons;
251  QProgressBar *mpProgress;
252  int mNumOfSteps;
253  KIconLoader *mpLoader;
254  KIconCanvas *mpCanvas;
255  int mNumContext;
256  KIconLoader::Context mContextMap[ 12 ]; // must match KIcon::Context size, code has assert
257 
258  bool m_bStrictIconSize, m_bLockUser, m_bLockCustomDir;
259  QString custom;
260  QString customLocation;
261  KListWidgetSearchLine *searchLine;
262 };
263 
264 /*
265  * KIconDialog: Dialog for selecting icons. Both system and user
266  * specified icons can be chosen.
267  */
268 
269 KIconDialog::KIconDialog(QWidget *parent)
270  : KDialog(parent), d(new KIconDialogPrivate(this))
271 {
272  setModal( true );
273  setCaption( i18n("Select Icon") );
274  setButtons( Ok | Cancel );
275  setDefaultButton( Ok );
276 
277  d->mpLoader = KIconLoader::global();
278  d->init();
279 }
280 
281 KIconDialog::KIconDialog(KIconLoader *loader, QWidget *parent)
282  : KDialog(parent), d(new KIconDialogPrivate(this))
283 {
284  setModal( true );
285  setCaption( i18n("Select Icon") );
286  setButtons( Ok | Cancel );
287  setDefaultButton( Ok );
288 
289  d->mpLoader = loader;
290  d->init();
291 }
292 
293 void KIconDialog::KIconDialogPrivate::init()
294 {
295  mGroupOrSize = KIconLoader::Desktop;
296  mContext = KIconLoader::Any;
297  mFileList = KGlobal::dirs()->findAllResources("appicon", QLatin1String("*.png"));
298 
299  QWidget *main = new QWidget(q);
300  q->setMainWidget(main);
301 
302  QVBoxLayout *top = new QVBoxLayout(main);
303  top->setMargin(0);
304 
305  QGroupBox *bgroup = new QGroupBox(main);
306  bgroup->setTitle(i18n("Icon Source"));
307 
308  QVBoxLayout *vbox = new QVBoxLayout;
309  bgroup->setLayout( vbox );
310  top->addWidget(bgroup);
311 
312  QGridLayout *grid = new QGridLayout();
313  grid->setSpacing(KDialog::spacingHint());
314  bgroup->layout()->addItem(grid);
315 
316  mpSystemIcons = new QRadioButton(i18n("S&ystem icons:"), bgroup);
317  connect(mpSystemIcons, SIGNAL(clicked()), q, SLOT(_k_slotSystemIconClicked()));
318  grid->addWidget(mpSystemIcons, 1, 0);
319  mpCombo = new QComboBox(bgroup);
320  connect(mpCombo, SIGNAL(activated(int)), q, SLOT(_k_slotContext(int)));
321  grid->addWidget(mpCombo, 1, 1);
322  mpOtherIcons = new QRadioButton(i18n("O&ther icons:"), bgroup);
323  connect(mpOtherIcons, SIGNAL(clicked()), q, SLOT(_k_slotOtherIconClicked()));
324  grid->addWidget(mpOtherIcons, 2, 0);
325 #ifndef QT_NO_FILEDIALOG
326  mpBrowseBut = new QPushButton(i18n("&Browse..."), bgroup);
327  connect(mpBrowseBut, SIGNAL(clicked()), q, SLOT(_k_slotBrowse()));
328  grid->addWidget(mpBrowseBut, 2, 1);
329 #endif // QT_NO_FILEDIALOG
330 
331  //
332  // ADD SEARCHLINE
333  //
334  QHBoxLayout *searchLayout = new QHBoxLayout();
335  searchLayout->setMargin(0);
336  searchLayout->setSpacing(KDialog::spacingHint());
337  top->addLayout(searchLayout);
338 
339  QLabel *searchLabel = new QLabel(i18n("&Search:"), main);
340  searchLayout->addWidget(searchLabel);
341 
342  searchLine = new KListWidgetSearchLine(main);
343  searchLayout->addWidget(searchLine);
344  searchLabel->setBuddy(searchLine);
345 
346  QString wtstr = i18n("Search interactively for icon names (e.g. folder).");
347  searchLabel->setWhatsThis(wtstr);
348  searchLine->setWhatsThis(wtstr);
349 
350 
351  mpCanvas = new KIconCanvas(main);
352  connect(mpCanvas, SIGNAL(itemActivated(QListWidgetItem*)), q, SLOT(_k_slotAcceptIcons()));
353  mpCanvas->setMinimumSize(400, 125);
354  top->addWidget(mpCanvas);
355  searchLine->setListWidget(mpCanvas);
356 
357  mpProgress = new QProgressBar(main);
358  top->addWidget(mpProgress);
359  connect(mpCanvas, SIGNAL(startLoading(int)), q, SLOT(_k_slotStartLoading(int)));
360  connect(mpCanvas, SIGNAL(progress(int)), q, SLOT(_k_slotProgress(int)));
361  connect(mpCanvas, SIGNAL(finished()), q, SLOT(_k_slotFinished()));
362 
363  // When pressing Ok or Cancel, stop loading icons
364  connect(q, SIGNAL(hidden()), mpCanvas, SLOT(stopLoading()));
365 
366  static const char* const context_text[] = {
367  I18N_NOOP( "Actions" ),
368  I18N_NOOP( "Animations" ),
369  I18N_NOOP( "Applications" ),
370  I18N_NOOP( "Categories" ),
371  I18N_NOOP( "Devices" ),
372  I18N_NOOP( "Emblems" ),
373  I18N_NOOP( "Emotes" ),
374  I18N_NOOP( "Filesystems" ),
375  I18N_NOOP( "International" ),
376  I18N_NOOP( "Mimetypes" ),
377  I18N_NOOP( "Places" ),
378  I18N_NOOP( "Status" ) };
379  static const KIconLoader::Context context_id[] = {
380  KIconLoader::Action,
381  KIconLoader::Animation,
382  KIconLoader::Application,
383  KIconLoader::Category,
384  KIconLoader::Device,
385  KIconLoader::Emblem,
386  KIconLoader::Emote,
387  KIconLoader::FileSystem,
388  KIconLoader::International,
389  KIconLoader::MimeType,
390  KIconLoader::Place,
391  KIconLoader::StatusIcon };
392  mNumContext = 0;
393  int cnt = sizeof( context_text ) / sizeof( context_text[ 0 ] );
394  // check all 3 arrays have same sizes
395  Q_ASSERT( cnt == sizeof( context_id ) / sizeof( context_id[ 0 ] )
396  && cnt == sizeof( mContextMap ) / sizeof( mContextMap[ 0 ] ));
397  for( int i = 0;
398  i < cnt;
399  ++i )
400  {
401  if( mpLoader->hasContext( context_id[ i ] ))
402  {
403  mpCombo->addItem(i18n( context_text[ i ] ));
404  mContextMap[ mNumContext++ ] = context_id[ i ];
405  }
406  }
407  mpCombo->setFixedSize(mpCombo->sizeHint());
408 
409 #ifndef QT_NO_FILEDIALOG
410  mpBrowseBut->setFixedWidth(mpCombo->width());
411 #endif
412 
413  // Make the dialog a little taller
414  q->incrementInitialSize(QSize(0,100));
415  connect(q, SIGNAL(okClicked()), q, SLOT(slotOk()));
416 }
417 
418 
419 KIconDialog::~KIconDialog()
420 {
421  delete d;
422 }
423 
424 void KIconDialog::KIconDialogPrivate::_k_slotAcceptIcons()
425 {
426  custom.clear();
427  q->slotOk();
428 }
429 
430 void KIconDialog::KIconDialogPrivate::showIcons()
431 {
432  mpCanvas->clear();
433  QStringList filelist;
434  if (mpSystemIcons->isChecked())
435  if (m_bStrictIconSize)
436  filelist=mpLoader->queryIcons(mGroupOrSize, mContext);
437  else
438  filelist=mpLoader->queryIconsByContext(mGroupOrSize, mContext);
439  else if (!customLocation.isNull()) {
440  filelist = mpLoader->queryIconsByDir(customLocation);
441  }
442  else
443  filelist=mFileList;
444 
445  QList<IconPath> iconlist;
446  QStringList::Iterator it;
447  foreach (const QString &it, filelist) {
448  iconlist.append(IconPath(it));
449  }
450 
451  qSort(iconlist);
452  filelist.clear();
453 
454  foreach (const IconPath &ip, iconlist) {
455  filelist.append(ip);
456  }
457 
458  searchLine->clear();
459  mpCanvas->loadFiles(filelist);
460 }
461 
462 void KIconDialog::setStrictIconSize(bool b)
463 {
464  d->m_bStrictIconSize=b;
465 }
466 
467 bool KIconDialog::strictIconSize() const
468 {
469  return d->m_bStrictIconSize;
470 }
471 
472 void KIconDialog::setIconSize( int size )
473 {
474  // see KIconLoader, if you think this is weird
475  if (size == 0) {
476  d->mGroupOrSize = KIconLoader::Desktop; // default Group
477  } else {
478  d->mGroupOrSize = -size; // yes, KIconLoader::queryIconsByContext is weird
479  }
480 }
481 
482 int KIconDialog::iconSize() const
483 {
484  // 0 or any other value ==> mGroupOrSize is a group, so we return 0
485  return (d->mGroupOrSize < 0) ? -d->mGroupOrSize : 0;
486 }
487 
488 void KIconDialog::setup(KIconLoader::Group group, KIconLoader::Context context,
489  bool strictIconSize, int iconSize, bool user,
490  bool lockUser, bool lockCustomDir )
491 {
492  d->m_bStrictIconSize = strictIconSize;
493  d->m_bLockUser = lockUser;
494  d->m_bLockCustomDir = lockCustomDir;
495  d->mGroupOrSize = (iconSize == 0) ? group : -iconSize;
496  d->mpSystemIcons->setChecked(!user);
497  d->mpSystemIcons->setEnabled(!lockUser || !user);
498  d->mpOtherIcons->setChecked(user);
499  d->mpOtherIcons->setEnabled(!lockUser || user);
500  d->mpCombo->setEnabled(!user);
501 #ifndef QT_NO_FILEDIALOG
502  d->mpBrowseBut->setEnabled(user && !lockCustomDir);
503 #endif
504  d->setContext(context);
505 }
506 
507 void KIconDialog::KIconDialogPrivate::setContext(KIconLoader::Context context)
508 {
509  mContext = context;
510  for( int i = 0;
511  i < mNumContext;
512  ++i )
513  if( mContextMap[ i ] == context )
514  {
515  mpCombo->setCurrentIndex( i );
516  return;
517  }
518 }
519 
520 void KIconDialog::setCustomLocation( const QString& location )
521 {
522  d->customLocation = location;
523 }
524 
525 QString KIconDialog::openDialog()
526 {
527  d->showIcons();
528 
529  if ( exec() == Accepted )
530  {
531  if (!d->custom.isNull())
532  return d->custom;
533  QString name = d->mpCanvas->getCurrent();
534  if (name.isEmpty() || d->mpOtherIcons->isChecked()) {
535  return name;
536  }
537  QFileInfo fi(name);
538  return fi.baseName();
539  }
540  return QString();
541 }
542 
543 void KIconDialog::showDialog()
544 {
545  setModal(false);
546  d->showIcons();
547  show();
548 }
549 
550 void KIconDialog::slotOk()
551 {
552  QString name;
553  if (!d->custom.isNull())
554  {
555  name = d->custom;
556  }
557  else
558  {
559  name = d->mpCanvas->getCurrent();
560  if (!name.isEmpty() && d->mpSystemIcons->isChecked()) {
561  QFileInfo fi(name);
562  name = fi.baseName();
563  }
564  }
565 
566  emit newIconName(name);
567  KDialog::accept();
568 }
569 
570 QString KIconDialog::getIcon(KIconLoader::Group group, KIconLoader::Context context,
571  bool strictIconSize, int iconSize, bool user,
572  QWidget *parent, const QString &caption)
573 {
574  KIconDialog dlg(parent);
575  dlg.setup( group, context, strictIconSize, iconSize, user );
576  if (!caption.isNull())
577  dlg.setCaption(caption);
578 
579  return dlg.openDialog();
580 }
581 
582 #ifndef QT_NO_FILEDIALOG
583 void KIconDialog::KIconDialogPrivate::_k_slotBrowse()
584 {
585  const QString file = QFileDialog::getOpenFileName( q, i18n("Open"), QString(), i18n("Icon Files (*.png *.xpm *.svg *.svgz)") );
586  if (!file.isEmpty())
587  {
588  custom = file;
589  if (mpSystemIcons->isChecked()) {
590  customLocation = QFileInfo(file).absolutePath();
591  }
592  q->slotOk();
593  }
594 }
595 #endif
596 
597 void KIconDialog::KIconDialogPrivate::_k_slotSystemIconClicked()
598 {
599 #ifndef QT_NO_FILEDIALOG
600  mpBrowseBut->setEnabled(false);
601 #endif
602  mpCombo->setEnabled(true);
603  showIcons();
604 }
605 
606 void KIconDialog::KIconDialogPrivate::_k_slotOtherIconClicked()
607 {
608 #ifndef QT_NO_FILEDIALOG
609  mpBrowseBut->setEnabled(!m_bLockCustomDir);
610 #endif
611  mpCombo->setEnabled(false);
612  showIcons();
613 }
614 
615 void KIconDialog::KIconDialogPrivate::_k_slotContext(int id)
616 {
617  mContext = static_cast<KIconLoader::Context>( mContextMap[ id ] );
618  showIcons();
619 }
620 
621 void KIconDialog::KIconDialogPrivate::_k_slotStartLoading(int steps)
622 {
623  if (steps < 10)
624  mpProgress->hide();
625  else
626  {
627  mNumOfSteps = steps;
628  mpProgress->setValue(0);
629  mpProgress->show();
630  }
631 }
632 
633 void KIconDialog::KIconDialogPrivate::_k_slotProgress(int p)
634 {
635  mpProgress->setValue(static_cast<int>(100.0 * (double)p / (double)mNumOfSteps));
636 }
637 
638 void KIconDialog::KIconDialogPrivate::_k_slotFinished()
639 {
640  mNumOfSteps = 1;
641  mpProgress->hide();
642 }
643 
644 class KIconButton::KIconButtonPrivate
645 {
646  public:
647  KIconButtonPrivate(KIconButton *qq, KIconLoader *loader);
648  ~KIconButtonPrivate();
649 
650  // slots
651  void _k_slotChangeIcon();
652  void _k_newIconName(const QString&);
653 
654  KIconButton *q;
655 
656  int iconSize;
657  bool m_bStrictIconSize;
658 
659  bool mbUser;
660  KIconLoader::Group mGroup;
661  KIconLoader::Context mContext;
662 
663  QString mIcon;
664  KIconDialog *mpDialog;
665  KIconLoader *mpLoader;
666 };
667 
668 
669 /*
670  * KIconButton: A "choose icon" pushbutton.
671  */
672 
673 KIconButton::KIconButton(QWidget *parent)
674  : QPushButton(parent), d(new KIconButtonPrivate(this, KIconLoader::global()))
675 {
676  QPushButton::setIconSize(QSize(48, 48));
677 }
678 
679 KIconButton::KIconButton(KIconLoader *loader, QWidget *parent)
680  : QPushButton(parent), d(new KIconButtonPrivate(this, loader))
681 {
682  QPushButton::setIconSize(QSize(48, 48));
683 }
684 
685 KIconButton::KIconButtonPrivate::KIconButtonPrivate(KIconButton *qq, KIconLoader *loader)
686  : q(qq)
687 {
688  m_bStrictIconSize = false;
689  iconSize = 0; // let KIconLoader choose the default
690 
691  mGroup = KIconLoader::Desktop;
692  mContext = KIconLoader::Application;
693  mbUser = false;
694 
695  mpLoader = loader;
696  mpDialog = 0L;
697  connect(q, SIGNAL(clicked()), q, SLOT(_k_slotChangeIcon()));
698 }
699 
700 KIconButton::KIconButtonPrivate::~KIconButtonPrivate()
701 {
702  delete mpDialog;
703 }
704 
705 KIconButton::~KIconButton()
706 {
707  delete d;
708 }
709 
710 void KIconButton::setStrictIconSize(bool b)
711 {
712  d->m_bStrictIconSize=b;
713 }
714 
715 bool KIconButton::strictIconSize() const
716 {
717  return d->m_bStrictIconSize;
718 }
719 
720 void KIconButton::setIconSize( int size )
721 {
722  QPushButton::setIconSize(QSize(size, size));
723  d->iconSize = size;
724 }
725 
726 int KIconButton::iconSize() const
727 {
728  return d->iconSize;
729 }
730 
731 void KIconButton::setIconType(KIconLoader::Group group, KIconLoader::Context context, bool user)
732 {
733  d->mGroup = group;
734  d->mContext = context;
735  d->mbUser = user;
736 }
737 
738 void KIconButton::setIcon(const QString& icon)
739 {
740  d->mIcon = icon;
741  setIcon(KIcon(d->mIcon));
742 
743  if (!d->mpDialog) {
744  d->mpDialog = new KIconDialog(d->mpLoader, this);
745  connect(d->mpDialog, SIGNAL(newIconName(QString)), this, SLOT(_k_newIconName(QString)));
746  }
747 
748  if (d->mbUser) {
749  d->mpDialog->setCustomLocation(QFileInfo(d->mpLoader->iconPath(d->mIcon, d->mGroup, true) ).absolutePath());
750  }
751 }
752 
753 void KIconButton::setIcon(const QIcon& icon)
754 {
755  QPushButton::setIcon(icon);
756 }
757 
758 void KIconButton::resetIcon()
759 {
760  d->mIcon.clear();
761  setIcon(QIcon());
762 }
763 
764 const QString &KIconButton::icon() const
765 {
766  return d->mIcon;
767 }
768 
769 void KIconButton::KIconButtonPrivate::_k_slotChangeIcon()
770 {
771  if (!mpDialog)
772  {
773  mpDialog = new KIconDialog(mpLoader, q);
774  connect(mpDialog, SIGNAL(newIconName(QString)), q, SLOT(_k_newIconName(QString)));
775  }
776 
777  mpDialog->setup(mGroup, mContext, m_bStrictIconSize, iconSize, mbUser);
778  mpDialog->showDialog();
779 }
780 
781 void KIconButton::KIconButtonPrivate::_k_newIconName(const QString& name)
782 {
783  if (name.isEmpty())
784  return;
785 
786  q->setIcon(KIcon(name));
787  mIcon = name;
788 
789  if (mbUser) {
790  mpDialog->setCustomLocation(QFileInfo(mpLoader->iconPath(mIcon, mGroup, true)).absolutePath());
791  }
792 
793  emit q->iconChanged(name);
794 }
795 
796 #include "kleo_kicondialog.moc"
Kleo::KioAvoidance::KIconDialog::iconSize
int iconSize() const
Returns the iconsize set via setIconSize() or 0, if the default iconsize will be used.
Definition: kleo_kicondialog.cpp:482
Kleo::KioAvoidance::KIconButton::icon
const QString & icon() const
Returns the name of the selected icon.
Action
Action
Definition: deletecertificatescommand.cpp:150
Kleo::KioAvoidance::KIconButton::setIcon
void setIcon(const QString &icon)
Sets the button's initial icon.
Definition: kleo_kicondialog.cpp:738
Kleo::KioAvoidance::KIconButton::iconSize
int iconSize() const
Returns the iconsize set via setIconSize() or 0, if the default iconsize will be used.
Kleo::FileDialog::getOpenFileName
QString getOpenFileName(QWidget *parent=0, const QString &caption=QString(), const QString &dirID=QString(), const QString &filter=QString())
Definition: filedialog.cpp:105
QWidget
Kleo::KioAvoidance::KIconCanvas::stopLoading
void stopLoading()
Call this slot to stop the loading of the icons.
Definition: kleo_kicondialog.cpp:201
Kleo::KioAvoidance::KIconCanvas
Icon canvas for KIconDialog.
Definition: kleo_kicondialog.h:31
Kleo::KioAvoidance::KIconDialog::newIconName
void newIconName(const QString &)
kleo_kicondialog.h
Kleo::KioAvoidance::KIconButton::setIconSize
void setIconSize(int size)
Sets the size of the icon to be shown / selected.
Definition: kleo_kicondialog.cpp:720
KDialog
Kleo::KioAvoidance::KIconDialog::~KIconDialog
~KIconDialog()
Destructs the dialog.
Definition: kleo_kicondialog.cpp:419
Kleo::KioAvoidance::KIconButton::KIconButton
KIconButton(QWidget *parent=0L)
Constructs a KIconButton using the global iconloader.
Definition: kleo_kicondialog.cpp:673
Kleo::KioAvoidance::KIconDialog::strictIconSize
bool strictIconSize() const
Returns true if a strict icon size policy is set.
Definition: kleo_kicondialog.cpp:467
d
#define d
Definition: adduseridcommand.cpp:90
Kleo::KioAvoidance::KIconButton::setIconType
void setIconType(KIconLoader::Group group, KIconLoader::Context context, bool user=false)
Sets the icon group and context.
Definition: kleo_kicondialog.cpp:731
Kleo::KioAvoidance::KIconCanvas::KIconCanvas
KIconCanvas(QWidget *parent=0L)
Creates a new icon canvas.
Definition: kleo_kicondialog.cpp:84
Kleo::KioAvoidance::KIconButton::~KIconButton
~KIconButton()
Destructs the button.
Definition: kleo_kicondialog.cpp:705
Kleo::KioAvoidance::KIconButton::strictIconSize
bool strictIconSize() const
Returns true if a strict icon size policy is set.
Kleo::KioAvoidance::KIconCanvas::~KIconCanvas
~KIconCanvas()
Destroys the icon canvas.
Definition: kleo_kicondialog.cpp:98
Kleo::KioAvoidance::KIconButton
A pushbutton for choosing an icon.
Definition: kleo_kicondialog.h:246
Kleo::KioAvoidance::KIconCanvas::getCurrent
QString getCurrent() const
Returns the current icon.
Definition: kleo_kicondialog.cpp:194
Kleo::KioAvoidance::KIconDialog::getIcon
static QString getIcon(KIconLoader::Group group=KIconLoader::Desktop, KIconLoader::Context context=KIconLoader::Application, bool strictIconSize=false, int iconSize=0, bool user=false, QWidget *parent=0, const QString &caption=QString())
Pops up the dialog an lets the user select an icon.
Definition: kleo_kicondialog.cpp:570
Kleo::KioAvoidance::KIconDialog::slotOk
void slotOk()
Definition: kleo_kicondialog.cpp:550
Kleo::KioAvoidance::KIconDialog
Dialog for interactive selection of icons.
Definition: kleo_kicondialog.h:108
KMime::Types::operator==
static bool operator==(const AddrSpec &lhs, const AddrSpec &rhs)
Definition: recipient.cpp:55
Kleo::KioAvoidance::KIconDialog::showDialog
void showDialog()
show()es this dialog and emits a newIcon(const QString&) signal when successful.
Definition: kleo_kicondialog.cpp:543
Kleo::KioAvoidance::KIconDialog::setStrictIconSize
void setStrictIconSize(bool b)
Sets a strict icon size policy for allowed icons.
Definition: kleo_kicondialog.cpp:462
Ok
Definition: setinitialpindialog.cpp:59
Kleo::KioAvoidance::KIconDialog::openDialog
QString openDialog()
exec()utes this modal dialog and returns the name of the selected icon, or QString() if the dialog wa...
Definition: kleo_kicondialog.cpp:525
q
#define q
Definition: adduseridcommand.cpp:91
Kleo::KioAvoidance::KIconDialog::setCustomLocation
void setCustomLocation(const QString &location)
sets a custom icon directory
Definition: kleo_kicondialog.cpp:520
name
const char * name
Definition: uiserver/selectcertificatecommand.cpp:114
main
int main(int argc, char **argv)
Definition: kgpgconf/main.cpp:37
Kleo::KioAvoidance::KIconDialog::setIconSize
void setIconSize(int size)
Sets the size of the icons to be shown / selected.
Definition: kleo_kicondialog.cpp:472
Kleo::KioAvoidance::KIconDialog::setup
void setup(KIconLoader::Group group, KIconLoader::Context context=KIconLoader::Application, bool strictIconSize=false, int iconSize=0, bool user=false, bool lockUser=false, bool lockCustomDir=false)
Allows you to set the same parameters as in the class method getIcon(), as well as two additional par...
Definition: kleo_kicondialog.cpp:488
Kleo::KioAvoidance::KIconButton::setStrictIconSize
void setStrictIconSize(bool b)
Sets a strict icon size policy for allowed icons.
Definition: kleo_kicondialog.cpp:710
Kleo::KioAvoidance::KIconDialog::KIconDialog
KIconDialog(QWidget *parent=0L)
Constructs an icon selection dialog using the global iconloader.
Definition: kleo_kicondialog.cpp:269
KListWidget
Kleo::KioAvoidance::KIconCanvas::loadFiles
void loadFiles(const QStringList &files)
Load icons into the canvas.
Definition: kleo_kicondialog.cpp:104
Kleo::KioAvoidance::KIconButton::resetIcon
void resetIcon()
Resets the icon (reverts to an empty button).
Definition: kleo_kicondialog.cpp:758
QList
Definition: commands/command.h:46
Kleo::KioAvoidance::KIconCanvas::startLoading
void startLoading(int count)
This signal is emitted when the loading of the icons has started.
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:56:41 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

kleopatra

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