GUIDOLib  1.7.7
Guido Engine Internal Documentation
ARMusicalTag.h
1 #ifndef ARMusicalTag_H
2 #define ARMusicalTag_H
3 
4 /*
5  GUIDO Library
6  Copyright (C) 2002 Holger Hoos, Juergen Kilian, Kai Renz
7  Copyright (C) 2002-2017 Grame
8 
9  This Source Code Form is subject to the terms of the Mozilla Public
10  License, v. 2.0. If a copy of the MPL was not distributed with this
11  file, You can obtain one at http://mozilla.org/MPL/2.0/.
12 
13  Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
14  research@grame.fr
15 
16 */
17 
18 #include <string>
19 
20 #include "ARMusicalObject.h"
21 #include "TagParameterMap.h"
22 #include "ARVisitable.h"
23 #include "ARVisitor.h"
24 #include "TagParametersMaps.h"
25 #include "TagParameterRGBColor.h"
26 
27 class TagParameterString;
28 class TagParameterFloat;
29 
35 {
36  static TagParameterMap fCommonParams;
37 
38  public:
39  // the tags order at the beginning of a voice
42 
43  enum ASSOCIATION { LA, RA, DC, EL, ER }; // Left, Right, Don't Care, Error Left, Error Right
44  enum RANGE { NO, ONLY, RANGEDC };
45 
46  ARMusicalTag ( const TYPE_TIMEPOSITION & tp, const ARMusicalTag * copy = 0 );
47  ARMusicalTag ( int pid = -1, const ARMusicalTag * copy = 0 );
48  virtual ~ARMusicalTag() {}
49 
50 
51  virtual void accept(ARVisitor& visitor) { visitor.visitIn(this); visitor.visitOut(this); }
52 
53  // give the tag precedence, used to sort the elements at the beginning of a voice
54  // and notably to get a correct clef, key meter order
55  virtual int getOrder() const { return kDefaultOrder; }
56  virtual bool MatchEndTag( const char * endstr );
57  void setAllowRange( int pallow );
58 
59  virtual const char* getTagName () const { return "ARMusicalTag"; };
60  virtual std::string getGMNName () const { return "\\musicalTag"; };
61  virtual const char* getParamsStr() const { return kCommonParams; };
62 
63  void setIsAuto( bool isauto ) { isAuto = isauto; }
64  bool getIsAuto() const { return isAuto; }
65  void print (std::ostream & os) const;
66 
67  // the association of a Tag
68  // Left, Right, Don't Care, Error Left, Error Right
69  // Error Left: It is associated to the left, but that is an error.
70  // Error Right: It is associated to the right, but thati s an error
71  void setAssociation(ASSOCIATION p_assoc) { assoc = p_assoc; }
72  ASSOCIATION getAssociation() const { return assoc; }
73 
74  virtual RANGE getRangeSetting() const { return rangesetting; }
75  virtual bool IsStateTag() const { return false; }
76  virtual void setError(int i = 1) { error = i; }
77  virtual int getError() const { return error; }
78  int getID() const { return id; }
79  void setID(int pid) { id = pid; }
80 
81  virtual void setRange(bool p) { mHasRange = p; }
82  virtual bool getRange() const { return mHasRange; }
83 
84  void setColor( const char * cp );
85  void setRGBColor (unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha=255);
86  void setSize(float newsize);
87  virtual const TagParameterFloat * getSize() const;
88 
89  const TagParameterString * getColor() const;
90  const TagParameterRGBColor* getRGBColor() const;
91  const TagParameterFloat * getDX() const;
92  const TagParameterFloat * getDY() const;
93 
94  const ARMusicalObject *isARMusicalTag() const { return this; }
95 
96  // -------------------------------------------------------------------
97  // tag parameters management
98  // -------------------------------------------------------------------
99  // query a tag parameter and possibly gives the default one
100  template<typename T> const T* getParameter (const char* param, bool usedefault=false) const {
101  const T* p = fParams.get<T> (param);
102  if (usedefault && !p)
103  p = fParamsTemplate.get<T>(param);
104  return p;
105  }
106  // query a tag parameter that can have several names
107  template<typename T> const T* getParameter (const char* name1, const char* name2) const {
108  const T* p = fParams.get<T>(name1);
109  return p ? p : fParams.get<T>(name2);
110  }
111  template<typename T> const T* getDefaultParameter (const char* param) const { return fParamsTemplate.get<T>(param); }
112 
113  virtual void setTagParameters (TagParametersList& params);
114  virtual void clearTagDefaultParameter (const char* param);
115  // setTagParameters is intended to let subclasses process their specific parameters
116  virtual void setTagParameters (const TagParameterMap& params) {}
117  virtual const TagParameterMap& getTagParameters() const { return fParams; }
118  virtual const TagParameterMap& getSupportedTagParameters() const { return fParamsTemplate; }
119  virtual void addTagParameter (STagParameterPtr param) { fParams.Add (param); }
120  virtual void copyParameters(const TagParameterMap& map) { fParams = map; }
121 
122  // sets the template and default tag parameters
123  virtual void setupTagParameters(const TagParameterMap& map) { fParamsTemplate.Add(map); }
124 
125  virtual void setIsInHeader(bool state) { mIsInHeader = state; }
126  virtual bool isInHeader() const { return mIsInHeader; }
127 
128  protected: // id(-1), isAuto(0), rangesetting(NO), error(0), hasRange(0)
129  virtual TagParameterMap checkTagParameters (TagParametersList& params, const std::string pTemplate);
130  virtual void checkUnitParameters (TagParameterMap& map);
131 
132  int id;
133  bool isAuto;
135 
136  // this is the RANGE setting -> NO Range, ONLY Range or DC Range meaning:
137  // No Range: The Tag must not have a range
138  // ONLY Range: The Tag must have a range
139  // DC Range: The Tag can either have or not have a range
141 
142  int error;
143  // is 1, if the Tag has a valid range 0 otherwise.
144  bool mHasRange;
145 
146  private:
147  void init(const ARMusicalTag * copy);
148  TagParameterRGBColor fRgbColor;
149 
150  bool mIsInHeader; // For proportional rendering
151  TagParameterMap fParams; // the current tag parameters
152  TagParameterMap fParamsTemplate; // the supported tag parameters
153 };
154 
155 std::ostream & operator << ( std::ostream & os, const ARMusicalTag* tag );
156 
157 #endif
158 
159 
160 
ARMusicalTag::setRange
virtual void setRange(bool p)
Definition: ARMusicalTag.h:81
ARMusicalTag::isInHeader
virtual bool isInHeader() const
Definition: ARMusicalTag.h:126
ARMusicalTag::LA
Definition: ARMusicalTag.h:43
ARMusicalTag::clearTagDefaultParameter
virtual void clearTagDefaultParameter(const char *param)
ARMusicalTag::setTagParameters
virtual void setTagParameters(TagParametersList &params)
ARVisitor
Definition: ARVisitor.h:22
ARMusicalTag::getError
virtual int getError() const
Definition: ARMusicalTag.h:77
ARMusicalTag::setError
virtual void setError(int i=1)
Definition: ARMusicalTag.h:76
ARMusicalTag::ASSOCIATION
ASSOCIATION
Definition: ARMusicalTag.h:43
ARVisitor::visitOut
virtual void visitOut(ARMusic *)
Definition: ARVisitor.h:28
ARMusicalTag::getDefaultParameter
const T * getDefaultParameter(const char *param) const
Definition: ARMusicalTag.h:111
ARMusicalTag::kInstrumentOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::getRGBColor
const TagParameterRGBColor * getRGBColor() const
ARMusicalTag::getAssociation
ASSOCIATION getAssociation() const
Definition: ARMusicalTag.h:72
ARMusicalTag::print
void print(std::ostream &os) const
Fraction
Numerator and denominator.
Definition: Fraction.h:23
ARMusicalTag::kMeterOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::addTagParameter
virtual void addTagParameter(STagParameterPtr param)
Definition: ARMusicalTag.h:119
ARMusicalTag::kClefOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::isAuto
bool isAuto
Definition: ARMusicalTag.h:133
TagParameterMap::get
const T * get(const char *param) const
Definition: TagParameterMap.h:54
ARMusicalTag::assoc
ASSOCIATION assoc
Definition: ARMusicalTag.h:134
ARMusicalTag::getSupportedTagParameters
virtual const TagParameterMap & getSupportedTagParameters() const
Definition: ARMusicalTag.h:118
ARMusicalTag::getOrder
virtual int getOrder() const
Definition: ARMusicalTag.h:55
ARMusicalTag::checkTagParameters
virtual TagParameterMap checkTagParameters(TagParametersList &params, const std::string pTemplate)
ARMusicalTag::rangesetting
RANGE rangesetting
Definition: ARMusicalTag.h:140
ARMusicalTag::RANGE
RANGE
Definition: ARMusicalTag.h:44
ARMusicalTag::setSize
void setSize(float newsize)
ARMusicalTag::ER
Definition: ARMusicalTag.h:43
ARVisitor::visitIn
virtual void visitIn(ARMusic *)
Definition: ARVisitor.h:27
ARMusicalTag::getParamsStr
virtual const char * getParamsStr() const
Definition: ARMusicalTag.h:61
ARMusicalTag::kDefaultOrder
Definition: ARMusicalTag.h:41
ARMusicalTag::RA
Definition: ARMusicalTag.h:43
TagParameterMap::Add
void Add(STagParameterPtr param)
ARMusicalTag::kTitleOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::accept
virtual void accept(ARVisitor &visitor)
Definition: ARMusicalTag.h:51
ARMusicalTag::setupTagParameters
virtual void setupTagParameters(const TagParameterMap &map)
Definition: ARMusicalTag.h:123
ARMusicalTag::kDontMove
Definition: ARMusicalTag.h:40
ARMusicalTag::getID
int getID() const
Definition: ARMusicalTag.h:78
ARMusicalTag::RANGEDC
Definition: ARMusicalTag.h:44
TagParameterRGBColor
RGB Color tag parameter.
Definition: TagParameterRGBColor.h:31
ARMusicalTag::kFooterOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::getParameter
const T * getParameter(const char *param, bool usedefault=false) const
Definition: ARMusicalTag.h:100
ARMusicalTag::kStartOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::getRangeSetting
virtual RANGE getRangeSetting() const
Definition: ARMusicalTag.h:74
ARMusicalTag::getRange
virtual bool getRange() const
Definition: ARMusicalTag.h:82
ARMusicalTag::setIsInHeader
virtual void setIsInHeader(bool state)
Definition: ARMusicalTag.h:125
ARMusicalTag::getDY
const TagParameterFloat * getDY() const
ARMusicalTag::setColor
void setColor(const char *cp)
TagParameterFloat
The floating point parameter type for Guido Tags.
Definition: TagParameterFloat.h:24
ARMusicalTag::MatchEndTag
virtual bool MatchEndTag(const char *endstr)
ARMusicalTag::kComposerOrder
Definition: ARMusicalTag.h:40
ARMusicalTag
The base class for all musical tag classes.
Definition: ARMusicalTag.h:34
ARMusicalTag::kKeyOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::IsStateTag
virtual bool IsStateTag() const
Definition: ARMusicalTag.h:75
ARMusicalTag::getParameter
const T * getParameter(const char *name1, const char *name2) const
Definition: ARMusicalTag.h:107
ARMusicalTag::copyParameters
virtual void copyParameters(const TagParameterMap &map)
Definition: ARMusicalTag.h:120
ARMusicalTag::kSystemFormatOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::kAccoladeOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::setID
void setID(int pid)
Definition: ARMusicalTag.h:79
ARMusicalTag::NO
Definition: ARMusicalTag.h:44
ARMusicalTag::kStaffOrder
Definition: ARMusicalTag.h:40
ARMusicalTag::setRGBColor
void setRGBColor(unsigned char red, unsigned char green, unsigned char blue, unsigned char alpha=255)
ARMusicalTag::getSize
virtual const TagParameterFloat * getSize() const
ARMusicalTag::getTagParameters
virtual const TagParameterMap & getTagParameters() const
Definition: ARMusicalTag.h:117
TagParameterString
A string-type tag parameter.
Definition: TagParameterString.h:25
ARMusicalTag::EL
Definition: ARMusicalTag.h:43
ARMusicalTag::isARMusicalTag
const ARMusicalObject * isARMusicalTag() const
Definition: ARMusicalTag.h:94
ARMusicalTag::~ARMusicalTag
virtual ~ARMusicalTag()
Definition: ARMusicalTag.h:48
ARMusicalTag::mHasRange
bool mHasRange
Definition: ARMusicalTag.h:144
ARMusicalTag::error
int error
Definition: ARMusicalTag.h:142
TagParameterMap
A list of tag parameters represented as a map.
Definition: TagParameterMap.h:31
ARMusicalTag::getTagName
virtual const char * getTagName() const
Definition: ARMusicalTag.h:59
ARMusicalTag::getColor
const TagParameterString * getColor() const
ARMusicalTag::ONLY
Definition: ARMusicalTag.h:44
ARMusicalObject
The base class for all AR objects. It contains all musical information : duration and time position.
Definition: ARMusicalObject.h:33
ARMusicalTag::getIsAuto
bool getIsAuto() const
Definition: ARMusicalTag.h:64
operator<<
std::ostream & operator<<(std::ostream &os, const svgendl &eol)
ARMusicalTag::DC
Definition: ARMusicalTag.h:43
ARMusicalTag::setTagParameters
virtual void setTagParameters(const TagParameterMap &params)
Definition: ARMusicalTag.h:116
ARMusicalTag::setAssociation
void setAssociation(ASSOCIATION p_assoc)
Definition: ARMusicalTag.h:71
ARMusicalTag::ORDER
ORDER
Definition: ARMusicalTag.h:40
ARMusicalTag::getGMNName
virtual std::string getGMNName() const
Definition: ARMusicalTag.h:60
ARMusicalTag::id
int id
Definition: ARMusicalTag.h:132
ARMusicalTag::checkUnitParameters
virtual void checkUnitParameters(TagParameterMap &map)
ARMusicalTag::setAllowRange
void setAllowRange(int pallow)
ARMusicalTag::ARMusicalTag
ARMusicalTag(const TYPE_TIMEPOSITION &tp, const ARMusicalTag *copy=0)
ARMusicalTag::setIsAuto
void setIsAuto(bool isauto)
Definition: ARMusicalTag.h:63
ARMusicalTag::getDX
const TagParameterFloat * getDX() const

Guido Project Copyright © 2019 Grame-CNCM