LCOV - code coverage report
Current view: top level - src/engraving/api/v1 - qmlpluginapi.h Coverage Total Hit
Test: filtered_coverage.info Lines: 0.0 % 104 0
Test Date: 2026-11-05 04:07:02

            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              : }
        

Generated by: LCOV version 2.0-1