Blob Blame Raw
#pragma once

#ifndef SELECTOR_H
#define SELECTOR_H

/**
 * @author  Fabrizio Morciano <fabrizio.morciano@gmail.com>
 */

#include "tgeometry.h"
#include "tstroke.h"

#undef DVAPI
#undef DVVAR
#ifdef TNZEXT_EXPORTS
#define DVAPI DV_EXPORT_API
#define DVVAR DV_EXPORT_VAR
#else
#define DVAPI DV_IMPORT_API
#define DVVAR DV_IMPORT_VAR
#endif

#include "ext/Types.h"
#include "ext/Designer.h"

namespace ToonzExt
{
class DVAPI Selector
{
	enum Selection {
		NONE = 0,
		POSITION = 1,
		LENGTH = 2
	};

	Selection
		isSelected_;

	const TStroke *
		strokeRef_;

	double
		w_,
		height_,
		stroke_length_,
		original_stroke_length_,
		signum_,
		pixel_size_;

	Selection
	getSelection(const TPointD &pos);

	TPointD
		click_,
		curr_,
		prev_;

	TPointD
		range_;

	bool
		isVisible_;

	void
	init();

public:
	Selector(double stroke_length,
			 double min_val,
			 double max_val);
	virtual ~Selector();

	virtual void
	draw(Designer *designer);

	virtual void
	mouseDown(const TPointD &pos);

	virtual void
	mouseUp(const TPointD &pos);

	virtual void
	mouseMove(const TPointD &pos);

	virtual void
	mouseDrag(const TPointD &pos);

	void
	setStroke(const TStroke *ref);

	const TStroke *
	getStroke() const
	{
		return strokeRef_;
	}

	double
	getW() const
	{
		return w_;
	}

	double
	getLength() const;

	void
	setLength(double);

	bool
	isSelected() const
	{
		return (isVisible_ &&
				(isSelected_ != NONE));
	}

	void
	setVisibility(bool val)
	{
		isVisible_ = val;
	}

	bool
	isVisible() const
	{
		return isVisible_;
	}

	TPointD
	getUp() const;
};
}
#endif /* SELECTOR_H */