//# Copyright (C) 1998,1999,2000,2001
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//#        Internet email: aips2-request@nrao.edu.
//#        Postal address: AIPS++ Project Office
//#                        National Radio Astronomy Observatory
//#                        520 Edgemont Road
//#                        Charlottesville, VA 22903-2475 USA
//#

#ifndef ANNOTATIONS_ANNSYMBOL_H
#define ANNOTATIONS_ANNSYMBOL_H

#include <imageanalysis/Annotations/AnnotationBase.h>

#include <casacore/measures/Measures/MDirection.h>

namespace casa {

// <summary>Represents a symbol annotation</summary>

// <use visibility=export>

// <reviewed reviewer="" date="yyyy/mm/dd">
// </reviewed>

// <synopsis>

// Represents an ascii symbol annotation
// </synopsis>

class AnnSymbol: public AnnotationBase {
public:

	// allowed symbols
	enum Symbol {
		POINT,
		PIXEL,
		CIRCLE,
		TRIANGLE_DOWN,
		TRIANGLE_UP,
		TRIANGLE_LEFT,
		TRIANGLE_RIGHT,
		TRI_DOWN,
		TRI_UP,
		TRI_LEFT,
		TRI_RIGHT,
		SQUARE,
		PENTAGON,
		STAR,
		HEXAGON1,
		HEXAGON2,
		PLUS,
		X,
		DIAMOND,
		THIN_DIAMOND,
		VLINE,
		HLINE,
		UNKNOWN
	};

	AnnSymbol(
		const casacore::Quantity& x, const casacore::Quantity& y,
		const casacore::String& dirRefFrameString,
		const casacore::CoordinateSystem& csys,
		const casacore::Char symbolChar,
		const casacore::Quantity& beginFreq,
		const casacore::Quantity& endFreq,
		const casacore::String& freqRefFrame,
		const casacore::String& dopplerString,
		const casacore::Quantity& restfreq,
		const casacore::Vector<casacore::Stokes::StokesTypes>& stokes
	);

	AnnSymbol(
		const casacore::Quantity& x, const casacore::Quantity& y,
		const casacore::CoordinateSystem& csys,
		const Symbol symbol,
		const casacore::Vector<casacore::Stokes::StokesTypes>& stokes
	);

	// implicit copy constructor and destructor are fine

	AnnSymbol& operator=(const AnnSymbol& other);

	casacore::MDirection getDirection() const;

	Symbol getSymbol() const;

	static Symbol charToSymbol(const casacore::Char c);

	static casacore::Char symbolToChar(const Symbol s);

	virtual std::ostream& print(std::ostream &os) const;

private:
	AnnotationBase::Direction _inputDirection;
	Symbol _symbol;
	casacore::Char _symbolChar;
	const static casacore::String _class;
	static std::map<casacore::Char, Symbol> _symbolMap;

	static void _initMap();

	void _init(const casacore::Quantity& x, const casacore::Quantity& y);

};



}

#endif