1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/****************************************************************************
** Copyright (c) 2016, Adel Kara Slimane <adel.ks@zegrapher.com>
**
** This file is part of ZeGrapher's source code.
**
** ZeGrapher is free software: you may copy, redistribute 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.
**
** This file 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, see <http://www.gnu.org/licenses/>.
**
****************************************************************************/
#ifndef MainGraph_H
#define MainGraph_H
#include "graphdraw.h"
#define FUNC_HOVER 0
#define SEQ_HOVER 1
#define TANGENT_RESIZE_HOVER 2
#define TANGENT_MOVE_HOVER 3
#define DEFAULT_ZOOM_MULTIPLIER 0.04
#include "../Widgets/popupwidget.h"
class MainGraph : public GraphDraw
{
Q_OBJECT
public:
explicit MainGraph(Information *info);
~MainGraph();
void afficherPtX(double x);
signals:
void zoomBoxActive(bool active);
void sizeChanged(int H, int W);
public slots:
void reactivateSmoothing();
void updateParEq();
void updateGraph();
void updateData();
protected slots:
void zoomX();
void stop_X_zoom();
void zoomY();
void stop_Y_Zoom();
void lineXReturnPressed();
protected:
void incrementTickSpacing(double &spacing, int ¤tMultiplier);
void decrementTickSpacing(double &spacing, int ¤tMultiplier);
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void wheelEvent(QWheelEvent *event);
void showEvent(QShowEvent *event);
void addOtherWidgets();
void mouseMoveWithActiveSelection(double x, double y);
void mouseFuncHoverTest(double x, double y);
void mouseSeqHoverTest(double x, double y);
void mouseTangentHoverTest(double x, double y);
void resaveImageBuffer();
void addTangentToBuffer();
void drawHoveringConsequence();
void newWindowSize();
void directPaint();
void indirectPaint();
void paintGraph(bool bufferPaint = false);
void drawAxes();
void drawAnimatedParEq();
void drawAllParEq();
void updateCenterPosAndScaling();
bool updateTickSpacing(); //return true if spacing was changed
void drawTicksAndNumbers();
void drawPoint();
void moveSavedRegsValues();
void checkIfActiveSelectionConflicts();
ExprCalculator *exprCalculator;
Point lastPosSouris, pointPx, pointUnit;
QSlider *hSlider, *vSlider;
QLineEdit *lineX, *lineY;
double y1, y2, mouseX, mouseY, widestXNumber, screenRefreshRate, zoomMultiplier;
bool dispPoint, buttonPresse, mouseOnCurve,
dispRectangle, hoveredCurveType, resaveGraph, cancelUpdateSignal,
resaveTangent, animationUpdate;
char typeCurseur;
int xyBottom;
QTimer timerX, timerY, repaintTimer;
QPolygonF polygon;
QSize windowSize;
CurveSelection selectedCurve;
MouseState mouseState;
QRect rectReel;
QImage *savedGraph;
QList <QString> customFunctions;
QList <QString> customSequences;
QLabel *xTextLabel, *yTextLabel;
QLabel *kLabel;
QWidget *kLabelContainer;
PopupWidget *hPopupWidget, *vPopupWidget, *xPopupWidget, *yPopupWidget, *kPopupWidget;
Point axesIntersec;
};
#endif // MainGraph_H
|