Verovio
Source code documentation
editortoolkit_cmn.h
1 // Name: editortoolkit_cmn.h
3 // Author: Juliette Regimbal
4 // Created: 04/06/2019
5 // Copyright (c) Authors and others. All rights reserved.
7 
8 #ifndef __VRV_EDITOR_TOOLKIT_CMN_H__
9 #define __VRV_EDITOR_TOOLKIT_CMN_H__
10 
11 #include <cmath>
12 #include <deque>
13 #include <string>
14 #include <utility>
15 
16 //--------------------------------------------------------------------------------
17 
18 #include "doc.h"
19 #include "editortoolkit_shared.h"
20 #include "view.h"
21 
22 #include "jsonxx.h"
23 
24 namespace vrv {
25 
26 class EditorTreeObject;
27 
28 //--------------------------------------------------------------------------------
29 // EditorToolkitCMN
30 //--------------------------------------------------------------------------------
31 
33 public:
34  EditorToolkitCMN(Doc *doc, View *view);
35  virtual ~EditorToolkitCMN();
36 
37 public:
38 #ifndef NO_EDIT_SUPPORT
39  bool ParseEditorCMNAction(const jsonxx::Object &json_editorAction);
40 
41 protected:
42  enum CursorInsertType : int8_t {
43  CURSOR_INSERT_NONE = 0,
44  CURSOR_INSERT_REST,
45  CURSOR_INSERT_TIE,
46  CURSOR_INSERT_COPY
47  };
48 
49  enum CursorContainer : int8_t { CURSOR_CONTAINER_NONE = 0, CURSOR_CONTAINER_TUPLET, CURSOR_CONTAINER_GRACEGRP };
50 
55  bool ParseInsertCursorByDurAction(const jsonxx::Object &param, data_DURATION &dur, int &dots);
56  bool ParseInsertCursorByPitchAction(
57  const jsonxx::Object &param, data_PITCHNAME &pname, int &oct, data_ACCIDENTAL_WRITTEN &accid, int &midi);
58  bool ParseInsertCursorByTypeAction(const jsonxx::Object &param, CursorInsertType &insertType);
59  bool ParseInsertCursorContainerAction(const jsonxx::Object &param, CursorContainer &container);
60  bool ParseInsertMeasureAction(const jsonxx::Object &param, std::string &elementId, int &number, bool &insertBefore);
61  bool ParseInsertNoteAction(const jsonxx::Object &param, std::string &elementId, data_PITCHNAME &pname, int &oct,
62  data_ACCIDENTAL_WRITTEN &accid, data_ACCIDENTAL_GESTURAL &accidGes, data_DURATION &dur, int &dots,
63  bool &chordMode);
64  bool ParseInsertRestAction(const jsonxx::Object &param, std::string &elementId, data_DURATION &dur, int &dots);
65  bool ParseResetCursorContainerAction(const jsonxx::Object &param, CursorContainer &container);
66 
67  bool InsertCursorByDur(data_DURATION dur, int dots);
68  bool InsertCursorByPitch(data_PITCHNAME pname, int oct, data_ACCIDENTAL_WRITTEN accid, int midi);
69  bool InsertCursorByType(CursorInsertType insertType);
70  bool InsertCursorContainer(CursorContainer container);
71  bool InsertMeasure(std::string &elementId, int number, bool insertBefore);
72  bool InsertNote(const std::string &elementId, data_PITCHNAME pname, int oct, data_ACCIDENTAL_WRITTEN accid,
73  data_ACCIDENTAL_GESTURAL accidGes, data_DURATION dur, int dots, bool chordMode);
74  bool InsertRest(const std::string &elementId, data_DURATION dur, int dots);
75  bool ResetCursorContainer(CursorContainer container);
76 
77 private:
78  bool InsertNoteInChordMode(const std::string &elementId, data_PITCHNAME pname, int oct,
79  data_ACCIDENTAL_WRITTEN accid, data_ACCIDENTAL_GESTURAL accidGes);
80  void SetNoteAttributes(
81  Note *note, data_PITCHNAME pname, int oct, data_ACCIDENTAL_WRITTEN accid, data_ACCIDENTAL_GESTURAL accidGes);
82  void AutoBeam(LayerElement *noteOrRest);
83  bool CopyCursorPosition(data_DURATION dur, int dots, bool tie);
84  std::pair<Object *, Object *> GetTargetContainerFor(Object *target);
85  void TieElements(const Object *start, const Object *end);
86 
87 public:
88  //
89 protected:
90  //
91 #endif /* NO_EDIT_SUPPORT */
92 };
93 
94 } // namespace vrv
95 
96 #endif
This class is a hold the data and corresponds to the model of a MVC design pattern.
Definition: doc.h:41
Definition: editortoolkit_cmn.h:32
bool ParseInsertCursorByDurAction(const jsonxx::Object &param, data_DURATION &dur, int &dots)
Parse JSON instructions for experimental editor functions.
Definition: editortoolkit_shared.h:33
This class is a base class for the Layer (<layer>) content.
Definition: layerelement.h:51
This class models the MEI <note> element.
Definition: note.h:69
This class represents a basic object.
Definition: object.h:66
This class is a drawing context and corresponds to the view of a MVC design pattern.
Definition: view.h:109