MNX Document Model
Loading...
Searching...
No Matches
Layout.h
1/*
2 * Copyright (C) 2025, Robert Patterson
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20 * THE SOFTWARE.
21 */
22#pragma once
23
24#include "Enumerations.h"
25#include "BaseTypes.h"
26
27namespace mnx {
28
33namespace layout {
34
40{
41public:
43 StaffSource(const std::shared_ptr<json>& root, json_pointer pointer)
45 {
46 }
47
52 StaffSource(Base& parent, const std::string_view& key, std::string& partId)
54 {
55 set_part(partId);
56 }
57
58 MNX_OPTIONAL_PROPERTY(std::string, label);
60 MNX_REQUIRED_PROPERTY(std::string, part);
63 MNX_OPTIONAL_PROPERTY(std::string, voice);
64};
65
70class Staff : public ContentObject
71{
72public:
73 using ContentObject::ContentObject;
74
78 Staff(Base& parent, const std::string_view& key)
79 : ContentObject(parent, key)
80 {
81 // required children
82 create_sources();
83 }
84
85 MNX_OPTIONAL_PROPERTY(std::string, label);
89
90 static constexpr std::string_view ContentTypeValue = "staff";
91};
92
97class Group : public ContentObject
98{
99public:
100 using ContentObject::ContentObject;
101
105 Group(Base& parent, const std::string_view& key)
106 : ContentObject(parent, key)
107 {
108 // required children
109 create_content();
110 }
111
113 MNX_OPTIONAL_PROPERTY(std::string, label);
115
116 static constexpr std::string_view ContentTypeValue = "group";
117};
118
119} // namespace layout
120
126{
127public:
128 using ArrayElementObject::ArrayElementObject;
129
133 Layout(Base& parent, const std::string_view& key)
135 {
136 // required children
137 create_content();
138 }
139
141 MNX_REQUIRED_PROPERTY(std::string, id);
142};
143
144} // namespace mnx
Represents an MNX object that is included as an array element.
Definition BaseTypes.h:615
Represents an MNX array, encapsulating property access.
Definition BaseTypes.h:483
Base class wrapper for all MNX JSON nodes.
Definition BaseTypes.h:210
json_pointer pointer() const
Returns the json_pointer for this node.
Definition BaseTypes.h:271
T parent() const
Returns the parent object for this node.
Definition BaseTypes.h:258
const std::shared_ptr< json > & root() const
Returns the root.
Definition BaseTypes.h:288
Class for content arrays.
Definition BaseTypes.h:700
Base class for objects that are elements of content arrays.
Definition BaseTypes.h:640
Represents the element of the layout array in an MNX document.
Definition Layout.h:126
MNX_REQUIRED_CHILD(ContentArray, content)
Required child containing the layout content (groups and staves).
MNX_REQUIRED_PROPERTY(std::string, id)
The unique identifier used to identify this layout.
Layout(Base &parent, const std::string_view &key)
Creates a new Layout class as a child of a JSON element.
Definition Layout.h:133
Represents a groups of staves within an MNX layout.
Definition Layout.h:98
MNX_OPTIONAL_PROPERTY(LayoutSymbol, symbol)
The symbol down the left side.
Group(Base &parent, const std::string_view &key)
Creates a new Group class as a child of a JSON element.
Definition Layout.h:105
MNX_REQUIRED_CHILD(ContentArray, content)
Required child containing the layout content (groups and staves).
MNX_OPTIONAL_PROPERTY(std::string, label)
Label to be rendered to the left of the group.
static constexpr std::string_view ContentTypeValue
type value that identifies the type within the content array
Definition Layout.h:116
Represents a staff source for a staff in a layout in a score.
Definition Layout.h:40
MNX_OPTIONAL_PROPERTY(std::string, label)
Text to appear to the left of the staff.
MNX_OPTIONAL_PROPERTY(StemDirection, stem)
The stem direction for this staff source.
MNX_OPTIONAL_PROPERTY(std::string, voice)
The voice id to draw from.
StaffSource(Base &parent, const std::string_view &key, std::string &partId)
Creates a new StaffSource class as a child of a JSON element.
Definition Layout.h:52
StaffSource(const std::shared_ptr< json > &root, json_pointer pointer)
Constructor for existing staff sources.
Definition Layout.h:43
MNX_OPTIONAL_PROPERTY_WITH_DEFAULT(int, staff, 1)
The staff number within the part.
MNX_OPTIONAL_PROPERTY(LabelRef, labelref)
The labelref to use (rather than label)
MNX_REQUIRED_PROPERTY(std::string, part)
Id of the part to draw from.
Represents a single staff instance within an MNX layout.
Definition Layout.h:71
static constexpr std::string_view ContentTypeValue
type value that identifies the type within the content array
Definition Layout.h:90
MNX_REQUIRED_CHILD(Array< StaffSource >, sources)
The sources for this staff.
MNX_OPTIONAL_PROPERTY(LabelRef, labelref)
The labelref to use (rather than label)
MNX_OPTIONAL_PROPERTY(LayoutSymbol, symbol)
The symbol down the left side.
MNX_OPTIONAL_PROPERTY(std::string, label)
Label to be rendered to the left of the staff.
Staff(Base &parent, const std::string_view &key)
Creates a new Staff class as a child of a JSON element.
Definition Layout.h:78
object model for MNX format
json::json_pointer json_pointer
JSON pointer class for MNX.
Definition BaseTypes.h:197
LayoutSymbol
The symbols available to bracket a staff group.
Definition Enumerations.h:125
LabelRef
The values available in a labelref.
Definition Enumerations.h:115
StemDirection
The values available in a labelref.
Definition Enumerations.h:266