Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-Studio-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2021 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 : #pragma once
23 :
24 : #include <QQuickItem>
25 :
26 : #include "extensions/api/v1/ipluginapiv1.h"
27 :
28 : #include "global/api/apiutils.h"
29 :
30 : #include "modularity/ioc.h"
31 : #include "project/iprojectsession.h"
32 : #include "global/iapplication.h"
33 : #include "rcommand/icommanddispatcher.h"
34 :
35 : #include "../../iengravingpluginapihelper.h"
36 :
37 : #include "apitypes.h"
38 : #include "cursor.h"
39 : #include "enums.h"
40 :
41 : #include "log.h"
42 :
43 : namespace mu::engraving {
44 : class EngravingItem;
45 : class Score;
46 : }
47 :
48 : /**
49 : * \namespace mu::plugins::api
50 : * Contains items exposed to the QML plugins framework.
51 : */
52 :
53 : namespace mu::engraving::apiv1 {
54 : class EngravingItem;
55 : class Fraction;
56 : class OrnamentIntervalWrapper;
57 : class MsProcess;
58 : class Score;
59 :
60 : #define DECLARE_API_ENUM(qmlName, cppName, enumName) \
61 : /** Accessed using qmlName.VALUE*/ \
62 : Q_PROPERTY(mu::engraving::apiv1::Enum * qmlName READ get_##cppName CONSTANT) \
63 : static Enum* cppName; \
64 : static Enum* get_##cppName() { \
65 : if (!cppName) { \
66 : cppName = wrapEnum<enumName>(); \
67 : cppName->freeze(); \
68 : } \
69 : return cppName; \
70 : }
71 :
72 : #define DECLARE_API_ENUM2(qmlName, cppName, enumName1, enumName2) \
73 : /** Accessed using qmlName.VALUE*/ \
74 : Q_PROPERTY(mu::engraving::apiv1::Enum * qmlName READ get_##cppName CONSTANT) \
75 : static Enum* cppName; \
76 : static Enum* get_##cppName() { \
77 : if (!cppName) { \
78 : cppName = wrapEnum<enumName1>(); \
79 : cppName->add(QMetaEnum::fromType<enumName2>()); \
80 : cppName->freeze(); \
81 : } \
82 : return cppName; \
83 : }
84 :
85 : //---------------------------------------------------------
86 : /// \class PluginAPI
87 : /// \brief Main class of the plugins framework.\ Named
88 : /// as \p MuseScore in QML.
89 : /// \details This class is exposed to QML plugins
90 : /// framework under \p MuseScore name and is the root
91 : /// component of each MuseScore plugin.
92 : // @P scores array[mu::engraving::Score] all currently open scores (read only)
93 : //---------------------------------------------------------
94 :
95 : class PluginAPI : public QQuickItem, public muse::extensions::apiv1::IPluginApiV1, public muse::Contextable
96 : {
97 : Q_OBJECT
98 :
99 : /// Path where the plugin is placed in menu
100 : Q_PROPERTY(QString menuPath READ menuPath WRITE setMenuPath)
101 : /// Title of this plugin
102 : Q_PROPERTY(QString title READ title WRITE setTitle)
103 : // /// Source file path, without the file name (read only)
104 : // Q_PROPERTY(QString filePath READ filePath)
105 : /// Version of this plugin
106 : Q_PROPERTY(QString version READ version WRITE setVersion)
107 : /// Human-readable plugin description, displayed in Plugin Manager
108 : Q_PROPERTY(QString description READ description WRITE setDescription)
109 : /// Type may be dialog or not defined
110 : Q_PROPERTY(QString pluginType READ pluginType WRITE setPluginType)
111 : /// Where to dock on main screen. Possible values: left, top, bottom, right
112 : Q_PROPERTY(QString dockArea READ dockArea WRITE setDockArea)
113 : /// Whether the plugin requires an existing score to run, default is `true`
114 : Q_PROPERTY(bool requiresScore READ requiresScore WRITE setRequiresScore)
115 : /// The name of the thumbnail that should be next to the plugin
116 : Q_PROPERTY(QString thumbnailName READ thumbnailName WRITE setThumbnailName)
117 : /// The code of the category
118 : Q_PROPERTY(QString categoryCode READ categoryCode WRITE setCategoryCode)
119 : /// \brief Number of MIDI ticks for 1/4 note (read only)
120 : /// \see \ref ticklength
121 : Q_PROPERTY(int division READ division CONSTANT)
122 : /// Complete version number of MuseScore in the form: MMmmuu (read only)
123 : Q_PROPERTY(int mscoreVersion READ mscoreVersion CONSTANT)
124 : /// 1st part of the MuseScore version (read only)
125 : Q_PROPERTY(int mscoreMajorVersion READ mscoreMajorVersion CONSTANT)
126 : /// 2nd part of the MuseScore version (read only)
127 : Q_PROPERTY(int mscoreMinorVersion READ mscoreMinorVersion CONSTANT)
128 : /// 3rd part of the MuseScore version (read only)
129 : Q_PROPERTY(int mscoreUpdateVersion READ mscoreUpdateVersion CONSTANT)
130 : /// (read-only)
131 : Q_PROPERTY(qreal mscoreDPI READ mscoreDPI CONSTANT)
132 : /// Current score, if any (read only)
133 : Q_PROPERTY(mu::engraving::apiv1::Score * curScore READ curScore CONSTANT)
134 : /// List of currently open scores (read only).\n \since MuseScore 3.2
135 : Q_PROPERTY(QQmlListProperty<mu::engraving::apiv1::Score> scores READ scores)
136 :
137 : private:
138 : muse::GlobalInject<muse::IApplication> application;
139 : muse::ContextInject<mu::project::IProjectSession> context = { this };
140 : muse::ContextInject<mu::engraving::IEngravingPluginAPIHelper> helper = { this };
141 : muse::ContextInject<muse::rcommand::ICommandDispatcher> commandDispatcher = { this };
142 :
143 : public:
144 : // Should be initialized in qmlpluginapi.cpp
145 : /// Contains mu::engraving::ElementType enumeration values
146 0 : DECLARE_API_ENUM(Element, elementTypeEnum, mu::engraving::apiv1::enums::ElementType)
147 : /// Contains mu::engraving::AccidentalType enumeration values
148 0 : DECLARE_API_ENUM(Accidental, accidentalTypeEnum, mu::engraving::apiv1::enums::AccidentalType)
149 : /// Contains mu::engraving::AccidentalBracket enumeration values
150 : /// \since MuseScore 4.6
151 0 : DECLARE_API_ENUM(AccidentalBracket, accidentalBracketEnum, mu::engraving::apiv1::enums::AccidentalBracket)
152 : /// Contains mu::engraving::OrnamentStyle enumeration values
153 : /// \note In MuseScore 2.X this enumeration was available as
154 : /// MScore.DEFAULT, MScore.BAROQUE.
155 0 : DECLARE_API_ENUM(OrnamentStyle, ornamentStyleEnum, mu::engraving::apiv1::enums::OrnamentStyle)
156 : /// Contains mu::engraving::Align enumeration values
157 : /// \since MuseScore 3.3
158 0 : DECLARE_API_ENUM(Align, alignEnum, mu::engraving::apiv1::enums::Align)
159 : /// Contains mu::engraving::Placement enumeration values
160 : /// \note In MuseScore 2.X this enumeration was available as
161 : /// EngravingItem.ABOVE and EngravingItem.BELOW.
162 0 : DECLARE_API_ENUM(Placement, placementEnum, mu::engraving::apiv1::enums::Placement)
163 : /// Contains mu::engraving::PlacementH enumeration values
164 : /// \since MuseScore 4.6
165 0 : DECLARE_API_ENUM(PlacementH, placementHEnum, mu::engraving::apiv1::enums::PlacementH)
166 : /// Contains mu::engraving::TextPlace enumeration values
167 : /// \since MuseScore 4.6
168 0 : DECLARE_API_ENUM(TextPlace, textPlaceEnum, mu::engraving::apiv1::enums::TextPlace)
169 : /// Contains mu::engraving::Direction enumeration values
170 : /// \note In MuseScore 2.X this enumeration was available as
171 : /// MScore.UP, MScore.DOWN, MScore.AUTO.
172 0 : DECLARE_API_ENUM(Direction, directionEnum, mu::engraving::apiv1::enums::Direction)
173 : /// Contains mu::engraving::DirectionH enumeration values
174 : /// \note In MuseScore 2.X this enumeration was available as
175 : /// MScore.LEFT, MScore.RIGHT, MScore.AUTO.
176 0 : DECLARE_API_ENUM(DirectionH, directionHEnum, mu::engraving::apiv1::enums::DirectionH)
177 : /// Contains mu::engraving::Orientation enumeration values
178 : /// \since MuseScore 4.6
179 0 : DECLARE_API_ENUM(Orientation, orientationEnum, mu::engraving::apiv1::enums::Orientation)
180 : /// Contains mu::engraving::AutoOnOff enumeration values
181 : /// \since MuseScore 4.6
182 0 : DECLARE_API_ENUM(AutoOnOff, autoOnOffEnum, mu::engraving::apiv1::enums::AutoOnOff)
183 : /// Contains mu::engraving::AutoCustomHide enumeration values
184 : /// \since MuseScore 4.6
185 0 : DECLARE_API_ENUM(AutoCustomHide, autoCustomHideEnum, mu::engraving::apiv1::enums::AutoCustomHide)
186 : /// Contains mu::engraving::VoiceAssignment enumeration values
187 : /// \since MuseScore 4.6
188 0 : DECLARE_API_ENUM(VoiceAssignment, voiceAssignmentEnum, mu::engraving::apiv1::enums::VoiceAssignment)
189 : /// Contains mu::engraving::SpacerType enumeration values
190 : /// \since MuseScore 4.6
191 0 : DECLARE_API_ENUM(SpacerType, spacerTypeEnum, mu::engraving::apiv1::enums::SpacerType)
192 : /// Contains mu::engraving::LayoutBreakType enumeration values
193 0 : DECLARE_API_ENUM(LayoutBreak, layoutBreakTypeEnum, mu::engraving::apiv1::enums::LayoutBreakType)
194 : /// Contains mu::engraving::DurationType enumeration values
195 : /// \since MuseScore 4.6
196 0 : DECLARE_API_ENUM(DurationType, durationTypeEnum, mu::engraving::apiv1::enums::DurationType)
197 : /// Contains mu::engraving::ValueType enumeration values
198 : /// \note In MuseScore 2.X this enumeration was available as
199 : /// Note.OFFSET_VAL, Note.USER_VAL
200 0 : DECLARE_API_ENUM(NoteValueType, noteValueTypeEnum, mu::engraving::apiv1::enums::VeloType)
201 : /// Contains mu::engraving::BeamMode enumeration values
202 0 : DECLARE_API_ENUM(Beam, beamModeEnum, mu::engraving::apiv1::enums::BeamMode)
203 : /// Contains mu::engraving::GlissandoType enumeration values
204 0 : DECLARE_API_ENUM(Glissando, glissandoTypeEnum, mu::engraving::apiv1::enums::GlissandoType) // was probably absent in 2.X
205 : /// Contains mu::engraving::GlissandoStyle enumeration values
206 : /// \note In MuseScore 2.X this enumeration was available as
207 : /// MScore.CHROMATIC, MScore.WHITE_KEYS, MScore.BLACK_KEYS,
208 : /// MScore.DIATONIC.
209 0 : DECLARE_API_ENUM(GlissandoStyle, glissandoStyleEnum, mu::engraving::apiv1::enums::GlissandoStyle)
210 : /// Contains mu::engraving::HarmonyType enumeration values
211 : /// \since MuseScore 3.5
212 0 : DECLARE_API_ENUM(HarmonyType, harmonyTypeEnum, mu::engraving::apiv1::enums::HarmonyType)
213 : /// Contains mu::engraving::HarmonyVoicing enumeration values
214 : /// \since MuseScore 4.6
215 0 : DECLARE_API_ENUM(HarmonyVoicing, harmonyVoicingEnum, mu::engraving::apiv1::enums::HarmonyVoicing)
216 : /// Contains mu::engraving::HDuration enumeration values
217 : /// \since MuseScore 4.6
218 0 : DECLARE_API_ENUM(HDuration, hDurationEnum, mu::engraving::apiv1::enums::HDuration)
219 : /// Contains mu::engraving::FrameType enumeration values
220 : /// \since MuseScore 4.6
221 0 : DECLARE_API_ENUM(FrameType, frameTypeEnum, mu::engraving::apiv1::enums::FrameType)
222 : /// Contains mu::engraving::VerticalAlignment enumeration values
223 : /// \since MuseScore 4.6
224 0 : DECLARE_API_ENUM(VerticalAlignment, verticalAlignmentEnum, mu::engraving::apiv1::enums::VerticalAlignment)
225 : /// Contains mu::engraving::TremoloBarType enumeration values
226 : /// \since MuseScore 4.6
227 0 : DECLARE_API_ENUM(TremoloBarType, tremoloBarTypeEnum, mu::engraving::apiv1::enums::TremoloBarType)
228 : /// Contains mu::engraving::PreferSharpFlat enumeration values
229 : /// \since MuseScore 4.6
230 0 : DECLARE_API_ENUM(PreferSharpFlat, preferSharpFlatEnum, mu::engraving::apiv1::enums::PreferSharpFlat)
231 : /// Contains mu::engraving::NoteHead::Type enumeration values
232 : /// \note In MuseScore 2.X this enumeration was available in
233 : /// NoteHead class (e.g. NoteHead.HEAD_QUARTER).
234 0 : DECLARE_API_ENUM(NoteHeadType, noteHeadTypeEnum, mu::engraving::apiv1::enums::NoteHeadType)
235 : /// Contains mu::engraving::NoteHeadScheme enumeration values
236 : /// \since MuseScore 3.5
237 0 : DECLARE_API_ENUM(NoteHeadScheme, noteHeadSchemeEnum, mu::engraving::apiv1::enums::NoteHeadScheme)
238 : /// Contains mu::engraving::NoteHeadGroup enumeration values
239 : /// \note In MuseScore 2.X this enumeration was available in
240 : /// NoteHead class (e.g. NoteHead.HEAD_TRIANGLE).
241 0 : DECLARE_API_ENUM(NoteHeadGroup, noteHeadGroupEnum, mu::engraving::apiv1::enums::NoteHeadGroup)
242 : /// Contains mu::engraving::NoteType enumeration values
243 : /// \since MuseScore 3.2.1
244 0 : DECLARE_API_ENUM(NoteType, noteTypeEnum, mu::engraving::apiv1::enums::NoteType)
245 : /// Contains mu::engraving::PlayEventType enumeration values
246 : /// \since MuseScore 3.3
247 0 : DECLARE_API_ENUM(PlayEventType, playEventTypeEnum, mu::engraving::apiv1::enums::PlayEventType)
248 : /// Contains mu::engraving::SegmentType enumeration values
249 0 : DECLARE_API_ENUM(Segment, segmentTypeEnum, mu::engraving::apiv1::enums::SegmentType)
250 : /// Contains mu::engraving::BarLineType enumeration values
251 : /// \since MuseScore 4.6
252 0 : DECLARE_API_ENUM(BarLineType, barLineTypeEnum, mu::engraving::apiv1::enums::BarLineType)
253 : /// Contains mu::engraving::Tid enumeration values
254 : /// \note In MuseScore 2.X this enumeration was available as
255 : /// TextStyleType (TextStyleType.TITLE etc.)
256 0 : DECLARE_API_ENUM(Tid, tidEnum, mu::engraving::apiv1::enums::Tid)
257 : /// Contains mu::engraving::LyricsSyllabic enumeration values
258 0 : DECLARE_API_ENUM(Lyrics, lyricsSyllabicEnum, mu::engraving::apiv1::enums::Syllabic)
259 : /// Contains mu::engraving::Spanner::Anchor enumeration values
260 0 : DECLARE_API_ENUM(Spanner, spannerAnchorEnum, mu::engraving::apiv1::enums::Anchor) // probably unavailable in 2.X
261 : /// Contains mu::engraving::MMRestRangeBracketType enumeration values
262 : /// \since MuseScore 4.6
263 0 : DECLARE_API_ENUM(MMRestRangeBracketType, mMRestRangeBracketTypeEnum, mu::engraving::apiv1::enums::MMRestRangeBracketType)
264 : /// Contains mu::engraving::TupletNumberType enumeration values
265 : /// \since MuseScore 4.6
266 0 : DECLARE_API_ENUM(TupletNumberType, tupletNumberTypeEnum, mu::engraving::apiv1::enums::TupletNumberType)
267 : /// Contains mu::engraving::TupletBracketType enumeration values
268 : /// \since MuseScore 4.6
269 0 : DECLARE_API_ENUM(TupletBracketType, tupletBracketTypeEnum, mu::engraving::apiv1::enums::TupletBracketType)
270 : /// Contains mu::engraving::TripletFeelType enumeration values
271 : /// \since MuseScore 4.6
272 0 : DECLARE_API_ENUM(TripletFeelType, tripletFeelTypeEnum, mu::engraving::apiv1::enums::TripletFeelType)
273 : /// Contains mu::engraving::GuitarBendType enumeration values
274 : /// \since MuseScore 4.6
275 0 : DECLARE_API_ENUM(GuitarBendType, guitarBendTypeEnum, mu::engraving::apiv1::enums::GuitarBendType)
276 : /// Contains mu::engraving::GuitarBendShowHoldLine enumeration values
277 : /// \since MuseScore 4.6
278 0 : DECLARE_API_ENUM(GuitarBendShowHoldLine, guitarBendShowHoldLineEnum, mu::engraving::apiv1::enums::GuitarBendShowHoldLine)
279 : /// Contains mu::engraving::ClefType enumeration values
280 : /// \since MuseScore 4.6
281 0 : DECLARE_API_ENUM(ClefType, clefTypeEnum, mu::engraving::apiv1::enums::ClefType)
282 : /// Contains mu::engraving::ClefToBarlinePosition enumeration values
283 : /// \since MuseScore 4.6
284 0 : DECLARE_API_ENUM(ClefToBarlinePosition, clefToBarlinePositionEnum, mu::engraving::apiv1::enums::ClefToBarlinePosition)
285 : /// Contains mu::engraving::DynamicType enumeration values
286 : /// \since MuseScore 4.6
287 0 : DECLARE_API_ENUM(DynamicType, dynamicTypeEnum, mu::engraving::apiv1::enums::DynamicType)
288 : /// Contains mu::engraving::DynamicSpeed enumeration values
289 : /// \since MuseScore 4.6
290 0 : DECLARE_API_ENUM(DynamicSpeed, dynamicSpeedEnum, mu::engraving::apiv1::enums::DynamicSpeed)
291 : /// Contains mu::engraving::LineType enumeration values
292 : /// \since MuseScore 4.6
293 0 : DECLARE_API_ENUM(LineType, lineTypeEnum, mu::engraving::apiv1::enums::LineType)
294 : /// Contains mu::engraving::HookType enumeration values
295 : /// \since MuseScore 4.6
296 0 : DECLARE_API_ENUM(HookType, hookTypeEnum, mu::engraving::apiv1::enums::HookType)
297 : /// Contains mu::engraving::KeyMode enumeration values
298 : /// \since MuseScore 4.6
299 0 : DECLARE_API_ENUM(KeyMode, keyModeEnum, mu::engraving::apiv1::enums::KeyMode)
300 : /// Contains mu::engraving::ArpeggioType enumeration values
301 : /// \since MuseScore 4.6
302 0 : DECLARE_API_ENUM(ArpeggioType, arpeggioTypeEnum, mu::engraving::apiv1::enums::ArpeggioType)
303 : /// Contains mu::engraving::IntervalStep enumeration values
304 : /// \since MuseScore 4.6
305 0 : DECLARE_API_ENUM(IntervalStep, intervalStepEnum, mu::engraving::apiv1::enums::IntervalStep)
306 : /// Contains mu::engraving::IntervalType enumeration values
307 : /// \since MuseScore 4.6
308 0 : DECLARE_API_ENUM(IntervalType, intervalTypeEnum, mu::engraving::apiv1::enums::IntervalType)
309 : /// Contains mu::engraving::InstrumentLabelVisibility enumeration values
310 : /// \since MuseScore 4.6
311 0 : DECLARE_API_ENUM(InstrumentLabelVisibility, instrumentLabelVisibilityEnum, mu::engraving::apiv1::enums::InstrumentLabelVisibility)
312 : /// Contains mu::engraving::OrnamentShowAccidental enumeration values
313 : /// \since MuseScore 4.6
314 0 : DECLARE_API_ENUM(OrnamentShowAccidental, ornamentShowAccidentalEnum, mu::engraving::apiv1::enums::OrnamentShowAccidental)
315 : /// Contains mu::engraving::PartialSpannerDirection enumeration values
316 : /// \since MuseScore 4.6
317 0 : DECLARE_API_ENUM(PartialSpannerDirection, partialSpannerDirectionEnum, mu::engraving::apiv1::enums::PartialSpannerDirection)
318 : /// Contains mu::engraving::ChordStylePreset enumeration values
319 : /// \since MuseScore 4.6
320 0 : DECLARE_API_ENUM(ChordStylePreset, chordStylePresetEnum, mu::engraving::apiv1::enums::ChordStylePreset)
321 : /// Contains mu::engraving::PlayingTechniqueType enumeration values
322 : /// \since MuseScore 4.6
323 0 : DECLARE_API_ENUM(PlayingTechniqueType, playingTechniqueTypeEnum, mu::engraving::apiv1::enums::PlayingTechniqueType)
324 : /// Contains mu::engraving::GradualTempoChangeType enumeration values
325 : /// \since MuseScore 4.6
326 0 : DECLARE_API_ENUM(GradualTempoChangeType, gradualTempoChangeTypeEnum, mu::engraving::apiv1::enums::GradualTempoChangeType)
327 : /// Contains mu::engraving::ChangeMethod enumeration values
328 : /// \since MuseScore 4.6
329 0 : DECLARE_API_ENUM(ChangeMethod, changeMethodEnum, mu::engraving::apiv1::enums::ChangeMethod)
330 : /// Contains mu::engraving::ChangeDirection enumeration values
331 : /// \since MuseScore 4.6
332 0 : DECLARE_API_ENUM(ChangeDirection, changeDirectionEnum, mu::engraving::apiv1::enums::ChangeDirection)
333 : /// Contains mu::engraving::AccidentalRole enumeration values
334 : /// \since MuseScore 4.6
335 0 : DECLARE_API_ENUM(AccidentalRole, accidentalRoleEnum, mu::engraving::apiv1::enums::AccidentalRole)
336 : /// Contains mu::engraving::AccidentalVal enumeration values
337 : /// \since MuseScore 4.6
338 0 : DECLARE_API_ENUM(AccidentalVal, accidentalValEnum, mu::engraving::apiv1::enums::AccidentalVal)
339 : /// Contains mu::engraving::FermataType enumeration values
340 : /// \since MuseScore 4.6
341 0 : DECLARE_API_ENUM(FermataType, fermataTypeEnum, mu::engraving::apiv1::enums::FermataType)
342 : /// Contains mu::engraving::ChordLineType enumeration values
343 : /// \since MuseScore 4.6
344 0 : DECLARE_API_ENUM(ChordLineType, chordLineTypeEnum, mu::engraving::apiv1::enums::ChordLineType)
345 : /// Contains mu::engraving::SlurStyleType enumeration values
346 : /// \since MuseScore 4.6
347 0 : DECLARE_API_ENUM(SlurStyleType, slurStyleTypeEnum, mu::engraving::apiv1::enums::SlurStyleType)
348 : /// Contains mu::engraving::TremoloType enumeration values
349 : /// \since MuseScore 4.6
350 0 : DECLARE_API_ENUM(TremoloType, tremoloTypeEnum, mu::engraving::apiv1::enums::TremoloType)
351 : /// Contains mu::engraving::TremoloChordType enumeration values
352 : /// \since MuseScore 4.6
353 0 : DECLARE_API_ENUM(TremoloChordType, tremoloChordTypeEnum, mu::engraving::apiv1::enums::TremoloChordType)
354 : /// Contains mu::engraving::BracketType enumeration values
355 : /// \since MuseScore 4.6
356 0 : DECLARE_API_ENUM(BracketType, bracketTypeEnum, mu::engraving::apiv1::enums::BracketType)
357 : /// Contains mu::engraving::JumpType enumeration values
358 : /// \since MuseScore 4.6
359 0 : DECLARE_API_ENUM(JumpType, jumpTypeEnum, mu::engraving::apiv1::enums::JumpType)
360 : /// Contains mu::engraving::MarkerType enumeration values
361 : /// \since MuseScore 4.6
362 0 : DECLARE_API_ENUM(MarkerType, markerTypeEnum, mu::engraving::apiv1::enums::MarkerType)
363 : /// Contains mu::engraving::MeasureNumberMode enumeration values
364 : /// \since MuseScore 4.6
365 0 : DECLARE_API_ENUM(MeasureNumberMode, measureNumberModeEnum, mu::engraving::apiv1::enums::MeasureNumberMode)
366 : /// Contains mu::engraving::StaffGroup enumeration values
367 : /// \since MuseScore 4.6
368 0 : DECLARE_API_ENUM(StaffGroup, staffGroupEnum, mu::engraving::apiv1::enums::StaffGroup)
369 : /// Contains mu::engraving::OttavaType enumeration values
370 : /// \since MuseScore 4.6
371 0 : DECLARE_API_ENUM(OttavaType, ottavaTypeEnum, mu::engraving::apiv1::enums::OttavaType)
372 : /// Contains mu::engraving::HairpinType enumeration values
373 : /// \since MuseScore 4.6
374 0 : DECLARE_API_ENUM(HairpinType, hairpinTypeEnum, mu::engraving::apiv1::enums::HairpinType)
375 : /// Contains mu::engraving::TrillType enumeration values
376 : /// \since MuseScore 4.6
377 0 : DECLARE_API_ENUM(TrillType, trillTypeEnum, mu::engraving::apiv1::enums::TrillType)
378 : /// Contains mu::engraving::VibratoType enumeration values
379 : /// \since MuseScore 4.6
380 0 : DECLARE_API_ENUM(VibratoType, vibratoTypeEnum, mu::engraving::apiv1::enums::VibratoType)
381 : /// Contains mu::engraving::ArticulationTextType enumeration values
382 : /// \since MuseScore 4.6
383 0 : DECLARE_API_ENUM(ArticulationTextType, articulationTextTypeEnum, mu::engraving::apiv1::enums::ArticulationTextType)
384 : /// Contains mu::engraving::LyricsDashSystemStart enumeration values
385 : /// \since MuseScore 4.6
386 0 : DECLARE_API_ENUM(LyricsDashSystemStart, lyricsDashSystemStartEnum, mu::engraving::apiv1::enums::LyricsDashSystemStart)
387 : /// Contains mu::engraving::NoteLineEndPlacement enumeration values
388 : /// \since MuseScore 4.6
389 0 : DECLARE_API_ENUM(NoteLineEndPlacement, noteLineEndPlacementEnum, mu::engraving::apiv1::enums::NoteLineEndPlacement)
390 : /// Contains mu::engraving::SpannerSegmentType enumeration values
391 : /// \since MuseScore 4.6
392 0 : DECLARE_API_ENUM(SpannerSegmentType, spannerSegmentTypeEnum, mu::engraving::apiv1::enums::SpannerSegmentType)
393 : /// Contains mu::engraving::TiePlacement enumeration values
394 : /// \since MuseScore 4.6
395 0 : DECLARE_API_ENUM(TiePlacement, tiePlacementEnum, mu::engraving::apiv1::enums::TiePlacement)
396 : /// Contains mu::engraving::TieDotsPlacement enumeration values
397 : /// \since MuseScore 4.6
398 0 : DECLARE_API_ENUM(TieDotsPlacement, tieDotsPlacementEnum, mu::engraving::apiv1::enums::TieDotsPlacement)
399 : /// Contains mu::engraving::TimeSigType enumeration values
400 : /// \since MuseScore 4.6
401 0 : DECLARE_API_ENUM(TimeSigType, timeSigTypeEnum, mu::engraving::apiv1::enums::TimeSigType)
402 : /// Contains mu::engraving::TimeSigPlacement enumeration values
403 : /// \since MuseScore 4.6
404 0 : DECLARE_API_ENUM(TimeSigPlacement, timeSigPlacementEnum, mu::engraving::apiv1::enums::TimeSigPlacement)
405 : /// Contains mu::engraving::TimeSigStyle enumeration values
406 : /// \since MuseScore 4.6
407 0 : DECLARE_API_ENUM(TimeSigStyle, timeSigStyleEnum, mu::engraving::apiv1::enums::TimeSigStyle)
408 : /// Contains mu::engraving::TimeSigVSMargin enumeration values
409 : /// \since MuseScore 4.6
410 0 : DECLARE_API_ENUM(TimeSigVSMargin, timeSigVSMarginEnum, mu::engraving::apiv1::enums::TimeSigVSMargin)
411 : /// Contains mu::engraving::NoteSpellingType enumeration values
412 : /// \since MuseScore 4.6
413 0 : DECLARE_API_ENUM(NoteSpellingType, noteSpellingTypeEnum, mu::engraving::apiv1::enums::NoteSpellingType)
414 : /// Contains mu::engraving::Key enumeration values
415 : /// \since MuseScore 4.6
416 0 : DECLARE_API_ENUM(Key, keyEnum, mu::engraving::apiv1::enums::Key)
417 : /// Contains mu::engraving::UpdateMode enumeration values
418 : /// \since MuseScore 4.6
419 0 : DECLARE_API_ENUM(UpdateMode, updateModeEnum, mu::engraving::apiv1::enums::UpdateMode)
420 : /// Contains mu::engraving::LayoutFlag enumeration values
421 : /// \since MuseScore 4.6
422 0 : DECLARE_API_ENUM(LayoutFlag, layoutFlagEnum, mu::engraving::apiv1::enums::LayoutFlag)
423 : /// Contains mu::engraving::LayoutMode enumeration values
424 : /// \since MuseScore 4.6
425 0 : DECLARE_API_ENUM(LayoutMode, layoutModeEnum, mu::engraving::apiv1::enums::LayoutMode)
426 : /// Contains mu::engraving::TappingHand enumeration values
427 : /// \since MuseScore 4.6
428 0 : DECLARE_API_ENUM(TappingHand, tappingHandEnum, mu::engraving::apiv1::enums::TappingHand)
429 : /// Contains mu::engraving::LHTappingSymbol enumeration values
430 : /// \since MuseScore 4.6
431 0 : DECLARE_API_ENUM(LHTappingSymbol, lHTappingSymbolEnum, mu::engraving::apiv1::enums::LHTappingSymbol)
432 : /// Contains mu::engraving::RHTappingSymbol enumeration values
433 : /// \since MuseScore 4.6
434 0 : DECLARE_API_ENUM(RHTappingSymbol, rHTappingSymbolEnum, mu::engraving::apiv1::enums::RHTappingSymbol)
435 : /// Contains mu::engraving::LHTappingShowItems enumeration values
436 : /// \since MuseScore 4.6
437 0 : DECLARE_API_ENUM(LHTappingShowItems, lHTappingShowItemsEnum, mu::engraving::apiv1::enums::LHTappingShowItems)
438 : /// Contains mu::engraving::ParenthesesMode enumeration values
439 : /// \since MuseScore 4.6
440 0 : DECLARE_API_ENUM(ParenthesesMode, parenthesesModeEnum, mu::engraving::apiv1::enums::ParenthesesMode)
441 : /// Contains mu::engraving::RepeatPlayCountPreset enumeration values
442 : /// \since MuseScore 4.6
443 0 : DECLARE_API_ENUM(RepeatPlayCountPreset, repeatPlayCountPresetEnum, mu::engraving::apiv1::enums::RepeatPlayCountPreset)
444 : /// Contains mu::engraving::MeasureNumberPlacement enumeration values
445 : /// \since MuseScore 4.6
446 0 : DECLARE_API_ENUM(MeasureNumberPlacement, measureNumberPlacementEnum, mu::engraving::apiv1::enums::MeasureNumberPlacement)
447 : /// Contains mu::engraving::SymId enumeration values
448 : /// \since MuseScore 3.5
449 0 : DECLARE_API_ENUM(SymId, symIdEnum, mu::engraving::apiv1::enums::SymId)
450 :
451 0 : DECLARE_API_ENUM2(Cursor, cursorEnum, Cursor::RewindMode, Cursor::InputStateMode)
452 :
453 : signals:
454 : /// Indicates that the plugin was launched.
455 : /// Implement \p onRun() function in your plugin to handle this signal.
456 : void run();
457 :
458 : void closeRequested();
459 :
460 : /// Notifies plugin about changes in score state.
461 : /// Called after each user (or plugin) action which may have changed a
462 : /// score. Implement \p onScoreStateChanged() function in your plugin to
463 : /// handle this signal.
464 : ///
465 : /// \p state variable is available within the handler with following
466 : /// fields:
467 : ///
468 : /// - \p selectionChanged
469 : /// - \p excerptsChanged
470 : /// - \p instrumentsChanged
471 : /// - \p startLayoutTick
472 : /// - \p endLayoutTick
473 : /// - \p undoRedo - whether this onScoreStateChanged invocation results
474 : /// from user undo/redo action. It is usually not recommended to modify
475 : /// score from plugins in this case. Available since MuseScore 3.5.
476 : ///
477 : /// If a plugin modifies score in this handler, then it should:
478 : /// 1. enclose all modifications within Score::startCmd() / Score::endCmd()
479 : /// 2. take care of preventing an infinite recursion, as plugin-originated
480 : /// changes will trigger this signal again after calling Score::endCmd()
481 : ///
482 : /// Example:
483 : /// \code
484 : /// import QtQuick
485 : /// import MuseScore 3.0
486 : ///
487 : /// MuseScore {
488 : /// pluginType: "dialog"
489 : /// implicitHeight: 75 // necessary for dock widget to appear with nonzero height
490 : /// implicitWidth: 150
491 : ///
492 : /// Text {
493 : /// // A label which will display pitch of the currently selected note
494 : /// id: pitchLabel
495 : /// anchors.fill: parent
496 : /// }
497 : ///
498 : /// onScoreStateChanged: {
499 : /// if (state.selectionChanged) {
500 : /// var el = curScore ? curScore.selection.elements[0] : null;
501 : /// if (el && el.type == EngravingItem.NOTE)
502 : /// pitchLabel.text = el.pitch;
503 : /// else
504 : /// pitchLabel.text = "no note selected";
505 : /// }
506 : /// }
507 : /// }
508 : /// \endcode
509 : /// \warning This functionality is considered experimental.
510 : /// This API may change in future versions of MuseScore.
511 : /// \since MuseScore 3.3
512 : void scoreStateChanged(const QMap<QString, QVariant>& state);
513 :
514 : public:
515 : /// \cond MS_INTERNAL
516 : PluginAPI(QQuickItem* parent = 0);
517 : PluginAPI(const muse::modularity::ContextPtr& ctx);
518 :
519 : static void registerQmlTypes();
520 :
521 : void setup(QQmlEngine* e) override;
522 0 : void runPlugin() override { emit run(); }
523 0 : muse::async::Notification closeRequest() const override { return m_closeRequested; }
524 :
525 : void endCmd(const QMap<QString, QVariant>& stateInfo) { emit scoreStateChanged(stateInfo); }
526 :
527 : apiv1::Score* curScore() const;
528 : QQmlListProperty<apiv1::Score> scores();
529 : // /// \endcond
530 :
531 : Q_INVOKABLE apiv1::Score* newScore(const QString& name, const QString& part, int measures);
532 : Q_INVOKABLE apiv1::EngravingItem* newElement(int);
533 : Q_INVOKABLE void removeElement(apiv1::EngravingItem* wrapped);
534 : Q_INVOKABLE void cmd(const QString&);
535 : /// \cond PLUGIN_API \private \endcond
536 : Q_INVOKABLE apiv1::MsProcess* newQProcess();
537 : Q_INVOKABLE bool writeScore(apiv1::Score*, const QString& name, const QString& ext);
538 : Q_INVOKABLE apiv1::Score* readScore(const QString& name, bool noninteractive = false);
539 : Q_INVOKABLE void closeScore(apiv1::Score* score);
540 : Q_INVOKABLE void closeScore();
541 :
542 : Q_INVOKABLE void log(const QString&);
543 : Q_INVOKABLE void logn(const QString&);
544 : Q_INVOKABLE void log2(const QString&, const QString&);
545 : Q_INVOKABLE void openLog(const QString&);
546 : Q_INVOKABLE void closeLog();
547 :
548 : Q_INVOKABLE apiv1::Fraction* fraction(int numerator, int denominator) const;
549 : Q_INVOKABLE apiv1::Fraction* fractionFromTicks(int ticks) const;
550 :
551 : Q_INVOKABLE apiv1::OrnamentIntervalWrapper* ornamentInterval(int step, int type) const;
552 :
553 : Q_INVOKABLE apiv1::IntervalWrapper* interval(int chromatic, int diatonic) const;
554 : Q_INVOKABLE apiv1::IntervalWrapper* intervalFromOrnamentInterval(apiv1::OrnamentIntervalWrapper* o) const;
555 :
556 : Q_INVOKABLE void quit();
557 :
558 : QString pluginType() const;
559 : void setPluginType(const QString& newPluginType);
560 :
561 : QString menuPath() const;
562 : void setMenuPath(const QString& newMenuPath);
563 :
564 : QString title() const;
565 : void setTitle(const QString& newTitle);
566 :
567 : QString version() const;
568 : void setVersion(const QString& newVersion);
569 :
570 : QString description() const;
571 : void setDescription(const QString& newDescription);
572 :
573 : QString dockArea() const;
574 : void setDockArea(const QString& newDockArea);
575 :
576 : bool requiresScore() const;
577 : void setRequiresScore(bool newRequiresScore);
578 :
579 : QString thumbnailName() const;
580 : void setThumbnailName(const QString& newThumbnailName);
581 :
582 : QString categoryCode() const;
583 : void setCategoryCode(const QString& newCategoryCode);
584 :
585 : int division() const;
586 : int mscoreVersion() const;
587 : int mscoreMajorVersion() const;
588 : int mscoreMinorVersion() const;
589 : int mscoreUpdateVersion() const;
590 : qreal mscoreDPI() const;
591 : OrnamentIntervalWrapper* defaultOrnamentInterval() const;
592 :
593 : private:
594 : mu::engraving::Score* currentScore() const;
595 :
596 : muse::api::IApiEngine* m_engine = nullptr;
597 : QString m_pluginType;
598 : QString m_title;
599 : QString m_version;
600 : QString m_description;
601 : bool m_requiresScore = true;
602 : QString m_thumbnailName;
603 : QString m_categoryCode;
604 : muse::async::Notification m_closeRequested;
605 : };
606 :
607 : #undef DECLARE_API_ENUM2
608 : #undef DECLARE_API_ENUM
609 : }
|