Skip to content
OE_interfaceDisplay.h 3.63 KiB
Newer Older
/*
 * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgment in the product documentation would be
 * appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 *
 */

raoul's avatar
raoul committed
#pragma once

#include "OE_utils.h"
#include <stdint.h>
#include <vector>
#include "OE_document.h"
#include "OE_display.h"
//#include "OE_commandDisplay.h"

#include "curves/OE_joincurve.h"
3dsman's avatar
3dsman committed
#include "curves/OE_subcurve.h"
//#include <GLFW/glfw3.h>

class OE_interfaceDisplay : public OE_display
{
raoul's avatar
raoul committed
	public:

		/** Default constructor */
raoul's avatar
raoul committed
		OE_interfaceDisplay(QWidget* parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
raoul's avatar
raoul committed
		/** Default destructor */
		virtual ~OE_interfaceDisplay();

		virtual bool setDocument(OE_document* document);
		virtual bool setController(OE_controller* controller);
        OE_document* getDocument();
        OE_controller* getController();
raoul's avatar
raoul committed

        virtual bool setDisplayStyle(unsigned int displayStyleId);
        OE_display::OE_displayStyle* addDisplayStyle();

raoul's avatar
raoul committed
		virtual bool mouse_Pos(double x, double y);
		virtual bool mouse_Button(QMouseEvent* event);
raoul's avatar
raoul committed
		virtual void scroll(double xoffset, double yoffset);
		virtual void resize(int width, int height);
raoul's avatar
raoul committed
		virtual void key(QKeyEvent* event);
3dsman's avatar
3dsman committed
        bool checkJoinCurveControl(OE_joincurve* joinCurve, int &index);
        bool pickingTool(int toolType, int toolIndex);
        bool pickingMoveTool();
        bool pickingScaleTool();
        bool pickingStitch(int stitchIndex);
        bool pickingStitchControl(int stitchIndex, int ctrlType, int ctrlIndex);
        bool pickingCurve(int curveIndex);
        bool pickingCurveControl(int curveIndex, int ctrlType, int ctrlIndex);
		void selectBox();
raoul's avatar
raoul committed
		bool selectApply(std::list<OE_pointcurve*> selectedCurves, std::list<OE_stitchs*> selectedStitches);
raoul's avatar
raoul committed

    private:
raoul's avatar
raoul committed

		enum State
		{
			None,
			Selection,
			MoveSelection,
			ScaleSelection,
			AddSubcurve,
raoul's avatar
raoul committed
			NewSubcurve,
			TraceSubcurve,
			MoveSubcurve,
			MovePointcurve,
			MovePointstitch,
			DelPointstitch,
			OffsetWidthLinestitch,
			ScaleLenLinestitch,
		};
        std::vector<OE_display::OE_displayStyle*> displayStyles;
raoul's avatar
raoul committed
		std::list<OE_pointcurve*> selectedCurves;
		std::list<OE_stitchs*> selectedStitches;
raoul's avatar
raoul committed
		Qt::KeyboardModifiers modState;
raoul's avatar
raoul committed
		vector_2d clicOldMouse;
raoul's avatar
raoul committed
		State editionState = None;
		int joincurve_id = 0;
		OE_curve* closestCurve = 0;
		OE_joincurve* curJoincurve = 0;
		int subcurve_id = -1;
raoul's avatar
raoul committed
		OE_subcurve* editSubcurve = 0;
		vector_2dt editClosestPoint;
raoul's avatar
raoul committed
		OE_stitchs* selControlStitch = 0;
		OE_curve* selControlCurve = 0;
		int selControlType = 0;
		int selControlIndex = 0;

		int toolAction = 0;
public slots:
        void SetSelectedStitchPattern(int index);

        void stitchSelectionChange();
		void refreshStitchList();
        void refreshStitch(OE_stitchs* stitch);