00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "kicondialog.h"
00015
00016 #include <config.h>
00017
00018 #include <assert.h>
00019
00020 #include <kiconviewsearchline.h>
00021
00022 #include <tdeapplication.h>
00023 #include <tdelocale.h>
00024 #include <tdeglobal.h>
00025 #include <kstandarddirs.h>
00026 #include <kiconloader.h>
00027 #include <kprogress.h>
00028 #include <kiconview.h>
00029 #include <tdefiledialog.h>
00030 #include <kimagefilepreview.h>
00031
00032 #include <tqlayout.h>
00033 #include <tqstring.h>
00034 #include <tqstringlist.h>
00035 #include <tqsortedlist.h>
00036 #include <tqimage.h>
00037 #include <tqpixmap.h>
00038 #include <tqlabel.h>
00039 #include <tqcombobox.h>
00040 #include <tqtimer.h>
00041 #include <tqbuttongroup.h>
00042 #include <tqradiobutton.h>
00043 #include <tqfileinfo.h>
00044 #include <tqtoolbutton.h>
00045 #include <tqwhatsthis.h>
00046
00047 #ifdef HAVE_LIBART
00048 #include <svgicons/ksvgiconengine.h>
00049 #include <svgicons/ksvgiconpainter.h>
00050 #endif
00051
00052 class TDEIconCanvas::TDEIconCanvasPrivate
00053 {
00054 public:
00055 TDEIconCanvasPrivate() { m_bLoading = false; }
00056 ~TDEIconCanvasPrivate() {}
00057 bool m_bLoading;
00058 };
00059
00063 class IconPath : public TQString
00064 {
00065 protected:
00066 TQString m_iconName;
00067
00068 public:
00069 IconPath(const TQString &ip) : TQString (ip)
00070 {
00071 int n = findRev('/');
00072 m_iconName = (n==-1) ? static_cast<TQString>(*this) : mid(n+1);
00073 }
00074
00075
00076 IconPath() : TQString ()
00077 { }
00078
00079 bool operator== (const IconPath &ip) const
00080 { return m_iconName == ip.m_iconName; }
00081
00082 bool operator< (const IconPath &ip) const
00083 { return m_iconName < ip.m_iconName; }
00084
00085 };
00086
00087
00088
00089
00090
00091 TDEIconCanvas::TDEIconCanvas(TQWidget *parent, const char *name)
00092 : TDEIconView(parent, name)
00093 {
00094 d = new TDEIconCanvasPrivate;
00095 mpTimer = new TQTimer(this);
00096 connect(mpTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotLoadFiles()));
00097 connect(this, TQT_SIGNAL(currentChanged(TQIconViewItem *)),
00098 TQT_SLOT(slotCurrentChanged(TQIconViewItem *)));
00099 setGridX(80);
00100 setWordWrapIconText(false);
00101 setShowToolTips(true);
00102 }
00103
00104 TDEIconCanvas::~TDEIconCanvas()
00105 {
00106 delete mpTimer;
00107 delete d;
00108 }
00109
00110 void TDEIconCanvas::loadFiles(const TQStringList& files)
00111 {
00112 clear();
00113 mFiles = files;
00114 emit startLoading(mFiles.count());
00115 mpTimer->start(10, true);
00116 d->m_bLoading = false;
00117 }
00118
00119 void TDEIconCanvas::slotLoadFiles()
00120 {
00121 setResizeMode(Fixed);
00122 TQApplication::setOverrideCursor(tqwaitCursor);
00123
00124
00125 setUpdatesEnabled( false );
00126
00127 #ifdef HAVE_LIBART
00128 KSVGIconEngine *svgEngine = new KSVGIconEngine();
00129 #endif
00130
00131 d->m_bLoading = true;
00132 int i;
00133 TQStringList::ConstIterator it;
00134 uint emitProgress = 10;
00135 TQStringList::ConstIterator end(mFiles.end());
00136 for (it=mFiles.begin(), i=0; it!=end; ++it, i++)
00137 {
00138
00139
00140
00141
00142
00143 if ( emitProgress >= 10 ) {
00144 emit progress(i);
00145 emitProgress = 0;
00146 }
00147
00148 emitProgress++;
00149
00150 if ( !d->m_bLoading )
00151 break;
00152 TQImage img;
00153
00154
00155 TQString path= *it;
00156 TQString ext = path.right(3).upper();
00157
00158 if (ext != "SVG" && ext != "VGZ")
00159 img.load(*it);
00160 #ifdef HAVE_LIBART
00161 else
00162 if (svgEngine->load(60, 60, *it))
00163 img = *svgEngine->painter()->image();
00164 #endif
00165
00166 if (img.isNull())
00167 continue;
00168 if (img.width() > 60 || img.height() > 60)
00169 {
00170 if (img.width() > img.height())
00171 {
00172 int height = (int) ((60.0 / img.width()) * img.height());
00173 img = img.smoothScale(60, height);
00174 } else
00175 {
00176 int width = (int) ((60.0 / img.height()) * img.width());
00177 img = img.smoothScale(width, 60);
00178 }
00179 }
00180 TQPixmap pm;
00181 pm.convertFromImage(img);
00182 TQFileInfo fi(*it);
00183 TQIconViewItem *item = new TQIconViewItem(this, fi.baseName(), pm);
00184 item->setKey(*it);
00185 item->setDragEnabled(false);
00186 item->setDropEnabled(false);
00187 }
00188
00189 #ifdef HAVE_LIBART
00190 delete svgEngine;
00191 #endif
00192
00193
00194 setUpdatesEnabled( true );
00195
00196 TQApplication::restoreOverrideCursor();
00197 d->m_bLoading = false;
00198 emit finished();
00199 setResizeMode(Adjust);
00200 }
00201
00202 TQString TDEIconCanvas::getCurrent() const
00203 {
00204 if (!currentItem())
00205 return TQString::null;
00206 return currentItem()->key();
00207 }
00208
00209 void TDEIconCanvas::stopLoading()
00210 {
00211 d->m_bLoading = false;
00212 }
00213
00214 void TDEIconCanvas::slotCurrentChanged(TQIconViewItem *item)
00215 {
00216 emit nameChanged((item != 0L) ? item->text() : TQString::null);
00217 }
00218
00219 class TDEIconDialog::TDEIconDialogPrivate
00220 {
00221 public:
00222 TDEIconDialogPrivate() {
00223 m_bStrictIconSize = true;
00224 m_bLockUser = false;
00225 m_bLockCustomDir = false;
00226 searchLine = 0;
00227 }
00228 ~TDEIconDialogPrivate() {}
00229 bool m_bStrictIconSize, m_bLockUser, m_bLockCustomDir;
00230 TQString custom;
00231 TQString customLocation;
00232 TDEIconViewSearchLine *searchLine;
00233 };
00234
00235
00236
00237
00238
00239
00240 TDEIconDialog::TDEIconDialog(TQWidget *parent, const char *name)
00241 : KDialogBase(parent, name, true, i18n("Select Icon"), Ok|Cancel, Ok)
00242 {
00243 d = new TDEIconDialogPrivate;
00244 mpLoader = TDEGlobal::iconLoader();
00245 init();
00246 }
00247
00248 TDEIconDialog::TDEIconDialog(TDEIconLoader *loader, TQWidget *parent,
00249 const char *name)
00250 : KDialogBase(parent, name, true, i18n("Select Icon"), Ok|Cancel, Ok)
00251 {
00252 d = new TDEIconDialogPrivate;
00253 mpLoader = loader;
00254 init();
00255 }
00256
00257 void TDEIconDialog::init()
00258 {
00259 mGroupOrSize = TDEIcon::Desktop;
00260 mContext = TDEIcon::Any;
00261 mType = 0;
00262 mFileList = TDEGlobal::dirs()->findAllResources("appicon", TQString::fromLatin1("*.png"));
00263
00264 TQWidget *main = new TQWidget( this );
00265 setMainWidget(main);
00266
00267 TQVBoxLayout *top = new TQVBoxLayout(main);
00268 top->setSpacing( spacingHint() );
00269
00270 TQButtonGroup *bgroup = new TQButtonGroup(0, Qt::Vertical, i18n("Icon Source"), main);
00271 bgroup->layout()->setSpacing(KDialog::spacingHint());
00272 bgroup->layout()->setMargin(KDialog::marginHint());
00273 top->addWidget(bgroup);
00274 connect(bgroup, TQT_SIGNAL(clicked(int)), TQT_SLOT(slotButtonClicked(int)));
00275 TQGridLayout *grid = new TQGridLayout(bgroup->layout(), 3, 2);
00276 mpRb1 = new TQRadioButton(i18n("S&ystem icons:"), bgroup);
00277 grid->addWidget(mpRb1, 1, 0);
00278 mpCombo = new TQComboBox(bgroup);
00279 connect(mpCombo, TQT_SIGNAL(activated(int)), TQT_SLOT(slotContext(int)));
00280 grid->addWidget(mpCombo, 1, 1);
00281 mpRb2 = new TQRadioButton(i18n("O&ther icons:"), bgroup);
00282 grid->addWidget(mpRb2, 2, 0);
00283 mpBrowseBut = new TQPushButton(i18n("&Browse..."), bgroup);
00284 grid->addWidget(mpBrowseBut, 2, 1);
00285
00286
00287
00288
00289 TQHBoxLayout *searchLayout = new TQHBoxLayout(0, 0, KDialog::spacingHint());
00290 top->addLayout(searchLayout);
00291
00292 TQToolButton *clearSearch = new TQToolButton(main);
00293 clearSearch->setTextLabel(i18n("Clear Search"), true);
00294 clearSearch->setIconSet(SmallIconSet(TQApplication::reverseLayout() ? "clear_left" :"locationbar_erase"));
00295 searchLayout->addWidget(clearSearch);
00296
00297 TQLabel *searchLabel = new TQLabel(i18n("&Search:"), main);
00298 searchLayout->addWidget(searchLabel);
00299
00300 d->searchLine = new TDEIconViewSearchLine(main, "searchLine");
00301 searchLayout->addWidget(d->searchLine);
00302 searchLabel->setBuddy(d->searchLine);
00303
00304
00305
00306 connect(clearSearch, TQT_SIGNAL(clicked()), d->searchLine, TQT_SLOT(clear()));
00307
00308 TQString wtstr = i18n("Search interactively for icon names (e.g. folder).");
00309 TQWhatsThis::add(searchLabel, wtstr);
00310 TQWhatsThis::add(d->searchLine, wtstr);
00311
00312
00313 mpCanvas = new TDEIconCanvas(main);
00314 connect(mpCanvas, TQT_SIGNAL(executed(TQIconViewItem *)), TQT_SLOT(slotAcceptIcons()));
00315 connect(mpCanvas, TQT_SIGNAL(returnPressed(TQIconViewItem *)), TQT_SLOT(slotAcceptIcons()));
00316 mpCanvas->setMinimumSize(400, 125);
00317 top->addWidget(mpCanvas);
00318 d->searchLine->setIconView(mpCanvas);
00319
00320 mpProgress = new KProgress(main);
00321 top->addWidget(mpProgress);
00322 connect(mpCanvas, TQT_SIGNAL(startLoading(int)), TQT_SLOT(slotStartLoading(int)));
00323 connect(mpCanvas, TQT_SIGNAL(progress(int)), TQT_SLOT(slotProgress(int)));
00324 connect(mpCanvas, TQT_SIGNAL(finished()), TQT_SLOT(slotFinished()));
00325
00326
00327 connect(this, TQT_SIGNAL(hidden()), mpCanvas, TQT_SLOT(stopLoading()));
00328
00329 static const char* const context_text[] = {
00330 I18N_NOOP( "Actions" ),
00331 I18N_NOOP( "Animations" ),
00332 I18N_NOOP( "Applications" ),
00333 I18N_NOOP( "Categories" ),
00334 I18N_NOOP( "Devices" ),
00335 I18N_NOOP( "Emblems" ),
00336 I18N_NOOP( "Emotes" ),
00337 I18N_NOOP( "Filesystems" ),
00338 I18N_NOOP( "International" ),
00339 I18N_NOOP( "Mimetypes" ),
00340 I18N_NOOP( "Places" ),
00341 I18N_NOOP( "Status" ) };
00342 static const TDEIcon::Context context_id[] = {
00343 TDEIcon::Action,
00344 TDEIcon::Animation,
00345 TDEIcon::Application,
00346 TDEIcon::Category,
00347 TDEIcon::Device,
00348 TDEIcon::Emblem,
00349 TDEIcon::Emote,
00350 TDEIcon::FileSystem,
00351 TDEIcon::International,
00352 TDEIcon::MimeType,
00353 TDEIcon::Place,
00354 TDEIcon::StatusIcon };
00355 mNumContext = 0;
00356 int cnt = sizeof( context_text ) / sizeof( context_text[ 0 ] );
00357
00358 assert( cnt == sizeof( context_id ) / sizeof( context_id[ 0 ] )
00359 && cnt == sizeof( mContextMap ) / sizeof( mContextMap[ 0 ] ));
00360 for( int i = 0;
00361 i < cnt;
00362 ++i )
00363 {
00364 if( mpLoader->hasContext( context_id[ i ] ))
00365 {
00366 mpCombo->insertItem(i18n( context_text[ i ] ));
00367 mContextMap[ mNumContext++ ] = context_id[ i ];
00368 }
00369 }
00370 mpCombo->setFixedSize(mpCombo->sizeHint());
00371
00372 mpBrowseBut->setFixedWidth(mpCombo->width());
00373
00374
00375 incInitialSize(TQSize(0,100));
00376 }
00377
00378
00379 TDEIconDialog::~TDEIconDialog()
00380 {
00381 delete d;
00382 }
00383
00384 void TDEIconDialog::slotAcceptIcons()
00385 {
00386 d->custom=TQString::null;
00387 slotOk();
00388 }
00389
00390 void TDEIconDialog::showIcons()
00391 {
00392 mpCanvas->clear();
00393 TQStringList filelist;
00394 if (mType == 0)
00395 if (d->m_bStrictIconSize)
00396 filelist=mpLoader->queryIcons(mGroupOrSize, mContext);
00397 else
00398 filelist=mpLoader->queryIconsByContext(mGroupOrSize, mContext);
00399 else if ( !d->customLocation.isNull() )
00400 filelist=mpLoader->queryIconsByDir( d->customLocation );
00401 else
00402 filelist=mFileList;
00403
00404 TQSortedList <IconPath>iconlist;
00405 iconlist.setAutoDelete(true);
00406 TQStringList::Iterator it;
00407 for( it = filelist.begin(); it != filelist.end(); ++it )
00408 iconlist.append(new IconPath(*it));
00409
00410 iconlist.sort();
00411 filelist.clear();
00412
00413 for ( IconPath *ip=iconlist.first(); ip != 0; ip=iconlist.next() )
00414 filelist.append(*ip);
00415
00416 d->searchLine->clear();
00417 mpCanvas->loadFiles(filelist);
00418 }
00419
00420 void TDEIconDialog::setStrictIconSize(bool b)
00421 {
00422 d->m_bStrictIconSize=b;
00423 }
00424
00425 bool TDEIconDialog::strictIconSize() const
00426 {
00427 return d->m_bStrictIconSize;
00428 }
00429
00430 void TDEIconDialog::setIconSize( int size )
00431 {
00432
00433 if ( size == 0 )
00434 mGroupOrSize = TDEIcon::Desktop;
00435 else
00436 mGroupOrSize = -size;
00437 }
00438
00439 int TDEIconDialog::iconSize() const
00440 {
00441
00442 return (mGroupOrSize < 0) ? -mGroupOrSize : 0;
00443 }
00444
00445 #ifndef KDE_NO_COMPAT
00446 TQString TDEIconDialog::selectIcon(TDEIcon::Group group, TDEIcon::Context context, bool user)
00447 {
00448 setup( group, context, false, 0, user );
00449 return openDialog();
00450 }
00451 #endif
00452
00453 void TDEIconDialog::setup(TDEIcon::Group group, TDEIcon::Context context,
00454 bool strictIconSize, int iconSize, bool user )
00455 {
00456 d->m_bStrictIconSize = strictIconSize;
00457 mGroupOrSize = (iconSize == 0) ? group : -iconSize;
00458 mType = user ? 1 : 0;
00459 mpRb1->setChecked(!user);
00460 mpRb2->setChecked(user);
00461 mpCombo->setEnabled(!user);
00462 mpBrowseBut->setEnabled(user);
00463 setContext( context );
00464 }
00465
00466 void TDEIconDialog::setup(TDEIcon::Group group, TDEIcon::Context context,
00467 bool strictIconSize, int iconSize, bool user,
00468 bool lockUser, bool lockCustomDir )
00469 {
00470 d->m_bStrictIconSize = strictIconSize;
00471 d->m_bLockUser = lockUser;
00472 d->m_bLockCustomDir = lockCustomDir;
00473 mGroupOrSize = (iconSize == 0) ? group : -iconSize;
00474 mType = user ? 1 : 0;
00475 mpRb1->setChecked(!user);
00476 mpRb1->setEnabled( !lockUser || !user );
00477 mpRb2->setChecked(user);
00478 mpRb2->setEnabled( !lockUser || user );
00479 mpCombo->setEnabled(!user);
00480 mpBrowseBut->setEnabled( user && !lockCustomDir );
00481 setContext( context );
00482 }
00483
00484 void TDEIconDialog::setContext( TDEIcon::Context context )
00485 {
00486 mContext = context;
00487 for( int i = 0;
00488 i < mNumContext;
00489 ++i )
00490 if( mContextMap[ i ] == context )
00491 {
00492 mpCombo->setCurrentItem( i );
00493 return;
00494 }
00495 }
00496
00497 void TDEIconDialog::setCustomLocation( const TQString& location )
00498 {
00499 d->customLocation = location;
00500 }
00501
00502 TQString TDEIconDialog::openDialog()
00503 {
00504 showIcons();
00505
00506 if ( exec() == Accepted )
00507 {
00508 if (!d->custom.isNull())
00509 return d->custom;
00510 TQString name = mpCanvas->getCurrent();
00511 if (name.isEmpty() || (mType == 1))
00512 return name;
00513 TQFileInfo fi(name);
00514 return fi.baseName();
00515 }
00516 return TQString::null;
00517 }
00518
00519 void TDEIconDialog::showDialog()
00520 {
00521 setModal(false);
00522 showIcons();
00523 show();
00524 }
00525
00526 void TDEIconDialog::slotOk()
00527 {
00528 TQString name;
00529 if (!d->custom.isNull())
00530 {
00531 name = d->custom;
00532 }
00533 else
00534 {
00535 name = mpCanvas->getCurrent();
00536 if (!name.isEmpty() && (mType != 1))
00537 {
00538 TQFileInfo fi(name);
00539 name = fi.baseName();
00540 }
00541 }
00542
00543 emit newIconName(name);
00544 KDialogBase::slotOk();
00545 }
00546
00547 TQString TDEIconDialog::getIcon(TDEIcon::Group group, TDEIcon::Context context,
00548 bool strictIconSize, int iconSize, bool user,
00549 TQWidget *parent, const TQString &caption)
00550 {
00551 TDEIconDialog dlg(parent, "icon dialog");
00552 dlg.setup( group, context, strictIconSize, iconSize, user );
00553 if (!caption.isNull())
00554 dlg.setCaption(caption);
00555
00556 return dlg.openDialog();
00557 }
00558
00559 void TDEIconDialog::slotButtonClicked(int id)
00560 {
00561 TQString file;
00562
00563 switch (id)
00564 {
00565 case 0:
00566 if(mType!=0)
00567 {
00568 mType = 0;
00569 mpBrowseBut->setEnabled(false);
00570 mpCombo->setEnabled(true);
00571 showIcons();
00572 }
00573 break;
00574
00575 case 1:
00576 if(mType!=1)
00577 {
00578 mType = 1;
00579 mpBrowseBut->setEnabled( !d->m_bLockCustomDir );
00580 mpCombo->setEnabled(false);
00581 showIcons();
00582 }
00583 break;
00584 case 2:
00585 {
00586
00587
00588
00589 KFileDialog dlg(TQString::null, i18n("*.png *.xpm *.svg *.svgz|Icon Files (*.png *.xpm *.svg *.svgz)"),
00590 this, "filedialog", true);
00591 dlg.setOperationMode( KFileDialog::Opening );
00592 dlg.setCaption( i18n("Open") );
00593 dlg.setMode( KFile::File );
00594
00595 KImageFilePreview *ip = new KImageFilePreview( &dlg );
00596 dlg.setPreviewWidget( ip );
00597 dlg.exec();
00598
00599 file = dlg.selectedFile();
00600 if (!file.isEmpty())
00601 {
00602 d->custom = file;
00603 if ( mType == 1 )
00604 d->customLocation = TQFileInfo( file ).dirPath( true );
00605 slotOk();
00606 }
00607 }
00608 break;
00609 }
00610 }
00611
00612 void TDEIconDialog::slotContext(int id)
00613 {
00614 mContext = static_cast<TDEIcon::Context>( mContextMap[ id ] );
00615 showIcons();
00616 }
00617
00618 void TDEIconDialog::slotStartLoading(int steps)
00619 {
00620 if (steps < 10)
00621 mpProgress->hide();
00622 else
00623 {
00624 mpProgress->setTotalSteps(steps);
00625 mpProgress->setProgress(0);
00626 mpProgress->show();
00627 }
00628 }
00629
00630 void TDEIconDialog::slotProgress(int p)
00631 {
00632 mpProgress->setProgress(p);
00633
00634
00635
00636 }
00637
00638 void TDEIconDialog::slotFinished()
00639 {
00640 mpProgress->hide();
00641 }
00642
00643 class TDEIconButton::TDEIconButtonPrivate
00644 {
00645 public:
00646 TDEIconButtonPrivate() {
00647 m_bStrictIconSize = false;
00648 iconSize = 0;
00649 }
00650 ~TDEIconButtonPrivate() {}
00651 bool m_bStrictIconSize;
00652 int iconSize;
00653 };
00654
00655
00656
00657
00658
00659
00660 TDEIconButton::TDEIconButton(TQWidget *parent, const char *name)
00661 : TQPushButton(parent, name)
00662 {
00663 init( TDEGlobal::iconLoader() );
00664 }
00665
00666 TDEIconButton::TDEIconButton(TDEIconLoader *loader,
00667 TQWidget *parent, const char *name)
00668 : TQPushButton(parent, name)
00669 {
00670 init( loader );
00671 }
00672
00673 void TDEIconButton::init( TDEIconLoader *loader )
00674 {
00675 d = new TDEIconButtonPrivate;
00676 mGroup = TDEIcon::Desktop;
00677 mContext = TDEIcon::Application;
00678 mbUser = false;
00679
00680 mpLoader = loader;
00681 mpDialog = 0L;
00682 connect(this, TQT_SIGNAL(clicked()), TQT_SLOT(slotChangeIcon()));
00683 }
00684
00685 TDEIconButton::~TDEIconButton()
00686 {
00687 delete mpDialog;
00688 delete d;
00689 }
00690
00691 void TDEIconButton::setStrictIconSize(bool b)
00692 {
00693 d->m_bStrictIconSize=b;
00694 }
00695
00696 bool TDEIconButton::strictIconSize() const
00697 {
00698 return d->m_bStrictIconSize;
00699 }
00700
00701 void TDEIconButton::setIconSize( int size )
00702 {
00703 d->iconSize = size;
00704 }
00705
00706 int TDEIconButton::iconSize() const
00707 {
00708 return d->iconSize;
00709 }
00710
00711 void TDEIconButton::setIconType(TDEIcon::Group group, TDEIcon::Context context, bool user)
00712 {
00713 mGroup = group;
00714 mContext = context;
00715 mbUser = user;
00716 }
00717
00718 void TDEIconButton::setIcon(const TQString& icon)
00719 {
00720 mIcon = icon;
00721 setIconSet(mpLoader->loadIconSet(mIcon, mGroup, d->iconSize));
00722
00723 if (!mpDialog)
00724 {
00725 mpDialog = new TDEIconDialog(mpLoader, this);
00726 connect(mpDialog, TQT_SIGNAL(newIconName(const TQString&)), TQT_SLOT(newIconName(const TQString&)));
00727 }
00728
00729 if ( mbUser )
00730 mpDialog->setCustomLocation( TQFileInfo( mpLoader->iconPath(mIcon, mGroup, true) ).dirPath( true ) );
00731 }
00732
00733 void TDEIconButton::resetIcon()
00734 {
00735 mIcon = TQString::null;
00736 setIconSet(TQIconSet());
00737 }
00738
00739 void TDEIconButton::slotChangeIcon()
00740 {
00741 if (!mpDialog)
00742 {
00743 mpDialog = new TDEIconDialog(mpLoader, this);
00744 connect(mpDialog, TQT_SIGNAL(newIconName(const TQString&)), TQT_SLOT(newIconName(const TQString&)));
00745 }
00746
00747 mpDialog->setup( mGroup, mContext, d->m_bStrictIconSize, d->iconSize, mbUser );
00748 mpDialog->showDialog();
00749 }
00750
00751 void TDEIconButton::newIconName(const TQString& name)
00752 {
00753 if (name.isEmpty())
00754 return;
00755
00756 TQIconSet iconset = mpLoader->loadIconSet(name, mGroup, d->iconSize);
00757 setIconSet(iconset);
00758 mIcon = name;
00759
00760 if ( mbUser )
00761 mpDialog->setCustomLocation( TQFileInfo( mpLoader->iconPath(mIcon, mGroup, true) ).dirPath( true ) );
00762
00763 emit iconChanged(name);
00764 }
00765
00766 void TDEIconCanvas::virtual_hook( int id, void* data )
00767 { TDEIconView::virtual_hook( id, data ); }
00768
00769 void TDEIconDialog::virtual_hook( int id, void* data )
00770 { KDialogBase::virtual_hook( id, data ); }
00771
00772 #include "kicondialog.moc"