⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qfilesystemmodel_p.h

📁 奇趣公司比较新的qt/emd版本
💻 H
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef QFILESYSTEMMODEL_H#define QFILESYSTEMMODEL_H////  W A R N I N G//  -------------//// This file is not part of the Qt API.  It exists purely as an// implementation detail.  This header file may change from version to// version without notice, or even be removed.//// We mean it.//#include <QtCore/qabstractitemmodel.h>#include <QtCore/qpair.h>#include <QtCore/qdir.h>#include <QtGui/qicon.h>class ExtendedInformation;class QFileSystemModelPrivate;class QFileIconProvider;#ifndef QT_NO_FILESYSTEMWATCHERclass Q_AUTOTEST_EXPORT QFileSystemModel : public QAbstractItemModel{    Q_OBJECT    Q_PROPERTY(bool resolveSymlinks READ resolveSymlinks WRITE setResolveSymlinks)    Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly)    Q_PROPERTY(bool nameFilterDisables READ nameFilterDisables WRITE setNameFilterDisables)Q_SIGNALS:    void rootPathChanged(const QString &newPath);public:    enum Roles {        FileIconRole = Qt::DecorationRole,        FilePathRole = Qt::UserRole + 1,        FileNameRole    };    explicit QFileSystemModel(QObject *parent = 0);    ~QFileSystemModel();    QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;    QModelIndex index(const QString &path, int column = 0) const;    QModelIndex parent(const QModelIndex &child) const;    bool hasChildren(const QModelIndex &parent = QModelIndex()) const;    bool canFetchMore(const QModelIndex &parent) const;    void fetchMore(const QModelIndex &parent);    int rowCount(const QModelIndex &parent = QModelIndex()) const;    int columnCount(const QModelIndex &parent = QModelIndex()) const;    QVariant myComputer(int role = Qt::DisplayRole) const;    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;    Qt::ItemFlags flags(const QModelIndex &index) const;    void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);    QStringList mimeTypes() const;    QMimeData *mimeData(const QModelIndexList &indexes) const;    bool dropMimeData(const QMimeData *data, Qt::DropAction action,                      int row, int column, const QModelIndex &parent);    Qt::DropActions supportedDropActions() const;    // QFileSystemModel specific API    QModelIndex setRootPath(const QString &path);    QString rootPath() const;    QDir rootDirectory() const;    void setIconProvider(QFileIconProvider *provider);    QFileIconProvider *iconProvider() const;    void setFilter(QDir::Filters filters);    QDir::Filters filter() const;    void setResolveSymlinks(bool enable);    bool resolveSymlinks() const;    void setReadOnly(bool enable);    bool isReadOnly() const;    void setNameFilterDisables(bool enable);    bool nameFilterDisables() const;    void setNameFilters(const QStringList &filters);    QStringList nameFilters() const;    QString filePath(const QModelIndex &index) const;    bool isDir(const QModelIndex &index) const;    qint64 size(const QModelIndex &index) const;    QString type(const QModelIndex &index) const;    QDateTime lastModified(const QModelIndex &index) const;    QModelIndex mkdir(const QModelIndex &parent, const QString &name);    inline bool rmdir(const QModelIndex &index) { QDir dir; return dir.rmdir(filePath(index)); }    inline QString fileName(const QModelIndex &index) const { return index.data(Qt::DisplayRole).toString(); }    inline QIcon fileIcon(const QModelIndex &index) const { return qvariant_cast<QIcon>(index.data(Qt::DecorationRole)); }    QFile::Permissions permissions(const QModelIndex &index) const;    inline QFileInfo fileInfo(const QModelIndex &index) const { return QFileInfo(filePath(index)); }    inline bool remove(const QModelIndex &index) { if (isDir(index)) return rmdir(index); else return QFile::remove(filePath(index)); }protected:    QFileSystemModel(QFileSystemModelPrivate &, QObject *parent = 0);    void timerEvent(QTimerEvent *event);private:    Q_DECLARE_PRIVATE(QFileSystemModel)    Q_DISABLE_COPY(QFileSystemModel)    Q_PRIVATE_SLOT(d_func(), void _q_directoryChanged(const QString &directory, const QStringList &list))    Q_PRIVATE_SLOT(d_func(), void _q_performDelayedSort())    Q_PRIVATE_SLOT(d_func(), void _q_fileSystemChanged(const QString &path, const QList<QPair<QString, QFileInfo> > &))    Q_PRIVATE_SLOT(d_func(), void _q_resolvedName(const QString &fileName, const QString &resolvedName))};#include <qabstractitemmodel.h>#include <private/qabstractitemmodel_p.h>#include "qfileinfogatherer_p.h"#include <qdir.h>#include <qicon.h>#include <qfileinfo.h>#include <qtimer.h>#include <qhash.h>class Q_AUTOTEST_EXPORT QFileSystemModelPrivate : public QAbstractItemModelPrivate{    Q_DECLARE_PUBLIC(QFileSystemModel)public:    class QFileSystemNode    {    public:        QFileSystemNode(const QString &filename = QString(), QFileSystemNode *p=0)            : fileName(filename), populatedChildren(false), parent(p), info(0) {}        ~QFileSystemNode() { delete info; info = 0; }        QString fileName;        inline qint64 size() const { if (info && !info->isDir()) return info->size; return 0; }        inline QString type() const { if (info) return info->displayType; return QLatin1String(""); }        inline QDateTime lastModified() const { if (info) return info->lastModified; return QDateTime(); }        inline QFile::Permissions permissions() const { if (info) return info->permissions; return 0; }        inline bool isReadable() const { return ((permissions() & QFile::ReadUser) != 0); }        inline bool isWritable() const { return ((permissions() & QFile::WriteUser) != 0); }        inline bool isExecutable() const { return ((permissions() & QFile::ExeUser) != 0); }        inline bool isDir() const {            if (info)                return info->isDir();            if (children.count() > 0)                return true;            return false;        }        inline bool isFile() const { if (info) return info->isFile(); return true; }        inline bool isSystem() const { if (info) return info->isSystem(); return true; }        inline bool isHidden() const { if (info) return info->isHidden; return false; }        inline bool isSymLink() const { if (info) return info->isSymLink; return false; }        inline bool caseSensitive() const { if (info) return info->caseSensitive; return false; }        inline QIcon icon() const { if (info) return info->icon; return QIcon(); }        inline bool operator <(const QFileSystemNode &node) const {            if (caseSensitive() || node.caseSensitive())                return fileName < node.fileName;            return fileName.toLower() < node.fileName.toLower();        }        inline bool operator >(const QString &name) const {            if (caseSensitive())                return fileName > name;            return fileName.toLower() > name.toLower();        }        inline bool operator <(const QString &name) const {            if (caseSensitive())                return fileName < name;            return fileName.toLower() < name.toLower();        }        inline bool operator !=(const QExtendedInformation &fileInfo) const {            return !operator==(fileInfo);        }        bool operator ==(const QString &name) const {            if (caseSensitive())                return fileName == name;            return fileName.toLower() == name.toLower();        }        bool operator ==(const QExtendedInformation &fileInfo) const {            return info && (*info == fileInfo);        }        inline bool hasInformation() const { return info != 0; }        void populate(const QExtendedInformation &fileInfo) {            if (!info)                info = new QExtendedInformation();            (*info) = fileInfo;        }        // children shouldn't normally be accessed directly, use node()        inline int visibleLocation(int childRow) {            return visibleChildren.indexOf(childRow);        }        bool populatedChildren;        QList<QFileSystemNode> children;        QList<int> visibleChildren;        QFileSystemNode *parent;    private:        QExtendedInformation *info;    };    QFileSystemModelPrivate() :            forceSort(true),            sortColumn(0),            sortOrder(Qt::AscendingOrder),            readOnly(true),            setRootPath(false),            filters(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs),            nameFilterDisables(true) // false on windows, true on mac and unix    {        delayedSortTimer.setSingleShot(true);    }    void init();    /*      \internal      Return true if index which is owned by node is hidden by the filter.    */    inline bool isHiddenByFilter(QFileSystemNode *indexNode, const QModelIndex &index) const    {       return (indexNode != &root && !index.isValid());    }    QFileSystemNode *node(const QModelIndex &index) const;    QFileSystemNode *node(const QString &path, bool fetch = true) const;    inline QModelIndex index(const QString &path) { return index(node(path)); }    QModelIndex index(const QFileSystemNode *node) const;    bool filtersAcceptsNode(const QFileSystemNode *node) const;    bool passNameFilters(const QFileSystemNode *node) const;    void removeNode(QFileSystemNode *parentNode, int itemLocation);    int addNode(QFileSystemNode *parentNode, const QString &fileName);    void addVisibleFiles(QFileSystemNode *parentNode, const QStringList &newFiles);    void removeVisibleFile(QFileSystemNode *parentNode, int visibleLocation);    void sortChildren(int column, Qt::SortOrder order, const QModelIndex &parent);    inline int translateVisibleLocation(QFileSystemNode *parent, int row) const {        return (sortOrder == Qt::AscendingOrder) ? row : parent->visibleChildren.count() - row - 1;    }    inline static QString myComputer() {        // ### TODO We should query the system to find out what the string should be        // XP == "My Computer",        // Vista == "Computer",        // OS X == "Computer" (sometime user generated) "Benjamin's PowerBook G4"#ifdef Q_OS_WIN        return QFileSystemModel::tr("My Computer");#else        return QFileSystemModel::tr("Computer");#endif    }    inline void delayedSort() {        if (!delayedSortTimer.isActive())            delayedSortTimer.start(0);    }    static bool caseInsensitiveLessThan(const QString &s1, const QString &s2)    {       return s1.toLower() < s2.toLower();    }    static bool nodeCaseInsensitiveLessThan(const QFileSystemModelPrivate::QFileSystemNode &s1, const QFileSystemModelPrivate::QFileSystemNode &s2)    {       return s1.fileName.toLower() < s2.fileName.toLower();    }    inline int findChild(const QFileSystemNode *parent, const QFileSystemNode &node) const {        QList<QFileSystemNode>::const_iterator iterator;        if (parent->caseSensitive())            iterator = (qBinaryFind(parent->children.begin(), parent->children.end(), node));        else            iterator = (qBinaryFind(parent->children.begin(), parent->children.end(), node, nodeCaseInsensitiveLessThan));        if (iterator == parent->children.end())            return -1;        int location = (iterator - parent->children.begin());        Q_ASSERT(location < parent->children.count());        return location;    }    inline int findWhereToInsertChild(const QFileSystemNode *parent, const QFileSystemNode *node) const {        QList<QFileSystemNode>::const_iterator iterator;        if (parent->caseSensitive()) {            iterator = (qUpperBound(parent->children.begin(), parent->children.end(), *node));        } else            iterator = (qUpperBound(parent->children.begin(), parent->children.end(), *node, QFileSystemModelPrivate::nodeCaseInsensitiveLessThan));        return (iterator - parent->children.begin());    }    QIcon icon(const QModelIndex &index) const;    QString name(const QModelIndex &index) const;    QString filePath(const QModelIndex &index) const;    QString size(const QModelIndex &index) const;    static QString size(qint64 bytes);    QString type(const QModelIndex &index) const;    QString time(const QModelIndex &index) const;    void _q_directoryChanged(const QString &directory, const QStringList &list);    void _q_performDelayedSort();    void _q_fileSystemChanged(const QString &path, const QList<QPair<QString, QFileInfo> > &);    void _q_resolvedName(const QString &fileName, const QString &resolvedName);    static int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity cs);    QDir rootDir;#ifndef QT_NO_FILESYSTEMWATCHER    QFileInfoGatherer fileInfoGatherer;#endif    QTimer delayedSortTimer;    bool forceSort;    int sortColumn;    Qt::SortOrder sortOrder;    bool readOnly;    bool setRootPath;    QDir::Filters filters;    QList<const QFileSystemNode*> bypassFilters;    bool nameFilterDisables;#ifndef QT_NO_REGEXP    QList<QRegExp> nameFilters;#endif    // ### Qt 5: resolvedSymLinks goes away    QHash<QString, QString> resolvedSymLinks;    QFileSystemNode root;    QBasicTimer fetchingTimer;    struct Fetching {        QString dir;        QString file;        const QFileSystemNode *node;    };    QList<Fetching> toFetch;};#endif // QT_NO_FILESYSTEMWATCHER#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -