diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 0b77e7bed1..085392c2f8 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -175,6 +175,7 @@ def create_defs(): defs['show_highlight_toggle_button'] = False defs['add_comments_to_email'] = False defs['cb_preserve_aspect_ratio'] = False + defs['cb_double_click_to_activate'] = False defs['gpm_template_editor_font_size'] = 10 defs['show_emblems'] = False defs['emblem_size'] = 32 diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 0c8bcd696e..36fc2fa53d 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -193,6 +193,8 @@ class CoverFlow(pictureflow.PictureFlow): self.setPreserveAspectRatio(gprefs['cb_preserve_aspect_ratio']) if not gprefs['cover_browser_reflections']: self.setShowReflections(False) + if gprefs['cb_double_click_to_activate']: + self.setActivateOnDoubleClick(True) def one_auto_scroll(self): if self.currentSlide() >= self.count() - 1: diff --git a/src/calibre/gui2/pictureflow/pictureflow.cpp b/src/calibre/gui2/pictureflow/pictureflow.cpp index 1069e9108f..42a87c5404 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.cpp +++ b/src/calibre/gui2/pictureflow/pictureflow.cpp @@ -371,6 +371,7 @@ public: int pixelDistanceMoved; int pixelsToMovePerSlide; bool preserveAspectRatio; + bool activateOnDoubleClick; QFont subtitleFont; void setImages(FlowImages *images); @@ -426,6 +427,7 @@ PictureFlowPrivate::PictureFlowPrivate(PictureFlow* w, int queueLength_) fontSize = 10; doReflections = true; preserveAspectRatio = false; + activateOnDoubleClick = false; centerIndex = 0; queueLength = queueLength_; @@ -1246,6 +1248,16 @@ void PictureFlow::setPreserveAspectRatio(bool preserve) clearCaches(); } +bool PictureFlow::activateOnDoubleClick() const +{ + return d->activateOnDoubleClick; +} + +void PictureFlow::setActivateOnDoubleClick(bool on) +{ + d->activateOnDoubleClick = on; +} + void PictureFlow::setSubtitleFont(QFont font) { d->subtitleFont = font; @@ -1468,9 +1480,9 @@ void PictureFlow::mouseReleaseEvent(QMouseEvent* event) showNext(); accepted = true; } else { - if (event->button() == Qt::LeftButton) { - emit itemActivated(d->getTarget()); - accepted = true; + if (event->button() == Qt::LeftButton && !d->activateOnDoubleClick) { + emit itemActivated(d->getTarget()); + accepted = true; } } @@ -1480,6 +1492,17 @@ void PictureFlow::mouseReleaseEvent(QMouseEvent* event) } } +void PictureFlow::mouseDoubleClickEvent(QMouseEvent* event) { + if (event->button() == Qt::LeftButton && d->activateOnDoubleClick) { + int sideWidth = (d->buffer.width() - slideSize().width()) /2; + int x = (int)(event->x() * device_pixel_ratio()); + if (sideWidth < x && x < sideWidth + slideSize().width() ) { + emit itemActivated(d->getTarget()); + event->accept(); + } + } +} + void PictureFlow::paintEvent(QPaintEvent* event) { Q_UNUSED(event); diff --git a/src/calibre/gui2/pictureflow/pictureflow.h b/src/calibre/gui2/pictureflow/pictureflow.h index f144cabb24..7c47317c92 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.h +++ b/src/calibre/gui2/pictureflow/pictureflow.h @@ -94,6 +94,7 @@ Q_OBJECT Q_PROPERTY(QSize slideSize READ slideSize WRITE setSlideSize) Q_PROPERTY(QFont subtitleFont READ subtitleFont WRITE setSubtitleFont) Q_PROPERTY(bool preserveAspectRatio READ preserveAspectRatio WRITE setPreserveAspectRatio) + Q_PROPERTY(bool activateOnDoubleClick READ activateOnDoubleClick WRITE setActivateOnDoubleClick) public: /*! @@ -168,6 +169,9 @@ public: */ int currentSlide() const; + bool activateOnDoubleClick() const; + void setActivateOnDoubleClick(bool on); + public slots: /*! @@ -215,6 +219,7 @@ protected: void mouseMoveEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event); + void mouseDoubleClickEvent(QMouseEvent* event); void resizeEvent(QResizeEvent* event); void timerEvent(QTimerEvent* event); diff --git a/src/calibre/gui2/pictureflow/pictureflow.sip b/src/calibre/gui2/pictureflow/pictureflow.sip index ca1108ad37..dcfd0490d4 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.sip +++ b/src/calibre/gui2/pictureflow/pictureflow.sip @@ -41,6 +41,9 @@ public : void setSlideSize(QSize size); + bool activateOnDoubleClick() const; + void setActivateOnDoubleClick(bool on); + bool preserveAspectRatio() const; void setPreserveAspectRatio(bool preserve); diff --git a/src/calibre/gui2/preferences/look_feel.py b/src/calibre/gui2/preferences/look_feel.py index eda0338364..57bc254c52 100644 --- a/src/calibre/gui2/preferences/look_feel.py +++ b/src/calibre/gui2/preferences/look_feel.py @@ -481,6 +481,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): r('separate_cover_flow', config, restart_required=True) r('cb_fullscreen', gprefs) r('cb_preserve_aspect_ratio', gprefs) + r('cb_double_click_to_activate', gprefs) choices = [(_('Off'), 'off'), (_('Small'), 'small'), (_('Medium'), 'medium'), (_('Large'), 'large')] @@ -806,6 +807,7 @@ class ConfigWidget(ConfigWidgetBase, Ui_Form): gui.library_view.set_row_header_visibility() gui.cover_flow.setShowReflections(gprefs['cover_browser_reflections']) gui.cover_flow.setPreserveAspectRatio(gprefs['cb_preserve_aspect_ratio']) + gui.cover_flow.setActivateOnDoubleClick(gprefs['cb_double_click_to_activate']) gui.update_cover_flow_subtitle_font() gui.cover_flow.template_inited = False for view in 'library memory card_a card_b'.split(): diff --git a/src/calibre/gui2/preferences/look_feel.ui b/src/calibre/gui2/preferences/look_feel.ui index 6a3df6ce04..2cc86fd174 100644 --- a/src/calibre/gui2/preferences/look_feel.ui +++ b/src/calibre/gui2/preferences/look_feel.ui @@ -1185,7 +1185,7 @@ using the mouse.</p> 690 - 283 + 20 @@ -1277,6 +1277,13 @@ them to all have the same width and height + + + + &Double click to view the central book, instead of single click + + +