diff options
| author | Tannin <devnull@localhost> | 2014-01-14 21:16:36 +0100 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2014-01-14 21:16:36 +0100 |
| commit | 6ed82866b07414e91dfe0c47ee5f580bfd4fe479 (patch) | |
| tree | 0b9fa043236d95ea821ab8e43bf641beeda701dc /src | |
| parent | a083a2d3b6506ab95d3b18ab0ffa7751750e0249 (diff) | |
- moved code for file previews to plugins
Diffstat (limited to 'src')
| -rw-r--r-- | src/mainwindow.cpp | 6 | ||||
| -rw-r--r-- | src/organizer.pro | 9 | ||||
| -rw-r--r-- | src/pluginlist.cpp | 5 | ||||
| -rw-r--r-- | src/previewgenerator.cpp | 76 | ||||
| -rw-r--r-- | src/previewgenerator.h | 6 | ||||
| -rw-r--r-- | src/version.rc | 4 |
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
|
