diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index f4aedee..51046f3 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -207,7 +207,7 @@ AppFrame::AppFrame() : #if CUBICSDR_ENABLE_VIEW_SCOPE scopeCanvas = new ScopeCanvas(demodPanel, attribList); - scopeCanvas->setHelpTip("Audio Visuals, drag left/right to toggle Scope or Spectrum."); + scopeCanvas->setHelpTip("Audio Visuals, drag left/right to toggle Scope or Spectrum, 'B' to toggle decibels display."); scopeCanvas->SetMinSize(wxSize(128,-1)); demodScopeTray->Add(scopeCanvas, 8, wxEXPAND | wxALL, 0); wxGetApp().getScopeProcessor()->setup(1024); @@ -1681,7 +1681,6 @@ void AppFrame::OnIdle(wxIdleEvent& event) { if (scopeCanvas) { scopeCanvas->setPPMMode(demodTuner->isAltDown()); - scopeCanvas->setShowDb(spectrumCanvas->getShowDb()); wxGetApp().getScopeProcessor()->setScopeEnabled(scopeCanvas->scopeVisible()); wxGetApp().getScopeProcessor()->setSpectrumEnabled(scopeCanvas->spectrumVisible()); wxGetApp().getAudioVisualQueue()->set_max_num_items((scopeCanvas->scopeVisible()?1:0) + (scopeCanvas->spectrumVisible()?1:0)); @@ -2232,12 +2231,21 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) { break; } + //Re-dispatch the key events if the mouse cursor is within a given + //widget region, effectively activating its specific key shortcuts, + //which else are overriden by this global key handler. if (demodTuner->getMouseTracker()->mouseInView()) { demodTuner->OnKeyDown(event); } else if (waterfallCanvas->getMouseTracker()->mouseInView()) { waterfallCanvas->OnKeyDown(event); } - + else if (spectrumCanvas->getMouseTracker()->mouseInView()) { + spectrumCanvas->OnKeyDown(event); + } + else if (scopeCanvas->getMouseTracker()->mouseInView()) { + scopeCanvas->OnKeyDown(event); + } + return 1; } @@ -2345,13 +2353,22 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) { default: break; } - + + //Re-dispatch the key events if the mouse cursor is within a given + //widget region, effectively activating its specific key shortcuts, + //which else are overriden by this global key handler. if (demodTuner->getMouseTracker()->mouseInView()) { demodTuner->OnKeyUp(event); - } else if (waterfallCanvas->getMouseTracker()->mouseInView()) { + } + else if (waterfallCanvas->getMouseTracker()->mouseInView()) { waterfallCanvas->OnKeyUp(event); } - + else if (spectrumCanvas->getMouseTracker()->mouseInView()) { + spectrumCanvas->OnKeyUp(event); + } + else if (scopeCanvas->getMouseTracker()->mouseInView()) { + scopeCanvas->OnKeyUp(event); + } // TODO: Catch key-ups outside of original target diff --git a/src/panel/SpectrumPanel.cpp b/src/panel/SpectrumPanel.cpp index e5ab943..780f442 100644 --- a/src/panel/SpectrumPanel.cpp +++ b/src/panel/SpectrumPanel.cpp @@ -13,8 +13,8 @@ SpectrumPanel::SpectrumPanel() { floorValue = 0; ceilValue = 1; - showDb = false; - useDbOfs = false; + showDb = true; + useDbOfs = true; fftSize = DEFAULT_FFT_SIZE; bandwidth = DEFAULT_DEMOD_BW; freq = 0; diff --git a/src/visual/ScopeCanvas.cpp b/src/visual/ScopeCanvas.cpp index eb30763..bebfb56 100644 --- a/src/visual/ScopeCanvas.cpp +++ b/src/visual/ScopeCanvas.cpp @@ -45,7 +45,10 @@ ScopeCanvas::ScopeCanvas(wxWindow *parent, int *dispAttrs) : InteractiveCanvas(p parentPanel.setFill(GLPanel::GLPANEL_FILL_NONE); scopePanel.setSize(1.0,-1.0); spectrumPanel.setSize(1.0,-1.0); - spectrumPanel.setShowDb(true); + showDb = true; + spectrumPanel.setShowDb(showDb); + //dB offset is a RF value, has no meaning in audio, disable it. + spectrumPanel.setUseDBOffset(false); } ScopeCanvas::~ScopeCanvas() { @@ -89,8 +92,8 @@ bool ScopeCanvas::getPPMMode() { return ppmMode; } -void ScopeCanvas::setShowDb(bool showDb) { - this->showDb = showDb; +void ScopeCanvas::setShowDb(bool show) { + this->showDb = show; } bool ScopeCanvas::getShowDb() { @@ -275,3 +278,20 @@ void ScopeCanvas::setHelpTip(std::string tip) { helpTip = tip; } +void ScopeCanvas::OnKeyDown(wxKeyEvent& event) { + InteractiveCanvas::OnKeyDown(event); + + switch (event.GetKeyCode()) { + + case 'B': + setShowDb(!getShowDb()); + break; + default: + event.Skip(); + } +} + +void ScopeCanvas::OnKeyUp(wxKeyEvent& event) { + InteractiveCanvas::OnKeyUp(event); +} + diff --git a/src/visual/ScopeCanvas.h b/src/visual/ScopeCanvas.h index 1c26389..219235e 100644 --- a/src/visual/ScopeCanvas.h +++ b/src/visual/ScopeCanvas.h @@ -20,6 +20,16 @@ public: ScopeCanvas(wxWindow *parent, int *dispAttrs); ~ScopeCanvas(); + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyDown, because global key handler intercepts + //calls in all windows. + void OnKeyDown(wxKeyEvent& event); + + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyUp, because global key handler intercepts + //calls in all windows. + void OnKeyUp(wxKeyEvent& event); + void setDeviceName(std::string device_name); void setPPMMode(bool ppmMode); bool getPPMMode(); diff --git a/src/visual/SpectrumCanvas.cpp b/src/visual/SpectrumCanvas.cpp index e41099d..ab54ef3 100644 --- a/src/visual/SpectrumCanvas.cpp +++ b/src/visual/SpectrumCanvas.cpp @@ -310,3 +310,20 @@ void SpectrumCanvas::OnMouseRightReleased(wxMouseEvent& event) { } mouseTracker.OnMouseRightReleased(event); } + +void SpectrumCanvas::OnKeyDown(wxKeyEvent& event) { + InteractiveCanvas::OnKeyDown(event); + + switch (event.GetKeyCode()) { + + case 'B': + setShowDb(!getShowDb()); + break; + default: + event.Skip(); + } +} + +void SpectrumCanvas::OnKeyUp(wxKeyEvent& event) { + InteractiveCanvas::OnKeyUp(event); +} diff --git a/src/visual/SpectrumCanvas.h b/src/visual/SpectrumCanvas.h index a81415e..6c4c1eb 100644 --- a/src/visual/SpectrumCanvas.h +++ b/src/visual/SpectrumCanvas.h @@ -19,6 +19,16 @@ public: SpectrumCanvas(wxWindow *parent, int *dispAttrs); ~SpectrumCanvas(); + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyDown, because global key handler intercepts + //calls in all windows. + void OnKeyDown(wxKeyEvent& event); + + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyUp, because global key handler intercepts + //calls in all windows. + void OnKeyUp(wxKeyEvent& event); + void attachWaterfallCanvas(WaterfallCanvas *canvas_in); void moveCenterFrequency(long long freqChange); @@ -50,6 +60,7 @@ private: void OnMouseRightDown(wxMouseEvent& event); void OnMouseRightReleased(wxMouseEvent& event); + void updateScaleFactor(float factor); PrimaryGLContext *glContext; diff --git a/src/visual/WaterfallCanvas.cpp b/src/visual/WaterfallCanvas.cpp index 2826d71..befb5cc 100644 --- a/src/visual/WaterfallCanvas.cpp +++ b/src/visual/WaterfallCanvas.cpp @@ -440,11 +440,6 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) { wxGetApp().removeDemodulator(activeDemod); wxGetApp().getDemodMgr().deleteThread(activeDemod); break; - case 'B': - if (spectrumCanvas) { - spectrumCanvas->setShowDb(!spectrumCanvas->getShowDb()); - } - break; case WXK_SPACE: wxGetApp().showFrequencyInput(); break; diff --git a/src/visual/WaterfallCanvas.h b/src/visual/WaterfallCanvas.h index 822cebd..610bb69 100644 --- a/src/visual/WaterfallCanvas.h +++ b/src/visual/WaterfallCanvas.h @@ -36,10 +36,21 @@ public: void setLinesPerSecond(int lps); void setMinBandwidth(int min); + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyDown, because global key handler intercepts + //calls in all windows. void OnKeyDown(wxKeyEvent& event); + + //This is public because it is indeed forwarded from + //AppFrame::OnGlobalKeyUp, because global key handler intercepts + //calls in all windows. void OnKeyUp(wxKeyEvent& event); + + //public because called by SpectrumCanvas. void OnMouseWheelMoved(wxMouseEvent& event); + + private: void OnPaint(wxPaintEvent& event); void OnIdle(wxIdleEvent &event);