You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gwenview/src/gvcore/fileviewcontroller.h

257 lines
6.4 KiB

// vim: set tabstop=4 shiftwidth=4 noexpandtab:
/*
Gwenview - A simple image viewer for KDE
Copyright 2000-2004 Aurélien Gâteau
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef FILEVIEWCONTROLLER_H
#define FILEVIEWCONTROLLER_H
// Qt
#include <qdir.h>
#include <qslider.h>
#include <qwidget.h>
// KDE
#include <kdirlister.h>
#include <kfileitem.h>
#include <kio/job.h>
#include <kurl.h>
#include "libgwenview_export.h"
class QIconViewItem;
class QListViewItem;
class QPopupMenu;
class KAccel;
class KAction;
class KActionCollection;
class KConfig;
class KListView;
class KRadioAction;
class KToggleAction;
namespace Gwenview {
class FileViewBase;
class FileDetailView;
class FileThumbnailView;
class ImageLoader;
class DirLister;
class LIBGWENVIEW_EXPORT FileViewController : public QWidget {
Q_OBJECT
public:
enum Mode { FILE_LIST, THUMBNAIL};
enum FilterMode { ALL, IMAGES_ONLY, VIDEOS_ONLY };
FileViewController(QWidget* parent,KActionCollection*);
~FileViewController();
// Properties
void setMode(Mode);
QString fileName() const;
KURL url() const;
KURL dirURL() const;
uint fileCount() const;
int shownFilePosition() const;
uint selectionSize() const;
FileViewBase* currentFileView() const;
FileThumbnailView* fileThumbnailView() const { return mFileThumbnailView; }
KAction* selectFirst() const { return mSelectFirst; }
KAction* selectLast() const { return mSelectLast; }
KAction* selectPrevious() const { return mSelectPrevious; }
KAction* selectNext() const { return mSelectNext; }
KAction* selectPreviousDir() const { return mSelectPreviousDir; }
KAction* selectNextDir() const { return mSelectNextDir; }
KAction* selectFirstSubDir() const { return mSelectFirstSubDir; }
KRadioAction* listMode() const { return mListMode; }
KRadioAction* sideThumbnailMode() const { return mSideThumbnailMode; }
KRadioAction* bottomThumbnailMode() const { return mBottomThumbnailMode; }
KToggleAction* showDotFiles() const { return mShowDotFiles; }
KURL::List selectedURLs() const;
KURL::List selectedImageURLs() const;
/**
* If set to true, no error messages will be displayed.
*/
void setSilentMode( bool silent );
/**
* Returns true if there was an error since last URL had been opened.
*/
bool lastURLError() const;
/**
* Tries to open again the active URL. Useful for showing error messages
* initially supressed by silent mode.
*/
void retryURL();
void refreshItems( const KURL::List& urls ); // used by a workaround in KIPIInterface
virtual void setFocus();
public slots:
void setDirURL(const KURL&);
void setFileNameToSelect(const QString&);
void slotSelectFirst();
void slotSelectLast();
void slotSelectPrevious();
void slotSelectNext();
void slotSelectPreviousDir();
void slotSelectNextDir();
void slotSelectFirstSubDir();
void updateThumbnail(const KURL&);
void updateFromSettings();
void setShowFilterBar(bool);
// 'int' suck, but I don't want to #include fileviewconfig.h
void setFilterMode(int);
void setFilterName(const QString&);
void setFilterFromDate(const QDate&);
void setFilterToDate(const QDate&);
void applyFilter();
signals:
void urlChanged(const KURL&);
/**
* Used by DirPart to tell Konqueror to change directory
*/
void directoryChanged(const KURL&);
void selectionChanged();
void completed();
void canceled();
void imageDoubleClicked();
void shownFileItemRefreshed(const KFileItem*);
void sortingChanged();
void requestContextMenu(const QPoint& pos, bool onItem);
private slots:
void delayedDirListerCompleted();
// Used to enter directories
void slotViewExecuted();
// Used to change the current image
void slotViewClicked();
void slotViewDoubleClicked();
// These two methods forward the context menu requests from either view to
// openContextMenu(const QPoint&);
void openContextMenu(KListView*, QListViewItem*, const QPoint&);
void openContextMenu(QIconViewItem*,const QPoint&);
// Get called by the thumbnail mode actions
void updateViewMode();
// Get called by the thumbnail slider
void updateThumbnailSize(int);
void toggleShowDotFiles();
void setSorting();
void updateSortMenu(QDir::SortSpec);
// Dir lister slots
void dirListerDeleteItem(KFileItem* item);
void dirListerNewItems(const KFileItemList& items);
void dirListerRefreshItems(const KFileItemList&);
void dirListerClear();
void dirListerStarted();
void dirListerCanceled();
void dirListerCompleted();
void openDropURLMenu(QDropEvent*, KFileItem*);
void prefetchDone();
void resetNameFilter();
void resetFromFilter();
void resetToFilter();
private:
struct Private;
Private* d;
Mode mMode;
FileDetailView* mFileDetailView;
FileThumbnailView* mFileThumbnailView;
DirLister* mDirLister;
KURL mDirURL;
ImageLoader* mPrefetch;
// Our actions
KAction* mSelectFirst;
KAction* mSelectLast;
KAction* mSelectPrevious;
KAction* mSelectNext;
KAction* mSelectPreviousDir;
KAction* mSelectNextDir;
KAction* mSelectFirstSubDir;
KRadioAction* mListMode;
KRadioAction* mSideThumbnailMode;
KRadioAction* mBottomThumbnailMode;
QSlider* mSizeSlider;
KToggleAction* mShowDotFiles;
// Temp data used by the dir lister
bool mThumbnailsNeedUpdate;
QString mFileNameToSelect;
enum ChangeDirStatusVals {
CHANGE_DIR_STATUS_NONE,
CHANGE_DIR_STATUS_PREV,
CHANGE_DIR_STATUS_NEXT
} mChangeDirStatus;
bool mBrowsing;
bool mSelecting;
/**
* Browse to the given item. Prevents multiple calls using mBrowsing.
*/
void browseTo(KFileItem* item);
void browseToFileNameToSelect();
void emitURLChanged();
void updateActions();
void prefetch( KFileItem* item );
KFileItem* findFirstImage() const;
KFileItem* findLastImage() const;
KFileItem* findPreviousImage() const;
KFileItem* findNextImage() const;
KFileItem* findItemByFileName(const QString& fileName) const;
bool eventFilter(QObject*, QEvent*);
};
} // namespace
#endif