From 4900ce7f17cbbb2a3fd4973ea9a6993c71e3dd86 Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Tue, 25 Nov 2014 00:35:06 -0500 Subject: [PATCH] Can now tune by dragging middle spectrum view --- src/AppFrame.cpp | 3 ++ src/visual/ScopeCanvas.cpp | 4 +- src/visual/SpectrumCanvas.cpp | 72 +++++++++++++++++++++++++++++++++- src/visual/SpectrumCanvas.h | 12 ++++++ src/visual/WaterfallCanvas.cpp | 4 ++ 5 files changed, 93 insertions(+), 2 deletions(-) diff --git a/src/AppFrame.cpp b/src/AppFrame.cpp index 98166da..7908542 100644 --- a/src/AppFrame.cpp +++ b/src/AppFrame.cpp @@ -59,6 +59,9 @@ AppFrame::AppFrame() : Show(); + GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %i"),DEFAULT_FREQ)); + + // static const int attribs[] = { WX_GL_RGBA, WX_GL_DOUBLEBUFFER, 0 }; // wxLogStatus("Double-buffered display %s supported", wxGLCanvas::IsDisplaySupported(attribs) ? "is" : "not"); // ShowFullScreen(true); diff --git a/src/visual/ScopeCanvas.cpp b/src/visual/ScopeCanvas.cpp index 782bd3a..36a11ae 100644 --- a/src/visual/ScopeCanvas.cpp +++ b/src/visual/ScopeCanvas.cpp @@ -57,11 +57,13 @@ void ScopeCanvas::OnKeyDown(wxKeyEvent& event) { freq = wxGetApp().getFrequency(); freq += 100000; wxGetApp().setFrequency(freq); - break; + ((wxFrame*)parent)->GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %i"),freq)); + break; case WXK_LEFT: freq = wxGetApp().getFrequency(); freq -= 100000; wxGetApp().setFrequency(freq); + ((wxFrame*)parent)->GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %i"),freq)); break; case WXK_DOWN: break; diff --git a/src/visual/SpectrumCanvas.cpp b/src/visual/SpectrumCanvas.cpp index 81ccba7..28354d5 100644 --- a/src/visual/SpectrumCanvas.cpp +++ b/src/visual/SpectrumCanvas.cpp @@ -14,15 +14,22 @@ #include "CubicSDRDefs.h" #include "AppFrame.h" #include +#include wxBEGIN_EVENT_TABLE(SpectrumCanvas, wxGLCanvas) EVT_PAINT(SpectrumCanvas::OnPaint) EVT_KEY_DOWN(SpectrumCanvas::OnKeyDown) EVT_IDLE(SpectrumCanvas::OnIdle) +EVT_MOTION(SpectrumCanvas::mouseMoved) +EVT_LEFT_DOWN(SpectrumCanvas::mouseDown) +EVT_LEFT_UP(SpectrumCanvas::mouseReleased) +//EVT_RIGHT_DOWN(SpectrumCanvas::rightClick) +EVT_LEAVE_WINDOW(SpectrumCanvas::mouseLeftWindow) +EVT_MOUSEWHEEL(SpectrumCanvas::mouseWheelMoved) wxEND_EVENT_TABLE() SpectrumCanvas::SpectrumCanvas(wxWindow *parent, int *attribList) : wxGLCanvas(parent, wxID_ANY, attribList, wxDefaultPosition, wxDefaultSize, - wxFULL_REPAINT_ON_RESIZE), parent(parent), frameTimer(0) { + wxFULL_REPAINT_ON_RESIZE), parent(parent), frameTimer(0), isMouseDown(false) { int in_block_size = BUF_SIZE / 2; int out_block_size = FFT_SIZE; @@ -36,6 +43,8 @@ SpectrumCanvas::SpectrumCanvas(wxWindow *parent, int *attribList) : glContext = new SpectrumContext(this, &wxGetApp().GetContext(this)); timer.start(); + + SetCursor(wxCURSOR_SIZEWE); } SpectrumCanvas::~SpectrumCanvas() { @@ -63,11 +72,13 @@ void SpectrumCanvas::OnKeyDown(wxKeyEvent& event) { freq = wxGetApp().getFrequency(); freq += 100000; wxGetApp().setFrequency(freq); + ((wxFrame*)parent)->GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %i"),freq)); break; case WXK_LEFT: freq = wxGetApp().getFrequency(); freq -= 100000; wxGetApp().setFrequency(freq); + ((wxFrame*)parent)->GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %i"),freq)); break; case WXK_DOWN: break; @@ -160,3 +171,62 @@ void SpectrumCanvas::OnIdle(wxIdleEvent &event) { // frameTimer = 0; // } } + + + + + +void SpectrumCanvas::mouseMoved(wxMouseEvent& event) { + if (isMouseDown) { + const wxSize ClientSize = GetClientSize(); + float mouseX = (float)event.m_x/(float)ClientSize.x; + float mouseY = (float)event.m_y/(float)ClientSize.y; + + + deltaMouseX = mouseX-lastMouseX; + deltaMouseY = mouseY-lastMouseY; + + lastMouseX = mouseX; +// lastMouseY = mouseY; + + int freqChange = deltaMouseX*SRATE; + + int freq = wxGetApp().getFrequency(); + freq -= freqChange; + wxGetApp().setFrequency(freq); + + ((wxFrame*)parent)->GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %s"),wxNumberFormatter::ToString((long)freq,wxNumberFormatter::Style_WithThousandsSep))); + + if (mouseY != lastMouseY) { + WarpPointer(event.m_x,lastMouseY*ClientSize.y); + } + } +} + +void SpectrumCanvas::mouseDown(wxMouseEvent& event) { + const wxSize ClientSize = GetClientSize(); + lastMouseX = (float)event.m_x/(float)ClientSize.x; + lastMouseY = (float)event.m_y/(float)ClientSize.y; + + isMouseDown = true; + SetCursor(wxCURSOR_CROSS); +} + +void SpectrumCanvas::mouseWheelMoved(wxMouseEvent& event) { + std::cout << "wheel?" << std::endl; +} + +void SpectrumCanvas::mouseReleased(wxMouseEvent& event) { + isMouseDown = false; + SetCursor(wxCURSOR_SIZEWE); +} + +void SpectrumCanvas::mouseLeftWindow(wxMouseEvent& event) { + isMouseDown = false; + SetCursor(wxCURSOR_SIZEWE); +} + +//void SpectrumCanvas::rightClick(wxMouseEvent& event) {} +//void SpectrumCanvas::keyPressed(wxKeyEvent& event) {} +//void SpectrumCanvas::keyReleased(wxKeyEvent& event) {} + diff --git a/src/visual/SpectrumCanvas.h b/src/visual/SpectrumCanvas.h index 5b3cdb8..7c5089c 100644 --- a/src/visual/SpectrumCanvas.h +++ b/src/visual/SpectrumCanvas.h @@ -23,6 +23,14 @@ private: void OnIdle(wxIdleEvent &event); + void mouseMoved(wxMouseEvent& event); + void mouseDown(wxMouseEvent& event); + void mouseWheelMoved(wxMouseEvent& event); + void mouseReleased(wxMouseEvent& event); + +// void rightClick(wxMouseEvent& event); + void mouseLeftWindow(wxMouseEvent& event); + wxWindow *parent; std::vector spectrum_points; @@ -39,6 +47,10 @@ private: SpectrumContext *glContext; Timer timer; float frameTimer; + + float lastMouseX, lastMouseY; + float deltaMouseX, deltaMouseY; + bool isMouseDown; // event table wxDECLARE_EVENT_TABLE(); }; diff --git a/src/visual/WaterfallCanvas.cpp b/src/visual/WaterfallCanvas.cpp index dc8d711..f45a942 100644 --- a/src/visual/WaterfallCanvas.cpp +++ b/src/visual/WaterfallCanvas.cpp @@ -36,6 +36,8 @@ WaterfallCanvas::WaterfallCanvas(wxWindow *parent, int *attribList) : glContext = new WaterfallContext(this, &wxGetApp().GetContext(this)); timer.start(); + + SetCursor(wxCURSOR_CROSS); } WaterfallCanvas::~WaterfallCanvas() { @@ -63,11 +65,13 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) { freq = wxGetApp().getFrequency(); freq += 100000; wxGetApp().setFrequency(freq); + ((wxFrame*)parent)->GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %i"),freq)); break; case WXK_LEFT: freq = wxGetApp().getFrequency(); freq -= 100000; wxGetApp().setFrequency(freq); + ((wxFrame*)parent)->GetStatusBar()->SetStatusText(wxString::Format(wxT("Set center frequency: %i"),freq)); break; case WXK_DOWN: break;