mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-05 00:41:17 -05:00
Layout, interaction improvements
This commit is contained in:
parent
b9ead19981
commit
0eb8ef60b2
@ -31,8 +31,9 @@ AppFrame::AppFrame() :
|
|||||||
wxFrame(NULL, wxID_ANY, wxT("CubicSDR")) {
|
wxFrame(NULL, wxID_ANY, wxT("CubicSDR")) {
|
||||||
|
|
||||||
wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
|
||||||
wxBoxSizer *demodTray = new wxBoxSizer(wxHORIZONTAL);
|
|
||||||
wxBoxSizer *demodOpts = new wxBoxSizer(wxVERTICAL);
|
wxBoxSizer *demodOpts = new wxBoxSizer(wxVERTICAL);
|
||||||
|
wxBoxSizer *demodVisuals = new wxBoxSizer(wxVERTICAL);
|
||||||
|
wxBoxSizer *demodTray = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
|
||||||
demodTray->AddSpacer(5);
|
demodTray->AddSpacer(5);
|
||||||
demodOpts->AddSpacer(5);
|
demodOpts->AddSpacer(5);
|
||||||
@ -64,15 +65,20 @@ wxFrame(NULL, wxID_ANY, wxT("CubicSDR")) {
|
|||||||
|
|
||||||
demodTray->Add(demodOpts, 1, wxEXPAND | wxALL, 0);
|
demodTray->Add(demodOpts, 1, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
|
|
||||||
demodWaterfallCanvas = new WaterfallCanvas(this, NULL);
|
demodWaterfallCanvas = new WaterfallCanvas(this, NULL);
|
||||||
demodWaterfallCanvas->Setup(1024,128);
|
demodWaterfallCanvas->Setup(1024,128);
|
||||||
demodWaterfallCanvas->SetView(DEFAULT_FREQ,300000);
|
demodWaterfallCanvas->SetView(DEFAULT_FREQ,300000);
|
||||||
demodTray->Add(demodWaterfallCanvas, 7, wxEXPAND | wxALL, 0);
|
demodVisuals->Add(demodWaterfallCanvas, 3, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
|
demodTray->Add(demodVisuals, 7, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
|
demodTray->AddSpacer(2);
|
||||||
|
|
||||||
scopeCanvas = new ScopeCanvas(this, NULL);
|
scopeCanvas = new ScopeCanvas(this, NULL);
|
||||||
demodTray->Add(scopeCanvas, 7, wxEXPAND | wxALL, 0);
|
demodTray->Add(scopeCanvas, 7, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
vbox->Add(demodTray, 1, wxEXPAND | wxALL, 0);
|
vbox->Add(demodTray, 2, wxEXPAND | wxALL, 0);
|
||||||
vbox->AddSpacer(2);
|
vbox->AddSpacer(2);
|
||||||
spectrumCanvas = new SpectrumCanvas(this, NULL);
|
spectrumCanvas = new SpectrumCanvas(this, NULL);
|
||||||
spectrumCanvas->Setup(2048);
|
spectrumCanvas->Setup(2048);
|
||||||
@ -140,14 +146,19 @@ void AppFrame::OnIdle(wxIdleEvent& event) {
|
|||||||
DemodulatorInstance *demod = wxGetApp().getDemodMgr().getLastActiveDemodulator();
|
DemodulatorInstance *demod = wxGetApp().getDemodMgr().getLastActiveDemodulator();
|
||||||
|
|
||||||
if (demod) {
|
if (demod) {
|
||||||
|
if (demodWaterfallCanvas->getDragState() == WaterfallCanvas::WF_DRAG_NONE) {
|
||||||
if (demod->getParams().frequency != demodWaterfallCanvas->GetCenterFrequency()) {
|
if (demod->getParams().frequency != demodWaterfallCanvas->GetCenterFrequency()) {
|
||||||
demodWaterfallCanvas->SetCenterFrequency(demod->getParams().frequency);
|
demodWaterfallCanvas->SetCenterFrequency(demod->getParams().frequency);
|
||||||
}
|
}
|
||||||
unsigned int demodBw = (unsigned int) ceil((float) demod->getParams().bandwidth * 1.5);
|
unsigned int demodBw = (unsigned int) ceil((float) demod->getParams().bandwidth * 2.5);
|
||||||
|
if (demodBw > SRATE/2) {
|
||||||
|
demodBw = SRATE/2;
|
||||||
|
}
|
||||||
if (demodBw != demodWaterfallCanvas->GetBandwidth()) {
|
if (demodBw != demodWaterfallCanvas->GetBandwidth()) {
|
||||||
demodWaterfallCanvas->SetBandwidth(demodBw);
|
demodWaterfallCanvas->SetBandwidth(demodBw);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!wxGetApp().getIQVisualQueue()->empty()) {
|
if (!wxGetApp().getIQVisualQueue()->empty()) {
|
||||||
DemodulatorThreadIQData *iqData;
|
DemodulatorThreadIQData *iqData;
|
||||||
|
@ -29,9 +29,11 @@ EVT_ENTER_WINDOW(WaterfallCanvas::mouseEnterWindow)
|
|||||||
wxEND_EVENT_TABLE()
|
wxEND_EVENT_TABLE()
|
||||||
|
|
||||||
WaterfallCanvas::WaterfallCanvas(wxWindow *parent, int *attribList) :
|
WaterfallCanvas::WaterfallCanvas(wxWindow *parent, int *attribList) :
|
||||||
wxGLCanvas(parent, wxID_ANY, attribList, wxDefaultPosition, wxDefaultSize,
|
wxGLCanvas(parent, wxID_ANY, attribList, wxDefaultPosition, wxDefaultSize,
|
||||||
wxFULL_REPAINT_ON_RESIZE), parent(parent), frameTimer(0), activeDemodulatorBandwidth(0), activeDemodulatorFrequency(0), dragState(
|
wxFULL_REPAINT_ON_RESIZE), parent(parent), frameTimer(0), activeDemodulatorBandwidth(0), activeDemodulatorFrequency(0), dragState(
|
||||||
WF_DRAG_NONE), nextDragState(WF_DRAG_NONE), shiftDown(false), altDown(false), ctrlDown(false), fft_size(0), waterfall_lines(0), plan(NULL), in(NULL), out(NULL), center_freq(0), bandwidth(0), isView(false), resampler(NULL), resample_ratio(0), last_bandwidth(0), last_input_bandwidth(0) {
|
WF_DRAG_NONE), nextDragState(WF_DRAG_NONE), shiftDown(false), altDown(false), ctrlDown(false), fft_size(0), waterfall_lines(0), plan(
|
||||||
|
NULL), in(NULL), out(NULL), center_freq(0), bandwidth(0), isView(false), resampler(NULL), resample_ratio(0), last_bandwidth(0), last_input_bandwidth(
|
||||||
|
0) {
|
||||||
|
|
||||||
glContext = new WaterfallContext(this, &wxGetApp().GetContext(this));
|
glContext = new WaterfallContext(this, &wxGetApp().GetContext(this));
|
||||||
|
|
||||||
@ -100,7 +102,7 @@ unsigned int WaterfallCanvas::GetCenterFrequency() {
|
|||||||
if (isView) {
|
if (isView) {
|
||||||
return center_freq;
|
return center_freq;
|
||||||
} else {
|
} else {
|
||||||
return (unsigned int)wxGetApp().getFrequency();
|
return (unsigned int) wxGetApp().getFrequency();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,6 +118,14 @@ unsigned int WaterfallCanvas::GetBandwidth() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WaterfallCanvas::DragState WaterfallCanvas::getDragState() {
|
||||||
|
return dragState;
|
||||||
|
}
|
||||||
|
|
||||||
|
WaterfallCanvas::DragState WaterfallCanvas::getNextDragState() {
|
||||||
|
return nextDragState;
|
||||||
|
}
|
||||||
|
|
||||||
void WaterfallCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) {
|
void WaterfallCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) {
|
||||||
wxPaintDC dc(this);
|
wxPaintDC dc(this);
|
||||||
const wxSize ClientSize = GetClientSize();
|
const wxSize ClientSize = GetClientSize();
|
||||||
@ -303,9 +313,9 @@ void WaterfallCanvas::setData(DemodulatorThreadIQData *input) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (center_freq != input->frequency) {
|
if (center_freq != input->frequency) {
|
||||||
if (((int)center_freq - (int)input->frequency) != shift_freq || last_input_bandwidth != input->bandwidth) {
|
if (((int) center_freq - (int) input->frequency) != shift_freq || last_input_bandwidth != input->bandwidth) {
|
||||||
if ((int)input->frequency - abs((int)center_freq) < (int) ((float) ((float) SRATE / 2.0))) {
|
if ((int) input->frequency - abs((int) center_freq) < (int) ((float) ((float) SRATE / 2.0))) {
|
||||||
shift_freq = (int)center_freq - (int)input->frequency;
|
shift_freq = (int) center_freq - (int) input->frequency;
|
||||||
nco_crcf_reset(nco_shift);
|
nco_crcf_reset(nco_shift);
|
||||||
nco_crcf_set_frequency(nco_shift, (2.0 * M_PI) * (((float) abs(shift_freq)) / ((float) input->bandwidth)));
|
nco_crcf_set_frequency(nco_shift, (2.0 * M_PI) * (((float) abs(shift_freq)) / ((float) input->bandwidth)));
|
||||||
}
|
}
|
||||||
@ -531,7 +541,7 @@ void WaterfallCanvas::mouseMoved(wxMouseEvent& event) {
|
|||||||
int freqDiff = ((int) activeDemodulator->getParams().frequency - freqPos);
|
int freqDiff = ((int) activeDemodulator->getParams().frequency - freqPos);
|
||||||
|
|
||||||
if (abs(freqDiff) > (activeDemodulator->getParams().bandwidth / 3)) {
|
if (abs(freqDiff) > (activeDemodulator->getParams().bandwidth / 3)) {
|
||||||
SetCursor (wxCURSOR_SIZEWE);
|
SetCursor(wxCURSOR_SIZEWE);
|
||||||
|
|
||||||
if (freqDiff > 0) {
|
if (freqDiff > 0) {
|
||||||
nextDragState = WF_DRAG_BANDWIDTH_LEFT;
|
nextDragState = WF_DRAG_BANDWIDTH_LEFT;
|
||||||
@ -542,14 +552,14 @@ void WaterfallCanvas::mouseMoved(wxMouseEvent& event) {
|
|||||||
mTracker.setVertDragLock(true);
|
mTracker.setVertDragLock(true);
|
||||||
mTracker.setHorizDragLock(false);
|
mTracker.setHorizDragLock(false);
|
||||||
} else {
|
} else {
|
||||||
SetCursor (wxCURSOR_SIZING);
|
SetCursor(wxCURSOR_SIZING);
|
||||||
nextDragState = WF_DRAG_FREQUENCY;
|
nextDragState = WF_DRAG_FREQUENCY;
|
||||||
|
|
||||||
mTracker.setVertDragLock(true);
|
mTracker.setVertDragLock(true);
|
||||||
mTracker.setHorizDragLock(false);
|
mTracker.setHorizDragLock(false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SetCursor (wxCURSOR_CROSS);
|
SetCursor(wxCURSOR_CROSS);
|
||||||
nextDragState = WF_DRAG_NONE;
|
nextDragState = WF_DRAG_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,7 +641,7 @@ void WaterfallCanvas::mouseReleased(wxMouseEvent& event) {
|
|||||||
wxNumberFormatter::ToString((long) freq, wxNumberFormatter::Style_WithThousandsSep)));
|
wxNumberFormatter::ToString((long) freq, wxNumberFormatter::Style_WithThousandsSep)));
|
||||||
|
|
||||||
wxGetApp().getDemodMgr().setActiveDemodulator(wxGetApp().getDemodMgr().getLastActiveDemodulator(), false);
|
wxGetApp().getDemodMgr().setActiveDemodulator(wxGetApp().getDemodMgr().getLastActiveDemodulator(), false);
|
||||||
SetCursor (wxCURSOR_SIZING);
|
SetCursor(wxCURSOR_SIZING);
|
||||||
nextDragState = WF_DRAG_FREQUENCY;
|
nextDragState = WF_DRAG_FREQUENCY;
|
||||||
mTracker.setVertDragLock(true);
|
mTracker.setVertDragLock(true);
|
||||||
mTracker.setHorizDragLock(false);
|
mTracker.setHorizDragLock(false);
|
||||||
@ -699,12 +709,12 @@ void WaterfallCanvas::mouseReleased(wxMouseEvent& event) {
|
|||||||
|
|
||||||
void WaterfallCanvas::mouseLeftWindow(wxMouseEvent& event) {
|
void WaterfallCanvas::mouseLeftWindow(wxMouseEvent& event) {
|
||||||
mTracker.OnMouseLeftWindow(event);
|
mTracker.OnMouseLeftWindow(event);
|
||||||
SetCursor (wxCURSOR_CROSS);
|
SetCursor(wxCURSOR_CROSS);
|
||||||
wxGetApp().getDemodMgr().setActiveDemodulator(NULL);
|
wxGetApp().getDemodMgr().setActiveDemodulator(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WaterfallCanvas::mouseEnterWindow(wxMouseEvent& event) {
|
void WaterfallCanvas::mouseEnterWindow(wxMouseEvent& event) {
|
||||||
mTracker.OnMouseEnterWindow(event);
|
mTracker.OnMouseEnterWindow(event);
|
||||||
SetCursor (wxCURSOR_CROSS);
|
SetCursor(wxCURSOR_CROSS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,9 @@ public:
|
|||||||
void SetBandwidth(unsigned int bandwidth_in);
|
void SetBandwidth(unsigned int bandwidth_in);
|
||||||
unsigned int GetBandwidth();
|
unsigned int GetBandwidth();
|
||||||
|
|
||||||
|
DragState getDragState();
|
||||||
|
DragState getNextDragState();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnPaint(wxPaintEvent& event);
|
void OnPaint(wxPaintEvent& event);
|
||||||
void OnKeyDown(wxKeyEvent& event);
|
void OnKeyDown(wxKeyEvent& event);
|
||||||
|
Loading…
Reference in New Issue
Block a user