From b6c08b076ee01bae832b42061ac983faab27b8ff Mon Sep 17 00:00:00 2001 From: peri4 Date: Fri, 17 Sep 2021 21:19:37 +0300 Subject: [PATCH] graphic android patches: buttons moved to popup-menu on tap-and-hold gesture --- CMakeLists.txt | 2 +- libs/graphic/graphic.cpp | 60 ++++++++++++++++++++++++++++++++++++++-- libs/graphic/graphic.h | 3 ++ 3 files changed, 62 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d24d67a..58093ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_policy(SET CMP0017 NEW) # need include() with .cmake cmake_policy(SET CMP0072 NEW) # FindOpenGL prefers GLVND by default project(qad) set(qad_MAJOR 2) -set(qad_MINOR 5) +set(qad_MINOR 6) set(qad_REVISION 0) set(qad_SUFFIX ) set(qad_COMPANY SHS) diff --git a/libs/graphic/graphic.cpp b/libs/graphic/graphic.cpp index 81ff32b..041de28 100644 --- a/libs/graphic/graphic.cpp +++ b/libs/graphic/graphic.cpp @@ -14,7 +14,9 @@ #if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)) # include #endif -#ifndef Q_OS_ANDROID +#ifdef Q_OS_ANDROID +# define NO_BUTTONS +#else # ifndef FORCE_NO_GL # define HAS_GL # endif @@ -25,6 +27,7 @@ # endif #endif +const char _button_prop_name_[] = "_button_"; const double rad2deg_qpie = 45. / atan(1.); __GraphicRegistrator__ __graphic_registrator__; @@ -72,6 +75,32 @@ Graphic::Graphic(QWidget * parent): QFrame(parent), canvas(0), line_x_min(this), ui->setupUi(this); ui->scrollLegend->layout()->addWidget(new LegendScrollArea(ui->widgetLegend)); ui->scrollLegend->hide(); +#ifdef NO_BUTTONS + ui->widgetLeft->hide(); + ui->widgetRight->hide(); + QList btnlist = { + ui->graphic_buttonAutofit, + ui->graphic_checkGrid, + ui->graphic_checkGuides, + ui->graphic_buttonFullscreen, + ui->graphic_checkBorderInputs, + ui->graphic_checkLegend, + ui->graphic_checkPause, + ui->graphic_buttonConfigure, + ui->graphic_buttonSave, + ui->graphic_buttonExport, + ui->graphic_buttonClear, + ui->graphic_buttonClose}; + buttons_menu = new QMenu(this); + for (auto * b: btnlist) { + auto * a = new QAction(this); + connect(a, SIGNAL(triggered()), b, SLOT(click())); + connect(a, SIGNAL(triggered(bool)), b, SLOT(setChecked(bool))); + a->setCheckable(b->isCheckable()); + a->setProperty(_button_prop_name_, (quintptr)b); + buttons_menu->addAction(a); + } +#endif QActionGroup * agroup = new QActionGroup(this); agroup->addAction(ui->graphic_actionGuidesFree ); agroup->addAction(ui->graphic_actionGuidesTraceX); @@ -156,6 +185,9 @@ Graphic::Graphic(QWidget * parent): QFrame(parent), canvas(0), line_x_min(this), Graphic::~Graphic() { +#ifdef NO_BUTTONS + delete buttons_menu; +#endif delete conf; if (buffer != 0) delete buffer; } @@ -274,7 +306,7 @@ void Graphic::procGesture(QGesture * g) { case Qt::TapAndHoldGesture: { QTapAndHoldGesture * pg = (QTapAndHoldGesture*)g; if (pg->state() == Qt::GestureStarted) - QMetaObject::invokeMethod(this, "enterFullscreen", Qt::QueuedConnection); + QMetaObject::invokeMethod(this, "showMenu", Qt::QueuedConnection); } break; default: break; @@ -727,6 +759,9 @@ void Graphic::setButtonsPosition(Graphic::Alignment a) { align = a; ui->widgetLeft->hide(); ui->widgetRight->hide(); +#ifdef NO_BUTTONS + return; +#endif switch (a) { case Graphic::Left: ui->widgetLeft->setLayout(ui->layoutButtons); @@ -1880,6 +1915,7 @@ void Graphic::enterFullscreen() { dlg.exec(); dlg.layout()->removeWidget(canvas); leaveFullscreen(); + return; #else ui->layoutCanvas->removeWidget(canvas); canvas->setParent(0); @@ -1905,6 +1941,26 @@ void Graphic::leaveFullscreen() { } +void Graphic::showMenu() { +#ifdef NO_BUTTONS + for (auto * a: buttons_menu->actions()) { + QToolButton * b = (QToolButton *)(a->property(_button_prop_name_).toULongLong()); + if (!b) { + a->setVisible(false); + continue; + } + a->blockSignals(true); + a->setVisible(!b->isHidden()); + a->setText(b->toolTip()); + a->setIcon(b->icon()); + a->setChecked(b->isChecked()); + a->blockSignals(false); + } + buttons_menu->popup(QCursor::pos()); +#endif +} + + QString Graphic::caption() const { return ui->labelCaption->text(); } diff --git a/libs/graphic/graphic.h b/libs/graphic/graphic.h index 63c85b5..32f2581 100644 --- a/libs/graphic/graphic.h +++ b/libs/graphic/graphic.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include "graphic_conf.h" @@ -402,6 +403,7 @@ protected: GraphicConf * conf; EvalSpinBox line_x_min, line_x_max, line_y_min, line_y_max; QElapsedTimer tm; + QMenu * buttons_menu = nullptr; #ifdef Q_OS_ANDROID QElapsedTimer tm_fscr; #endif @@ -448,6 +450,7 @@ protected slots: void actionGuidesTriggered(QAction * a); void enterFullscreen(); void leaveFullscreen(); + void showMenu(); signals: void beforeGraphicPaintEvent(QPainter * );