summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2017-12-17 16:17:38 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-12-18 12:07:10 -0800
commit05a1626c7e14978c55a9670f35ff72e2a3388096 (patch)
tree191f020470db156e8e757cffc4d75980b16cabf3 /desktop-widgets
parent0d01c70f3a376fbba09137ccf677cf0cd754719c (diff)
downloadsubsurface-05a1626c7e14978c55a9670f35ff72e2a3388096.tar.gz
Implement different zoom levels for dive photos tab
This implements different zoom levels for the dive photos tab as suggested by Stefan Fuchs <sfuchs@gmx.de> in #898. The zoom level can be changed using a slider or CTRL+mousewheel. Zoom levels range from a third of the standard thumbnail size to thrice the standard thumbnail size. Thumbnails are cached in maximum resolution and scaled down on the fly. Because the profile widget took its pictures from the photo list model, an extra picture copy with a fixed size had to be introduced. The UI is still a bit crude. Reported-by: Stefan Fuchs <sfuchs@gmx.de> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r--desktop-widgets/divepicturewidget.cpp14
-rw-r--r--desktop-widgets/divepicturewidget.h2
-rw-r--r--desktop-widgets/tab-widgets/TabDivePhotos.cpp9
-rw-r--r--desktop-widgets/tab-widgets/TabDivePhotos.h1
-rw-r--r--desktop-widgets/tab-widgets/TabDivePhotos.ui36
5 files changed, 62 insertions, 0 deletions
diff --git a/desktop-widgets/divepicturewidget.cpp b/desktop-widgets/divepicturewidget.cpp
index a6864a5d9..46de16d09 100644
--- a/desktop-widgets/divepicturewidget.cpp
+++ b/desktop-widgets/divepicturewidget.cpp
@@ -59,3 +59,17 @@ void DivePictureWidget::mousePressEvent(QMouseEvent *event)
QListView::mousePressEvent(event);
}
}
+
+void DivePictureWidget::wheelEvent(QWheelEvent *event)
+{
+ if (event->modifiers() == Qt::ControlModifier) {
+ // Angle delta is given in eighth parts of a degree. A classical mouse
+ // wheel click is 15 degrees. Each click should correspond to one zoom step.
+ // Therefore, divide by 15*8=120. To also support touch pads and finer-grained
+ // mouse wheels, take care to always round away from zero.
+ int delta = event->angleDelta().y();
+ int carry = delta > 0 ? 119 : -119;
+ emit zoomLevelChanged((delta + carry) / 120);
+ } else
+ QListView::wheelEvent(event);
+}
diff --git a/desktop-widgets/divepicturewidget.h b/desktop-widgets/divepicturewidget.h
index 09d4608c4..bf48a9d1b 100644
--- a/desktop-widgets/divepicturewidget.h
+++ b/desktop-widgets/divepicturewidget.h
@@ -14,9 +14,11 @@ public:
protected:
void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
signals:
void photoDoubleClicked(const QString filePath);
+ void zoomLevelChanged(int delta);
};
class DivePictureThumbnailThread : public QThread {
diff --git a/desktop-widgets/tab-widgets/TabDivePhotos.cpp b/desktop-widgets/tab-widgets/TabDivePhotos.cpp
index 86749e770..571e0a3ac 100644
--- a/desktop-widgets/tab-widgets/TabDivePhotos.cpp
+++ b/desktop-widgets/tab-widgets/TabDivePhotos.cpp
@@ -29,6 +29,10 @@ TabDivePhotos::TabDivePhotos(QWidget *parent)
QDesktopServices::openUrl(QUrl::fromLocalFile(path));
}
);
+ connect(ui->photosView, &DivePictureWidget::zoomLevelChanged,
+ this, &TabDivePhotos::changeZoomLevel);
+ connect(ui->zoomSlider, &QAbstractSlider::valueChanged,
+ DivePictureModel::instance(), &DivePictureModel::setZoomLevel);
}
TabDivePhotos::~TabDivePhotos()
@@ -98,3 +102,8 @@ void TabDivePhotos::updateData()
divePictureModel->updateDivePictures();
}
+void TabDivePhotos::changeZoomLevel(int delta)
+{
+ // We count on QSlider doing bound checks
+ ui->zoomSlider->setValue(ui->zoomSlider->value() + delta);
+}
diff --git a/desktop-widgets/tab-widgets/TabDivePhotos.h b/desktop-widgets/tab-widgets/TabDivePhotos.h
index 9b711595c..e2e7aa05c 100644
--- a/desktop-widgets/tab-widgets/TabDivePhotos.h
+++ b/desktop-widgets/tab-widgets/TabDivePhotos.h
@@ -26,6 +26,7 @@ private slots:
void addPhotosFromURL();
void removeAllPhotos();
void removeSelectedPhotos();
+ void changeZoomLevel(int delta);
private:
Ui::TabDivePhotos *ui;
diff --git a/desktop-widgets/tab-widgets/TabDivePhotos.ui b/desktop-widgets/tab-widgets/TabDivePhotos.ui
index 35cfd375a..21e4544e6 100644
--- a/desktop-widgets/tab-widgets/TabDivePhotos.ui
+++ b/desktop-widgets/tab-widgets/TabDivePhotos.ui
@@ -21,6 +21,42 @@
</property>
</widget>
</item>
+ <item>
+ <layout class="QHBoxLayout" name="zoomLayout">
+ <item>
+ <widget class="QLabel" name="zoomLabel">
+ <property name="text">
+ <string>Zoom level</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSlider" name="zoomSlider">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="singleStep">
+ <number>1</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="tickPosition">
+ <enum>QSlider::TicksBelow</enum>
+ </property>
+ <property name="tickInterval">
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
<customwidgets>