Blob Blame Raw
#pragma once

#ifndef TPARAM_UI_CONCEPT_H
#define TPARAM_UI_CONCEPT_H

#include "tparam.h"

#include <vector>
#include <string>

//***********************************************************************************************
//    TParamUIConcept  definition
//***********************************************************************************************

//! Defines the User Interface Types available for a group of TParam objects.
/*!
  A User Interface Concept is used to associate parameters to the way they should be
  interactively represented. For example, a TDoubleParamP may be used to represent
  multiple objects, such as lengths or angles; a couple of TPointParamP may represent
  vectors, and so on. Observe that each entry in the list is associated to a specific
  struct of parameter objects.
\n\n
  The list in the Type enum provides all the interface types currently supported by Toonz.
*/
class TParamUIConcept
{
public:
	// Associated with each specific types are the structure the m_params member will need to hold.
	// The mandatory parameters are in square brackets.

	enum Type {
		NONE = 0,

		RADIUS, // Distance from a point (radius). Represented by     { [TDoubleParamP], TPointParamP }
		WIDTH,  // Width, as distance from a line with given angle.   { [TDoubleParamP], TDoubleParamP }
		ANGLE,  // An angle.                                          { [TDoubleParamP] }

		POINT,   // A Point.                                           { [TPointParamP] }
		POINT_2, // A Point given its X and Y coordinates.             { [2 TDoubleParamP] }
		VECTOR,  // A Vector.                                          { [TPointParamP], TPointParamP }
		POLAR,   // A Vector in polar coordinates, from the origin.    { [2 TDoubleParamP] }

		SIZE, // Size, shown with a rect with P00 on the origin.    { [TDoubleParamP], TDoubleParamP }
		QUAD, // A Quadrilateral.                                   { [4 TPointParamP] }
		RECT, // A Rect, with width, height and center.             { [2 TDoubleParamP], TPointParamP }

		DIAMOND, // A diagonally laid square.                          { [TDoubleParamP] }

		TYPESCOUNT
	};

public:
	Type m_type;				   //!< Concept identifier
	std::string m_label;		   //!< Name to show on editing
	std::vector<TParamP> m_params; //!< Associated parameters
};

#endif // TPARAM_UI_CONCEPT_H