From 6ed82866b07414e91dfe0c47ee5f580bfd4fe479 Mon Sep 17 00:00:00 2001 From: Tannin Date: Tue, 14 Jan 2014 21:16:36 +0100 Subject: - moved code for file previews to plugins --- src/previewgenerator.cpp | 76 +++++++----------------------------------------- 1 file changed, 10 insertions(+), 66 deletions(-) (limited to 'src/previewgenerator.cpp') 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 . #include #include #include -#include #include #include 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; } -- cgit v1.3.1