Manage B key correctly activated for spectrum, not waterfall. Add another independent B (dB) key for audio scope

This commit is contained in:
vsonnier 2017-01-27 21:38:48 +01:00
parent 532f34c608
commit 848d1bf0e3
8 changed files with 97 additions and 16 deletions

View File

@ -207,7 +207,7 @@ AppFrame::AppFrame() :
#if CUBICSDR_ENABLE_VIEW_SCOPE #if CUBICSDR_ENABLE_VIEW_SCOPE
scopeCanvas = new ScopeCanvas(demodPanel, attribList); 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)); scopeCanvas->SetMinSize(wxSize(128,-1));
demodScopeTray->Add(scopeCanvas, 8, wxEXPAND | wxALL, 0); demodScopeTray->Add(scopeCanvas, 8, wxEXPAND | wxALL, 0);
wxGetApp().getScopeProcessor()->setup(1024); wxGetApp().getScopeProcessor()->setup(1024);
@ -1681,7 +1681,6 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
if (scopeCanvas) { if (scopeCanvas) {
scopeCanvas->setPPMMode(demodTuner->isAltDown()); scopeCanvas->setPPMMode(demodTuner->isAltDown());
scopeCanvas->setShowDb(spectrumCanvas->getShowDb());
wxGetApp().getScopeProcessor()->setScopeEnabled(scopeCanvas->scopeVisible()); wxGetApp().getScopeProcessor()->setScopeEnabled(scopeCanvas->scopeVisible());
wxGetApp().getScopeProcessor()->setSpectrumEnabled(scopeCanvas->spectrumVisible()); wxGetApp().getScopeProcessor()->setSpectrumEnabled(scopeCanvas->spectrumVisible());
wxGetApp().getAudioVisualQueue()->set_max_num_items((scopeCanvas->scopeVisible()?1:0) + (scopeCanvas->spectrumVisible()?1:0)); wxGetApp().getAudioVisualQueue()->set_max_num_items((scopeCanvas->scopeVisible()?1:0) + (scopeCanvas->spectrumVisible()?1:0));
@ -2232,12 +2231,21 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) {
break; 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()) { if (demodTuner->getMouseTracker()->mouseInView()) {
demodTuner->OnKeyDown(event); demodTuner->OnKeyDown(event);
} else if (waterfallCanvas->getMouseTracker()->mouseInView()) { } else if (waterfallCanvas->getMouseTracker()->mouseInView()) {
waterfallCanvas->OnKeyDown(event); waterfallCanvas->OnKeyDown(event);
} }
else if (spectrumCanvas->getMouseTracker()->mouseInView()) {
spectrumCanvas->OnKeyDown(event);
}
else if (scopeCanvas->getMouseTracker()->mouseInView()) {
scopeCanvas->OnKeyDown(event);
}
return 1; return 1;
} }
@ -2345,13 +2353,22 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) {
default: default:
break; 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()) { if (demodTuner->getMouseTracker()->mouseInView()) {
demodTuner->OnKeyUp(event); demodTuner->OnKeyUp(event);
} else if (waterfallCanvas->getMouseTracker()->mouseInView()) { }
else if (waterfallCanvas->getMouseTracker()->mouseInView()) {
waterfallCanvas->OnKeyUp(event); 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 // TODO: Catch key-ups outside of original target

View File

@ -13,8 +13,8 @@
SpectrumPanel::SpectrumPanel() { SpectrumPanel::SpectrumPanel() {
floorValue = 0; floorValue = 0;
ceilValue = 1; ceilValue = 1;
showDb = false; showDb = true;
useDbOfs = false; useDbOfs = true;
fftSize = DEFAULT_FFT_SIZE; fftSize = DEFAULT_FFT_SIZE;
bandwidth = DEFAULT_DEMOD_BW; bandwidth = DEFAULT_DEMOD_BW;
freq = 0; freq = 0;

View File

@ -45,7 +45,10 @@ ScopeCanvas::ScopeCanvas(wxWindow *parent, int *dispAttrs) : InteractiveCanvas(p
parentPanel.setFill(GLPanel::GLPANEL_FILL_NONE); parentPanel.setFill(GLPanel::GLPANEL_FILL_NONE);
scopePanel.setSize(1.0,-1.0); scopePanel.setSize(1.0,-1.0);
spectrumPanel.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() { ScopeCanvas::~ScopeCanvas() {
@ -89,8 +92,8 @@ bool ScopeCanvas::getPPMMode() {
return ppmMode; return ppmMode;
} }
void ScopeCanvas::setShowDb(bool showDb) { void ScopeCanvas::setShowDb(bool show) {
this->showDb = showDb; this->showDb = show;
} }
bool ScopeCanvas::getShowDb() { bool ScopeCanvas::getShowDb() {
@ -275,3 +278,20 @@ void ScopeCanvas::setHelpTip(std::string tip) {
helpTip = 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);
}

View File

@ -20,6 +20,16 @@ public:
ScopeCanvas(wxWindow *parent, int *dispAttrs); ScopeCanvas(wxWindow *parent, int *dispAttrs);
~ScopeCanvas(); ~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 setDeviceName(std::string device_name);
void setPPMMode(bool ppmMode); void setPPMMode(bool ppmMode);
bool getPPMMode(); bool getPPMMode();

View File

@ -310,3 +310,20 @@ void SpectrumCanvas::OnMouseRightReleased(wxMouseEvent& event) {
} }
mouseTracker.OnMouseRightReleased(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);
}

View File

@ -19,6 +19,16 @@ public:
SpectrumCanvas(wxWindow *parent, int *dispAttrs); SpectrumCanvas(wxWindow *parent, int *dispAttrs);
~SpectrumCanvas(); ~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 attachWaterfallCanvas(WaterfallCanvas *canvas_in);
void moveCenterFrequency(long long freqChange); void moveCenterFrequency(long long freqChange);
@ -50,6 +60,7 @@ private:
void OnMouseRightDown(wxMouseEvent& event); void OnMouseRightDown(wxMouseEvent& event);
void OnMouseRightReleased(wxMouseEvent& event); void OnMouseRightReleased(wxMouseEvent& event);
void updateScaleFactor(float factor); void updateScaleFactor(float factor);
PrimaryGLContext *glContext; PrimaryGLContext *glContext;

View File

@ -440,11 +440,6 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) {
wxGetApp().removeDemodulator(activeDemod); wxGetApp().removeDemodulator(activeDemod);
wxGetApp().getDemodMgr().deleteThread(activeDemod); wxGetApp().getDemodMgr().deleteThread(activeDemod);
break; break;
case 'B':
if (spectrumCanvas) {
spectrumCanvas->setShowDb(!spectrumCanvas->getShowDb());
}
break;
case WXK_SPACE: case WXK_SPACE:
wxGetApp().showFrequencyInput(); wxGetApp().showFrequencyInput();
break; break;

View File

@ -36,10 +36,21 @@ public:
void setLinesPerSecond(int lps); void setLinesPerSecond(int lps);
void setMinBandwidth(int min); 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); 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 OnKeyUp(wxKeyEvent& event);
//public because called by SpectrumCanvas.
void OnMouseWheelMoved(wxMouseEvent& event); void OnMouseWheelMoved(wxMouseEvent& event);
private: private:
void OnPaint(wxPaintEvent& event); void OnPaint(wxPaintEvent& event);
void OnIdle(wxIdleEvent &event); void OnIdle(wxIdleEvent &event);