• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • libkonq
 

libkonq

konq_dirpart.cc
00001 /* This file is part of the KDE projects
00002    Copyright (C) 2000 David Faure <faure@kde.org>
00003 
00004    This program is free software; you can redistribute it and/or
00005    modify it under the terms of the GNU General Public
00006    License as published by the Free Software Foundation; either
00007    version 2 of the License, or (at your option) any later version.
00008 
00009    This program is distributed in the hope that it will be useful,
00010    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     General Public License for more details.
00013 
00014    You should have received a copy of the GNU General Public License
00015    along with this program; see the file COPYING.  If not, write to
00016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017    Boston, MA 02110-1301, USA.
00018 */
00019 
00020 #include "konq_dirpart.h"
00021 #include "konq_bgnddlg.h"
00022 #include "konq_propsview.h"
00023 #include "konq_settings.h"
00024 
00025 #include <tdeio/paste.h>
00026 #include <tdeapplication.h>
00027 #include <tdeaction.h>
00028 #include <kdatastream.h>
00029 #include <kdebug.h>
00030 #include <kdirlister.h>
00031 #include <kiconloader.h>
00032 #include <tdelocale.h>
00033 #include <tdemessagebox.h>
00034 #include <konq_drag.h>
00035 #include <tdeparts/browserextension.h>
00036 #include <kurldrag.h>
00037 #include <kuserprofile.h>
00038 #include <kurifilter.h>
00039 #include <tdeglobalsettings.h>
00040 
00041 #include <tqapplication.h>
00042 #include <tqclipboard.h>
00043 #include <tqfile.h>
00044 #include <tqguardedptr.h>
00045 #include <assert.h>
00046 #include <tqvaluevector.h>
00047 
00048 class KonqDirPart::KonqDirPartPrivate
00049 {
00050 public:
00051     KonqDirPartPrivate() : dirLister( 0 ) {}
00052     TQStringList mimeFilters;
00053     TDEToggleAction *aEnormousIcons;
00054     TDEToggleAction *aSmallMediumIcons;
00055     TQValueVector<int> iconSize;
00056             
00057     KDirLister* dirLister;
00058     bool dirSizeDirty;
00059 
00060     void findAvailableIconSizes(void);
00061     int findNearestIconSize(int size);
00062     int nearestIconSizeError(int size);
00063 };
00064 
00065 void KonqDirPart::KonqDirPartPrivate::findAvailableIconSizes(void)
00066 {
00067     TDEIconTheme *root = TDEGlobal::instance()->iconLoader()->theme();
00068     iconSize.resize(1);
00069     if (root) {
00070     TQValueList<int> avSizes = root->querySizes(TDEIcon::Desktop);
00071         kdDebug(1203) << "The icon theme handles the sizes:" << avSizes << endl;
00072     qHeapSort(avSizes);
00073     int oldSize = -1;
00074     if (avSizes.count() < 10) {
00075         // Fixed or threshold type icons
00076         TQValueListConstIterator<int> i;
00077         for (i = avSizes.begin(); i != avSizes.end(); i++) {
00078         // Skip duplicated values (sanity check)
00079         if (*i != oldSize) iconSize.append(*i);
00080         oldSize = *i;
00081         }
00082     } else {
00083         // Scalable icons.
00084         const int progression[] = {16, 22, 32, 48, 64, 96, 128, 192, 256};
00085 
00086         TQValueListConstIterator<int> j = avSizes.begin();
00087         for (uint i = 0; i < 9; i++) {
00088         while (j++ != avSizes.end()) {
00089             if (*j >= progression[i]) {
00090             iconSize.append(*j);
00091             kdDebug(1203) << "appending " << *j << " size." << endl;
00092             break;
00093             }
00094         }
00095         }
00096     }
00097     } else {
00098     iconSize.append(TDEIcon::SizeSmall); // 16
00099     iconSize.append(TDEIcon::SizeMedium); // 32
00100     iconSize.append(TDEIcon::SizeLarge); // 48
00101     iconSize.append(TDEIcon::SizeHuge); // 64
00102     }
00103     kdDebug(1203) << "Using " << iconSize.count() << " icon sizes." << endl;
00104 }
00105 
00106 int KonqDirPart::KonqDirPartPrivate::findNearestIconSize(int preferred)
00107 {
00108     int s1 = iconSize[1];
00109     if (preferred == 0) return TDEGlobal::iconLoader()->currentSize(TDEIcon::Desktop);
00110     if (preferred <= s1) return s1;
00111     for (uint i = 2; i <= iconSize.count(); i++) {
00112         if (preferred <= iconSize[i]) {
00113         if (preferred - s1 <  iconSize[i] - preferred) return s1;
00114         else return iconSize[i];
00115     } else {
00116         s1 = iconSize[i];
00117     }
00118     }
00119     return s1;
00120 }
00121 
00122 int KonqDirPart::KonqDirPartPrivate::nearestIconSizeError(int size)
00123 {
00124     return QABS(size - findNearestIconSize(size));
00125 }
00126 
00127 KonqDirPart::KonqDirPart( TQObject *parent, const char *name )
00128             :KParts::ReadOnlyPart( parent, name ),
00129     m_pProps( 0L ),
00130     m_findPart( 0L )
00131 {
00132     d = new KonqDirPartPrivate;
00133     resetCount();
00134     //m_bMultipleItemsSelected = false;
00135 
00136     connect( TQApplication::clipboard(), TQT_SIGNAL(dataChanged()), this, TQT_SLOT(slotClipboardDataChanged()) );
00137 
00138     actionCollection()->setHighlightingEnabled( true );
00139 
00140     m_paIncIconSize = new TDEAction( i18n( "Enlarge Icons" ), "zoom-in", 0, this, TQT_SLOT( slotIncIconSize() ), actionCollection(), "incIconSize" );
00141     m_paDecIconSize = new TDEAction( i18n( "Shrink Icons" ), "zoom-out", 0, this, TQT_SLOT( slotDecIconSize() ), actionCollection(), "decIconSize" );
00142 
00143     m_paDefaultIcons = new TDERadioAction( i18n( "&Default Size" ), 0, actionCollection(), "modedefault" );
00144     d->aEnormousIcons = new TDERadioAction( i18n( "&Huge" ), 0,
00145         actionCollection(), "modeenormous" );
00146     m_paHugeIcons = new TDERadioAction( i18n( "&Very Large" ), 0, actionCollection(), "modehuge" );
00147     m_paLargeIcons = new TDERadioAction( i18n( "&Large" ), 0, actionCollection(), "modelarge" );
00148     m_paMediumIcons = new TDERadioAction( i18n( "&Medium" ), 0, actionCollection(), "modemedium" );
00149     d->aSmallMediumIcons = new TDERadioAction( i18n( "&Small" ), 0,
00150         actionCollection(), "modesmallmedium" );
00151     m_paSmallIcons = new TDERadioAction( i18n( "&Tiny" ), 0, actionCollection(), "modesmall" );
00152 
00153     m_paDefaultIcons->setExclusiveGroup( "ViewMode" );
00154     d->aEnormousIcons->setExclusiveGroup( "ViewMode" );
00155     m_paHugeIcons->setExclusiveGroup( "ViewMode" );
00156     m_paLargeIcons->setExclusiveGroup( "ViewMode" );
00157     m_paMediumIcons->setExclusiveGroup( "ViewMode" );
00158     d->aSmallMediumIcons->setExclusiveGroup( "ViewMode" );
00159     m_paSmallIcons->setExclusiveGroup( "ViewMode" );
00160 
00161     connect( m_paDefaultIcons, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotIconSizeToggled( bool ) ) );
00162     connect( d->aEnormousIcons, TQT_SIGNAL( toggled( bool ) ),
00163         this, TQT_SLOT( slotIconSizeToggled( bool ) ) );
00164     connect( m_paHugeIcons, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotIconSizeToggled( bool ) ) );
00165     connect( m_paLargeIcons, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotIconSizeToggled( bool ) ) );
00166     connect( m_paMediumIcons, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotIconSizeToggled( bool ) ) );
00167     connect( d->aSmallMediumIcons, TQT_SIGNAL( toggled( bool ) ),
00168         this, TQT_SLOT( slotIconSizeToggled( bool ) ) );
00169     connect( m_paSmallIcons, TQT_SIGNAL( toggled( bool ) ), this, TQT_SLOT( slotIconSizeToggled( bool ) ) );
00170 
00171     connect( kapp, TQT_SIGNAL(iconChanged(int)), TQT_SLOT(slotIconChanged(int)) );
00172 #if 0
00173     // Extract 6 icon sizes from the icon theme.
00174     // Use 16,22,32,48,64,128 as default.
00175     // Use these also if the icon theme is scalable.
00176     int i;
00177     d->iconSize[0] = 0; // Default value
00178     d->iconSize[1] = TDEIcon::SizeSmall; // 16
00179     d->iconSize[2] = TDEIcon::SizeSmallMedium; // 22
00180     d->iconSize[3] = TDEIcon::SizeMedium; // 32
00181     d->iconSize[4] = TDEIcon::SizeLarge; // 48
00182     d->iconSize[5] = TDEIcon::SizeHuge; // 64
00183     d->iconSize[6] = TDEIcon::SizeEnormous; // 128
00184     d->iconSize[7] = 192;
00185     d->iconSize[8] = 256;
00186     TDEIconTheme *root = TDEGlobal::instance()->iconLoader()->theme();
00187     if (root)
00188     {
00189       TQValueList<int> avSizes = root->querySizes(TDEIcon::Desktop);
00190       kdDebug(1203) << "the icon theme handles the following sizes:" << avSizes << endl;
00191       if (avSizes.count() < 10) {
00192     // Use the icon sizes supplied by the theme.
00193     // If avSizes contains more than 10 entries, assume a scalable
00194     // icon theme.
00195     TQValueList<int>::Iterator it;
00196     for (i=1, it=avSizes.begin(); (it!=avSizes.end()) && (i<7); it++, i++)
00197     {
00198       d->iconSize[i] = *it;
00199       kdDebug(1203) << "m_iIconSize[" << i << "] = " << *it << endl;
00200     }
00201     // Generate missing sizes
00202     for (; i < 7; i++) {
00203       d->iconSize[i] = d->iconSize[i - 1] + d->iconSize[i - 1] / 2 ;
00204       kdDebug(1203) << "m_iIconSize[" << i << "] = " << d->iconSize[i] << endl;
00205     }
00206       }
00207     }
00208 #else
00209     d->iconSize.reserve(10);
00210     d->iconSize.append(0); // Default value
00211     adjustIconSizes();
00212 #endif
00213 
00214     // Remove in KDE4 ...
00215     // These are here in the event subclasses access them.
00216     m_iIconSize[1] = TDEIcon::SizeSmall;
00217     m_iIconSize[2] = TDEIcon::SizeMedium;
00218     m_iIconSize[3] = TDEIcon::SizeLarge;
00219     m_iIconSize[4] = TDEIcon::SizeHuge;
00220     // ... up to here
00221 
00222     TDEAction *a = new TDEAction( i18n( "Configure Background..." ), "background", 0, this, TQT_SLOT( slotBackgroundSettings() ),
00223                               actionCollection(), "bgsettings" );
00224 
00225     a->setToolTip( i18n( "Allows choosing of background settings for this view" ) );
00226 }
00227 
00228 KonqDirPart::~KonqDirPart()
00229 {
00230     // Close the find part with us
00231     delete m_findPart;
00232     delete d;
00233     d = 0;
00234 }
00235 
00236 void KonqDirPart::adjustIconSizes()
00237 {
00238     d->findAvailableIconSizes();
00239     m_paSmallIcons->setEnabled(d->findNearestIconSize(16) < 20);
00240     d->aSmallMediumIcons->setEnabled(d->nearestIconSizeError(22) < 2);
00241     m_paMediumIcons->setEnabled(d->nearestIconSizeError(32) < 6);
00242     m_paLargeIcons->setEnabled(d->nearestIconSizeError(48) < 8);
00243     m_paHugeIcons->setEnabled(d->nearestIconSizeError(64) < 12);
00244     d->aEnormousIcons->setEnabled(d->findNearestIconSize(128) > 110);
00245 
00246     if (m_pProps) {
00247     int size = m_pProps->iconSize();
00248     int nearSize = d->findNearestIconSize(size);
00249 
00250     if (size != nearSize) {
00251         m_pProps->setIconSize(nearSize);
00252     }
00253     newIconSize(nearSize);
00254     }
00255 }
00256 
00257 void KonqDirPart::setMimeFilter (const TQStringList& mime)
00258 {
00259     TQString u = url().url();
00260 
00261     if ( u.isEmpty () )
00262         return;
00263 
00264     if ( mime.isEmpty() )
00265         d->mimeFilters.clear();
00266     else
00267         d->mimeFilters = mime;
00268 }
00269 
00270 TQStringList KonqDirPart::mimeFilter() const
00271 {
00272     return d->mimeFilters;
00273 }
00274 
00275 TQScrollView * KonqDirPart::scrollWidget()
00276 {
00277     return static_cast<TQScrollView *>(widget());
00278 }
00279 
00280 void KonqDirPart::slotBackgroundSettings()
00281 {
00282     TQColor bgndColor = m_pProps->bgColor( widget() );
00283     TQColor defaultColor = TDEGlobalSettings::baseColor();
00284     // dlg must be created on the heap as widget() can get deleted while dlg.exec(),
00285     // trying to delete dlg as its child then (#124210) - Frank Osterfeld
00286     TQGuardedPtr<KonqBgndDialog> dlg = new KonqBgndDialog( widget(), 
00287                                               m_pProps->bgPixmapFile(),
00288                                               bgndColor,
00289                                               defaultColor );
00290     
00291     if ( dlg->exec() == KonqBgndDialog::Accepted )
00292     {
00293         if ( dlg->color().isValid() )
00294         {
00295             m_pProps->setBgColor( dlg->color() );
00296         m_pProps->setBgPixmapFile( "" );
00297     }
00298         else
00299     {
00300             m_pProps->setBgColor( defaultColor );
00301         m_pProps->setBgPixmapFile( dlg->pixmapFile() );
00302         }
00303         m_pProps->applyColors( scrollWidget()->viewport() );
00304         scrollWidget()->viewport()->repaint();
00305     }
00306     
00307     delete dlg;
00308 }
00309 
00310 void KonqDirPart::lmbClicked( KFileItem * fileItem )
00311 {
00312     KURL url = fileItem->url();
00313     if ( !fileItem->isReadable() )
00314     {
00315         // No permissions or local file that doesn't exist - need to find out which
00316         if ( ( !fileItem->isLocalFile() ) || TQFile::exists( url.path() ) )
00317         {
00318             KMessageBox::error( widget(), i18n("<p>You do not have enough permissions to read <b>%1</b></p>").arg(url.prettyURL()) );
00319             return;
00320         }
00321         KMessageBox::error( widget(), i18n("<p><b>%1</b> does not seem to exist anymore</p>").arg(url.prettyURL()) );
00322         return;
00323     }
00324 
00325     KParts::URLArgs args;
00326     fileItem->determineMimeType();
00327     if ( fileItem->isMimeTypeKnown() )
00328         args.serviceType = fileItem->mimetype();
00329     args.trustedSource = true;
00330 
00331     if (KonqFMSettings::settings()->alwaysNewWin() && fileItem->isDir()) {
00332         //args.frameName = "_blank"; // open new window
00333         // We tried the other option, passing the path as framename so that
00334         // an existing window for that dir is reused (like MSWindows does when
00335         // the similar option is activated and the sidebar is hidden (!)).
00336         // But this requires some work, including changing the framename
00337         // when navigating, etc. Not very much requested yet, in addition.
00338         KParts::WindowArgs wargs;
00339         KParts::ReadOnlyPart* dummy;
00340         emit m_extension->createNewWindow( url, args, wargs, dummy );
00341     }
00342     else
00343     {
00344         kdDebug() << "emit m_extension->openURLRequest( " << url.url() << "," << args.serviceType << ")" << endl;
00345         emit m_extension->openURLRequest( url, args );
00346     }
00347 }
00348 
00349 void KonqDirPart::mmbClicked( KFileItem * fileItem )
00350 {
00351     if ( fileItem )
00352     {
00353         // Optimisation to avoid KRun to call kfmclient that then tells us
00354         // to open a window :-)
00355         KService::Ptr offer = KServiceTypeProfile::preferredService(fileItem->mimetype(), "Application");
00356         //if (offer) kdDebug(1203) << "KonqDirPart::mmbClicked: got service " << offer->desktopEntryName() << endl;
00357         if ( offer && offer->desktopEntryName().startsWith("kfmclient") )
00358         {
00359             KParts::URLArgs args;
00360             args.serviceType = fileItem->mimetype();
00361             emit m_extension->createNewWindow( fileItem->url(), args );
00362         }
00363         else
00364             fileItem->run();
00365     }
00366     else
00367     {
00368         m_extension->pasteRequest();
00369     }
00370 }
00371 
00372 void KonqDirPart::saveState( TQDataStream& stream )
00373 {
00374     stream << m_nameFilter;
00375 }
00376 
00377 void KonqDirPart::restoreState( TQDataStream& stream )
00378 {
00379     stream >> m_nameFilter;
00380 }
00381 
00382 void KonqDirPart::saveFindState( TQDataStream& stream )
00383 {
00384     // assert only doable in KDE4.
00385     //assert( m_findPart ); // test done by caller.
00386     if ( !m_findPart )
00387         return;
00388 
00389     // When we have a find part, our own URL wasn't saved (see KonqDirPartBrowserExtension)
00390     // So let's do it here
00391     stream << m_url;
00392 
00393     KParts::BrowserExtension* ext = KParts::BrowserExtension::childObject( m_findPart );
00394     if( !ext )
00395         return;
00396 
00397     ext->saveState( stream );
00398 }
00399 
00400 void KonqDirPart::restoreFindState( TQDataStream& stream )
00401 {
00402     // Restore our own URL
00403     stream >> m_url;
00404 
00405     emit findOpen( this );
00406 
00407     KParts::BrowserExtension* ext = KParts::BrowserExtension::childObject( m_findPart );
00408     slotClear();
00409 
00410     if( !ext )
00411         return;
00412 
00413     ext->restoreState( stream );
00414 }
00415 
00416 void KonqDirPart::slotClipboardDataChanged()
00417 {
00418     // This is very related to KDIconView::slotClipboardDataChanged
00419 
00420     KURL::List lst;
00421     TQMimeSource *data = TQApplication::clipboard()->data();
00422     if ( data->provides( "application/x-tde-cutselection" ) && data->provides( "text/uri-list" ) ) {
00423         if ( KonqDrag::decodeIsCutSelection( data ) ) {
00424             (void) KURLDrag::decode( data, lst );
00425         }
00426     }
00427 
00428     disableIcons( lst );
00429 
00430     updatePasteAction();
00431 }
00432 
00433 void KonqDirPart::updatePasteAction() // KDE4: merge into method above
00434 {
00435     TQString actionText = TDEIO::pasteActionText();
00436     bool paste = !actionText.isEmpty();
00437     if ( paste ) {
00438       emit m_extension->setActionText( "paste", actionText );
00439     }
00440     emit m_extension->enableAction( "paste", paste );
00441 }
00442 
00443 void KonqDirPart::newItems(const KFileItemList &entries)
00444 {
00445     d->dirSizeDirty = true;
00446     if ( m_findPart ) {
00447         emitTotalCount();
00448     }
00449 
00450     emit itemsAdded(entries);
00451 }
00452 
00453 void KonqDirPart::deleteItem(KFileItem * fileItem)
00454 {
00455     d->dirSizeDirty = true;
00456     emit itemRemoved(fileItem);
00457 }
00458 
00459 void KonqDirPart::refreshItems(const KFileItemList &entries)
00460 {
00461     emit itemsRefresh(entries);
00462 }
00463 
00464 void KonqDirPart::emitTotalCount()
00465 {
00466     if ( !d->dirLister || d->dirLister->url().isEmpty() ) {
00467         return;
00468     }
00469     if ( d->dirSizeDirty ) {
00470         m_lDirSize = 0;
00471         m_lFileCount = 0;
00472         m_lDirCount = 0;
00473         KFileItemList entries = d->dirLister->items();
00474         for (KFileItemListIterator it(entries); it.current(); ++it)
00475         {
00476             if ( !it.current()->isDir() )
00477             {
00478                 if (!it.current()->isLink()) { // symlinks don't contribute to the size
00479                     m_lDirSize += it.current()->size();
00480                 }
00481                 m_lFileCount++;
00482             }
00483             else {
00484                 m_lDirCount++;
00485             }
00486         }
00487         d->dirSizeDirty = false;
00488     }
00489 
00490     TQString summary =
00491         TDEIO::itemsSummaryString(m_lFileCount + m_lDirCount,
00492                                 m_lFileCount,
00493                                 m_lDirCount,
00494                                 m_lDirSize,
00495                                 true);
00496     bool bShowsResult = false;
00497     if (m_findPart)
00498     {
00499         TQVariant prop = m_findPart->property( "showsResult" );
00500         bShowsResult = prop.isValid() && prop.toBool();
00501     }
00502     //kdDebug(1203) << "KonqDirPart::emitTotalCount bShowsResult=" << bShowsResult << endl;
00503     emit setStatusBarText( bShowsResult ? i18n("Search result: %1").arg(summary) : summary );
00504 }
00505 
00506 void KonqDirPart::emitCounts( const KFileItemList & lst )
00507 {
00508     if ( lst.count() == 1 )
00509         emit setStatusBarText( ((KFileItemList)lst).first()->getStatusBarInfo() );
00510     else
00511     {
00512         long long fileSizeSum = 0;
00513         uint fileCount = 0;
00514         uint dirCount = 0;
00515 
00516         for ( KFileItemListIterator it( lst ); it.current(); ++it )
00517         {
00518             if ( it.current()->isDir() )
00519                 dirCount++;
00520             else
00521             {
00522                 if ( !it.current()->isLink() ) // ignore symlinks
00523                     fileSizeSum += it.current()->size();
00524                 fileCount++;
00525             }
00526         }
00527 
00528         emit setStatusBarText( TDEIO::itemsSummaryString( fileCount + dirCount,
00529                                                         fileCount, dirCount,
00530                                                         fileSizeSum, true ) );
00531     }
00532 }
00533 
00534 void KonqDirPart::emitCounts( const KFileItemList & lst, bool selectionChanged )
00535 {
00536     if ( lst.count() == 0 ) {
00537         emitTotalCount();
00538     }
00539     else {
00540         emitCounts( lst );
00541     }
00542 
00543     // Yes, the caller could do that too :)
00544     // But this bool could also be used to cache the TQString for the last
00545     // selection, as long as selectionChanged is false.
00546     // Not sure it's worth it though.
00547     // MiB: no, I don't think it's worth it. Especially regarding the
00548     //      loss of readability of the code. Thus, this will be removed in
00549     //      KDE 4.0.
00550     if ( selectionChanged ) {
00551         emit m_extension->selectionInfo( lst );
00552     }
00553 }
00554 
00555 void KonqDirPart::emitMouseOver( const KFileItem* item )
00556 {
00557     emit m_extension->mouseOverInfo( item );
00558 }
00559 
00560 void KonqDirPart::slotIconSizeToggled( bool toggleOn )
00561 {
00562     //kdDebug(1203) << "KonqDirPart::slotIconSizeToggled" << endl;
00563 
00564     // This slot is called when an iconsize action is checked or by calling
00565     // action->setChecked(false) (previously true). So we must filter out
00566     // the 'untoggled' case to prevent odd results here (repaints/loops!)
00567     if ( !toggleOn )
00568         return;
00569 
00570     if ( m_paDefaultIcons->isChecked() )
00571         setIconSize(0);
00572     else if ( d->aEnormousIcons->isChecked() )
00573         setIconSize(d->findNearestIconSize(TDEIcon::SizeEnormous));
00574     else if ( m_paHugeIcons->isChecked() )
00575         setIconSize(d->findNearestIconSize(TDEIcon::SizeHuge));
00576     else if ( m_paLargeIcons->isChecked() )
00577         setIconSize(d->findNearestIconSize(TDEIcon::SizeLarge));
00578     else if ( m_paMediumIcons->isChecked() )
00579         setIconSize(d->findNearestIconSize(TDEIcon::SizeMedium));
00580     else if ( d->aSmallMediumIcons->isChecked() )
00581         setIconSize(d->findNearestIconSize(TDEIcon::SizeSmallMedium));
00582     else if ( m_paSmallIcons->isChecked() )
00583         setIconSize(d->findNearestIconSize(TDEIcon::SizeSmall));
00584 }
00585 
00586 void KonqDirPart::slotIncIconSize()
00587 {
00588     int s = m_pProps->iconSize();
00589     s = s ? s : TDEGlobal::iconLoader()->currentSize( TDEIcon::Desktop );
00590     uint sizeIndex = 0;
00591     for ( uint idx = 1; idx < d->iconSize.count() ; ++idx )
00592         if (s == d->iconSize[idx]) {
00593             sizeIndex = idx;
00594         break;
00595     }
00596     if ( sizeIndex > 0 && sizeIndex < d->iconSize.count() - 1 )
00597     {
00598         setIconSize( d->iconSize[sizeIndex + 1] );
00599     }
00600 }
00601 
00602 void KonqDirPart::slotDecIconSize()
00603 {
00604     int s = m_pProps->iconSize();
00605     s = s ? s : TDEGlobal::iconLoader()->currentSize( TDEIcon::Desktop );
00606     uint sizeIndex = 0;
00607     for ( uint idx = 1; idx < d->iconSize.count() ; ++idx )
00608         if (s == d->iconSize[idx]) {
00609             sizeIndex = idx;
00610         break;
00611     }
00612     if ( sizeIndex > 1 )
00613     {
00614         setIconSize( d->iconSize[sizeIndex - 1] );
00615     }
00616 }
00617 
00618 // Only updates Actions, a GUI update is done in the views by reimplementing this
00619 void KonqDirPart::newIconSize( int size /*0=default, or 16,32,48....*/ )
00620 {
00621     int realSize = (size==0) ? TDEGlobal::iconLoader()->currentSize( TDEIcon::Desktop ) : size;
00622     m_paDecIconSize->setEnabled(realSize > d->iconSize[1]);
00623     m_paIncIconSize->setEnabled(realSize < d->iconSize.back());
00624 
00625     m_paDefaultIcons->setChecked(size == 0);
00626     d->aEnormousIcons->setChecked(size == d->findNearestIconSize(TDEIcon::SizeEnormous));
00627     m_paHugeIcons->setChecked(size == d->findNearestIconSize(TDEIcon::SizeHuge));
00628     m_paLargeIcons->setChecked(size == d->findNearestIconSize(TDEIcon::SizeLarge));
00629     m_paMediumIcons->setChecked(size == d->findNearestIconSize(TDEIcon::SizeMedium));
00630     d->aSmallMediumIcons->setChecked(size == d->findNearestIconSize(TDEIcon::SizeSmallMedium));
00631     m_paSmallIcons->setChecked(size == d->findNearestIconSize(TDEIcon::SizeSmall));
00632 }
00633 
00634 // Stores the new icon size and updates the GUI
00635 void KonqDirPart::setIconSize( int size )
00636 {
00637     //kdDebug(1203) << "KonqDirPart::setIconSize " << size << " -> updating props and GUI" << endl;
00638     m_pProps->setIconSize( size );
00639     newIconSize( size );
00640 }
00641 
00642 bool KonqDirPart::closeURL()
00643 {
00644     // Tell all the childern objects to clean themselves up for dinner :)
00645     return doCloseURL();
00646 }
00647 
00648 bool KonqDirPart::openURL(const KURL& url)
00649 {
00650     if ( m_findPart )
00651     {
00652         kdDebug(1203) << "KonqDirPart::openURL -> emit findClosed " << this << endl;
00653         delete m_findPart;
00654         m_findPart = 0L;
00655         emit findClosed( this );
00656     }
00657 
00658     m_url = url;
00659     emit aboutToOpenURL ();
00660 
00661     return doOpenURL(url);
00662 }
00663 
00664 void KonqDirPart::setFindPart( KParts::ReadOnlyPart * part )
00665 {
00666     assert(part);
00667     m_findPart = part;
00668     connect( m_findPart, TQT_SIGNAL( started() ),
00669              this, TQT_SLOT( slotStarted() ) );
00670     connect( m_findPart, TQT_SIGNAL( started() ),
00671              this, TQT_SLOT( slotStartAnimationSearching() ) );
00672     connect( m_findPart, TQT_SIGNAL( clear() ),
00673              this, TQT_SLOT( slotClear() ) );
00674     connect( m_findPart, TQT_SIGNAL( newItems( const KFileItemList & ) ),
00675              this, TQT_SLOT( slotNewItems( const KFileItemList & ) ) );
00676     connect( m_findPart, TQT_SIGNAL( finished() ), // can't name it completed, it conflicts with a KROP signal
00677              this, TQT_SLOT( slotCompleted() ) );
00678     connect( m_findPart, TQT_SIGNAL( finished() ),
00679              this, TQT_SLOT( slotStopAnimationSearching() ) );
00680     connect( m_findPart, TQT_SIGNAL( canceled() ),
00681              this, TQT_SLOT( slotCanceled() ) );
00682     connect( m_findPart, TQT_SIGNAL( canceled() ),
00683              this, TQT_SLOT( slotStopAnimationSearching() ) );
00684 
00685     connect( m_findPart, TQT_SIGNAL( findClosed() ),
00686              this, TQT_SLOT( slotFindClosed() ) );
00687 
00688     emit findOpened( this );
00689 
00690     // set the initial URL in the find part
00691     m_findPart->openURL( url() );
00692 }
00693 
00694 void KonqDirPart::slotFindClosed()
00695 {
00696     kdDebug(1203) << "KonqDirPart::slotFindClosed -> emit findClosed " << this << endl;
00697     delete m_findPart;
00698     m_findPart = 0L;
00699     emit findClosed( this );
00700     // reload where we were before
00701     openURL( url() );
00702 }
00703 
00704 void KonqDirPart::slotIconChanged( int group )
00705 {
00706     if (group != TDEIcon::Desktop) return;
00707     adjustIconSizes();
00708 }
00709 
00710 void KonqDirPart::slotStartAnimationSearching()
00711 {
00712   started(0);
00713 }
00714 
00715 void KonqDirPart::slotStopAnimationSearching()
00716 {
00717   completed();
00718 }
00719 
00720 void KonqDirPartBrowserExtension::saveState( TQDataStream &stream )
00721 {
00722     m_dirPart->saveState( stream );
00723     bool hasFindPart = m_dirPart->findPart();
00724     stream << hasFindPart;
00725     assert( ! ( hasFindPart && !strcmp(m_dirPart->className(), "KFindPart") ) );
00726     if ( !hasFindPart )
00727         KParts::BrowserExtension::saveState( stream );
00728     else {
00729         m_dirPart->saveFindState( stream );
00730     }
00731 }
00732 
00733 void KonqDirPartBrowserExtension::restoreState( TQDataStream &stream )
00734 {
00735     m_dirPart->restoreState( stream );
00736     bool hasFindPart;
00737     stream >> hasFindPart;
00738     assert( ! ( hasFindPart && !strcmp(m_dirPart->className(), "KFindPart") ) );
00739     if ( !hasFindPart )
00740         // This calls openURL, that's why we don't want to call it in case of a find part
00741         KParts::BrowserExtension::restoreState( stream );
00742     else {
00743         m_dirPart->restoreFindState( stream );
00744     }
00745 }
00746 
00747 
00748 void KonqDirPart::resetCount()
00749 {
00750     m_lDirSize = 0;
00751     m_lFileCount = 0;
00752     m_lDirCount = 0;
00753     d->dirSizeDirty = true;
00754 }
00755 
00756 void KonqDirPart::setDirLister( KDirLister* lister )
00757 {
00758     d->dirLister = lister;
00759 }
00760 
00761 #include "konq_dirpart.moc"

libkonq

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

libkonq

Skip menu "libkonq"
  • kate
  • libkonq
  • twin
  •   lib
Generated for libkonq by doxygen 1.7.6.1
This website is maintained by Timothy Pearson.