mirror of
				https://github.com/cjcliffe/CubicSDR.git
				synced 2025-11-04 05:30:23 -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user