commit bdb006543b43f71a06fc5b9915d0df19aae0ef68
Author: Juergen Spitzmueller <sp...@lyx.org>
Date:   Sun Mar 7 13:29:23 2021 +0100

    Zoom slider
---
 src/LyXRC.h                  |    1 +
 src/frontends/qt/GuiView.cpp |   34 ++++++++++++++++++++++++++++++++--
 src/frontends/qt/GuiView.h   |    6 ++++++
 3 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/src/LyXRC.h b/src/LyXRC.h
index cf6a012..bf65728 100644
--- a/src/LyXRC.h
+++ b/src/LyXRC.h
@@ -318,6 +318,7 @@ public:
        int defaultZoom = 150;
        /// Actual zoom factor for screen fonts
        /// (default zoom plus buffer zoom factor)
+       /// Do not set directly. Use GuiView::setCurrentZoom()
        int currentZoom = 150;
        /// Screen font sizes in points for each font size
        std::string font_sizes[10] = { "5.0", "7.0", "8.0", "9.0", "10.0",
diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index c226968..536a0ca 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -102,6 +102,7 @@
 #include <QPoint>
 #include <QSettings>
 #include <QShowEvent>
+#include <QSlider>
 #include <QSplitter>
 #include <QStackedWidget>
 #include <QStatusBar>
@@ -627,6 +628,18 @@ GuiView::GuiView(int id)
        connect(busylabel, SIGNAL(clicked()), this, 
SLOT(checkCancelBackground()));
 
        QFontMetrics const fm(statusBar()->fontMetrics());
+
+       QSlider * zoomslider = new QSlider(Qt::Horizontal, statusBar());
+       zoomslider->setFixedWidth(fm.horizontalAdvance('x') * 15);
+       // Make the defaultZoom center
+       zoomslider->setRange(10, (lyxrc.defaultZoom * 2) - 10);
+       zoomslider->setValue(lyxrc.currentZoom);
+       zoomslider->setToolTip(qt_("Workarea zoom level. Drag, use Ctrl-+/- or 
Shift-Mousewheel to adjust."));
+       statusBar()->addPermanentWidget(zoomslider);
+
+       connect(zoomslider, SIGNAL(sliderMoved(int)), this, 
SLOT(zoomSliderMoved(int)));
+       connect(this, SIGNAL(currentZoomChanged(int)), zoomslider, 
SLOT(setValue(int)));
+
        int const iconheight = max(int(d.normalIconSize), fm.height());
        QSize const iconsize(iconheight, iconheight);
 
@@ -727,6 +740,16 @@ void GuiView::checkCancelBackground()
 }
 
 
+void GuiView::zoomSliderMoved(int value)
+{
+       DispatchResult dr;
+       dispatch(FuncRequest(LFUN_BUFFER_ZOOM, convert<string>(value)), dr);
+       currentWorkArea()->scheduleRedraw(true);
+       message(bformat(_("Zoom level is now %1$d% (default value: %2$d%)"),
+                       value, lyxrc.defaultZoom));
+}
+
+
 QVector<GuiWorkArea*> GuiView::GuiViewPrivate::guiWorkAreas()
 {
        QVector<GuiWorkArea*> areas;
@@ -845,6 +868,13 @@ void GuiView::saveUISettings() const
 }
 
 
+void GuiView::setCurrentZoom(const int v)
+{
+       lyxrc.currentZoom = v;
+       Q_EMIT currentZoomChanged(v);
+}
+
+
 bool GuiView::restoreLayout()
 {
        QSettings settings;
@@ -853,7 +883,7 @@ bool GuiView::restoreLayout()
        int zoom = (int)(lyxrc.defaultZoom * zoom_ratio_);
        if (zoom < static_cast<int>(zoom_min_))
                zoom = zoom_min_;
-       lyxrc.currentZoom = zoom;
+       setCurrentZoom(zoom);
        devel_mode_ = settings.value("devel_mode", devel_mode_).toBool();
        settings.beginGroup("views");
        settings.beginGroup(QString::number(id_));
@@ -4565,7 +4595,7 @@ void GuiView::dispatch(FuncRequest const & cmd, 
DispatchResult & dr)
                        if (zoom < static_cast<int>(zoom_min_))
                                zoom = zoom_min_;
 
-                       lyxrc.currentZoom = zoom;
+                       setCurrentZoom(zoom);
 
                        dr.setMessage(bformat(_("Zoom level is now %1$d% 
(default value: %2$d%)"),
                                              lyxrc.currentZoom, 
lyxrc.defaultZoom));
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index b570b19..4f92e31 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -220,6 +220,8 @@ Q_SIGNALS:
        void triggerShowDialog(QString const & qname, QString const & qdata, 
Inset * inset);
        // emitted when the work area or its buffer view changed
        void bufferViewChanged();
+       /// emitted when zoom is modified
+       void currentZoomChanged(int);
 
 public Q_SLOTS:
        ///
@@ -241,6 +243,8 @@ private Q_SLOTS:
        ///
        void checkCancelBackground();
        ///
+       void zoomSliderMoved(int);
+       ///
        void on_currentWorkAreaChanged(GuiWorkArea *);
        ///
        void onBufferViewChanged();
@@ -354,6 +358,8 @@ public:
        void disconnectDialog(std::string const & name);
        ///
        bool develMode() const { return devel_mode_; }
+       ///
+       void setCurrentZoom(int const v);
 
 private:
        /// Saves the layout and geometry of the window
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to