diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7ab69463..4d37b59c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,8 +6,8 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules/")
SET(CUBICSDR_VERSION_MAJOR "0")
SET(CUBICSDR_VERSION_MINOR "2")
-SET(CUBICSDR_VERSION_PATCH "5")
-SET(CUBICSDR_VERSION_SUFFIX "")
+SET(CUBICSDR_VERSION_PATCH "6")
+SET(CUBICSDR_VERSION_SUFFIX "a")
SET(CUBICSDR_VERSION "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}${CUBICSDR_VERSION_SUFFIX}")
SET(CPACK_PACKAGE_VERSION "${CUBICSDR_VERSION_MAJOR}.${CUBICSDR_VERSION_MINOR}.${CUBICSDR_VERSION_PATCH}")
diff --git a/external/msvc/x64/vc_redist.x64.exe b/external/msvc/x64/vc_redist.x64.exe
index 02bda21d..4fac196d 100644
Binary files a/external/msvc/x64/vc_redist.x64.exe and b/external/msvc/x64/vc_redist.x64.exe differ
diff --git a/external/msvc/x86/vc_redist.x86.exe b/external/msvc/x86/vc_redist.x86.exe
index 2b89c83b..0319b7ba 100644
Binary files a/external/msvc/x86/vc_redist.x86.exe and b/external/msvc/x86/vc_redist.x86.exe differ
diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp
index 90a10c83..1dc2c8a6 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 b2c7c95b..8a5f71b0 100644
--- a/src/AppFrame.h
+++ b/src/AppFrame.h
@@ -197,8 +197,7 @@ class AppFrame: public wxFrame {
/**
* 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 20a46584..9bc0a3c4 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 fe55cfab..3893d0d9 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/forms/Bookmark/BookmarkPanel.cpp b/src/forms/Bookmark/BookmarkPanel.cpp
index bbe874a6..4f45fc7e 100644
--- a/src/forms/Bookmark/BookmarkPanel.cpp
+++ b/src/forms/Bookmark/BookmarkPanel.cpp
@@ -93,6 +93,7 @@ BookmarkPanel::BookmarkPanel( wxWindow* parent, wxWindowID id, const wxPoint& po
m_searchText->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BookmarkPanel::onSearchText ), NULL, this );
m_clearSearchButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BookmarkPanel::onClearSearch ), NULL, this );
m_treeView->Connect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ), NULL, this );
+ m_treeView->Connect( wxEVT_KEY_UP, wxKeyEventHandler( BookmarkPanel::onKeyUp ), NULL, this );
m_treeView->Connect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ), NULL, this );
m_treeView->Connect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ), NULL, this );
m_treeView->Connect( wxEVT_COMMAND_TREE_BEGIN_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeBeginDrag ), NULL, this );
@@ -120,6 +121,7 @@ BookmarkPanel::~BookmarkPanel()
m_searchText->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BookmarkPanel::onSearchText ), NULL, this );
m_clearSearchButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BookmarkPanel::onClearSearch ), NULL, this );
m_treeView->Disconnect( wxEVT_ENTER_WINDOW, wxMouseEventHandler( BookmarkPanel::onEnterWindow ), NULL, this );
+ m_treeView->Disconnect( wxEVT_KEY_UP, wxKeyEventHandler( BookmarkPanel::onKeyUp ), NULL, this );
m_treeView->Disconnect( wxEVT_LEAVE_WINDOW, wxMouseEventHandler( BookmarkPanel::onLeaveWindow ), NULL, this );
m_treeView->Disconnect( wxEVT_MOTION, wxMouseEventHandler( BookmarkPanel::onMotion ), NULL, this );
m_treeView->Disconnect( wxEVT_COMMAND_TREE_BEGIN_DRAG, wxTreeEventHandler( BookmarkPanel::onTreeBeginDrag ), NULL, this );
diff --git a/src/forms/Bookmark/BookmarkPanel.fbp b/src/forms/Bookmark/BookmarkPanel.fbp
index de4f8f6f..4cbe6094 100644
--- a/src/forms/Bookmark/BookmarkPanel.fbp
+++ b/src/forms/Bookmark/BookmarkPanel.fbp
@@ -27,7 +27,7 @@
UI
0
0
-