From 99ecbef373c1d251c081e623e947847385639d32 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Fri, 24 May 2019 00:30:22 -0400 Subject: [PATCH] Fix nudging out of view, fix keypad triggering and tuner freq entry target --- src/AppFrame.cpp | 38 ++++++++++++++++++++++--------- src/AppFrame.h | 3 +-- src/CubicSDR.cpp | 9 ++++---- src/FrequencyDialog.cpp | 12 +++++++--- src/ui/UITestCanvas.cpp | 2 +- src/visual/GainCanvas.cpp | 2 +- src/visual/MeterCanvas.cpp | 2 +- src/visual/ModeSelectorCanvas.cpp | 2 +- src/visual/ScopeCanvas.cpp | 2 +- src/visual/SpectrumCanvas.cpp | 2 +- src/visual/TuningCanvas.cpp | 2 +- src/visual/WaterfallCanvas.cpp | 2 +- 12 files changed, 50 insertions(+), 28 deletions(-) diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index 90a10c8..1dc2c8a 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -2769,15 +2769,19 @@ FrequencyDialog::FrequencyDialogTarget AppFrame::getFrequencyDialogTarget() { return target; } -void AppFrame::gkNudgeLeft(DemodulatorInstancePtr demod, int snap) { +void AppFrame::gkNudge(DemodulatorInstancePtr demod, int snap) { if (demod) { - demod->setFrequency(demod->getFrequency()-snap); - demod->updateLabel(demod->getFrequency()); - } -} + auto demodFreq = demod->getFrequency()+snap; + auto demodBw = demod->getBandwidth(); + + auto ctr = wxGetApp().getFrequency(); + auto bw = wxGetApp().getSampleRate(); + + // Don't let it get nudged out of view. + if (ctr - (bw / 2) > (demodFreq - demodBw / 2) || ctr + (bw / 2) < (demodFreq + demodBw / 2)) { + wxGetApp().setFrequency(ctr+(snap*2)); + } -void AppFrame::gkNudgeRight(DemodulatorInstancePtr demod, int snap) { - if (demod) { demod->setFrequency(demod->getFrequency()+snap); demod->updateLabel(demod->getFrequency()); } @@ -2821,10 +2825,10 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) { #ifdef wxHAS_RAW_KEY_CODES switch (event.GetRawKeyCode()) { case 30: - gkNudgeRight(lastDemod, snap); + gkNudge(lastDemod, snap); return 1; case 33: - gkNudgeLeft(lastDemod, snap); + gkNudge(lastDemod, -snap); return 1; } #endif @@ -2844,10 +2848,10 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) { case 'V': return 1; case ']': - gkNudgeRight(lastDemod, snap); + gkNudge(lastDemod, snap); return 1; case '[': - gkNudgeLeft(lastDemod, snap); + gkNudge(lastDemod, -snap); return 1; case 'A': case 'F': @@ -2858,6 +2862,18 @@ int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) { case 'M': case 'R': return 1; + case WXK_NUMPAD0: + case WXK_NUMPAD1: + case WXK_NUMPAD2: + case WXK_NUMPAD3: + case WXK_NUMPAD4: + case WXK_NUMPAD5: + case WXK_NUMPAD6: + case WXK_NUMPAD7: + case WXK_NUMPAD8: + case WXK_NUMPAD9: + wxGetApp().showFrequencyInput(getFrequencyDialogTarget(), std::to_string(event.GetKeyCode() - WXK_NUMPAD0)); + return 1; case '0': case '1': case '2': diff --git a/src/AppFrame.h b/src/AppFrame.h index b2c7c95..8a5f71b 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -197,8 +197,7 @@ private: /** * Keyboard handlers */ - void gkNudgeLeft(DemodulatorInstancePtr demod, int snap); - void gkNudgeRight(DemodulatorInstancePtr demod, int snap); + void gkNudge(DemodulatorInstancePtr demod, int snap); void toggleActiveDemodRecording(); void toggleAllActiveDemodRecording(); diff --git a/src/CubicSDR.cpp b/src/CubicSDR.cpp index 20a4658..9bc0a3c 100644 --- a/src/CubicSDR.cpp +++ b/src/CubicSDR.cpp @@ -945,11 +945,12 @@ void CubicSDR::showFrequencyInput(FrequencyDialog::FrequencyDialogTarget targetM const wxString gainTitle("Gain Entry: "+wxGetApp().getActiveGainEntry()); wxString title; - + auto activeModem = demodMgr.getActiveContextModem(); + switch (targetMode) { case FrequencyDialog::FDIALOG_TARGET_DEFAULT: case FrequencyDialog::FDIALOG_TARGET_FREQ: - title = demodMgr.getActiveContextModem()?demodTitle:freqTitle; + title = activeModem ?demodTitle:freqTitle; break; case FrequencyDialog::FDIALOG_TARGET_BANDWIDTH: title = bwTitle; @@ -969,8 +970,8 @@ void CubicSDR::showFrequencyInput(FrequencyDialog::FrequencyDialogTarget targetM default: break; } - - FrequencyDialog fdialog(appframe, -1, title, demodMgr.getActiveContextModem(), wxPoint(-100,-100), wxSize(350, 75), wxDEFAULT_DIALOG_STYLE, targetMode, initString); + + FrequencyDialog fdialog(appframe, -1, title, activeModem, wxPoint(-100,-100), wxSize(350, 75), wxDEFAULT_DIALOG_STYLE, targetMode, initString); fdialog.ShowModal(); } diff --git a/src/FrequencyDialog.cpp b/src/FrequencyDialog.cpp index fe55cfa..3893d0d 100644 --- a/src/FrequencyDialog.cpp +++ b/src/FrequencyDialog.cpp @@ -97,7 +97,7 @@ void FrequencyDialog::OnChar(wxKeyEvent& event) { } } - if (targetMode == FDIALOG_TARGET_DEFAULT) { + if (targetMode == FDIALOG_TARGET_DEFAULT || targetMode == FDIALOG_TARGET_FREQ) { if (ranged) { freq = strToFrequency(strValue); freq2 = strToFrequency(strValue2); @@ -105,10 +105,16 @@ void FrequencyDialog::OnChar(wxKeyEvent& event) { freq = strToFrequency(strValue); } if (activeDemod) { - activeDemod->setTracking(true); - activeDemod->setFollow(true); activeDemod->setFrequency(freq); activeDemod->updateLabel(freq); + + freq_ctr = wxGetApp().getFrequency(); + range_bw = wxGetApp().getSampleRate(); + + if (freq_ctr - (range_bw / 2) > freq || freq_ctr + (range_bw / 2) < freq) { + wxGetApp().setFrequency(freq); + } + } else { if (ranged && (freq || freq2)) { if (freq > freq2) { diff --git a/src/ui/UITestCanvas.cpp b/src/ui/UITestCanvas.cpp index bce7471..037258e 100644 --- a/src/ui/UITestCanvas.cpp +++ b/src/ui/UITestCanvas.cpp @@ -38,7 +38,7 @@ UITestCanvas::~UITestCanvas() { } void UITestCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); + // wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); glContext->SetCurrent(*this); diff --git a/src/visual/GainCanvas.cpp b/src/visual/GainCanvas.cpp index 8bebc74..f0477a6 100644 --- a/src/visual/GainCanvas.cpp +++ b/src/visual/GainCanvas.cpp @@ -51,7 +51,7 @@ GainCanvas::~GainCanvas() { } void GainCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); + // wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); glContext->SetCurrent(*this); diff --git a/src/visual/MeterCanvas.cpp b/src/visual/MeterCanvas.cpp index d18dd78..63d67fc 100644 --- a/src/visual/MeterCanvas.cpp +++ b/src/visual/MeterCanvas.cpp @@ -82,7 +82,7 @@ void MeterCanvas::setShowUserInput(bool showUserInput) { } void MeterCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); + // wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); glContext->SetCurrent(*this); diff --git a/src/visual/ModeSelectorCanvas.cpp b/src/visual/ModeSelectorCanvas.cpp index 56bafae..16e4ff0 100644 --- a/src/visual/ModeSelectorCanvas.cpp +++ b/src/visual/ModeSelectorCanvas.cpp @@ -51,7 +51,7 @@ int ModeSelectorCanvas::getHoveredSelection() { } void ModeSelectorCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); + // wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); glContext->SetCurrent(*this); diff --git a/src/visual/ScopeCanvas.cpp b/src/visual/ScopeCanvas.cpp index c751814..805cc9d 100644 --- a/src/visual/ScopeCanvas.cpp +++ b/src/visual/ScopeCanvas.cpp @@ -101,7 +101,7 @@ bool ScopeCanvas::getShowDb() { } void ScopeCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); + // wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); ScopeRenderDataPtr avData; diff --git a/src/visual/SpectrumCanvas.cpp b/src/visual/SpectrumCanvas.cpp index 5bd03fc..2427408 100644 --- a/src/visual/SpectrumCanvas.cpp +++ b/src/visual/SpectrumCanvas.cpp @@ -51,7 +51,7 @@ SpectrumCanvas::~SpectrumCanvas() { } void SpectrumCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); + // wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); SpectrumVisualDataPtr vData; diff --git a/src/visual/TuningCanvas.cpp b/src/visual/TuningCanvas.cpp index 1363d95..1fef0fc 100644 --- a/src/visual/TuningCanvas.cpp +++ b/src/visual/TuningCanvas.cpp @@ -84,7 +84,7 @@ void TuningCanvas::setHalfBand(bool hb) { } void TuningCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { - wxPaintDC dc(this); + // wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); glContext->SetCurrent(*this); diff --git a/src/visual/WaterfallCanvas.cpp b/src/visual/WaterfallCanvas.cpp index d6edd07..a77ecb0 100644 --- a/src/visual/WaterfallCanvas.cpp +++ b/src/visual/WaterfallCanvas.cpp @@ -128,7 +128,7 @@ void WaterfallCanvas::processInputQueue() { void WaterfallCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { std::lock_guard < std::mutex > lock(tex_update); - wxPaintDC dc(this); +// wxPaintDC dc(this); const wxSize ClientSize = GetClientSize(); long double currentZoom = zoom;