Changeset - 020e7830b9d2
[Not reviewed]
default
0 5 0
Hasan Yavuz Ă–ZDERYA - 8 years ago 2017-04-30 07:24:07
hy@ozderya.net
save/load symbol setting
5 files changed with 63 insertions and 22 deletions:
0 comments (0 inline, 0 general)
src/plot.cpp
Show inline comments
 
@@ -36,13 +36,13 @@ Plot::Plot(QWidget* parent) :
 
    zoomer(this->canvas(), false),
 
    sZoomer(this, &zoomer)
 
{
 
    isAutoScaled = true;
 
    symbolSize = 0;
 
    numOfSamples = 1;
 
    showSymbols = ShowSymbolsAuto;
 
    showSymbols = Plot::Auto;
 

	
 
    QObject::connect(&zoomer, &Zoomer::unzoomed, this, &Plot::unzoomed);
 

	
 
    zoomer.setZoomBase();
 
    grid.attach(this);
 
    legend.attach(this);
 
@@ -249,17 +249,17 @@ void Plot::flashSnapshotOverlay(bool lig
 
}
 

	
 
void Plot::setSymbols(ShowSymbols shown)
 
{
 
    showSymbols = shown;
 

	
 
    if (showSymbols == ShowSymbolsAuto)
 
    if (showSymbols == Plot::Auto)
 
    {
 
        calcSymbolSize();
 
    }
 
    else if (showSymbols == ShowSymbolsAlways)
 
    else if (showSymbols == Plot::Show)
 
    {
 
        symbolSize = SYMBOL_SIZE_MAX;
 
    }
 
    else
 
    {
 
        symbolSize = 0;
 
@@ -268,13 +268,13 @@ void Plot::setSymbols(ShowSymbols shown)
 
    updateSymbols();
 
    replot();
 
}
 

	
 
void Plot::onXScaleChanged()
 
{
 
    if (showSymbols == ShowSymbolsAuto)
 
    if (showSymbols == Plot::Auto)
 
    {
 
        calcSymbolSize();
 
        updateSymbols();
 
    }
 
}
 

	
src/plot.h
Show inline comments
 
@@ -30,26 +30,28 @@
 
#include <qwt_plot_textlabel.h>
 

	
 
#include "zoomer.h"
 
#include "scalezoomer.h"
 
#include "plotsnapshotoverlay.h"
 

	
 
enum ShowSymbols
 
{
 
    ShowSymbolsAuto,
 
    ShowSymbolsAlways,
 
    ShowSymbolsNever
 
};
 

	
 
class Plot : public QwtPlot
 
{
 
    Q_OBJECT
 

	
 
    friend class PlotManager;
 

	
 
public:
 
    // Note: this naming is also used as setting values
 
    enum ShowSymbols
 
    {
 
        Auto,
 
        Show,
 
        Hide
 
    };
 
    Q_ENUM(ShowSymbols);
 

	
 
    Plot(QWidget* parent = 0);
 
    ~Plot();
 

	
 
    static QColor makeColor(unsigned int channelIndex);
 

	
 
public slots:
src/plotmanager.cpp
Show inline comments
 
@@ -15,12 +15,14 @@
 

	
 
  You should have received a copy of the GNU General Public License
 
  along with serialplot.  If not, see <http://www.gnu.org/licenses/>.
 
*/
 

	
 
#include <QActionGroup>
 
#include <QMetaEnum>
 
#include <QtDebug>
 
#include "qwt_symbol.h"
 

	
 
#include "plot.h"
 
#include "plotmanager.h"
 
#include "utils.h"
 
#include "setting_defines.h"
 
@@ -39,13 +41,13 @@ PlotManager::PlotManager(QWidget* plotAr
 
    _autoScaled = true;
 
    _yMin = 0;
 
    _yMax = 1;
 
    isDemoShown = false;
 
    _infoModel = infoModel;
 
    _numOfSamples = 1;
 
    showSymbols = ShowSymbolsAuto;
 
    showSymbols = Plot::Auto;
 

	
 
    // initalize layout and single widget
 
    isMulti = false;
 
    scrollArea = NULL;
 
    setupLayout(isMulti);
 
    addPlotWidget();
 
@@ -74,33 +76,33 @@ PlotManager::PlotManager(QWidget* plotAr
 
    showLegendAction.setChecked(true);
 
    showMultiAction.setChecked(false);
 

	
 
    showMinorGridAction.setEnabled(false);
 

	
 
    // setup symbols menu
 
    auto setSymbolAutoAct = setSymbolsMenu.addAction("Show When Zoomed");
 
    setSymbolAutoAct = setSymbolsMenu.addAction("Show When Zoomed");
 
    setSymbolAutoAct->setCheckable(true);
 
    setSymbolAutoAct->setChecked(true);
 
    connect(setSymbolAutoAct, SELECT<bool>::OVERLOAD_OF(&QAction::triggered),
 
            [this](bool checked)
 
            {
 
                if (checked) setSymbols(ShowSymbolsAuto);
 
                if (checked) setSymbols(Plot::Auto);
 
            });
 
    auto setSymbolAlwaysAct = setSymbolsMenu.addAction("Always Show");
 
    setSymbolAlwaysAct = setSymbolsMenu.addAction("Always Show");
 
    setSymbolAlwaysAct->setCheckable(true);
 
    connect(setSymbolAlwaysAct, SELECT<bool>::OVERLOAD_OF(&QAction::triggered),
 
            [this](bool checked)
 
            {
 
                if (checked) setSymbols(ShowSymbolsAlways);
 
                if (checked) setSymbols(Plot::Show);
 
            });
 
    auto setSymbolHideAct = setSymbolsMenu.addAction("Always Hide");
 
    setSymbolHideAct = setSymbolsMenu.addAction("Always Hide");
 
    setSymbolHideAct->setCheckable(true);
 
    connect(setSymbolHideAct, SELECT<bool>::OVERLOAD_OF(&QAction::triggered),
 
            [this](bool checked)
 
            {
 
                if (checked) setSymbols(ShowSymbolsNever);
 
                if (checked) setSymbols(Plot::Hide);
 
            });
 
    setSymbolsAction.setMenu(&setSymbolsMenu);
 

	
 
    // add symbol actions to same group so that they appear as radio buttons
 
    auto group = new QActionGroup(this);
 
    group->addAction(setSymbolAutoAct);
 
@@ -450,13 +452,13 @@ void PlotManager::darkBackground(bool en
 
    for (auto plot : plotWidgets)
 
    {
 
        plot->darkBackground(enabled);
 
    }
 
}
 

	
 
void PlotManager::setSymbols(ShowSymbols shown)
 
void PlotManager::setSymbols(Plot::ShowSymbols shown)
 
{
 
    showSymbols = shown;
 
    for (auto plot : plotWidgets)
 
    {
 
        plot->setSymbols(shown);
 
    }
 
@@ -521,12 +523,14 @@ void PlotManager::saveSettings(QSettings
 
    settings->beginGroup(SettingGroup_Plot);
 
    settings->setValue(SG_Plot_DarkBackground, darkBackgroundAction.isChecked());
 
    settings->setValue(SG_Plot_Grid, showGridAction.isChecked());
 
    settings->setValue(SG_Plot_MinorGrid, showMinorGridAction.isChecked());
 
    settings->setValue(SG_Plot_Legend, showLegendAction.isChecked());
 
    settings->setValue(SG_Plot_MultiPlot, showMultiAction.isChecked());
 
    settings->setValue(SG_Plot_Symbols,
 
                       QMetaEnum::fromType<Plot::ShowSymbols>().valueToKey(showSymbols));
 
    settings->endGroup();
 
}
 

	
 
void PlotManager::loadSettings(QSettings* settings)
 
{
 
    settings->beginGroup(SettingGroup_Plot);
 
@@ -543,8 +547,39 @@ void PlotManager::loadSettings(QSettings
 
    showLegendAction.setChecked(
 
        settings->value(SG_Plot_Legend, showLegendAction.isChecked()).toBool());
 
    showLegend(showLegendAction.isChecked());
 
    showMultiAction.setChecked(
 
        settings->value(SG_Plot_MultiPlot, showMultiAction.isChecked()).toBool());
 
    setMulti(showMultiAction.isChecked());
 

	
 
    // symbol setting
 
    {
 
        bool ok = false;
 
        QString curStr = QMetaEnum::fromType<Plot::ShowSymbols>().valueToKey(showSymbols);
 
        QString settStr = settings->value(SG_Plot_Symbols, curStr).toString();
 
        Plot::ShowSymbols settValue =
 
            (Plot::ShowSymbols) QMetaEnum::fromType<Plot::ShowSymbols>().\
 
            keyToValue(settStr.toLatin1().constData(), &ok);
 
        if (ok)
 
        {
 
            if (settValue == Plot::Auto)
 
            {
 
                setSymbolAutoAct->setChecked(true);
 
            }
 
            else if (settValue == Plot::Show)
 
            {
 
                setSymbolAlwaysAct->setChecked(true);
 
            }
 
            else
 
            {
 
                setSymbolHideAct->setChecked(true);
 
            }
 
            setSymbols(settValue);
 
        }
 
        else
 
        {
 
            qCritical() << "Invalid symbol setting:" << settStr;
 
        }
 
    }
 

	
 
    settings->endGroup();
 
}
src/plotmanager.h
Show inline comments
 
@@ -88,32 +88,35 @@ private:
 
    double _yMin;
 
    double _yMax;
 
    bool _xAxisAsIndex;
 
    double _xMin;
 
    double _xMax;
 
    unsigned _numOfSamples;
 
    ShowSymbols showSymbols;
 
    Plot::ShowSymbols showSymbols;
 

	
 
    // menu actions
 
    QAction showGridAction;
 
    QAction showMinorGridAction;
 
    QAction unzoomAction;
 
    QAction darkBackgroundAction;
 
    QAction showLegendAction;
 
    QAction showMultiAction;
 
    QAction setSymbolsAction;
 
    QMenu   setSymbolsMenu;
 
    QMenu setSymbolsMenu;
 
    QAction* setSymbolAutoAct;
 
    QAction* setSymbolAlwaysAct;
 
    QAction* setSymbolHideAct;
 

	
 
    void setupLayout(bool multiPlot);
 
    /// Inserts a new plot widget to the current layout.
 
    Plot* addPlotWidget();
 
    /// Returns the plot widget that given curve is attached to
 
    Plot* plotWidget(unsigned curveIndex);
 
    /// Common part of overloaded `addCurve` functions
 
    void _addCurve(QwtPlotCurve* curve);
 
    void setSymbols(ShowSymbols shown);
 
    void setSymbols(Plot::ShowSymbols shown);
 

	
 
private slots:
 
    void showGrid(bool show = true);
 
    void showMinorGrid(bool show = true);
 
    void showLegend(bool show = true);
 
    void unzoom();
src/setting_defines.h
Show inline comments
 
@@ -84,12 +84,13 @@ const char SG_Plot_YMax[] = "yMax";
 
const char SG_Plot_YMin[] = "yMin";
 
const char SG_Plot_DarkBackground[] = "darkBackground";
 
const char SG_Plot_Grid[] = "grid";
 
const char SG_Plot_MinorGrid[] = "minorGrid";
 
const char SG_Plot_Legend[] = "legend";
 
const char SG_Plot_MultiPlot[] = "multiPlot";
 
const char SG_Plot_Symbols[] = "symbols";
 

	
 
// command setting keys
 
const char SG_Commands_Command[] = "command";
 
const char SG_Commands_Name[] = "name";
 
const char SG_Commands_Type[] = "type";
 
const char SG_Commands_Data[] = "data";
0 comments (0 inline, 0 general)