From 5c45c1cf6b00d7468f5f8a43ea9c6e10de7335dd Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Fri, 29 Dec 2017 22:46:39 -0500 Subject: [PATCH] Record muted, toggle-all recording /w shift-R, status texts --- src/AppFrame.cpp | 32 ++++++++++++++++++++++++++++++-- src/AppFrame.h | 1 + src/demod/DemodulatorThread.cpp | 2 +- src/visual/PrimaryGLContext.cpp | 3 ++- src/visual/WaterfallCanvas.cpp | 8 ++++---- 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index c0c0177..75989d2 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -2643,7 +2643,11 @@ int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) { return 1; break; case 'R': - toggleActiveDemodRecording(); + if (event.ShiftDown()) { + toggleAllActiveDemodRecording(); + } else { + toggleActiveDemodRecording(); + } break; case 'P': wxGetApp().getSpectrumProcessor()->setPeakHold(!wxGetApp().getSpectrumProcessor()->getPeakHold()); @@ -2701,7 +2705,31 @@ void AppFrame::toggleActiveDemodRecording() { wxGetApp().getBookmarkMgr().updateActiveList(); } } - + +void AppFrame::toggleAllActiveDemodRecording() { + if (!wxGetApp().getConfig()->verifyRecordingPath()) { + return; + } + + auto activeDemods = wxGetApp().getDemodMgr().getDemodulators(); + + bool stateToSet = true; + + for (auto i : activeDemods) { + if (i->isActive() && i->isRecording()) { + stateToSet = false; + break; + } + } + + for (auto i : activeDemods) { + if (i->isActive() && i->isRecording() != stateToSet) { + i->setRecording(stateToSet); + } + } +} + + void AppFrame::setWaterfallLinesPerSecond(int lps) { waterfallSpeedMeter->setUserInputValue(sqrt(lps)); diff --git a/src/AppFrame.h b/src/AppFrame.h index 8d64fcd..8033685 100644 --- a/src/AppFrame.h +++ b/src/AppFrame.h @@ -116,6 +116,7 @@ public: int OnGlobalKeyUp(wxKeyEvent &event); void toggleActiveDemodRecording(); + void toggleAllActiveDemodRecording(); void setWaterfallLinesPerSecond(int lps); void setSpectrumAvgSpeed(double avg); diff --git a/src/demod/DemodulatorThread.cpp b/src/demod/DemodulatorThread.cpp index 0afb863..f3f36cf 100644 --- a/src/demod/DemodulatorThread.cpp +++ b/src/demod/DemodulatorThread.cpp @@ -201,7 +201,7 @@ void DemodulatorThread::run() { signalLevel = signalLevel + (currentSignalLevel - signalLevel) * 0.05 * sampleTime * 30.0; } - bool squelched = (muted.load() || (squelchEnabled && (signalLevel < squelchLevel))); + bool squelched = squelchEnabled && (signalLevel < squelchLevel); if (squelchEnabled) { if (!squelched && !squelchBreak) { diff --git a/src/visual/PrimaryGLContext.cpp b/src/visual/PrimaryGLContext.cpp index 15030e0..a21dc78 100644 --- a/src/visual/PrimaryGLContext.cpp +++ b/src/visual/PrimaryGLContext.cpp @@ -119,7 +119,8 @@ void PrimaryGLContext::DrawDemodInfo(DemodulatorInstancePtr demod, RGBA4f color, // TODO: Better recording indicator... pulsating red circle? if (isRecording) { - labelBg.g = 1.0f; + auto t = std::chrono::duration_cast(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); + labelBg.g = sinf(2.0f * M_PI * (float(t) / 1000.0f)) * 0.25f + 0.75f; } glColor4f(labelBg.r, labelBg.g, labelBg.b, labelBg.a); diff --git a/src/visual/WaterfallCanvas.cpp b/src/visual/WaterfallCanvas.cpp index 03760ab..8efd1e5 100644 --- a/src/visual/WaterfallCanvas.cpp +++ b/src/visual/WaterfallCanvas.cpp @@ -565,25 +565,25 @@ void WaterfallCanvas::updateHoverState() { mouseTracker.setVertDragLock(true); mouseTracker.setHorizDragLock(false); - setStatusText("Click and drag to change demodulator bandwidth. SPACE or numeric key for direct frequency input. [, ] to nudge, M for mute, D to delete, C to center, E to edit label, R to record."); + setStatusText("Drag to change bandwidth. SPACE or 0-9 for direct frequency input. [, ] to nudge, M for mute, D to delete, C to center, E to edit label, R to record."); } else { SetCursor(wxCURSOR_SIZING); nextDragState = WF_DRAG_FREQUENCY; mouseTracker.setVertDragLock(true); mouseTracker.setHorizDragLock(false); - setStatusText("Click and drag to change demodulator frequency; SPACE or numeric key for direct input. [, ] to nudge, M for mute, D to delete, C to center, E to edit label, R to record."); + setStatusText("Drag to change frequency; SPACE or 0-9 for direct input. [, ] to nudge, M for mute, D to delete, C to center, E to edit label, R to record."); } } else { SetCursor(wxCURSOR_CROSS); nextDragState = WF_DRAG_NONE; if (shiftDown) { - setStatusText("Click to create a new demodulator or hold ALT to drag range, SPACE or numeric key for direct center frequency input."); + setStatusText("Click to create a new demodulator or hold ALT to drag new range."); } else { setStatusText( - "Click to set active demodulator frequency or hold ALT to drag range; hold SHIFT to create new. Right drag or wheel to Zoom. Arrow keys to navigate/zoom, C to center."); + "Click to set demodulator frequency or hold ALT to drag range; hold SHIFT to create new. Right drag or wheel to Zoom. Arrow keys to navigate/zoom, C to center. Shift-R record/stop all."); } } }