summaryrefslogtreecommitdiff
path: root/src
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
parenta083a2d3b6506ab95d3b18ab0ffa7751750e0249 (diff)
- moved code for file previews to plugins
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp6
-rw-r--r--src/organizer.pro9
-rw-r--r--src/pluginlist.cpp5
-rw-r--r--src/previewgenerator.cpp76
-rw-r--r--src/previewgenerator.h6
-rw-r--r--src/version.rc4
6 files changed, 27 insertions, 79 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 139db3f0..76bff3a0 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1017,6 +1017,12 @@ bool MainWindow::registerPlugin(QObject *plugin, const QString &fileName)
return true;
}
}
+ { // preview plugins
+ IPluginPreview *preview = qobject_cast<IPluginPreview*>(plugin);
+ if (verifyPlugin(preview)) {
+ m_PreviewGenerator.registerPlugin(preview);
+ }
+ }
{ // proxy plugins
IPluginProxy *proxy = qobject_cast<IPluginProxy*>(plugin);
if (verifyPlugin(proxy)) {
diff --git a/src/organizer.pro b/src/organizer.pro
index 25384e69..dd745edb 100644
--- a/src/organizer.pro
+++ b/src/organizer.pro
@@ -80,14 +80,7 @@ SOURCES += \
../esptk/subrecord.cpp \
noeditdelegate.cpp \
previewgenerator.cpp \
- previewdialog.cpp \
- gl/gltexloaders.cpp \
- gl/dds/dds_api.cpp \
- gl/dds/Image.cpp \
- gl/dds/DirectDrawSurface.cpp \
- gl/dds/Stream.cpp \
- gl/dds/BlockDXT.cpp \
- gl/dds/ColorBlock.cpp
+ previewdialog.cpp
HEADERS += \
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index 20d4d357..a0045ab3 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -312,6 +312,7 @@ bool PluginList::readLoadOrder(const QString &fileName)
void PluginList::readEnabledFrom(const QString &fileName)
{
+qDebug("read enabled from %s", qPrintable(fileName));
for (std::vector<ESPInfo>::iterator iter = m_ESPs.begin(); iter != m_ESPs.end(); ++iter) {
if (!iter->m_ForceEnabled) {
iter->m_Enabled = false;
@@ -389,7 +390,7 @@ void PluginList::writePlugins(const QString &fileName, bool writeUnchecked) cons
file.write(textCodec->fromUnicode("# This file was automatically generated by Mod Organizer.\r\n"));
bool invalidFileNames = false;
-
+ int writtenCount = 0;
for (size_t i = 0; i < m_ESPs.size(); ++i) {
int priority = m_ESPsByPriority[i];
if ((m_ESPs[priority].m_Enabled || writeUnchecked) && !m_ESPs[priority].m_Removed) {
@@ -401,6 +402,7 @@ void PluginList::writePlugins(const QString &fileName, bool writeUnchecked) cons
file.write(textCodec->fromUnicode(m_ESPs[priority].m_Name));
}
file.write("\r\n");
+ ++writtenCount;
}
}
file.close();
@@ -783,6 +785,7 @@ QVariant PluginList::data(const QModelIndex &modelIndex, int role) const
bool PluginList::setData(const QModelIndex &modIndex, const QVariant &value, int role)
{
if (role == Qt::CheckStateRole) {
+qDebug("uncheck plugin");
m_ESPs[modIndex.row()].m_Enabled = value.toInt() == Qt::Checked;
emit dataChanged(modIndex, modIndex);
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;
}
diff --git a/src/previewgenerator.h b/src/previewgenerator.h
index 4648e27e..e872b06b 100644
--- a/src/previewgenerator.h
+++ b/src/previewgenerator.h
@@ -24,12 +24,15 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QWidget>
#include <map>
#include <functional>
+#include <ipluginpreview.h>
class PreviewGenerator
{
public:
PreviewGenerator();
+ void registerPlugin(MOBase::IPluginPreview *plugin);
+
bool previewSupported(const QString &fileExtension) const;
QWidget *genPreview(const QString &fileName) const;
@@ -38,11 +41,10 @@ private:
QWidget *genImagePreview(const QString &fileName) const;
QWidget *genTxtPreview(const QString &fileName) const;
- QWidget *genDDSPreview(const QString &fileName) const;
private:
- std::map<QString, std::function<QWidget*(const QString&)> > m_PreviewGenerators;
+ std::map<QString, MOBase::IPluginPreview*> m_PreviewPlugins;
QSize m_MaxSize;
diff --git a/src/version.rc b/src/version.rc
index 83c59d21..1beee814 100644
--- a/src/version.rc
+++ b/src/version.rc
@@ -1,7 +1,7 @@
#include "Winver.h"
-#define VER_FILEVERSION 1,0,13,0
-#define VER_FILEVERSION_STR "1,0,13,0\0"
+#define VER_FILEVERSION 1,1,0,0
+#define VER_FILEVERSION_STR "1,1,0,0\0"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION