kdiroperator.h

00001 // -*- c++ -*-
00002 /* This file is part of the KDE libraries
00003     Copyright (C) 1999 Stephan Kulow <coolo@kde.org>
00004           2000,2001 Carsten Pfeiffer <pfeiffer@kde.org>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 #ifndef KDIROPERATOR_H_
00022 #define KDIROPERATOR_H_
00023 
00024 #include <qwidget.h>
00025 #include <qptrstack.h>
00026 
00027 #include <kaction.h>
00028 #include <kcompletion.h>
00029 #include <kdirlister.h>
00030 #include <kfileview.h>
00031 #include <kfileitem.h>
00032 #include <kfile.h>
00033 
00034 class QPopupMenu;
00035 class QTimer;
00036 
00037 class KAction;
00038 class KDirLister;
00039 class KToggleAction;
00040 class KActionSeparator;
00041 class KActionMenu;
00042 class QWidgetStack;
00043 class KProgress;
00044 namespace KIO {
00045   class CopyJob;
00046   class DeleteJob;
00047 }
00048 
00097 class KIO_EXPORT KDirOperator : public QWidget
00098 {
00099     Q_OBJECT
00100 
00101  public:
00106     enum ActionTypes { SortActions = 1,
00107                        ViewActions = 2,
00108                        NavActions = 4,
00109                        FileActions = 8,
00110                        AllActions = 15 };
00118     KDirOperator(const KURL& urlName = KURL(),
00119          QWidget *parent = 0, const char* name = 0);
00123     virtual ~KDirOperator();
00124 
00128     // ### KDE4: make virtual
00129     void setShowHiddenFiles ( bool s ) { showHiddenAction->setChecked( s ); }
00130 
00134     bool showHiddenFiles () const { return showHiddenAction->isChecked(); }
00135 
00139     void close();
00141     virtual bool close( bool alsoDelete ) { return QWidget::close( alsoDelete ); }
00142 
00150     void setNameFilter(const QString& filter);
00151 
00156     const QString& nameFilter() const { return dir->nameFilter(); }
00157 
00175     void setMimeFilter( const QStringList& mimetypes );
00176 
00180     QStringList mimeFilter() const { return dir->mimeFilters(); }
00181 
00189     void clearFilter();
00190 
00194     KURL url() const;
00195 
00201     // ### KDE4: make virtual
00202     void setURL(const KURL& url, bool clearforward);
00203 
00208     void setCurrentItem( const QString& filename );
00209 
00220     // ### KDE4: make virtual
00221     void setView(KFileView *view);
00222 
00227     KFileView * view() const { return m_fileView; }
00228 
00233     QWidget * viewWidget() const { return m_fileView ? m_fileView->widget() : 0L; }
00234 
00239     // ### KDE4: make virtual
00240     void setView(KFile::FileView view);
00241 
00245     void setSorting( QDir::SortSpec );
00246 
00250     QDir::SortSpec sorting() const { return mySorting; }
00251 
00255     bool isRoot() const { return url().path() == QChar('/'); }
00256 
00260     KDirLister *dirLister() const { return dir; }
00261 
00266     KProgress * progressBar() const;
00267 
00279     // ### KDE4: make virtual
00280     void setMode( KFile::Mode m );
00284     KFile::Mode mode() const;
00285 
00291     // ### KDE4: make virtual
00292     void setPreviewWidget(const QWidget *w);
00293 
00298     const KFileItemList * selectedItems() const {
00299     return ( m_fileView ? m_fileView->selectedItems() : 0L );
00300     }
00301 
00305     inline bool isSelected( const KFileItem *item ) const {
00306     return ( m_fileView ? m_fileView->isSelected( item ) : false );
00307     }
00308 
00313     int numDirs() const;
00314 
00319     int numFiles() const;
00320 
00329     KCompletion * completionObject() const {
00330     return const_cast<KCompletion *>( &myCompletion );
00331     }
00332 
00341     KCompletion *dirCompletionObject() const {
00342     return const_cast<KCompletion *>( &myDirCompletion );
00343     }
00344 
00390     KActionCollection * actionCollection() const { return myActionCollection; }
00391 
00409     // ### KDE4: make virtual
00410     void setViewConfig( KConfig *config, const QString& group );
00411 
00419     KConfig *viewConfig();
00420 
00428     QString viewConfigGroup() const;
00429 
00443     virtual void readConfig( KConfig *, const QString& group = QString::null );
00444 
00451     virtual void writeConfig( KConfig *, const QString& group = QString::null );
00452 
00453 
00464     void setOnlyDoubleClickSelectsFiles( bool enable );
00465 
00471     bool onlyDoubleClickSelectsFiles() const;
00472 
00481     // ### KDE4: make virtual and turn QString into KURL
00482     bool mkdir( const QString& directory, bool enterDirectory = true );
00483 
00491     // ### KDE4: make virtual
00492     KIO::DeleteJob * del( const KFileItemList& items,
00493                           bool ask = true, bool showProgress = true );
00494 
00504     // ### KDE4: make virtual
00505     KIO::DeleteJob * del( const KFileItemList& items, QWidget *parent,
00506                           bool ask = true, bool showProgress = true );
00507 
00511     void clearHistory();
00512 
00522     // ### KDE4: make virtual
00523     void setEnableDirHighlighting( bool enable );
00524 
00531     bool dirHighlighting() const;
00532 
00537     bool dirOnlyMode() const { return dirOnlyMode( myMode ); }
00538 
00539     static bool dirOnlyMode( uint mode ) {
00540         return ( (mode & KFile::Directory) &&
00541                  (mode & (KFile::File | KFile::Files)) == 0 );
00542     }
00543 
00548     void setupMenu(int whichActions);
00549 
00554     virtual void setAcceptDrops(bool b);
00555 
00561      // ### KDE4: make virtual
00562     void setDropOptions(int options);
00563 
00573      // ### KDE4: make virtual
00574     KIO::CopyJob * trash( const KFileItemList& items, QWidget *parent,
00575                        bool ask = true, bool showProgress = true );
00576 
00577 protected:
00592      virtual KFileView* createView( QWidget* parent, KFile::FileView view );
00596     // ### KDE4: make virtual
00597     void setDirLister( KDirLister *lister );
00598 
00599     virtual void resizeEvent( QResizeEvent * );
00600 
00605     void setupActions();
00606 
00611     void updateSortActions();
00612 
00617     void updateViewActions();
00618 
00624     void setupMenu();
00625 
00633     void prepareCompletionObjects();
00634 
00640     bool checkPreviewSupport();
00641 
00642 public slots:
00646     // ### KDE4: make virtual
00647     void back();
00648 
00652     // ### KDE4: make virtual
00653     void forward();
00654 
00658     // ### KDE4: make virtual
00659     void home();
00660 
00664     // ### KDE4: make virtual
00665     void cdUp();
00666 
00670     void updateDir();
00671 
00675     // ### KDE4: make virtual
00676     void rereadDir();
00677 
00681     // ### KDE4: make virtual
00682     void mkdir();
00683 
00687     // ### KDE4: make virtual
00688     void deleteSelected();
00689 
00695     void updateSelectionDependentActions();
00696 
00700     QString makeCompletion(const QString&);
00701 
00705     QString makeDirCompletion(const QString&);
00706 
00711     // ### KDE4: make virtual
00712     void trashSelected(KAction::ActivationReason, Qt::ButtonState);
00713 
00714 protected slots:
00719     void resetCursor();
00720 
00725     void pathChanged();
00726 
00731     void insertNewFiles(const KFileItemList &newone);
00732 
00737     void itemDeleted(KFileItem *);
00738 
00742     // ### KDE4: make virtual
00743     void selectDir(const KFileItem *item );
00744 
00748     void selectFile(const KFileItem *item);
00749 
00753     void highlightFile(const KFileItem* i) { emit fileHighlighted( i ); }
00754 
00758     virtual void activatedMenu( const KFileItem *, const QPoint& pos );
00759 
00763     void sortByName()       { byNameAction->setChecked( true ); }
00764 
00768     void sortBySize()       { bySizeAction->setChecked( true ); }
00769 
00773     void sortByDate()       { byDateAction->setChecked( true ); }
00774 
00778     void sortReversed()     { reverseAction->setChecked( !reverseAction->isChecked() ); }
00779 
00783     void toggleDirsFirst()  { dirsFirstAction->setChecked( !dirsFirstAction->isChecked() ); }
00784 
00788     void toggleIgnoreCase()     { caseInsensitiveAction->setChecked( !caseInsensitiveAction->isChecked() ); }
00789 
00794     void slotCompletionMatch(const QString& match);
00795 
00796 signals:
00797     void urlEntered(const KURL& );
00798     void updateInformation(int files, int dirs);
00799     void completion(const QString&);
00800     void finishedLoading();
00801 
00807     void viewChanged( KFileView * newView );
00808 
00814     void fileHighlighted( const KFileItem *item );
00815     void dirActivated( const KFileItem *item );
00816     void fileSelected( const KFileItem *item );
00825     void dropped(const KFileItem *item, QDropEvent*event, const KURL::List&urls);
00826 private:
00830     QPtrStack<KURL> backStack;
00831 
00835     QPtrStack<KURL> forwardStack;
00836 
00837     KDirLister *dir;
00838     KURL currUrl;
00839 
00840     KCompletion myCompletion;
00841     KCompletion myDirCompletion;
00842     bool myCompleteListDirty;
00843     QDir::SortSpec mySorting;
00844 
00849     bool checkPreviewInternal() const;
00850 
00855     void checkPath(const QString& txt, bool takeFiles = false);
00856 
00857     void connectView(KFileView *);
00858 
00859     bool openURL( const KURL& url, bool keep = false, bool reload = false );
00860 
00861     KFileView *m_fileView;
00862     KFileItemList pendingMimeTypes;
00863 
00864     // the enum KFile::FileView as an int
00865     int m_viewKind;
00866     int defaultView;
00867 
00868     KFile::Mode myMode;
00869     KProgress *progress;
00870 
00871     const QWidget *myPreview;    // temporary pointer for the preview widget
00872 
00873     // actions for the popupmenus
00874     // ### clean up all those -- we have them all in the actionMenu!
00875     KActionMenu *actionMenu;
00876 
00877     KAction     *backAction;
00878     KAction     *forwardAction;
00879     KAction     *homeAction;
00880     KAction     *upAction;
00881     KAction     *reloadAction;
00882     KActionSeparator *actionSeparator;
00883     KAction     *mkdirAction;
00884 
00885     KActionMenu *sortActionMenu;
00886     KRadioAction *byNameAction;
00887     KRadioAction *byDateAction;
00888     KRadioAction *bySizeAction;
00889     KToggleAction *reverseAction;
00890     KToggleAction *dirsFirstAction;
00891     KToggleAction *caseInsensitiveAction;
00892 
00893     KActionMenu *viewActionMenu;
00894     KRadioAction *shortAction;
00895     KRadioAction *detailedAction;
00896     KToggleAction *showHiddenAction;
00897     KToggleAction *separateDirsAction;
00898 
00899     KActionCollection *myActionCollection;
00900     KActionCollection *viewActionCollection;
00901 
00902 private slots:
00906     void slotDetailedView();
00907     void slotSimpleView();
00908     void slotToggleHidden( bool );
00909 
00910     void slotSeparateDirs();
00911     void slotDefaultPreview();
00912     void togglePreview( bool );
00913 
00914     void slotSortByName();
00915     void slotSortBySize();
00916     void slotSortByDate();
00917     void slotSortReversed();
00918     void slotToggleDirsFirst();
00919     void slotToggleIgnoreCase();
00920 
00921     void slotStarted();
00922     void slotProgress( int );
00923     void slotShowProgress();
00924     void slotIOFinished();
00925     void slotCanceled();
00926     void slotRedirected( const KURL& );
00927 
00928     void slotViewActionAdded( KAction * );
00929     void slotViewActionRemoved( KAction * );
00930     void slotViewSortingChanged( QDir::SortSpec );
00931 
00932     void slotClearView();
00933     void slotRefreshItems( const KFileItemList& items );
00934 
00935     void slotProperties();
00936 
00937     void insertViewDependentActions();
00938 
00939 private:
00940     static bool isReadable( const KURL& url );
00941 
00942 protected:
00943     virtual void virtual_hook( int id, void* data );
00944 private:
00945     class KDirOperatorPrivate;
00946     KDirOperatorPrivate *d;
00947 };
00948 
00949 #endif
KDE Home | KDE Accessibility Home | Description of Access Keys