/* * This file is part of project OpenEmbroidery. It's copyrighted by * the contributors recorded in the version control history of the file. * Original project location https://code.electrolab.fr/openEmbroidery/openEmbroidery_software * * SPDX-License-Identifier: CECILL-2.1 * License-Filename: Licence_CeCILL_V2.1-en.txt */ #pragma once #include #include #include "OE_utils.h" #include #include #include #include "OE_document.h" #include "curves/OE_joincurve.h" #include "curves/OE_subcurve.h" #include "stitchs/OE_fillstitch.h" static const GLuint TOOLSSELID = 0; static const GLuint STITCHSSELID = 1; static const GLuint CURVESSELID = 2; static const GLuint ZEROID = 0; static const GLuint TRANSTOOLID = 1; static const GLuint MOVETOOLID = 0; static const GLuint SCALETOOLID = 1; class OE_controller; class OE_display : public QOpenGLWidget, protected QOpenGLFunctions_2_0 { public: class OE_displayStyle { public: bool drawHoop = true; bool drawGrid = true; bool drawZero = true; bool drawCurves = true; bool drawCurvePoints = false; bool drawCurveControls = true; bool drawStitches = true; bool drawStitchControl = true; bool drawCommands = false; bool selectCurves = true; bool selectStitches = true; OE_displayStyle(){} }; /** Default constructor */ OE_display(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags()); /** Default destructor */ virtual ~OE_display(); virtual void mouseMoveEvent(QMouseEvent* event) final; virtual void mousePressEvent(QMouseEvent* event) final; virtual void mouseReleaseEvent(QMouseEvent* event) final; virtual void wheelEvent(QWheelEvent* event) final; virtual void keyPressEvent(QKeyEvent* event) final; virtual void keyReleaseEvent(QKeyEvent* event) final; virtual void dragEnterEvent(QDragEnterEvent *event) final; virtual void dropEvent(QDropEvent *event) final; void loadFile(std::string file); // TODO put it elsewhere virtual void initializeGL() Q_DECL_OVERRIDE; virtual void resizeGL(int, int) Q_DECL_OVERRIDE; virtual void paintGL() Q_DECL_OVERRIDE; virtual bool setDocument(OE_document* document); virtual bool setController(OE_controller* controller); virtual bool setDisplayStyle(OE_displayStyle* style); virtual bool mouse_Pos(double x, double y); virtual bool mouse_Button(QMouseEvent* event); virtual void scroll(double xoffset, double yoffset); virtual void resize(int width, int height); virtual void key(QKeyEvent* event); vector_2d screenToDocument(vector_2d pos); void pick(std::list selectedCurves, std::list selectedStitches); //void drawframe(); bool refreshAll(); void drawTriangle(vector_2d point1, vector_2d point2, float size); bool drawSelectionTools(bool select=false); bool drawCurve(OE_curve* curve); bool drawStitch(OE_stitchs* stitch, int curpoint); bool drawCurveControl(OE_curve* curve, bool select=false); bool drawStitchControl(OE_stitchs* stitch, bool select=false); void drawJoincurveControl(OE_joincurve* curve, bool select, int index=0); void drawFillstitchControl(OE_fillstitch* fillstitch, bool select); bool drawCommands(); virtual bool draw(); virtual void showAll(); virtual void zoomSelection(); vector_2d viewPos; vector_2d absMouse; float zoom; vector_2d mouse; vector_2d mouseInit; bool pan; int width, height; OE_displayStyle* style = NULL; OE_stitchs* higligtedStitch = nullptr; protected: static const float moveCrossSize; bool changeDpi = true; /** \brief is displaying controls. */ bool controls = false; BoundingBox selectionBounds; OE_curve* selectedCurve = nullptr; OE_stitchs* selectedStitch = nullptr; OE_document * document = NULL; OE_controller* controller = NULL; };