📄 kfileinfocontents.h
字号:
// -*- c++ -*-/* This file is part of the KDE libraries Copyright (C) 1997 Stephan Kulow <coolo@kde.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/#ifndef KFILEINFOLISTWIDGET_H#define KFILEINFOLISTWIDGET_Hclass KFileInfo;class QPixmap;class QSignal;#include <qwidget.h>#include "kdir.h"/** * internal class to make easier to use signals possible * @internal **/class KFileInfoContentsSignaler : public QObject { Q_OBJECTpublic: void activateDir(KFileInfo *i) { emit dirActivated(i); } void highlightFile(KFileInfo *i) { emit fileHighlighted(i); } void activateFile(KFileInfo *i) { emit fileSelected(i); }signals: void dirActivated(KFileInfo*); void fileHighlighted(KFileInfo*); void fileSelected(KFileInfo*);};/** * A base class for views of the KDE file selector * * This class defines an interface to all file views. It's intent is * to allow to switch the view of the files in the selector very easily. * It defines some pure virtual functions, that must be implemented to * make a file view working. * * Since this class is not a widget, but it's meant to be added to other * widgets, its most important function is @code widget. This should return * a pointer to the implemented widget. * * @short A base class for views of the KDE file selector * @author Stephan Kulow <coolo@kde.org> * @version $Id: kfileinfocontents.h,v 1.1 2003/09/08 19:42:13 jasonk Exp $ **/class KFileInfoContents { public: /** * @short Constructor. Defines some used flags and lists * It loads the icons used to indicate files and folders in * all views, initializes some used lists and variables * * @param useSingleClick defines, if the view should react on * single click or double click * @param sorting defines, how the list should be sorted. * Currently Name, Size and Date are supported. **/ KFileInfoContents( bool useSingleClick, QDir::SortSpec sorting ); /** Destructor */ virtual ~KFileInfoContents(); /** * Insert an item into the file view. The view will just maintain * the pointer. It doesn't free the object. * * This functions inserts the file at the correct place in the * sorted list * @return true, if a repaint is necessary * @param item the file to be inserted **/ virtual bool addItem(const KFileInfo *item); /** * inserts a list of items. This is an speed optimized version of * function above. * @see addItem **/ virtual void addItemList(const KFileInfoList *list); /** * @return the name of the file at position index. * * the meaning of index depends on the sorting and the other files * in the view. So use this function with care. **/ virtual const char *text(uint index) const; /** * a pure virtual function to get a QWidget, that can be added to * other widgets. This function is needed to make it possible for * derived classes to derive from other widgets. **/ virtual QWidget *widget() = 0; /** * set the current item in the view. * * the normal use of this function is to use the parameter filename to * set the highlight on this file. * * the extend use of this function is to set filename to 0. In this * case the @see KFileInfo is used to find out the position of the * file. Since this is faster, this way is used in case a view has * other child views. **/ virtual void setCurrentItem(const char *filename, const KFileInfo * entry = 0); /** * set the autoUpdate flag for the specific widget. * if set to false, no repaints should be done automaticly unless * repaint is called. * * this function is pure virtual, so it must be implemented **/ virtual void setAutoUpdate(bool f) = 0; /** * clears all lists and calls clearView */ void clear(); /** * does a repaint of the view. * * The default implementation calls * <code>widget()->repaint(f)</code> **/ virtual void repaint(bool f = true); /** * specifies the sorting of the internal list. Newly added files * are added through this sorting. * **/ QDir::SortSpec sorting() { return mySorting; } /** * set the sorting of the view. If the sorting is the same as * the current value and sortMode is Switching, it switches the * order in the list. * * Default is QDir::Name **/ void setSorting(QDir::SortSpec sort); // a little bit complexer /** * returns the number of added files **/ uint count() const { return sorted_length; } /** * to connect a slot to the internal signal, that is emited, if * the user selects a directory. * * the connected slot must have the form * <pre>member(KFileInfo*)</pre> **/ void connectDirSelected( QObject *receiver, const char *member); /** * to connect a slot to the internal signal, that is emited, if * the user highlights a file. * * the connected slot must have the form * <pre>member(KFileInfo*)</pre> **/ void connectFileHighlighted( QObject *receiver, const char *member); /** * to connect a slot to the internal signal, that is emited, if * the user selects a file. * * the connected slot must have the form * <pre>member(KFileInfo*)</pre> **/ void connectFileSelected( QObject *receiver, const char *member); /** * the number of files. **/ uint numFiles() const { return filesNumber; } /** * the number of directories **/ uint numDirs() const { return dirsNumber; } /** * tries to find a completed filename, that starts with base * * if it fails, it returns a null string. * @param activateFound if true, the file should select the * found file (or directory) **/ virtual QString findCompletion( const char *base, bool activateFound = false ); /** * a pure virtual function to indicate, if the view should list * files. **/ virtual bool acceptsFiles() = 0; /** * a pure virtual function to indicate, if the view should list * directories. **/ virtual bool acceptsDirs() = 0;protected: /** * this function is called after the class found out the correct * index. The derived view must implement this function to add * the file in the widget. * * it's important, that the view keeps it's contents consistent * with the indicies in the sorted list of the base class * @return true, if a repaint is necessary **/ virtual bool insertItem(const KFileInfo *i, int index) = 0; /** * this function does the actual sorting. It is called by * addItem and calls itself insertItem **/ bool addItemInternal(const KFileInfo *); /** * Increasing means greater indicies means bigger values * * Decrease means greater indicies means smaller values * * Switching means, that it should switch between Increasing and * Decreasing **/ enum SortMode { Increasing, Decreasing, Switching }; /** * set the sorting mode. Default mode is Increasing **/ void setSortMode(SortMode mode) { mySortMode = mode; } /** * pure virtual function, that should be implemented to clear * the view. At this moment the list is already empty **/ virtual void clearView() = 0; /** * set the highlighted item to index. This function must be implemented * by the view **/ virtual void highlightItem(unsigned int index) = 0; /** the pixmap for normal files */ static QPixmap *file_pixmap; /** the pixmap for locked files */ static QPixmap *locked_file; /** the pixmap for normal folders */ static QPixmap *folder_pixmap; /** the pixmap for locked folders */ static QPixmap *locked_folder; /** * sets the value for the selected file and emits the correct * signal (depending on the type of the entry) **/ void select( KFileInfo *entry); /** * gets the entry at index and calls the other select function * with it **/ void select( int index ); void highlight( int index ); void highlight( KFileInfo *); /** * returns, if the view is using single click to activate directories * Note, that some views do not work completly with single click **/ bool useSingle() const { return useSingleClick; } /** * returns true, if the file at the specific position is a directory **/ bool isDir( uint index) const { return sortedArray[index]->isDir(); } /** * returns the complete file information for the file at the position * index **/ const KFileInfo *at( uint index ) const { return sortedArray[index]; } /** * compares two items in the current context (sortMode and others) * returns -1, if i1 is before i2 and 1, if the other case is true * in case, both are equal (in current context), the behaviour is * undefined! **/ int compareItems(const KFileInfo *fi1, const KFileInfo *fi2); /** * this is a help function for sorting, since I can't use the libc * version (because I have a variable sort function) * * I heard, STL has a qsort function too, but I don't want to use * STL now */ void QuickSort(KFileInfo* a[], int lo0, int hi0);private: bool useSingleClick; bool reversed; bool keepDirsFirst; QDir::SortSpec mySorting; enum SortMode mySortMode; KFileInfo **sortedArray; uint sorted_length; uint sorted_max; /** * filled for completion **/ QStrIList *nameList; /** * counters **/ uint filesNumber, dirsNumber; /** * @internal * class to distribute the signals **/ KFileInfoContentsSignaler *sig; /** * @internal * adds an item to sortedArray **/ void insertSortedItem(const KFileInfo *item, uint pos); /** * @internal * finds the correct position in sortedArray * @returns the found index **/ int findPosition(const KFileInfo *item, int left);};#endif // KFILEINFOLISTWIDGET_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -