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.
tdebase/libkonq/konq_dirpart.h

352 lines
10 KiB

/* This file is part of the KDE projects
Copyright (C) 2000 David Faure <faure@kde.org>
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; see the file COPYING. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef __konqdirpart_h
#define __konqdirpart_h
#include <qstring.h>
#include <kparts/part.h>
#include <kparts/browserextension.h>
#include <kfileitem.h>
#include <kdatastream.h>
#include <kio/global.h>
#include <libkonq_export.h>
class KDirLister;
namespace KParts { class BrowserExtension; }
class KonqPropsView;
class QScrollView;
class KAction;
class KToggleAction;
class KonqDirPartBrowserExtension;
class LIBKONQ_EXPORT KonqDirPart: public KParts::ReadOnlyPart
{
Q_OBJECT
friend class KonqDirPartBrowserExtension;
public:
KonqDirPart( QObject *parent, const char *name );
virtual ~KonqDirPart();
/**
* The derived part should call this in its constructor
*/
void setBrowserExtension( KonqDirPartBrowserExtension * extension )
{ m_extension = extension; }
KonqDirPartBrowserExtension * extension()
{ return m_extension; }
/**
* The derived part should call this in its constructor
*/
void setDirLister( KDirLister* lister );
// TODO KDE4 create the KDirLister here and simplify the parts?
QScrollView * scrollWidget();
virtual void saveState( QDataStream &stream );
virtual void restoreState( QDataStream &stream );
/** Called when LMB'ing an item in a directory view.
* @param fileItem must be set
* @param widget is only set as parent pointer for dialog boxes */
void lmbClicked( KFileItem * fileItem );
/** Called when MMB'ing an item in a directory view.
* @param fileItem if 0 it means we MMB'ed the background. */
void mmbClicked( KFileItem * fileItem );
void setNameFilter( const QString & nameFilter ) { m_nameFilter = nameFilter; }
QString nameFilter() const { return m_nameFilter; }
void setFilesToSelect( const QStringList & filesToSelect ) { m_filesToSelect = filesToSelect; }
/**
* Sets per directory mime-type based filtering.
*
* This method causes only the items matching the mime-type given
* by @p filters to be displayed. You can supply multiple mime-types
* by separating them with a space, eg. "text/plain image/x-png".
* To clear all the filters set for the current url simply call this
* function with a null or empty argument.
*
* NOTE: the filter(s) specified here only apply to the current
* directory as returned by @ref #url().
*
* @param filter mime-type(s) to filter directory by.
*/
void setMimeFilter (const QStringList& filters);
/**
* Completely clears the internally stored list of mime filters
* set by call to @ref #setMimeFilter.
*/
QStringList mimeFilter() const;
KonqPropsView * props() const { return m_pProps; }
/**
* "Cut" icons : disable those whose URL is in lst, enable the others
*/
virtual void disableIcons( const KURL::List & lst ) = 0;
/**
* This class takes care of the counting of items, size etc. in the
* current directory. Call this in slotClear.
*/
void resetCount();
/**
* Update the counts for those new items
*/
void newItems( const KFileItemList & entries );
/**
* Update the counts with this item being deleted
*/
void deleteItem( KFileItem * fileItem );
/**
* Show the counts for the directory in the status bar
*/
void emitTotalCount();
// ##### TODO KDE 4: remove!
/**
* Show the counts for the list of items in the status bar.
* If none are provided emitTotalCount() is called to display
* the counts for the whole directory. However, that does not work
* for a treeview.
*
* @deprecated
*/
void emitCounts( const KFileItemList & lst, bool selectionChanged );
/**
* Show the counts for the list of items in the status bar. The list
* can be empty.
*
* @param lst the list of fileitems for which to display the counts
* @since 3.4
*/
void emitCounts( const KFileItemList & lst );
void emitMouseOver( const KFileItem * item );
/**
* Enables or disables the paste action. This depends both on
* the data in the clipboard and the number of files selected
* (pasting is only possible if not more than one file is selected).
*/
void updatePasteAction();
/**
* Change the icon size of the view.
* The view should call it initially.
* The view should also reimplement it, to update the icons.
*/
virtual void newIconSize( int size );
/**
* This is called by the actions that change the icon size.
* It stores the new size and calls newIconSize.
*/
void setIconSize( int size );
/**
* This is called by konqueror itself, when the "find" functionality is activated
*/
void setFindPart( KParts::ReadOnlyPart * part );
KParts::ReadOnlyPart * findPart() const { return m_findPart; }
virtual const KFileItem * currentItem() = 0; // { return 0L; }
virtual KFileItemList selectedFileItems() { return KFileItemList(); }
/**
* Re-implemented for internal reasons. API is unaffected. All inheriting
* classes should re-implement @ref doCloseURL() instead instead of this one.
*/
bool closeURL ();
signals:
/**
* Emitted whenever the current URL is about to be changed.
*/
void aboutToOpenURL();
/**
* We emit this if we want a find part to be created for us.
* This happens when restoring from history
*/
void findOpen( KonqDirPart * );
/**
* We emit this _after_ a find part has been created for us.
* This also happens initially.
*/
void findOpened( KonqDirPart * );
/**
* We emit this to ask konq to close the find part
*/
void findClosed( KonqDirPart * );
/**
* Emitted as the part is updated with new items.
* Useful for informing plugins of changes in view.
*/
void itemsAdded( const KFileItemList& );
/**
* Emitted as the part is updated with these items.
* Useful for informing plugins of changes in view.
*/
void itemRemoved( const KFileItem* );
/**
* Emitted with the list of filtered-out items whenever
* a mime-based filter(s) is set.
*/
void itemsFilteredByMime( const KFileItemList& );
public slots:
/**
* Re-implemented for internal reasons. API is unaffected. All inheriting
* classes should re-implement @ref doOpenURL() instead instead of this one.
*/
bool openURL (const KURL&);
/**
* This is called either by the part's close button, or by the
* dir part itself, if entering a directory. It deletes the find
* part.
*/
void slotFindClosed();
/**
* Start the animated "K" during kfindpart's file search
*/
void slotStartAnimationSearching();
/**
* Start the animated "K" during kfindpart's file search
*/
void slotStopAnimationSearching();
void slotBackgroundSettings();
/**
* Called when the clipboard's data changes, to update the 'cut' icons
* Call this when the directory's listing is finished, to draw icons as cut.
*/
void slotClipboardDataChanged();
void slotIncIconSize();
void slotDecIconSize();
void slotIconSizeToggled( bool );
// slots connected to the directory lister - or to the kfind interface
virtual void slotStarted() = 0;
virtual void slotCanceled() = 0;
virtual void slotCompleted() = 0;
virtual void slotNewItems( const KFileItemList& ) = 0;
virtual void slotDeleteItem( KFileItem * ) = 0;
virtual void slotRefreshItems( const KFileItemList& ) = 0;
virtual void slotClear() = 0;
virtual void slotRedirection( const KURL & ) = 0;
private slots:
void slotIconChanged(int group);
protected:
/**
* Invoked from openURL to enable childern classes to
* handle open URL requests.
*/
virtual bool doOpenURL( const KURL& ) = 0;
virtual bool doCloseURL () = 0;
protected:
QString m_nameFilter;
QStringList m_filesToSelect;
KonqPropsView * m_pProps;
KAction *m_paIncIconSize;
KAction *m_paDecIconSize;
KToggleAction *m_paDefaultIcons;
KToggleAction *m_paHugeIcons;
KToggleAction *m_paLargeIcons;
KToggleAction *m_paMediumIcons;
KToggleAction *m_paSmallIcons;
KParts::ReadOnlyPart * m_findPart;
KonqDirPartBrowserExtension * m_extension;
// Remove all those in KDE4
int m_iIconSize[5];
KIO::filesize_t m_lDirSize;
uint m_lFileCount;
uint m_lDirCount;
private:
void saveFindState( QDataStream& );
void restoreFindState( QDataStream& );
void adjustIconSizes();
class KonqDirPartPrivate;
KonqDirPartPrivate* d;
};
class LIBKONQ_EXPORT KonqDirPartBrowserExtension : public KParts::BrowserExtension
{
public:
KonqDirPartBrowserExtension( KonqDirPart* dirPart )
: KParts::BrowserExtension( dirPart )
, m_dirPart( dirPart )
{}
/**
* This calls saveState in KonqDirPart, and also takes care of the "find part".
*
* If your KonqDirPart-derived class needs to save and restore state,
* you should probably override KonqDirPart::saveState
* and KonqDirPart::restoreState, not the following methods.
*/
virtual void saveState( QDataStream &stream );
virtual void restoreState( QDataStream &stream );
private:
KonqDirPart* m_dirPart;
};
#endif