summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2014-02-25 01:21:46 +0100
committerPetr Mrázek <peterix@gmail.com>2014-02-25 01:23:33 +0100
commit9d4e840a6e1a7169a2863fa1ff1812f8fe19e615 (patch)
tree5de17defaea9b4fc237493f0d19c00a096c8205b
parentcb5cfe724208beb7d506868fc4e50d9f13e28a53 (diff)
downloadMultiMC-9d4e840a6e1a7169a2863fa1ff1812f8fe19e615.tar
MultiMC-9d4e840a6e1a7169a2863fa1ff1812f8fe19e615.tar.gz
MultiMC-9d4e840a6e1a7169a2863fa1ff1812f8fe19e615.tar.lz
MultiMC-9d4e840a6e1a7169a2863fa1ff1812f8fe19e615.tar.xz
MultiMC-9d4e840a6e1a7169a2863fa1ff1812f8fe19e615.zip
Screenshots: Optimize image loading and memory use, fix list and button layout.
-rw-r--r--CMakeLists.txt1
-rw-r--r--gui/dialogs/ScreenshotDialog.ui31
-rw-r--r--logic/screenshots/Screenshot.cpp14
-rw-r--r--logic/screenshots/Screenshot.h4
-rw-r--r--logic/screenshots/ScreenshotList.cpp3
5 files changed, 38 insertions, 15 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index da7b0e0b..ee836cd2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -465,6 +465,7 @@ logic/lists/JavaVersionList.cpp
# the screenshots feature
logic/screenshots/Screenshot.h
+logic/screenshots/Screenshot.cpp
logic/screenshots/ScreenshotList.h
logic/screenshots/ScreenshotList.cpp
logic/screenshots/ImgurUpload.h
diff --git a/gui/dialogs/ScreenshotDialog.ui b/gui/dialogs/ScreenshotDialog.ui
index 4e42a548..eb3dafba 100644
--- a/gui/dialogs/ScreenshotDialog.ui
+++ b/gui/dialogs/ScreenshotDialog.ui
@@ -38,6 +38,9 @@
<property name="isWrapping" stdset="0">
<bool>true</bool>
</property>
+ <property name="resizeMode">
+ <enum>QListView::Adjust</enum>
+ </property>
<property name="viewMode">
<enum>QListView::IconMode</enum>
</property>
@@ -46,6 +49,20 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
+ <widget class="QPushButton" name="uploadBtn">
+ <property name="text">
+ <string>Upload</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="deleteBtn">
+ <property name="text">
+ <string>Delete</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -65,20 +82,6 @@
</property>
</widget>
</item>
- <item>
- <widget class="QPushButton" name="uploadBtn">
- <property name="text">
- <string>Upload</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="deleteBtn">
- <property name="text">
- <string>Delete</string>
- </property>
- </widget>
- </item>
</layout>
</item>
</layout>
diff --git a/logic/screenshots/Screenshot.cpp b/logic/screenshots/Screenshot.cpp
new file mode 100644
index 00000000..882e491f
--- /dev/null
+++ b/logic/screenshots/Screenshot.cpp
@@ -0,0 +1,14 @@
+#include "Screenshot.h"
+#include <QImage>
+#include <QIcon>
+QIcon ScreenShot::getImage()
+{
+ if(!imageloaded)
+ {
+ QImage image(file);
+ QImage thumbnail = image.scaledToWidth(256, Qt::SmoothTransformation);
+ m_image = QIcon(QPixmap::fromImage(thumbnail));
+ imageloaded = true;
+ }
+ return m_image;
+}
diff --git a/logic/screenshots/Screenshot.h b/logic/screenshots/Screenshot.h
index 194e70e5..815c0d47 100644
--- a/logic/screenshots/Screenshot.h
+++ b/logic/screenshots/Screenshot.h
@@ -3,9 +3,13 @@
#include <QDateTime>
#include <QString>
#include <memory>
+#include <QIcon>
struct ScreenShot
{
+ QIcon getImage();
+ QIcon m_image;
+ bool imageloaded = false;
QDateTime timestamp;
QString file;
QString url;
diff --git a/logic/screenshots/ScreenshotList.cpp b/logic/screenshots/ScreenshotList.cpp
index def1bdf7..8a64dc36 100644
--- a/logic/screenshots/ScreenshotList.cpp
+++ b/logic/screenshots/ScreenshotList.cpp
@@ -25,7 +25,7 @@ QVariant ScreenshotList::data(const QModelIndex &index, int role) const
switch (role)
{
case Qt::DecorationRole:
- return QIcon(m_screenshots.at(index.row())->file);
+ return m_screenshots.at(index.row())->getImage();
case Qt::DisplayRole:
return m_screenshots.at(index.row())->timestamp.toString("yyyy-MM-dd HH:mm:ss");
case Qt::ToolTipRole:
@@ -80,6 +80,7 @@ void ScreenshotLoadTask::executeTask()
m_list->loadShots(m_results);
emitSucceeded();
}
+
void ScreenshotList::deleteSelected(ScreenshotDialog *dialog)
{
auto screens = dialog->selected();