From 781417c2164a209597382161feb8fec5b9e5d167 Mon Sep 17 00:00:00 2001 From: Teuniz Date: Wed, 28 Dec 2016 15:06:11 +0100 Subject: [PATCH] Work in progress. --- global.h | 2 +- interface.cpp | 2 +- wave_dialog.cpp | 204 ++++++++++++++++++++++++++++++++++++++++++++++-- wave_dialog.h | 18 +++++ wave_view.cpp | 25 +++--- 5 files changed, 231 insertions(+), 20 deletions(-) diff --git a/global.h b/global.h index d551cc2..5c5500a 100644 --- a/global.h +++ b/global.h @@ -35,7 +35,7 @@ #define PROGRAM_NAME "DSRemote" -#define PROGRAM_VERSION "0.33_1612281232" +#define PROGRAM_VERSION "0.33_1612281501" #define MAX_PATHLEN 4096 diff --git a/interface.cpp b/interface.cpp index 4cea4fd..0b3e9f3 100644 --- a/interface.cpp +++ b/interface.cpp @@ -1869,7 +1869,7 @@ void UI_Mainwindow::show_howto_operate() "Decrease vertical scale: +\n" "Press '1' to select or deselect channel 1\n" "Press '2' to select or deselect channel 2, etc.\n" - "Press 'c' to center the trigger position (set timebase offset to zero).\n" + "Press 'c' to center the horizontal position (set timebase offset to zero).\n" "Press 'f' to toggle FFT.\n" ); diff --git a/wave_dialog.cpp b/wave_dialog.cpp index 85052e1..a6524b5 100644 --- a/wave_dialog.cpp +++ b/wave_dialog.cpp @@ -34,7 +34,7 @@ UI_wave_window::UI_wave_window(struct device_settings *p_devparms, short *wbuf[MAX_CHNS], QWidget *parnt) { - int i, samples_per_div; + int i; mainwindow = (UI_Mainwindow *)parnt; @@ -60,15 +60,13 @@ UI_wave_window::UI_wave_window(struct device_settings *p_devparms, short *wbuf[M if(devparms->timebasedelayenable) { - samples_per_div = devparms->samplerate * devparms->timebasedelayscale; - } - else - { - samples_per_div = devparms->samplerate * devparms->timebasescale; + devparms->timebasescale = devparms->timebasedelayscale; } devparms->timebasedelayenable = 0; + devparms->timebaseoffset = 0; + wavcurve = new WaveCurve; wavcurve->setBackgroundColor(Qt::black); wavcurve->setSignalColor1(Qt::yellow); @@ -81,8 +79,7 @@ UI_wave_window::UI_wave_window(struct device_settings *p_devparms, short *wbuf[M wavslider = new QSlider; wavslider->setOrientation(Qt::Horizontal); - wavslider->setRange(0, devparms->wavebufsz - (devparms->hordivisions * samples_per_div)); - wavslider->setValue((devparms->wavebufsz - (devparms->hordivisions * samples_per_div)) / 2); + set_wavslider(); devparms->wave_mem_view_sample_start = wavslider->value(); @@ -90,6 +87,41 @@ UI_wave_window::UI_wave_window(struct device_settings *p_devparms, short *wbuf[M g_layout->addWidget(wavcurve, 0, 0); g_layout->addWidget(wavslider, 1, 0); + former_page_act = new QAction(this); + former_page_act->setShortcut(QKeySequence::MoveToPreviousPage); + connect(former_page_act, SIGNAL(triggered()), this, SLOT(former_page())); + addAction(former_page_act); + + shift_page_left_act = new QAction(this); + shift_page_left_act->setShortcut(QKeySequence::MoveToPreviousChar); + connect(shift_page_left_act, SIGNAL(triggered()), this, SLOT(shift_page_left())); + addAction(shift_page_left_act); + + center_trigger_act = new QAction(this); + center_trigger_act->setShortcut(QKeySequence("c")); + connect(center_trigger_act, SIGNAL(triggered()), this, SLOT(center_trigger())); + addAction(center_trigger_act); + + shift_page_right_act = new QAction(this); + shift_page_right_act->setShortcut(QKeySequence::MoveToNextChar); + connect(shift_page_right_act, SIGNAL(triggered()), this, SLOT(shift_page_right())); + addAction(shift_page_right_act); + + next_page_act = new QAction(this); + next_page_act->setShortcut(QKeySequence::MoveToNextPage); + connect(next_page_act, SIGNAL(triggered()), this, SLOT(next_page())); + addAction(next_page_act); + + zoom_in_act = new QAction(this); + zoom_in_act->setShortcut(QKeySequence::ZoomIn); + connect(zoom_in_act, SIGNAL(triggered()), this, SLOT(zoom_in())); + addAction(zoom_in_act); + + zoom_out_act = new QAction(this); + zoom_out_act->setShortcut(QKeySequence::ZoomOut); + connect(zoom_out_act, SIGNAL(triggered()), this, SLOT(zoom_out())); + addAction(zoom_out_act); + connect(wavslider, SIGNAL(sliderMoved(int)), this, SLOT(wavslider_value_changed(int))); show(); @@ -113,6 +145,162 @@ void UI_wave_window::wavslider_value_changed(int val) { devparms->wave_mem_view_sample_start = val; + int samples_per_div = devparms->samplerate * devparms->timebasescale; + + devparms->timebaseoffset = (double)(((devparms->wavebufsz - (devparms->hordivisions * samples_per_div)) / 2) - devparms->wave_mem_view_sample_start) / + devparms->samplerate * -1.0; + + wavcurve->update(); +} + + +void UI_wave_window::set_wavslider(void) +{ + int samples_per_div = devparms->samplerate * devparms->timebasescale; + + wavslider->setRange(0, devparms->wavebufsz - (devparms->hordivisions * samples_per_div)); + + devparms->wave_mem_view_sample_start = ((devparms->wavebufsz - (devparms->hordivisions * samples_per_div)) / 2) + + devparms->samplerate * devparms->timebaseoffset; + + wavslider->setValue(devparms->wave_mem_view_sample_start); +} + + +void UI_wave_window::former_page() +{ + devparms->timebaseoffset -= devparms->timebasescale * devparms->hordivisions; + + if(devparms->timebaseoffset <= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2; + } + + set_wavslider(); + + wavcurve->update(); +} + + +void UI_wave_window::next_page() +{ + devparms->timebaseoffset += devparms->timebasescale * devparms->hordivisions; + + if(devparms->timebaseoffset >= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2; + } + + set_wavslider(); + + wavcurve->update(); +} + + +void UI_wave_window::shift_page_left() +{ + devparms->timebaseoffset -= devparms->timebasescale; + + if(devparms->timebaseoffset <= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2; + } + + set_wavslider(); + + wavcurve->update(); +} + + +void UI_wave_window::shift_page_right() +{ + devparms->timebaseoffset += devparms->timebasescale; + + if(devparms->timebaseoffset >= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2; + } + + set_wavslider(); + + wavcurve->update(); +} + + +void UI_wave_window::center_trigger() +{ + devparms->timebaseoffset = 0; + + set_wavslider(); + + wavcurve->update(); +} + + +void UI_wave_window::zoom_in() +{ + devparms->timebasescale = round_down_step125(devparms->timebasescale, NULL); + + if(devparms->timebasescale <= 1.001e-9) + { + devparms->timebasescale = 1e-9; + } + + if(devparms->timebaseoffset <= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2; + } + + if(devparms->timebaseoffset >= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2; + } + + set_wavslider(); + + wavcurve->update(); +} + + +void UI_wave_window::zoom_out() +{ + if(devparms->timebasescale >= ((double)devparms->acquirememdepth / devparms->samplerate) / (double)devparms->hordivisions) + { + devparms->timebasescale = ((double)devparms->acquirememdepth / devparms->samplerate) / (double)devparms->hordivisions; + + return; + } + + devparms->timebasescale = round_up_step125(devparms->timebasescale, NULL); + + if(devparms->timebaseoffset <= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / -2; + } + + if(devparms->timebaseoffset >= ((((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2)) + { + devparms->timebaseoffset = (((double)devparms->acquirememdepth / devparms->samplerate) - + (devparms->timebasescale * devparms->hordivisions)) / 2; + } + + set_wavslider(); + wavcurve->update(); } diff --git a/wave_dialog.h b/wave_dialog.h index 92f15e3..05b636b 100644 --- a/wave_dialog.h +++ b/wave_dialog.h @@ -58,6 +58,8 @@ public: UI_wave_window(struct device_settings *, short *wbuf[MAX_CHNS], QWidget *parent=0); ~UI_wave_window(); + void set_wavslider(void); + private: struct device_settings *devparms; @@ -70,10 +72,26 @@ WaveCurve *wavcurve; QSlider *wavslider; +QAction *former_page_act, + *shift_page_left_act, + *shift_page_right_act, + *next_page_act, + *zoom_in_act, + *zoom_out_act, + *center_trigger_act; + private slots: void wavslider_value_changed(int); +void former_page(); +void shift_page_left(); +void shift_page_right(); +void next_page(); +void zoom_in(); +void zoom_out(); +void center_trigger(); + }; diff --git a/wave_view.cpp b/wave_view.cpp index 7277b52..49811e4 100644 --- a/wave_view.cpp +++ b/wave_view.cpp @@ -115,9 +115,6 @@ void WaveCurve::paintEvent(QPaintEvent *) samples_per_div = devparms->samplerate * devparms->timebasescale; - devparms->timebaseoffset = (double)(((devparms->wavebufsz - (devparms->hordivisions * samples_per_div)) / 2) - devparms->wave_mem_view_sample_start) / - devparms->samplerate * -1.0; - drawTopLabels(painter); drawSmallTriggerArrow(painter, 408, 16, 1, QColor(255, 128, 0)); @@ -310,16 +307,24 @@ void WaveCurve::paintEvent(QPaintEvent *) { if(sample_range < (curve_w / 2)) { - painter->drawLine(i * h_step + w_trace_offset, - (devparms->wavebuf[chn][i + sample_start] * v_sense) + (curve_h / 2), - (i + 1) * h_step + w_trace_offset, - (devparms->wavebuf[chn][i + sample_start] * v_sense) + (curve_h / 2)); - if(i) + if(devparms->displaytype) + { + painter->drawPoint(i * h_step + w_trace_offset, + (devparms->wavebuf[chn][i + sample_start] * v_sense) + (curve_h / 2)); + } + else { painter->drawLine(i * h_step + w_trace_offset, - (devparms->wavebuf[chn][i - 1] * v_sense) + (curve_h / 2), - i * h_step + w_trace_offset, + (devparms->wavebuf[chn][i + sample_start] * v_sense) + (curve_h / 2), + (i + 1) * h_step + w_trace_offset, (devparms->wavebuf[chn][i + sample_start] * v_sense) + (curve_h / 2)); + if(i) + { + painter->drawLine(i * h_step + w_trace_offset, + (devparms->wavebuf[chn][i - 1 + sample_start] * v_sense) + (curve_h / 2), + i * h_step + w_trace_offset, + (devparms->wavebuf[chn][i + sample_start] * v_sense) + (curve_h / 2)); + } } } else