/* GNUPLOT - QtGnuplotScene.h */ /*[ * Copyright 2009 Jérôme Lodewyck * * Permission to use, copy, and distribute this software and its * documentation for any purpose with or without fee is hereby granted, * provided that the above copyright notice appear in all copies and * that both that copyright notice and this permission notice appear * in supporting documentation. * * Permission to modify the software is granted, but not the right to * distribute the complete modified source code. Modifications are to * be distributed as patches to the released version. Permission to * distribute binaries produced by compiling modified sources is granted, * provided you * 1. distribute the corresponding source modifications from the * released version in the form of a patch file along with the binaries, * 2. add special version identification to distinguish your version * in addition to the base release version number, * 3. provide your name and address as the primary contact for the * support of your modified version, and * 4. retain our contact information in regard to use of the base * software. * Permission to distribute the released version of the source code along * with corresponding source modifications in the form of a patch file is * granted with same provisions 2 through 4 for binary distributions. * * This software is provided "as is" without express or implied warranty * to the extent permitted by applicable law. * * * Alternatively, the contents of this file may be used under the terms of the * GNU General Public License Version 2 or later (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish to allow * use of your version of this file only under the terms of the GPL and not * to allow others to use your version of this file under the above gnuplot * license, indicate your decision by deleting the provisions above and replace * them with the notice and other provisions required by the GPL. If you do not * delete the provisions above, a recipient may use your version of this file * under either the GPL or the gnuplot license. ]*/ #ifndef QTGNUPLOTSCENE_H #define QTGNUPLOTSCENE_H #define EAM_BOXED_TEXT 1 #include "QtGnuplotEvent.h" #include "QtGnuplotItems.h" #include #include #include class QtGnuplotEnhanced; class QtGnuplotWidget; class QtGnuplotScene : public QGraphicsScene, public QtGnuplotEventReceiver { Q_OBJECT public: QtGnuplotScene(QtGnuplotEventHandler* eventHandler, QObject* parent = 0); ~QtGnuplotScene(); public: virtual void mouseMoveEvent(QGraphicsSceneMouseEvent* event); virtual void mousePressEvent(QGraphicsSceneMouseEvent* event); virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent* event); virtual void wheelEvent(QGraphicsSceneWheelEvent* event); virtual void keyPressEvent(QKeyEvent* event); virtual void keyReleaseEvent(QKeyEvent* event); void processEvent(QtGnuplotEventType type, QDataStream& in); private: void resetItems(); void updateModifiers(); void positionText(QGraphicsItem* item, const QPoint& point); void setBrushStyle(int style); void updateRuler(const QPoint& point); void flushCurrentPolygon(); void flushCurrentPointsItem(); QPolygonF& clipPolygon(QPolygonF& polygon, bool checkDiag = true) const; QPointF& clipPoint(QPointF& point) const; QRectF& clipRect(QRectF& point) const; double sceneToGraph(int axis, double coord) const; void update_key_box(const QRectF rect); private: QtGnuplotWidget* m_widget; QList m_plot_group; // State variables Qt::Alignment m_textAlignment; QPolygonF m_currentPolygon; QPen m_currentPen; QBrush m_currentBrush; QFont m_font; QPointF m_currentPosition; QPointF m_zoomBoxCorner; double m_currentPointSize; double m_textAngle; double m_currentBoxRotation; QPoint m_currentBoxOrigin; QPoint m_textOffset; double m_currentZ; QTime m_watches[4]; int m_currentPlotNumber; bool m_inKeySample; bool m_preserve_visibility; bool m_inTextBox; int m_currentFillStyle; QRectF m_currentTextBox; QPointF m_textMargin; QList m_currentGroup; QtGnuplotPoints* m_currentPointsItem; // User events data QPointF m_lastMousePos; int m_lastModifierMask; // Special items QGraphicsLineItem* m_horizontalRuler; QGraphicsLineItem* m_verticalRuler; QGraphicsLineItem* m_lineTo; // Line from ruler to cursor QGraphicsRectItem* m_zoomRect; QGraphicsTextItem* m_zoomStartText; QGraphicsTextItem* m_zoomStopText; QtGnuplotEnhanced* m_enhanced; // Current enhanced text block QList m_key_boxes; QString m_currentHypertext; QList m_hypertextList; QGraphicsPixmapItem* m_hyperimage; // Axis scales bool m_axisValid[5]; // x, y, x2, y2, z (indicates 3D plot) double m_axisMin [4]; double m_axisLower[4]; double m_axisScale[4]; double m_axisLog [4]; }; #endif // QTGNUPLOTSCENE_H