Skip to content

Commit eb65904

Browse files
committed
Add Volta class to plugin API
1 parent 9da9c63 commit eb65904

File tree

6 files changed

+129
-0
lines changed

6 files changed

+129
-0
lines changed

src/engraving/api/v1/apitypes.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "engraving/dom/timesig.h"
3939
#include "engraving/dom/tremolobar.h"
4040
#include "engraving/dom/tripletfeel.h"
41+
#include "engraving/dom/volta.h"
4142
#include "engraving/types/types.h"
4243
#include "engraving/rendering/layoutoptions.h"
4344

@@ -1392,6 +1393,12 @@ enum class SpannerSegmentType {
13921393
};
13931394
Q_ENUM_NS(SpannerSegmentType);
13941395

1396+
enum class VoltaType {
1397+
OPEN = int(mu::engraving::Volta::Type::OPEN),
1398+
CLOSED = int(mu::engraving::Volta::Type::CLOSED),
1399+
};
1400+
Q_ENUM_NS(VoltaType);
1401+
13951402
enum class TiePlacement {
13961403
AUTO = int(mu::engraving::TiePlacement::AUTO),
13971404
INSIDE = int(mu::engraving::TiePlacement::INSIDE),

src/engraving/api/v1/elements.cpp

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
#include "elements.h"
2424

25+
#include <QList>
26+
2527
#include "engraving/dom/chord.h"
2628
#include "engraving/dom/guitarbend.h"
2729
#include "engraving/dom/measure.h"
@@ -649,6 +651,76 @@ bool Staff::isVoiceVisible(int voice)
649651
return staff()->isVoiceVisible(voice);
650652
}
651653

654+
QVariantList Volta::endings() const
655+
{
656+
QVariantList result;
657+
const auto& endings = volta()->endings();
658+
result.reserve(static_cast<int>(endings.size()));
659+
for (int ending : endings) {
660+
result.append(ending);
661+
}
662+
return result;
663+
}
664+
665+
void Volta::setEndings(const QVariantList& endingsList)
666+
{
667+
QList<int> endings;
668+
endings.reserve(endingsList.size());
669+
for (const QVariant& value : endingsList) {
670+
bool ok = false;
671+
const int ending = value.toInt(&ok);
672+
if (ok) {
673+
endings.append(ending);
674+
}
675+
}
676+
677+
set(mu::engraving::Pid::VOLTA_ENDING, QVariant::fromValue(endings));
678+
}
679+
680+
QString Volta::text() const
681+
{
682+
return volta()->text().toQString();
683+
}
684+
685+
void Volta::setText(const QString& text)
686+
{
687+
set(mu::engraving::Pid::BEGIN_TEXT, text);
688+
}
689+
690+
int Volta::voltaType() const
691+
{
692+
return static_cast<int>(volta()->voltaType());
693+
}
694+
695+
void Volta::setVoltaType(int type)
696+
{
697+
using VoltaType = mu::engraving::Volta::Type;
698+
const bool valid = type == int(VoltaType::OPEN) || type == int(VoltaType::CLOSED);
699+
IF_ASSERT_FAILED(valid) {
700+
return;
701+
}
702+
703+
const mu::engraving::HookType hook = (type == int(VoltaType::CLOSED))
704+
? mu::engraving::HookType::HOOK_90
705+
: mu::engraving::HookType::NONE;
706+
set(mu::engraving::Pid::END_HOOK_TYPE, static_cast<int>(hook));
707+
}
708+
709+
bool Volta::hasEnding(int repeat) const
710+
{
711+
return volta()->hasEnding(repeat);
712+
}
713+
714+
int Volta::firstEnding() const
715+
{
716+
return volta()->firstEnding();
717+
}
718+
719+
int Volta::lastEnding() const
720+
{
721+
return volta()->lastEnding();
722+
}
723+
652724
//---------------------------------------------------------
653725
// wrap
654726
/// \cond PLUGIN_API \private \endcond
@@ -679,6 +751,7 @@ EngravingItem* mu::engraving::apiv1::wrap(mu::engraving::EngravingItem* e, Owner
679751
API_WRAP(System)
680752
API_WRAP(Page)
681753
API_WRAP(SpannerSegment)
754+
API_WRAP(Volta)
682755
API_WRAP(Spanner)
683756
return wrap<EngravingItem>(e, own);
684757

src/engraving/api/v1/elements.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
#include "engraving/dom/tremolotwochord.h"
5151
#include "engraving/dom/tuplet.h"
5252
#include "engraving/dom/tie.h"
53+
#include "engraving/dom/volta.h"
5354
#include "engraving/dom/accidental.h"
5455

5556
#include "engraving/editing/undo.h"
@@ -67,6 +68,7 @@ class Spanner;
6768
class Staff;
6869
class System;
6970
class Tie;
71+
class Volta;
7072
class Tuplet;
7173
class Measure;
7274
class Beam;
@@ -2356,6 +2358,46 @@ class Tie : public Spanner
23562358
/// \endcond
23572359
};
23582360

2361+
//---------------------------------------------------------
2362+
// Volta
2363+
/// Provides access to internal mu::engraving::Volta objects.
2364+
/// \since MuseScore 4.7
2365+
//---------------------------------------------------------
2366+
2367+
class Volta : public Spanner
2368+
{
2369+
Q_OBJECT
2370+
/// The play-through numbers assigned to this volta (e.g. [1, 2]).
2371+
Q_PROPERTY(QVariantList endings READ endings WRITE setEndings)
2372+
/// The displayed text for this volta.
2373+
Q_PROPERTY(QString text READ text WRITE setText)
2374+
/// The volta drawing style, one of PluginAPI::VoltaType values.
2375+
Q_PROPERTY(int voltaType READ voltaType WRITE setVoltaType)
2376+
2377+
public:
2378+
/// \cond MS_INTERNAL
2379+
Volta(mu::engraving::Volta* volta, Ownership own = Ownership::PLUGIN)
2380+
: Spanner(volta, own) {}
2381+
2382+
mu::engraving::Volta* volta() { return toVolta(e); }
2383+
const mu::engraving::Volta* volta() const { return toVolta(e); }
2384+
2385+
QVariantList endings() const;
2386+
void setEndings(const QVariantList& endings);
2387+
QString text() const;
2388+
void setText(const QString& text);
2389+
int voltaType() const;
2390+
void setVoltaType(int type);
2391+
2392+
/// Returns whether this volta triggers on the provided repeat count.
2393+
Q_INVOKABLE bool hasEnding(int repeat) const;
2394+
/// Returns the smallest ending number assigned to this volta.
2395+
Q_INVOKABLE int firstEnding() const;
2396+
/// Returns the largest ending number assigned to this volta.
2397+
Q_INVOKABLE int lastEnding() const;
2398+
/// \endcond
2399+
};
2400+
23592401
#undef API_PROPERTY
23602402
#undef API_PROPERTY_T
23612403
#undef API_PROPERTY_READ_ONLY

src/engraving/api/v1/engravingapiv1.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ class EngravingApiV1 : public muse::api::ApiObject, public muse::extensions::api
127127
Q_PROPERTY(apiv1::Enum * LyricsDashSystemStart READ lyricsDashSystemStartEnum CONSTANT)
128128
Q_PROPERTY(apiv1::Enum * NoteLineEndPlacement READ noteLineEndPlacementEnum CONSTANT)
129129
Q_PROPERTY(apiv1::Enum * SpannerSegmentType READ spannerSegmentTypeEnum CONSTANT)
130+
Q_PROPERTY(apiv1::Enum * VoltaType READ voltaTypeEnum CONSTANT)
130131
Q_PROPERTY(apiv1::Enum * TiePlacement READ tiePlacementEnum CONSTANT)
131132
Q_PROPERTY(apiv1::Enum * TieDotsPlacement READ tieDotsPlacementEnum CONSTANT)
132133
Q_PROPERTY(apiv1::Enum * TimeSigType READ timeSigTypeEnum CONSTANT)
@@ -250,6 +251,7 @@ class EngravingApiV1 : public muse::api::ApiObject, public muse::extensions::api
250251
apiv1::Enum* lyricsDashSystemStartEnum() const { return api()->get_lyricsDashSystemStartEnum(); }
251252
apiv1::Enum* noteLineEndPlacementEnum() const { return api()->get_noteLineEndPlacementEnum(); }
252253
apiv1::Enum* spannerSegmentTypeEnum() const { return api()->get_spannerSegmentTypeEnum(); }
254+
apiv1::Enum* voltaTypeEnum() const { return api()->get_voltaTypeEnum(); }
253255
apiv1::Enum* tiePlacementEnum() const { return api()->get_tiePlacementEnum(); }
254256
apiv1::Enum* tieDotsPlacementEnum() const { return api()->get_tieDotsPlacementEnum(); }
255257
apiv1::Enum* timeSigTypeEnum() const { return api()->get_timeSigTypeEnum(); }

src/engraving/api/v1/qmlpluginapi.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ Enum* PluginAPI::repeatPlayCountPresetEnum = nullptr;
147147
Enum* PluginAPI::measureNumberPlacementEnum = nullptr;
148148
Enum* PluginAPI::symIdEnum = nullptr;
149149
Enum* PluginAPI::cursorEnum = nullptr;
150+
Enum* PluginAPI::voltaTypeEnum = nullptr;
150151

151152
//---------------------------------------------------------
152153
// PluginAPI::registerQmlTypes
@@ -185,6 +186,7 @@ void PluginAPI::registerQmlTypes()
185186
qmlRegisterAnonymousType<Excerpt>("MuseScore", 3);
186187
qmlRegisterAnonymousType<Selection>("MuseScore", 3);
187188
qmlRegisterAnonymousType<Tie>("MuseScore", 3);
189+
qmlRegisterAnonymousType<Volta>("MuseScore", 3);
188190
qmlRegisterAnonymousType<Drumset>("MuseScore", 3);
189191
qmlRegisterAnonymousType<MeasureBase>("MuseScore", 3);
190192
qmlRegisterAnonymousType<System>("MuseScore", 3);

src/engraving/api/v1/qmlpluginapi.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,9 @@ class PluginAPI : public QQuickItem, public muse::extensions::apiv1::IPluginApiV
385385
/// Contains mu::engraving::SpannerSegmentType enumeration values
386386
/// \since MuseScore 4.6
387387
DECLARE_API_ENUM(SpannerSegmentType, spannerSegmentTypeEnum, mu::engraving::apiv1::enums::SpannerSegmentType)
388+
/// Contains mu::engraving::Volta::Type enumeration values
389+
/// \since MuseScore 4.7
390+
DECLARE_API_ENUM(VoltaType, voltaTypeEnum, mu::engraving::apiv1::enums::VoltaType)
388391
/// Contains mu::engraving::TiePlacement enumeration values
389392
/// \since MuseScore 4.6
390393
DECLARE_API_ENUM(TiePlacement, tiePlacementEnum, mu::engraving::apiv1::enums::TiePlacement)

0 commit comments

Comments
 (0)