|
|
/*------------------------------------------------------------------------------
|
|
|
-- This file is a part of the QLop Software
|
|
|
-- Copyright (C) 2015, Plasma Physics Laboratory - CNRS
|
|
|
--
|
|
|
-- This program 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 2 of the License, or
|
|
|
-- (at your option) any later version.
|
|
|
--
|
|
|
-- This program 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 this program; if not, write to the Free Software
|
|
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
-------------------------------------------------------------------------------*/
|
|
|
/*-- Author : Alexis Jeandet
|
|
|
-- Mail : alexis.jeandet@member.fsf.org
|
|
|
----------------------------------------------------------------------------*/
|
|
|
#ifndef SOCEXPLORERPLOT_H
|
|
|
#define SOCEXPLORERPLOT_H
|
|
|
|
|
|
#include <QWidget>
|
|
|
#include <QGridLayout>
|
|
|
#include <qcustomplot.h>
|
|
|
#include <qcustomplotvect.h>
|
|
|
#include <QRubberBand>
|
|
|
#include <QPoint>
|
|
|
|
|
|
class SocExplorerPlotActions : public QAction
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
public:
|
|
|
SocExplorerPlotActions(const QString &text,int PID,QObject* parent=0)
|
|
|
:QAction(text,parent)
|
|
|
{
|
|
|
setPID(PID);
|
|
|
connect(this,SIGNAL(triggered()),this,SLOT(trigger()));
|
|
|
}
|
|
|
SocExplorerPlotActions(const QIcon &icon, const QString &text,int PID, QObject* parent)
|
|
|
:QAction(icon,text,parent)
|
|
|
{
|
|
|
setPID(PID);
|
|
|
connect(this,SIGNAL(triggered()),this,SLOT(trigger()));
|
|
|
}
|
|
|
~SocExplorerPlotActions(){}
|
|
|
void setPID(int PID){this->m_PID=PID;}
|
|
|
int PID(){return m_PID;}
|
|
|
private slots:
|
|
|
void trigger(){emit triggered(m_PID);}
|
|
|
signals:
|
|
|
void triggered(int PID);
|
|
|
private:
|
|
|
int m_PID;
|
|
|
};
|
|
|
|
|
|
class SocExplorerPlot : public QWidget
|
|
|
{
|
|
|
Q_OBJECT
|
|
|
public:
|
|
|
explicit SocExplorerPlot(QWidget *parent = 0);
|
|
|
~SocExplorerPlot();
|
|
|
void setTitle(QString title);
|
|
|
const QString& title();
|
|
|
void setXaxisLabel(QString label);
|
|
|
void setXaxisLog();
|
|
|
void setXaxisRange(double lower, double upper);
|
|
|
void setYaxisLabel(QString label);
|
|
|
void setYaxisLog();
|
|
|
void setYaxisRange(double lower, double upper);
|
|
|
void rescaleAxis();
|
|
|
void setLegendFont(QFont font);
|
|
|
void setLegendSelectedFont(QFont font);
|
|
|
void setAdaptativeSampling(int graphIndex,bool enable);
|
|
|
void setUseFastVector(int graphIndex,bool enable);
|
|
|
int addGraph();
|
|
|
bool removeGraph(int graphIndex);
|
|
|
int graphCount();
|
|
|
void removeAllGraphs();
|
|
|
void setGraphName(int graphIndex,QString name);
|
|
|
const QString& graphName(int graphIndex);
|
|
|
void setGraphData(int graphIndex, QList<QVariant> x, QList<QVariant> y);
|
|
|
void setGraphData(int graphIndex, QCPDataMap* data,bool copy = true,bool replot=true);
|
|
|
void setGraphData(int graphIndex, QVector<QCPData> *data, bool replot);
|
|
|
void addGraphData(int graphIndex, QList<QVariant> x, QList<QVariant> y);
|
|
|
void addGraphData(int graphIndex, QVariant x, QVariant y);
|
|
|
void setGraphPen(int graphIndex,QPen pen);
|
|
|
QPen getGraphPen(int graphIndex);
|
|
|
void setGraphLineStyle(int graphIndex,QString lineStyle);
|
|
|
void setGraphScatterStyle(int graphIndex,QString scatterStyle);
|
|
|
void setXaxisTickLabelType(QCPAxis::LabelType type);
|
|
|
void setXaxisDateTimeFormat(const QString &format);
|
|
|
void show();
|
|
|
void replot();
|
|
|
void exportToSVG(const QString& fileName);
|
|
|
void exportToPDF(const QString& fileName);
|
|
|
void addAction(SocExplorerPlotActions* action);
|
|
|
int PID(){return m_PID;}
|
|
|
void setPID(int PID){m_PID = PID;}
|
|
|
QVector<QCPData>* getVisibleData(int graphIndex);
|
|
|
signals:
|
|
|
void titleChanged(const QString& newTitle);
|
|
|
public slots:
|
|
|
|
|
|
protected:
|
|
|
void keyPressEvent(QKeyEvent *);
|
|
|
void keyReleaseEvent(QKeyEvent *);
|
|
|
void wheelEvent(QWheelEvent *);
|
|
|
void mousePressEvent(QMouseEvent *);
|
|
|
void mouseMoveEvent(QMouseEvent *);
|
|
|
void mouseReleaseEvent(QMouseEvent *);
|
|
|
|
|
|
private:
|
|
|
void zoom(double factor, int center, Qt::Orientation orientation);
|
|
|
void move(double factor, Qt::Orientation orientation);
|
|
|
QCustomPlotVect* m_plot;
|
|
|
QGridLayout* m_mainlayout;
|
|
|
bool ctrl_hold;
|
|
|
bool shift_hold;
|
|
|
bool mouse_hold;
|
|
|
QCPRange DragStartHorzRange;
|
|
|
QCPRange DragStartVertRange;
|
|
|
QPoint mDragStart;
|
|
|
bool mZoomMode;
|
|
|
QRubberBand * mRubberBand;
|
|
|
QPoint mOrigin;
|
|
|
QList<SocExplorerPlotActions*> m_actions;
|
|
|
QString m_Title;
|
|
|
int m_PID;
|
|
|
};
|
|
|
|
|
|
#endif // SOCEXPLORERPLOT_H
|
|
|
|