Repository navigation
Expand file tree
/
Copy pathfiletypemanager.cpp
More file actions
105 lines (86 loc) · 2.44 KB
/
Copy pathfiletypemanager.cpp
File metadata and controls
105 lines (86 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "filetypemanager.h"
#include <QFile>
#include <QFileInfo>
#include <QTextStream>
#include <QVariant>
QVariantMap FileType::toMap()
{
QVariantMap typeMap;
typeMap["typeName"] = typeName;
typeMap["mimeName"] = mimeName;
typeMap["extensions"] = extensions;
return typeMap;
}
FileTypeManager *FileTypeManager::m_instance = NULL;
FileTypeManager::FileTypeManager(QObject *parent) : QObject(parent)
{
loadTypes(); // Load and initialize all available file types
}
void FileTypeManager::loadTypes()
{
QFile mapFile(":/file.types");
FileType *type;
m_filter = "All Files (*.*);;";
if (!mapFile.open(QIODevice::ReadOnly)) return;
while(!mapFile.atEnd()){
QTextStream line(mapFile.readLine());
type = new FileType;
line >> type->typeName;
line >> type->mimeName;
if(type->typeName.isEmpty()) continue; //Invalid Type, continue
type->typeName.replace('.', ' '); //Replace all occurences of the dot(.), in the type name, with spaces
QStringList exts;
QString extString;
while(!line.atEnd()){
QString ext;
line >> ext;
if(!ext.isEmpty()){
exts << ext;
extString += tr("*.%1 ").arg(ext);
}
}
extString.chop(1); // Remove the leading space from the extension string
type->extensions = exts;
m_filter += tr("%1 (%2);;").arg(type->typeName).arg(extString);
m_types.append(type);
if(type->mimeName == "text/plain")
m_defaultType = type;
}
}
QList<FileType*>* FileTypeManager::getTypes()
{
return &m_types;
}
int FileTypeManager::getTypeCount()
{
return m_types.size();
}
FileType* FileTypeManager::getDefaultType()
{
return m_defaultType;
}
FileType* FileTypeManager::getTypeByName(const QString &typeName)
{
for(int i=0; i<m_types.size(); i++){
if(typeName == m_types.at(i)->typeName)
return m_types.at(i);
}
return m_defaultType;
}
FileType* FileTypeManager::getTypeByExtension(QString extension)
{
for(int i=0; i<m_types.size(); i++){
if(m_types.at(i)->extensions.contains(extension))
return m_types.at(i);
}
return m_defaultType;
}
FileType* FileTypeManager::getTypeByFileName(const QString &fileName)
{
QFileInfo info(fileName);
return getTypeByExtension(info.suffix());
}
QString& FileTypeManager::getFilterString()
{
return m_filter;
}