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

kleopatra

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