# HG changeset patch # User Chris Cannam # Date 1585564156 -3600 # Node ID 0f36e0eca6b022df364ff0be4986b54d63f717e8 # Parent 2108af725460391734c547fbb432c839cb932c14 Add right-button context menu to panner widget diff -r 2108af725460 -r 0f36e0eca6b0 view/Pane.cpp --- a/view/Pane.cpp Fri Mar 27 14:36:11 2020 +0000 +++ b/view/Pane.cpp Mon Mar 30 11:29:16 2020 +0100 @@ -32,6 +32,7 @@ #include "layer/LayerFactory.h" #include "layer/FlexiNoteLayer.h" +#include "widgets/MenuTitle.h" //!!! ugh #include "data/model/WaveFileModel.h" @@ -46,6 +47,7 @@ #include #include #include +#include #include #include @@ -54,6 +56,7 @@ #include #include #include + #include "widgets/Thumbwheel.h" #include "widgets/Panner.h" #include "widgets/RangeInputDialog.h" @@ -86,6 +89,7 @@ m_hthumb(nullptr), m_vthumb(nullptr), m_reset(nullptr), + m_lastVerticalPannerContextMenu(nullptr), m_mouseInWidget(false), m_playbackFrameMoveScheduled(false), m_playbackFrameMoveTo(0) @@ -102,6 +106,11 @@ cerr << "Pane::Pane(" << this << ") returning" << endl; } +Pane::~Pane() +{ + delete m_lastVerticalPannerContextMenu; +} + void Pane::updateHeadsUpDisplay() { @@ -149,6 +158,11 @@ connect(m_vpan, SIGNAL(mouseEntered()), this, SLOT(mouseEnteredWidget())); connect(m_vpan, SIGNAL(mouseLeft()), this, SLOT(mouseLeftWidget())); + // Panner doesn't provide its own context menu + m_vpan->setContextMenuPolicy(Qt::CustomContextMenu); + connect(m_vpan, SIGNAL(customContextMenuRequested(const QPoint &)), + this, SLOT(verticalPannerContextMenuRequested(const QPoint &))); + m_vthumb = new Thumbwheel(Qt::Vertical); m_vthumb->setObjectName(tr("Vertical Zoom")); m_vthumb->setCursor(Qt::ArrowCursor); @@ -2540,6 +2554,44 @@ } void +Pane::verticalPannerContextMenuRequested(const QPoint &pos) +{ + Panner *panner = qobject_cast(sender()); + if (!panner) { + return; + } + + double vmin, vmax, dmin, dmax; + QString unit; + if (!getTopLayerDisplayExtents(vmin, vmax, dmin, dmax, &unit)) { + return; + } + + delete m_lastVerticalPannerContextMenu; + QMenu *m = new QMenu; + m_lastVerticalPannerContextMenu = m; + + MenuTitle::addTitle(m, tr("Vertical Range: %1 - %2 %3") + .arg(dmin).arg(dmax).arg(unit)); + + m->addAction(tr("&Edit..."), + [=]() { + editVerticalPannerExtents(); + }); + m->addAction(tr("&Reset to Default"), + [=]() { + if (m_vthumb) { + // This determines the "size" of the panner box + m_vthumb->resetToDefault(); + } + panner->resetToDefault(); + }); + + m->popup(panner->mapToGlobal(pos)); + m_lastVerticalPannerContextMenu = m; +} + +void Pane::editVerticalPannerExtents() { if (!m_vpan || !m_manager || !m_manager->getZoomWheelsEnabled()) return; @@ -2552,7 +2604,7 @@ } RangeInputDialog dialog(tr("Enter new range"), - tr("New vertical display range, from %1 to %2 %4:") + tr("New vertical display range, from %1 to %2 %3:") .arg(vmin).arg(vmax).arg(unit), unit, float(vmin), float(vmax), this); dialog.setRange(float(dmin), float(dmax)); diff -r 2108af725460 -r 0f36e0eca6b0 view/Pane.h --- a/view/Pane.h Fri Mar 27 14:36:11 2020 +0000 +++ b/view/Pane.h Mon Mar 30 11:29:16 2020 +0100 @@ -30,6 +30,7 @@ class Panner; class NotifyingPushButton; class KeyReference; +class QMenu; class Pane : public View { @@ -37,6 +38,8 @@ public: Pane(QWidget *parent = 0); + virtual ~Pane(); + virtual QString getPropertyContainerIconName() const override { return "pane"; } virtual bool shouldIlluminateLocalFeatures(const Layer *layer, @@ -91,11 +94,12 @@ virtual void modelAlignmentCompletionChanged(ModelId) override; // local slots, not overrides - virtual void horizontalThumbwheelMoved(int value); - virtual void verticalThumbwheelMoved(int value); - virtual void verticalZoomChanged(); - virtual void verticalPannerMoved(float x, float y, float w, float h); - virtual void editVerticalPannerExtents(); + void horizontalThumbwheelMoved(int value); + void verticalThumbwheelMoved(int value); + void verticalZoomChanged(); + void verticalPannerMoved(float x, float y, float w, float h); + void verticalPannerContextMenuRequested(const QPoint &); + void editVerticalPannerExtents(); virtual void layerParametersChanged() override; @@ -207,6 +211,7 @@ Thumbwheel *m_hthumb; Thumbwheel *m_vthumb; NotifyingPushButton *m_reset; + QMenu *m_lastVerticalPannerContextMenu; bool m_mouseInWidget;