Blob Blame Raw
#pragma once

#ifndef RULERTOOL_H
#define RULERTOOL_H

#include "tools/tool.h"
#include "tproperty.h"
#include "tools/tooloptions.h"

#include <QCoreApplication>

//----------------------------------------------------------------------------------------------

class RulerTool : public TTool
{
	Q_DECLARE_TR_FUNCTIONS(RulerTool)

	enum DragMode {
		MakeNewRuler = 0,
		MoveFirstPos,
		MoveSecondPos,
		MoveRuler
	};

	TPointD m_firstPos, m_secondPos;
	TPointD m_mousePos;

	DragMode m_dragMode;

	bool m_justClicked;

	std::vector<RulerToolOptionsBox *> m_toolOptionsBox;

public:
	RulerTool();

	void setToolOptionsBox(RulerToolOptionsBox *toolOptionsBox);

	ToolType getToolType() const { return TTool::GenericTool; }

	void onImageChanged();

	void draw();

	void leftButtonDown(const TPointD &pos, const TMouseEvent &e);

	void leftButtonDrag(const TPointD &pos, const TMouseEvent &e);

	void leftButtonUp(const TPointD &pos, const TMouseEvent &);

	void mouseMove(const TPointD &pos, const TMouseEvent &e);

	void onActivate();

	int getCursorId() const;

	void updateToolOption();

	/*--- 現在のマウス位置がRulerに十分近ければTrue ---*/
	bool isNearRuler();

private:
	/*--- 基準点に対し、マウス位置を0,45,90度にフィットさせた位置を返す ---*/
	TPointD getHVCoordinatedPos(TPointD p, TPointD centerPos);
};

#endif