/* Blinker
   Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
   Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
   a blinkenarea.org project */

#ifndef BLINKER_TRANSFORM_H
#define BLINKER_TRANSFORM_H

#include <string>

namespace Blinker {

/// a tranformation, i.e. rotation or mirroring
class Transform
{
public:
  /// transformation types
  enum Type {
    None,     ///< no transformation
    RotCW,    ///< 90 degrees clockwise rotation
    RotCCW,   ///< 90 degrees counter-clockwise rotation
    RotHalf,  ///< 180 degrees rotation
    MirHor,   ///< horizontal mirroring
    MirVer,   ///< vertical mirroring
    MirDiag,  ///< diagonal (\) mirroring
    MirDiag2, ///< diagonal (/) mirroring
  };

public:
  /// constructor
  Transform();

public:
  /**
   * @brief parse from string format
   * @param[in] str string format
   * @return if parsing was successful
   */
  bool fromStr(const std::string &str);

  /**
   * @brief convert to string format
   * @return string format
   */
  std::string toStr() const;

public:
  Type m_type; ///< transformation type
}; // class Transform

} // namespace Blinker

#endif // #ifndef BLINKER_TRANSFORM_H

