Skip to content

Commit f47d910

Browse files
authored
Add raw data preview support (#10)
- Also adds psc as valid text preview
1 parent 1bfa648 commit f47d910

2 files changed

Lines changed: 31 additions & 14 deletions

File tree

src/previewbase.cpp

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ bool PreviewBase::init(IOrganizer *moInfo)
4444
const QStringList& blacklist = m_MOInfo->pluginSetting(name(), "blacklisted_extensions").toString().toLower().split(',');
4545

4646
// set up image reader to be used for all image types qt (the current installation) supports
47-
auto imageReader = std::bind(&PreviewBase::genImagePreview, this, std::placeholders::_1, std::placeholders::_2);
47+
auto imageReader = std::bind(&PreviewBase::genImagePreview, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
4848

4949
foreach(const QByteArray & fileType, QImageReader::supportedImageFormats()) {
5050
auto strFileType = QString(fileType).toLower();
@@ -56,9 +56,9 @@ bool PreviewBase::init(IOrganizer *moInfo)
5656
m_PreviewGenerators[strFileType] = imageReader;
5757
}
5858

59-
const QStringList supportedTextFormats = { "txt", "ini", "json", "log", "cfg" };
59+
const QStringList supportedTextFormats = { "txt", "ini", "json", "log", "cfg", "psc" };
6060

61-
auto textReader = std::bind(&PreviewBase::genTxtPreview, this, std::placeholders::_1, std::placeholders::_2);
61+
auto textReader = std::bind(&PreviewBase::genTxtPreview, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
6262

6363
foreach(const QString fileType, supportedTextFormats) {
6464

@@ -116,20 +116,31 @@ std::set<QString> PreviewBase::supportedExtensions() const
116116
return extensions;
117117
}
118118

119-
QWidget *PreviewBase::genFilePreview(const QString &fileName, const QSize &maxSize) const
119+
QWidget* PreviewBase::genFilePreview(const QString &fileName, const QSize &maxSize) const
120+
{
121+
return genDataPreview(nullptr, fileName, maxSize);
122+
}
123+
124+
QWidget* PreviewBase::genDataPreview(const QByteArray& fileData, const QString& fileName,
125+
const QSize& maxSize) const
120126
{
121127
auto iter = m_PreviewGenerators.find(QFileInfo(fileName).suffix().toLower());
122128
if (iter != m_PreviewGenerators.end()) {
123-
return iter->second(fileName, maxSize);
129+
return iter->second(fileName, maxSize, fileData);
124130
} else {
125131
return nullptr;
126132
}
127133
}
128134

129-
QWidget *PreviewBase::genImagePreview(const QString &fileName, const QSize&) const
135+
QWidget *PreviewBase::genImagePreview(const QString &fileName, const QSize&, const QByteArray& fileData) const
130136
{
131137
QLabel *label = new QLabel();
132-
QPixmap pic = QPixmap(fileName);
138+
QPixmap pic;
139+
if (fileData == nullptr) {
140+
pic = QPixmap(fileName);
141+
} else {
142+
pic.loadFromData(fileData);
143+
}
133144
QSize screenSize = QApplication::primaryScreen()->geometry().size();
134145
// ensure the output image is no more than 80% of the screen height.
135146
// If the aspect ratio is higher than that of the screen this would still allow the image to extend
@@ -142,10 +153,14 @@ QWidget *PreviewBase::genImagePreview(const QString &fileName, const QSize&) con
142153
return label;
143154
}
144155

145-
QWidget *PreviewBase::genTxtPreview(const QString &fileName, const QSize&) const
156+
QWidget *PreviewBase::genTxtPreview(const QString &fileName, const QSize&, const QByteArray& fileData) const
146157
{
147158
QTextEdit *edit = new QTextEdit();
148-
edit->setText(MOBase::readFileText(fileName));
159+
if (fileData == nullptr) {
160+
edit->setText(MOBase::readFileText(fileName));
161+
} else {
162+
edit->setText(MOBase::decodeTextData(fileData));
163+
}
149164
edit->setReadOnly(true);
150165
return edit;
151166
}

src/previewbase.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,17 @@ class PreviewBase : public MOBase::IPluginPreview
4747

4848
public:
4949
virtual std::set<QString> supportedExtensions() const;
50-
virtual QWidget *genFilePreview(const QString &fileName, const QSize &maxSize) const;
50+
virtual bool supportsArchives() const override { return true; }
51+
virtual QWidget* genFilePreview(const QString &fileName, const QSize &maxSize) const;
52+
virtual QWidget* genDataPreview(const QByteArray& fileData, const QString& fileName,
53+
const QSize& maxSize) const override;
5154

5255
private:
53-
54-
QWidget *genImagePreview(const QString &fileName, const QSize &maxSize) const;
55-
QWidget *genTxtPreview(const QString &fileName, const QSize &maxSize) const;
56+
QWidget *genImagePreview(const QString &fileName, const QSize &maxSize, const QByteArray& fileData) const;
57+
QWidget* genTxtPreview(const QString& fileName, const QSize& maxSize, const QByteArray& fileData) const;
5658

5759
private:
58-
std::map<QString, std::function<QWidget*(const QString&, const QSize&)> > m_PreviewGenerators;
60+
std::map<QString, std::function<QWidget*(const QString&, const QSize&, const QByteArray&)> > m_PreviewGenerators;
5961

6062
private:
6163
const MOBase::IOrganizer* m_MOInfo;

0 commit comments

Comments
 (0)