Verovio
Source code documentation
layer.h
1 // Name: layer.h
3 // Author: Laurent Pugin
4 // Created: 2011
5 // Copyright (c) Authors and others. All rights reserved.
7 
8 #ifndef __VRV_LAYER_H__
9 #define __VRV_LAYER_H__
10 
11 #include "atts_shared.h"
12 #include "drawinginterface.h"
13 #include "object.h"
14 
15 namespace vrv {
16 
17 class Clef;
18 class DeviceContext;
19 class LayerElement;
20 class Measure;
21 class Note;
22 class StaffDef;
23 
24 //----------------------------------------------------------------------------
25 // Layer
26 //----------------------------------------------------------------------------
27 
33 class Layer : public Object,
34  public DrawingListInterface,
35  public ObjectListInterface,
36  public AttCue,
37  public AttNInteger,
38  public AttTyped,
39  public AttVisibility {
40 public:
46  Layer();
47  virtual ~Layer();
48  Object *Clone() const override { return new Layer(*this); }
49  void Reset() override;
50  std::string GetClassName() const override { return "layer"; }
52 
56  void CloneReset() override;
57 
62  bool IsSupportedChild(ClassId classId) override;
64 
69  int GetLayerIdx() const { return Object::GetIdx(); }
70 
71  LayerElement *GetPrevious(const LayerElement *element);
72  const LayerElement *GetPrevious(const LayerElement *element) const;
73  LayerElement *GetAtPos(int x);
74  const LayerElement *GetAtPos(int x) const;
75 
83  Clef *GetClef(const LayerElement *test);
84  const Clef *GetClef(const LayerElement *test) const;
86 
93  Clef *GetClefFacs(const LayerElement *test);
94  const Clef *GetClefFacs(const LayerElement *test) const;
96 
101  int GetClefLocOffset(const LayerElement *test) const;
102 
106  int GetCrossStaffClefLocOffset(const LayerElement *element, int locOffset) const;
107 
113  void SetDrawingStemDir(data_STEMDIRECTION stemDirection) { m_drawingStemDir = stemDirection; }
114  data_STEMDIRECTION GetDrawingStemDir(const LayerElement *element) const;
115  data_STEMDIRECTION GetDrawingStemDir(const ArrayOfBeamElementCoords *coords) const;
116  data_STEMDIRECTION GetDrawingStemDir() const { return m_drawingStemDir; }
118 
124  std::set<int> GetLayersNForTimeSpanOf(const LayerElement *element) const;
125  int GetLayerCountForTimeSpanOf(const LayerElement *element) const;
127 
133  std::set<int> GetLayersNInTimeSpan(
134  const Fraction &time, const Fraction &duration, const Measure *measure, int staff) const;
135  int GetLayerCountInTimeSpan(
136  const Fraction &time, const Fraction &duration, const Measure *measure, int staff) const;
138 
145  ListOfObjects GetLayerElementsForTimeSpanOf(const LayerElement *element, bool excludeCurrent = false);
146  ListOfConstObjects GetLayerElementsForTimeSpanOf(const LayerElement *element, bool excludeCurrent = false) const;
148 
155  const Fraction &time, const Fraction &duration, const Measure *measure, int staff, bool excludeCurrent);
156  ListOfConstObjects GetLayerElementsInTimeSpan(
157  const Fraction &time, const Fraction &duration, const Measure *measure, int staff, bool excludeCurrent) const;
159 
165  const Clef *GetCurrentClef() const;
166  KeySig *GetCurrentKeySig();
167  const KeySig *GetCurrentKeySig() const;
168  Mensur *GetCurrentMensur();
169  const Mensur *GetCurrentMensur() const;
170  MeterSig *GetCurrentMeterSig();
171  const MeterSig *GetCurrentMeterSig() const;
172  Proport *GetCurrentProport();
173  const Proport *GetCurrentProport() const;
175 
176  void ResetStaffDefObjects();
177 
182  void SetDrawingStaffDefValues(StaffDef *currentStaffDef);
183  bool GetDrawingStaffDefValues(StaffDef *staffDef) const;
184 
185  bool DrawKeySigCancellation() const { return m_drawKeySigCancellation; }
186  void SetDrawKeySigCancellation(bool drawKeySigCancellation) { m_drawKeySigCancellation = drawKeySigCancellation; }
187 
188  Clef *GetStaffDefClef() { return m_staffDefClef; }
189  const Clef *GetStaffDefClef() const { return m_staffDefClef; }
190  KeySig *GetStaffDefKeySig() { return m_staffDefKeySig; }
191  const KeySig *GetStaffDefKeySig() const { return m_staffDefKeySig; }
192  Mensur *GetStaffDefMensur() { return m_staffDefMensur; }
193  const Mensur *GetStaffDefMensur() const { return m_staffDefMensur; }
194  MeterSig *GetStaffDefMeterSig() { return m_staffDefMeterSig; }
195  const MeterSig *GetStaffDefMeterSig() const { return m_staffDefMeterSig; }
196  MeterSigGrp *GetStaffDefMeterSigGrp() { return m_staffDefMeterSigGrp; }
197  const MeterSigGrp *GetStaffDefMeterSigGrp() const { return m_staffDefMeterSigGrp; }
198 
199  bool HasStaffDef() const
200  {
201  return (m_staffDefClef || m_staffDefKeySig || m_staffDefMensur || m_staffDefMeterSig || m_staffDefMeterSigGrp);
202  }
203 
204  bool DrawOssiaStaffDef() const { return m_drawOssiaStaffDef; }
205  void SetDrawOssiaStaffDef(bool drawOssiaStaffDef) { m_drawOssiaStaffDef = drawOssiaStaffDef; }
207 
212  void SetDrawingCautionValues(StaffDef *currentStaffDef);
213 
214  bool DrawCautionKeySigCancel() const { return m_drawCautionKeySigCancel; }
215  void SetDrawCautionKeySigCancel(bool drawCautionKeySig) { m_drawCautionKeySigCancel = drawCautionKeySig; }
216 
217  Clef *GetCautionStaffDefClef() { return m_cautionStaffDefClef; }
218  const Clef *GetCautionStaffDefClef() const { return m_cautionStaffDefClef; }
219  KeySig *GetCautionStaffDefKeySig() { return m_cautionStaffDefKeySig; }
220  const KeySig *GetCautionStaffDefKeySig() const { return m_cautionStaffDefKeySig; }
221  Mensur *GetCautionStaffDefMensur() { return m_cautionStaffDefMensur; }
222  const Mensur *GetCautionStaffDefMensur() const { return m_cautionStaffDefMensur; }
223  MeterSig *GetCautionStaffDefMeterSig() { return m_cautionStaffDefMeterSig; }
224  const MeterSig *GetCautionStaffDefMeterSig() const { return m_cautionStaffDefMeterSig; }
225 
226  bool HasCautionStaffDef() const
227  {
228  return (
229  m_cautionStaffDefClef || m_cautionStaffDefKeySig || m_cautionStaffDefMensur || m_cautionStaffDefMeterSig);
230  }
232 
237  void SetCrossStaffFromAbove(bool crossStaff) { m_crossStaffFromAbove = crossStaff; }
238  bool HasCrossStaffFromAbove() const { return m_crossStaffFromAbove; }
239  void SetCrossStaffFromBelow(bool crossStaff) { m_crossStaffFromBelow = crossStaff; }
240  bool HasCrossStaffFromBelow() const { return m_crossStaffFromBelow; }
242 
243  //----------//
244  // Functors //
245  //----------//
246 
251  FunctorCode Accept(Functor &functor) override;
252  FunctorCode Accept(ConstFunctor &functor) const override;
253  FunctorCode AcceptEnd(Functor &functor) override;
254  FunctorCode AcceptEnd(ConstFunctor &functor) const override;
256 
257 private:
258  //
259 public:
260  //
261 private:
265  data_STEMDIRECTION m_drawingStemDir;
266 
270  bool m_crossStaffFromBelow;
271  bool m_crossStaffFromAbove;
272 
274  Clef *m_staffDefClef;
275  KeySig *m_staffDefKeySig;
276  Mensur *m_staffDefMensur;
277  MeterSig *m_staffDefMeterSig;
278  MeterSigGrp *m_staffDefMeterSigGrp;
279  bool m_drawKeySigCancellation;
280  bool m_drawOssiaStaffDef;
281 
283  Clef *m_cautionStaffDefClef;
284  KeySig *m_cautionStaffDefKeySig;
285  Mensur *m_cautionStaffDefMensur;
286  MeterSig *m_cautionStaffDefMeterSig;
287  bool m_drawCautionKeySigCancel;
288 };
289 
290 } // namespace vrv
291 
292 #endif
This class models the MEI <clef> element.
Definition: clef.h:41
This abstract class is the base class for all const functors.
Definition: functor.h:126
This class is an interface for elements with duration, such as notes and rests.
Definition: drawinginterface.h:34
Definition: fraction.h:19
This abstract class is the base class for all mutable functors.
Definition: functor.h:101
This class models the MEI <keySig> element.
Definition: keysig.h:52
This class is a base class for the Layer (<layer>) content.
Definition: layerelement.h:51
This class represents a layer in a laid-out score (Doc).
Definition: layer.h:39
int GetCrossStaffClefLocOffset(const LayerElement *element, int locOffset) const
Return the clef offset for the position if there are cross-staff clefs on the same layer.
FunctorCode Accept(Functor &functor) override
Interface for class functor visitation.
Clef * GetClef(const LayerElement *test)
Get the current clef for the test element.
void SetDrawingStaffDefValues(StaffDef *currentStaffDef)
Set drawing clef, keysig, mensur, metersig, metersiggrp if necessary and if available.
void SetDrawingCautionValues(StaffDef *currentStaffDef)
Set drawing caution clef, keysig, mensur, metersig if necessary and if available.
int GetClefLocOffset(const LayerElement *test) const
Return the clef offset for the position x.
bool IsSupportedChild(ClassId classId) override
Base method for checking if a child can be added.
Object * Clone() const override
Method call for copying child classes.
Definition: layer.h:48
ListOfObjects GetLayerElementsForTimeSpanOf(const LayerElement *element, bool excludeCurrent=false)
Get the list of the layer elements for the duration of an element Takes into account cross-staff situ...
void CloneReset() override
Overriding CloneReset() method to be called after copy / assignment calls.
Clef * GetCurrentClef()
Get the current clef, keysig, mensur and meterSig.
Clef * GetClefFacs(const LayerElement *test)
Get the current clef based on facsimile for the test element.
int GetLayerIdx() const
Return the index position of the layer in its staff parent.
Definition: layer.h:69
ListOfObjects GetLayerElementsInTimeSpan(const Fraction &time, const Fraction &duration, const Measure *measure, int staff, bool excludeCurrent)
Get the list of the layer elements used within a time span.
This class represents a measure in a page-based score (Doc).
Definition: measure.h:46
This class models the MEI <mensur> element.
Definition: mensur.h:34
This class represents a MEI meterSigGrp.
Definition: metersiggrp.h:32
This class models the MEI <meterSig> element.
Definition: metersig.h:34
This class represents a basic object.
Definition: object.h:64
int GetIdx() const
Return the index position of the object in its parent (-1 if not found)
This class is an pseudo interface for elements maintaining a flat list of children LayerElement for p...
Definition: object.h:916
This class models the MEI <proport> element.
Definition: proport.h:23
This class represents a MEI staffDef.
Definition: staffdef.h:37