commit f525bded59668218e86dba93240796c49e488e4b
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Thu Mar 11 18:14:46 2021 +0100

    Add menu to statusbar zoom value
---
 src/frontends/qt/GuiView.cpp |   38 +++++++++++++++++++++++++++++++++++++-
 src/frontends/qt/GuiView.h   |   13 ++++++++++++-
 2 files changed, 49 insertions(+), 2 deletions(-)

diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index 48aa13f..ceb3651 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -672,8 +672,12 @@ GuiView::GuiView(int id)
        connect(zoom_in_, SIGNAL(clicked()), this, SLOT(zoomInPressed()));
        connect(zoom_out_, SIGNAL(clicked()), this, SLOT(zoomOutPressed()));
 
-       zoom_value_ = new QLabel(statusBar());
+       zoom_value_ = new QToolButton(statusBar());
        zoom_value_->setText(toqstr(bformat(_("[[ZOOM]]%1$d%"), zoom)));
+       zoom_value_->setToolButtonStyle(Qt::ToolButtonTextOnly);
+       zoom_value_->setAutoRaise(true);
+       zoom_value_->setPopupMode(QToolButton::InstantPopup);
+       zoom_value_->setFixedHeight(fm.height());
 #if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
        zoom_value_->setMinimumWidth(fm.horizontalAdvance("000%"));
 #else
@@ -682,6 +686,21 @@ GuiView::GuiView(int id)
        statusBar()->addPermanentWidget(zoom_value_);
        zoom_value_->setEnabled(currentBufferView());
 
+       act_zoom_default_ = new QAction(toqstr(bformat(_("&Reset to default 
(%1$d%)"),
+                                                      lyxrc.defaultZoom)), 
this);
+       act_zoom_in_ = new QAction(qt_("Zoom &in"), this);
+       act_zoom_out_ = new QAction(qt_("Zoom &out"), this);
+       zoom_value_->addAction(act_zoom_default_);
+       zoom_value_->addAction(act_zoom_in_);
+       zoom_value_->addAction(act_zoom_out_);
+       enableZoomOptions();
+       connect(act_zoom_default_, SIGNAL(triggered()),
+                       this, SLOT(resetDefaultZoom()));
+       connect(act_zoom_in_, SIGNAL(triggered()),
+                       this, SLOT(zoomInPressed()));
+       connect(act_zoom_out_, SIGNAL(triggered()),
+                       this, SLOT(zoomOutPressed()));
+
        int const iconheight = max(int(d.normalIconSize), fm.height());
        QSize const iconsize(iconheight, iconheight);
 
@@ -779,6 +798,15 @@ void GuiView::checkCancelBackground()
 }
 
 
+void GuiView::enableZoomOptions()
+{
+       act_zoom_default_->setEnabled(zoom_slider_->value() != 
lyxrc.defaultZoom);
+       FuncStatus status;
+       act_zoom_in_->setEnabled(getStatus(FuncRequest(LFUN_BUFFER_ZOOM_IN), 
status));
+       act_zoom_out_->setEnabled(getStatus(FuncRequest(LFUN_BUFFER_ZOOM_OUT), 
status));
+}
+
+
 void GuiView::zoomSliderMoved(int value)
 {
        DispatchResult dr;
@@ -792,6 +820,7 @@ void GuiView::zoomValueChanged(int value)
 {
        if (value != lyxrc.currentZoom)
                zoomSliderMoved(value);
+       enableZoomOptions();
 }
 
 
@@ -811,6 +840,13 @@ void GuiView::zoomOutPressed()
 }
 
 
+void GuiView::resetDefaultZoom()
+{
+       zoomValueChanged(lyxrc.defaultZoom);
+       enableZoomOptions();
+}
+
+
 QVector<GuiWorkArea*> GuiView::GuiViewPrivate::guiWorkAreas()
 {
        QVector<GuiWorkArea*> areas;
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index 728ed0d..015f885 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -29,6 +29,7 @@ class QPushButton;
 class QLabel;
 class QShowEvent;
 class QSlider;
+class QToolButton;
 
 
 namespace lyx {
@@ -253,6 +254,8 @@ private Q_SLOTS:
        ///
        void zoomOutPressed();
        ///
+       void resetDefaultZoom();
+       ///
        void on_currentWorkAreaChanged(GuiWorkArea *);
        ///
        void onBufferViewChanged();
@@ -476,6 +479,8 @@ private:
        void dispatchToBufferView(FuncRequest const & cmd, DispatchResult & dr);
        ///
        void showMessage();
+       ///
+       void enableZoomOptions();
 
        /// This view ID.
        int id_;
@@ -500,13 +505,19 @@ private:
        /// Statusbar widget that shows version control status
        QLabel * version_control_;
        /// Statusbar widget that shows zoom value
-       QLabel * zoom_value_;
+       QToolButton * zoom_value_;
        /// The zoom slider widget
        QSlider * zoom_slider_;
        /// Zoom in ("+") Button
        QPushButton * zoom_in_;
        /// Zoom out ("-") Button
        QPushButton * zoom_out_;
+       /// Set zoom to default
+       QAction * act_zoom_default_;
+       /// Zoom in menu action
+       QAction * act_zoom_in_;
+       /// Zoom out menu action
+       QAction * act_zoom_out_;
 
        /// The rate from which the actual zoom value is calculated
        /// from the default zoom pref
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to