[LyX/master] Toom value: back to QLabel, this time with custom context menu

Juergen Spitzmueller spitz at lyx.org
Sun Mar 14 10:59:14 UTC 2021


commit d29d2f48fd2f7ad30c71b716041b49fd09234104
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Sun Mar 14 12:03:42 2021 +0100

    Toom value: back to QLabel, this time with custom context menu
---
 src/frontends/qt/GuiView.cpp |   28 +++++++++++++++-------------
 src/frontends/qt/GuiView.h   |   13 +++++++++++--
 2 files changed, 26 insertions(+), 15 deletions(-)

diff --git a/src/frontends/qt/GuiView.cpp b/src/frontends/qt/GuiView.cpp
index 451b292..f392efe 100644
--- a/src/frontends/qt/GuiView.cpp
+++ b/src/frontends/qt/GuiView.cpp
@@ -672,29 +672,29 @@ GuiView::GuiView(int id)
 	connect(zoom_in_, SIGNAL(clicked()), this, SLOT(zoomInPressed()));
 	connect(zoom_out_, SIGNAL(clicked()), this, SLOT(zoomOutPressed()));
 
-	zoom_value_ = new QToolButton(statusBar());
-	zoom_value_->setToolButtonStyle(Qt::ToolButtonTextOnly);
-	zoom_value_->setAutoRaise(true);
-	zoom_value_->setPopupMode(QToolButton::InstantPopup);
+	zoom_value_ = new QLabel(statusBar());
 	zoom_value_->setFixedHeight(fm.height());
-	// Get sensible minimum width to heep the size constant
-	zoom_value_->setText(toqstr("000%"));
-	int const mw = zoom_value_->width();
-	zoom_value_->setMinimumWidth(mw);
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 11, 0))
+	zoom_value_->setMinimumWidth(fm.horizontalAdvance("000%"));
+#else
+	zoom_value_->setMinimumWidth(fm.width("000%"));
+#endif
+	zoom_value_->setText(toqstr(bformat(_("[[ZOOM]]%1$d%"), zoom)));
 	statusBar()->addPermanentWidget(zoom_value_);
 	zoom_value_->setEnabled(currentBufferView());
+	zoom_value_->setContextMenuPolicy(Qt::CustomContextMenu);
 
+	ZoomMenu * zoom_menu = new ZoomMenu(statusBar());
 	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);
 	act_zoom_show_ = new QAction(qt_("Show zoom slider"), this);
 	act_zoom_show_->setCheckable(true);
-	zoom_value_->addAction(act_zoom_default_);
-	zoom_value_->addAction(act_zoom_in_);
-	zoom_value_->addAction(act_zoom_out_);
-	zoom_value_->addAction(act_zoom_show_);
-	zoom_value_->setText(toqstr(bformat(_("[[ZOOM]]%1$d%"), zoom)));
+	zoom_menu->addAction(act_zoom_default_);
+	zoom_menu->addAction(act_zoom_in_);
+	zoom_menu->addAction(act_zoom_out_);
+	zoom_menu->addAction(act_zoom_show_);
 	enableZoomOptions();
 	connect(act_zoom_default_, SIGNAL(triggered()),
 			this, SLOT(resetDefaultZoom()));
@@ -704,6 +704,8 @@ GuiView::GuiView(int id)
 			this, SLOT(zoomOutPressed()));
 	connect(act_zoom_show_, SIGNAL(triggered()),
 			this, SLOT(toogleZoomSlider()));
+	connect(zoom_value_, SIGNAL(customContextMenuRequested(QPoint)),
+		zoom_menu, SLOT(showMenu(QPoint)));
 
 	int const iconheight = max(int(d.normalIconSize), fm.height());
 	QSize const iconsize(iconheight, iconheight);
diff --git a/src/frontends/qt/GuiView.h b/src/frontends/qt/GuiView.h
index 849718d..eda1f5a 100644
--- a/src/frontends/qt/GuiView.h
+++ b/src/frontends/qt/GuiView.h
@@ -29,7 +29,6 @@ class QPushButton;
 class QLabel;
 class QShowEvent;
 class QSlider;
-class QToolButton;
 
 
 namespace lyx {
@@ -507,7 +506,7 @@ private:
 	/// Statusbar widget that shows version control status
 	QLabel * version_control_;
 	/// Statusbar widget that shows zoom value
-	QToolButton * zoom_value_;
+	QLabel * zoom_value_;
 	/// The zoom slider widget
 	QSlider * zoom_slider_;
 	/// Zoom in ("+") Button
@@ -547,6 +546,16 @@ public Q_SLOTS:
 	void showMenu(QPoint const &) { exec(QCursor::pos()); }
 };
 
+class ZoomMenu : public QMenu
+{
+	Q_OBJECT
+public:
+	explicit ZoomMenu(QWidget *) {};
+
+public Q_SLOTS:
+	void showMenu(QPoint const &) { exec(QCursor::pos()); }
+};
+
 } // namespace frontend
 } // namespace lyx
 


More information about the lyx-cvs mailing list