summaryrefslogtreecommitdiff
path: root/src/previewgenerator.cpp
diff options
context:
space:
mode:
authorTannin <devnull@localhost>2014-01-14 21:16:36 +0100
committerTannin <devnull@localhost>2014-01-14 21:16:36 +0100
commit6ed82866b07414e91dfe0c47ee5f580bfd4fe479 (patch)
tree0b9fa043236d95ea821ab8e43bf641beeda701dc /src/previewgenerator.cpp
parenta083a2d3b6506ab95d3b18ab0ffa7751750e0249 (diff)
- moved code for file previews to plugins
Diffstat (limited to 'src/previewgenerator.cpp')
-rw-r--r--src/previewgenerator.cpp76
1 files changed, 10 insertions, 66 deletions
diff --git a/src/previewgenerator.cpp b/src/previewgenerator.cpp
index 5b0a44d8..764d016d 100644
--- a/src/previewgenerator.cpp
+++ b/src/previewgenerator.cpp
@@ -22,90 +22,34 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QLabel>
#include <QImageReader>
#include <QTextEdit>
-#include <QGLPixelBuffer>
#include <QDesktopWidget>
#include <utility.h>
PreviewGenerator::PreviewGenerator()
{
- // set up image reader to be used for all image types qt (the current installation) supports
- auto imageReader = std::bind(&PreviewGenerator::genImagePreview, this, std::placeholders::_1);
-
- foreach (const QByteArray &fileType, QImageReader::supportedImageFormats()) {
- m_PreviewGenerators[QString(fileType).toLower()] = imageReader;
- }
-
- m_PreviewGenerators["txt"]
- = std::bind(&PreviewGenerator::genTxtPreview, this, std::placeholders::_1);
-
- m_PreviewGenerators["dds"]
- = std::bind(&PreviewGenerator::genDDSPreview, this, std::placeholders::_1);
QDesktopWidget desk;
m_MaxSize = desk.screenGeometry().size() * 0.8;
}
-bool PreviewGenerator::previewSupported(const QString &fileExtension) const
+void PreviewGenerator::registerPlugin(MOBase::IPluginPreview *plugin)
{
- return m_PreviewGenerators.find(fileExtension.toLower()) != m_PreviewGenerators.end();
-}
-
-QWidget *PreviewGenerator::genPreview(const QString &fileName) const
-{
- auto iter = m_PreviewGenerators.find(QFileInfo(fileName).completeSuffix().toLower());
- if (iter != m_PreviewGenerators.end()) {
- return iter->second(fileName);
- } else {
- return nullptr;
+ foreach (const QString &extension, plugin->supportedExtensions()) {
+ m_PreviewPlugins.insert(std::make_pair(extension, plugin));
}
}
-QWidget *PreviewGenerator::genImagePreview(const QString &fileName) const
-{
- QLabel *label = new QLabel();
- label->setPixmap(QPixmap(fileName));
- return label;
-}
-
-QWidget *PreviewGenerator::genTxtPreview(const QString &fileName) const
+bool PreviewGenerator::previewSupported(const QString &fileExtension) const
{
- QTextEdit *edit = new QTextEdit();
- edit->setText(MOBase::readFileText(fileName));
- edit->setReadOnly(true);
- return edit;
+ return m_PreviewPlugins.find(fileExtension.toLower()) != m_PreviewPlugins.end();
}
-QWidget *PreviewGenerator::genDDSPreview(const QString &fileName) const
+QWidget *PreviewGenerator::genPreview(const QString &fileName) const
{
- QGLWidget glWidget;
- glWidget.makeCurrent();
-
- GLuint texture = glWidget.bindTexture(fileName);
- if (!texture)
- return nullptr;
-
- // Determine the size of the DDS image
- GLint width, height;
- glBindTexture(GL_TEXTURE_2D, texture);
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width);
- glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height);
-
- if (width == 0 || height == 0)
- return nullptr;
-
- QGLPixelBuffer pbuffer(QSize(width, height), glWidget.format(), &glWidget);
- if (!pbuffer.makeCurrent())
+ auto iter = m_PreviewPlugins.find(QFileInfo(fileName).completeSuffix().toLower());
+ if (iter != m_PreviewPlugins.end()) {
+ return iter->second->genFilePreview(fileName, m_MaxSize);
+ } else {
return nullptr;
-
- pbuffer.drawTexture(QRectF(-1, -1, 2, 2), texture);
-
- QLabel *label = new QLabel();
- QImage image = pbuffer.toImage();
- if ((image.size().width() > m_MaxSize.width()) ||
- (image.size().height() > m_MaxSize.height())) {
- image = image.scaled(m_MaxSize, Qt::KeepAspectRatio);
}
-
- label->setPixmap(QPixmap::fromImage(image));
- return label;
}