diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -53,7 +53,9 @@ qt5_wrap_ui(UI_FILES mainwindow.ui portc # Tell CMake to create the helloworld executable add_executable(serialplot WIN32 main.cpp mainwindow.cpp portcontrol.cpp - customcheckablebutton.cpp ${UI_FILES} misc/windows_icon.rc) + customcheckablebutton.cpp + zoomer.cpp + ${UI_FILES} misc/windows_icon.rc) # Use the Widgets module from Qt 5. target_link_libraries(serialplot ${QWT_LIBRARY}) diff --git a/mainwindow.cpp b/mainwindow.cpp --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -134,6 +134,10 @@ MainWindow::MainWindow(QWidget *parent) curves[i]->attach(ui->plot); } + // init zoomer + zoomer = new Zoomer(ui->plot->canvas(), false); + zoomer->setZoomBase(); + // init number format if (numberFormatButtons.checkedId() >= 0) { diff --git a/mainwindow.h b/mainwindow.h --- a/mainwindow.h +++ b/mainwindow.h @@ -33,6 +33,7 @@ #include #include #include +#include "zoomer.h" #include "portcontrol.h" #include "ui_about_dialog.h" @@ -85,6 +86,8 @@ private: // `data` contains i th channels data void addChannelData(unsigned int channel, DataArray data); + Zoomer* zoomer; + NumberFormat numberFormat; unsigned int sampleSize; // number of bytes in the selected number format double (MainWindow::*readSample)(); diff --git a/zoomer.cpp b/zoomer.cpp new file mode 100644 --- /dev/null +++ b/zoomer.cpp @@ -0,0 +1,44 @@ +/* + Copyright © 2015 Hasan Yavuz Özderya + + This file is part of serialplot. + + serialplot is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + serialplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with serialplot. If not, see . +*/ + +#include "zoomer.h" +#include +#include + +Zoomer::Zoomer(QWidget* widget, bool doReplot) : + QwtPlotZoomer(widget, doReplot) +{ + // do nothing +} + +void Zoomer::zoom(int up) +{ + if (up == +1) + { + this->setZoomBase(this->plot()); + } + + QwtPlotZoomer::zoom(up); + + if (up == 0) + { + this->plot()->setAxisAutoScale(QwtPlot::yLeft); + this->plot()->replot(); + } +} diff --git a/zoomer.h b/zoomer.h new file mode 100644 --- /dev/null +++ b/zoomer.h @@ -0,0 +1,34 @@ +/* + Copyright © 2015 Hasan Yavuz Özderya + + This file is part of serialplot. + + serialplot is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + serialplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with serialplot. If not, see . +*/ + +#ifndef ZOOMER_H +#define ZOOMER_H + +#include + +class Zoomer : public QwtPlotZoomer +{ + Q_OBJECT + +public: + Zoomer(QWidget *, bool doReplot=true); + void zoom(int up); +}; + +#endif // ZOOMER_H