~carlos-mazieri/ubuntu-filemanager-app/model-using-qfilesystemwatcher

« back to all changes in this revision

Viewing changes to test_folderlistmodel/regression/mimetypes/src/mimetypes/qmimeglobpattern_p.h

  • Committer: carlos.mazieri at gmail
  • Date: 2013-05-25 17:21:13 UTC
  • Revision ID: carlos.mazieri@gmail.com-20130525172113-s8e1ajb7c4egpjw5
added QMimeType to try QIcon::fromTheme() to get icons.

added a private Clipboard handling to prevent Qcliboard not working on Nemo emulator

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/****************************************************************************
 
2
**
 
3
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
 
4
** Contact: http://www.qt-project.org/
 
5
**
 
6
** This file is part of the QtCore module of the Qt Toolkit.
 
7
**
 
8
** $QT_BEGIN_LICENSE:LGPL$
 
9
** GNU Lesser General Public License Usage
 
10
** This file may be used under the terms of the GNU Lesser General Public
 
11
** License version 2.1 as published by the Free Software Foundation and
 
12
** appearing in the file LICENSE.LGPL included in the packaging of this
 
13
** file. Please review the following information to ensure the GNU Lesser
 
14
** General Public License version 2.1 requirements will be met:
 
15
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 
16
**
 
17
** In addition, as a special exception, Nokia gives you certain additional
 
18
** rights. These rights are described in the Nokia Qt LGPL Exception
 
19
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 
20
**
 
21
** GNU General Public License Usage
 
22
** Alternatively, this file may be used under the terms of the GNU General
 
23
** Public License version 3.0 as published by the Free Software Foundation
 
24
** and appearing in the file LICENSE.GPL included in the packaging of this
 
25
** file. Please review the following information to ensure the GNU General
 
26
** Public License version 3.0 requirements will be met:
 
27
** http://www.gnu.org/copyleft/gpl.html.
 
28
**
 
29
** Other Usage
 
30
** Alternatively, this file may be used in accordance with the terms and
 
31
** conditions contained in a signed written agreement between you and Nokia.
 
32
**
 
33
**
 
34
**
 
35
**
 
36
**
 
37
**
 
38
** $QT_END_LICENSE$
 
39
**
 
40
****************************************************************************/
 
41
 
 
42
#ifndef QMIMEGLOBPATTERN_P_H
 
43
#define QMIMEGLOBPATTERN_P_H
 
44
 
 
45
#include <QtCore/qstringlist.h>
 
46
#include <QtCore/qhash.h>
 
47
 
 
48
QT_BEGIN_NAMESPACE
 
49
 
 
50
struct QMimeGlobMatchResult
 
51
{
 
52
    QMimeGlobMatchResult()
 
53
    : m_weight(0), m_matchingPatternLength(0)
 
54
    {}
 
55
 
 
56
    void addMatch(const QString &mimeType, int weight, const QString &pattern);
 
57
 
 
58
    QStringList m_matchingMimeTypes;
 
59
    int m_weight;
 
60
    int m_matchingPatternLength;
 
61
    QString m_foundSuffix;
 
62
};
 
63
 
 
64
class QMimeGlobPattern
 
65
{
 
66
public:
 
67
    static const unsigned MaxWeight = 100;
 
68
    static const unsigned DefaultWeight = 50;
 
69
    static const unsigned MinWeight = 1;
 
70
 
 
71
    explicit QMimeGlobPattern(const QString &thePattern, const QString &theMimeType, unsigned theWeight = DefaultWeight, Qt::CaseSensitivity s = Qt::CaseInsensitive) :
 
72
        m_pattern(thePattern), m_mimeType(theMimeType), m_weight(theWeight), m_caseSensitivity(s)
 
73
    {
 
74
        if (s == Qt::CaseInsensitive) {
 
75
            m_pattern = m_pattern.toLower();
 
76
        }
 
77
    }
 
78
    ~QMimeGlobPattern() {}
 
79
 
 
80
    bool matchFileName(const QString &filename) const;
 
81
 
 
82
    inline const QString &pattern() const { return m_pattern; }
 
83
    inline unsigned weight() const { return m_weight; }
 
84
    inline const QString &mimeType() const { return m_mimeType; }
 
85
    inline bool isCaseSensitive() const { return m_caseSensitivity == Qt::CaseSensitive; }
 
86
 
 
87
private:
 
88
    QString m_pattern;
 
89
    QString m_mimeType;
 
90
    int m_weight;
 
91
    Qt::CaseSensitivity m_caseSensitivity;
 
92
};
 
93
 
 
94
class QMimeGlobPatternList : public QList<QMimeGlobPattern>
 
95
{
 
96
public:
 
97
    bool hasPattern(const QString &mimeType, const QString &pattern) const
 
98
    {
 
99
        const_iterator it = begin();
 
100
        const const_iterator myend = end();
 
101
        for (; it != myend; ++it)
 
102
            if ((*it).pattern() == pattern && (*it).mimeType() == mimeType)
 
103
                return true;
 
104
        return false;
 
105
    }
 
106
 
 
107
    /*!
 
108
        "noglobs" is very rare occurrence, so it's ok if it's slow
 
109
     */
 
110
    void removeMimeType(const QString &mimeType)
 
111
    {
 
112
        QMutableListIterator<QMimeGlobPattern> it(*this);
 
113
        while (it.hasNext()) {
 
114
            if (it.next().mimeType() == mimeType)
 
115
                it.remove();
 
116
        }
 
117
    }
 
118
 
 
119
    void match(QMimeGlobMatchResult &result, const QString &fileName) const;
 
120
};
 
121
 
 
122
/*!
 
123
    Result of the globs parsing, as data structures ready for efficient MIME type matching.
 
124
    This contains:
 
125
    1) a map of fast regular patterns (e.g. *.txt is stored as "txt" in a qhash's key)
 
126
    2) a linear list of high-weight globs
 
127
    3) a linear list of low-weight globs
 
128
 */
 
129
class QMimeAllGlobPatterns
 
130
{
 
131
public:
 
132
    typedef QHash<QString, QStringList> PatternsMap; // MIME type -> patterns
 
133
 
 
134
    void addGlob(const QMimeGlobPattern &glob);
 
135
    void removeMimeType(const QString &mimeType);
 
136
    QStringList matchingGlobs(const QString &fileName, QString *foundSuffix) const;
 
137
    void clear();
 
138
 
 
139
    PatternsMap m_fastPatterns; // example: "doc" -> "application/msword", "text/plain"
 
140
    QMimeGlobPatternList m_highWeightGlobs;
 
141
    QMimeGlobPatternList m_lowWeightGlobs; // <= 50, including the non-fast 50 patterns
 
142
};
 
143
 
 
144
QT_END_NAMESPACE
 
145
 
 
146
#endif // QMIMEGLOBPATTERN_P_H