Initial global keyboard handler setup

This commit is contained in:
Charles J. Cliffe 2016-02-07 18:01:11 -05:00
parent 7fb7089bfd
commit 2295b47d69
9 changed files with 135 additions and 23 deletions

View File

@ -288,7 +288,7 @@ AppFrame::AppFrame() :
this->SetSizer(vbox);
// waterfallCanvas->SetFocusFromKbd();
waterfallCanvas->SetFocus();
// waterfallCanvas->SetFocus();
// SetIcon(wxICON(sample));
@ -1196,15 +1196,15 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
}
}
if (demodTuner->getMouseTracker()->mouseInView()) {
if (!demodTuner->HasFocus()) {
demodTuner->SetFocus();
}
} else if (!wxGetApp().isDeviceSelectorOpen() && (!modemProps || !modemProps->isMouseInView())) {
if (!waterfallCanvas->HasFocus()) {
waterfallCanvas->SetFocus();
}
}
// if (demodTuner->getMouseTracker()->mouseInView()) {
// if (!demodTuner->HasFocus()) {
// demodTuner->SetFocus();
// }
// } else if (!wxGetApp().isDeviceSelectorOpen() && (!modemProps || !modemProps->isMouseInView())) {
// if (!waterfallCanvas->HasFocus()) {
// waterfallCanvas->SetFocus();
// }
// }
scopeCanvas->setPPMMode(demodTuner->isAltDown());
@ -1276,6 +1276,8 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
if (!this->IsActive()) {
std::this_thread::sleep_for(std::chrono::milliseconds(25));
} else {
std::this_thread::sleep_for(std::chrono::milliseconds(1));
}
event.RequestMore();
@ -1540,3 +1542,96 @@ void AppFrame::setMainWaterfallFFTSize(int fftSize) {
waterfallDataThread->getProcessor()->setFFTSize(fftSize);
waterfallCanvas->setFFTSize(fftSize);
}
int AppFrame::OnGlobalKeyDown(wxKeyEvent &event) {
if (!this->IsActive()) {
return -1;
}
switch (event.GetKeyCode()) {
case WXK_UP:
case WXK_NUMPAD_UP:
case WXK_DOWN:
case WXK_NUMPAD_DOWN:
case WXK_LEFT:
case WXK_NUMPAD_LEFT:
case WXK_RIGHT:
case WXK_NUMPAD_RIGHT:
waterfallCanvas->OnKeyDown(event);
return 0;
case 'A':
case 'F':
case 'L':
case 'U':
return 0;
default:
break;
}
if (demodTuner->getMouseTracker()->mouseInView()) {
demodTuner->OnKeyDown(event);
return 0;
} else if (waterfallCanvas->getMouseTracker()->mouseInView()) {
waterfallCanvas->OnKeyDown(event);
return 0;
}
return 0;
}
int AppFrame::OnGlobalKeyUp(wxKeyEvent &event) {
if (!this->IsActive()) {
return -1;
}
switch (event.GetKeyCode()) {
case WXK_SPACE:
if (!demodTuner->getMouseTracker()->mouseInView()) {
wxGetApp().showFrequencyInput();
return 0;
}
break;
case WXK_UP:
case WXK_NUMPAD_UP:
case WXK_DOWN:
case WXK_NUMPAD_DOWN:
case WXK_LEFT:
case WXK_NUMPAD_LEFT:
case WXK_RIGHT:
case WXK_NUMPAD_RIGHT:
waterfallCanvas->OnKeyUp(event);
return 0;
case 'A':
demodModeSelector->setSelection("AM");
break;
case 'F':
if (demodModeSelector->getSelectionLabel() == "FM") {
demodModeSelector->setSelection("FMS");
} else {
demodModeSelector->setSelection("FM");
}
break;
case 'L':
demodModeSelector->setSelection("LSB");
break;
case 'U':
demodModeSelector->setSelection("USB");
break;
default:
break;
}
if (demodTuner->getMouseTracker()->mouseInView()) {
demodTuner->OnKeyUp(event);
return 0;
} else if (waterfallCanvas->getMouseTracker()->mouseInView()) {
waterfallCanvas->OnKeyUp(event);
return 0;
}
// TODO: Catch key-ups outside of original target
return 0;
}

View File

@ -75,6 +75,9 @@ public:
void updateModemProperties(ModemArgInfoList args);
void setMainWaterfallFFTSize(int fftSize);
int OnGlobalKeyDown(wxKeyEvent &event);
int OnGlobalKeyUp(wxKeyEvent &event);
private:
void OnMenu(wxCommandEvent& event);
void OnClose(wxCloseEvent& event);

View File

@ -749,6 +749,22 @@ std::string CubicSDR::getModulePath() {
return modulePath;
}
int CubicSDR::FilterEvent(wxEvent& event) {
if (!appframe) {
return -1;
}
if (event.GetEventType() == wxEVT_KEY_DOWN) {
return appframe->OnGlobalKeyDown((wxKeyEvent&)event);
}
if (event.GetEventType() == wxEVT_KEY_UP) {
return appframe->OnGlobalKeyUp((wxKeyEvent&)event);
}
return -1; // process normally
}
#ifdef USE_HAMLIB
RigThread *CubicSDR::getRigThread() {
return rigThread;

View File

@ -161,6 +161,8 @@ public:
#endif
private:
int FilterEvent(wxEvent& event);
AppFrame *appframe;
AppConfig config;
PrimaryGLContext *m_glContext;

View File

@ -19,7 +19,7 @@
InteractiveCanvas::InteractiveCanvas(wxWindow *parent, int *attribList) :
wxGLCanvas(parent, wxID_ANY, attribList, wxDefaultPosition, wxDefaultSize,
wxFULL_REPAINT_ON_RESIZE| wxWANTS_CHARS), parent(parent), shiftDown(false), altDown(false), ctrlDown(false), centerFreq(0), bandwidth(0), lastBandwidth(0), isView(
wxFULL_REPAINT_ON_RESIZE), parent(parent), shiftDown(false), altDown(false), ctrlDown(false), centerFreq(0), bandwidth(0), lastBandwidth(0), isView(
false) {
mouseTracker.setTarget(this);
}

View File

@ -26,8 +26,8 @@ EVT_RIGHT_UP(TuningCanvas::OnMouseRightReleased)
EVT_LEAVE_WINDOW(TuningCanvas::OnMouseLeftWindow)
EVT_ENTER_WINDOW(TuningCanvas::OnMouseEnterWindow)
EVT_MOUSEWHEEL(TuningCanvas::OnMouseWheelMoved)
EVT_KEY_DOWN(TuningCanvas::OnKeyDown)
EVT_KEY_UP(TuningCanvas::OnKeyUp)
//EVT_KEY_DOWN(TuningCanvas::OnKeyDown)
//EVT_KEY_UP(TuningCanvas::OnKeyUp)
wxEND_EVENT_TABLE()
TuningCanvas::TuningCanvas(wxWindow *parent, int *attribList) :

View File

@ -25,6 +25,8 @@ public:
bool changed();
void setHalfBand(bool hb);
void OnKeyDown(wxKeyEvent& event);
void OnKeyUp(wxKeyEvent& event);
private:
void OnPaint(wxPaintEvent& event);
@ -36,8 +38,6 @@ private:
void OnMouseReleased(wxMouseEvent& event);
void OnMouseEnterWindow(wxMouseEvent& event);
void OnMouseLeftWindow(wxMouseEvent& event);
void OnKeyDown(wxKeyEvent& event);
void OnKeyUp(wxKeyEvent& event);
void OnMouseRightDown(wxMouseEvent& event);
void OnMouseRightReleased(wxMouseEvent& event);

View File

@ -19,8 +19,8 @@
wxBEGIN_EVENT_TABLE(WaterfallCanvas, wxGLCanvas)
EVT_PAINT(WaterfallCanvas::OnPaint)
EVT_KEY_DOWN(WaterfallCanvas::OnKeyDown)
EVT_KEY_UP(WaterfallCanvas::OnKeyUp)
//EVT_KEY_DOWN(WaterfallCanvas::OnKeyDown)
//EVT_KEY_UP(WaterfallCanvas::OnKeyUp)
EVT_IDLE(WaterfallCanvas::OnIdle)
EVT_MOTION(WaterfallCanvas::OnMouseMoved)
EVT_LEFT_DOWN(WaterfallCanvas::OnMouseDown)
@ -345,7 +345,6 @@ void WaterfallCanvas::OnKeyUp(wxKeyEvent& event) {
altDown = event.AltDown();
ctrlDown = event.ControlDown();
switch (event.GetKeyCode()) {
case 'A':
case WXK_UP:
case WXK_NUMPAD_UP:
scaleMove = 0.0;
@ -354,7 +353,6 @@ void WaterfallCanvas::OnKeyUp(wxKeyEvent& event) {
mouseZoom = 0.95;
}
break;
case 'Z':
case WXK_DOWN:
case WXK_NUMPAD_DOWN:
scaleMove = 0.0;
@ -381,7 +379,6 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) {
long long freq = originalFreq;
switch (event.GetKeyCode()) {
case 'A':
case WXK_UP:
case WXK_NUMPAD_UP:
if (!shiftDown) {
@ -391,7 +388,6 @@ void WaterfallCanvas::OnKeyDown(wxKeyEvent& event) {
scaleMove = 1.0;
}
break;
case 'Z':
case WXK_DOWN:
case WXK_NUMPAD_DOWN:
if (!shiftDown) {

View File

@ -33,11 +33,11 @@ public:
void setLinesPerSecond(int lps);
void setMinBandwidth(int min);
private:
void OnPaint(wxPaintEvent& event);
void OnKeyDown(wxKeyEvent& event);
void OnKeyUp(wxKeyEvent& event);
private:
void OnPaint(wxPaintEvent& event);
void OnIdle(wxIdleEvent &event);
void OnMouseMoved(wxMouseEvent& event);