1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2002-2011 Werner Schweer
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2
// as published by the Free Software Foundation and appearing in
// the file LICENCE.GPL
//=============================================================================
#ifndef __DYNAMICS_H__
#define __DYNAMICS_H__
#include "text.h"
#include "mscore.h"
namespace Ms {
class Measure;
class Segment;
//-----------------------------------------------------------------------------
// @@ Dynamic
/// dynamics marker; determines midi velocity
//
// @P range enum (Dynamic.STAFF, .PART, .SYSTEM)
//-----------------------------------------------------------------------------
class Dynamic final : public TextBase {
Q_GADGET
public:
enum class Type : char {
OTHER,
PPPPPP,
PPPPP,
PPPP,
PPP,
PP,
P,
MP,
MF,
F,
FF,
FFF,
FFFF,
FFFFF,
FFFFFF,
FP,
SF,
SFZ,
SFF,
SFFZ,
SFP,
SFPP,
RFZ,
RF,
FZ,
M,
R,
S,
Z
};
enum class Range : char {
STAFF, PART, SYSTEM
};
enum class Speed : char {
SLOW, NORMAL, FAST
};
struct ChangeSpeedItem {
Speed speed;
const char* name;
};
Q_ENUM(Type);
private:
Type _dynamicType;
mutable QPointF dragOffset;
int _velocity; // associated midi velocity 0-127
Range _dynRange; // STAFF, PART, SYSTEM
int _changeInVelocity { 128 };
Speed _velChangeSpeed { Speed::NORMAL };
virtual QRectF drag(EditData&) override;
virtual Sid getPropertyStyle(Pid) const override;
public:
Dynamic(Score*);
Dynamic(const Dynamic&);
virtual Dynamic* clone() const override { return new Dynamic(*this); }
virtual ElementType type() const override { return ElementType::DYNAMIC; }
Segment* segment() const { return (Segment*)parent(); }
Measure* measure() const { return (Measure*)parent()->parent(); }
void setDynamicType(Type val) { _dynamicType = val; }
void setDynamicType(const QString&);
static QString dynamicTypeName(Dynamic::Type type);
QString dynamicTypeName() const { return dynamicTypeName(_dynamicType); }
Type dynamicType() const { return _dynamicType; }
virtual int subtype() const override { return (int) _dynamicType; }
virtual QString subtypeName() const override { return dynamicTypeName(); }
virtual void layout() override;
virtual void write(XmlWriter& xml) const override;
virtual void read(XmlReader&) override;
virtual bool isEditable() const override { return true; }
virtual void startEdit(EditData&) override;
virtual void endEdit(EditData&) override;
virtual void reset() override;
void setVelocity(int v) { _velocity = v; }
int velocity() const;
Range dynRange() const { return _dynRange; }
void setDynRange(Range t) { _dynRange = t; }
void undoSetDynRange(Range t);
int changeInVelocity() const;
void setChangeInVelocity(int val);
Fraction velocityChangeLength() const;
Speed velChangeSpeed() const { return _velChangeSpeed; }
void setVelChangeSpeed(Speed val) { _velChangeSpeed = val; }
static QString speedToName(Speed speed);
static Speed nameToSpeed(QString name);
virtual QVariant getProperty(Pid propertyId) const override;
virtual bool setProperty(Pid propertyId, const QVariant&) override;
virtual QVariant propertyDefault(Pid id) const override;
virtual Pid propertyId(const QStringRef& xmlName) const override;
virtual QString propertyUserValue(Pid) const override;
virtual QString accessibleInfo() const override;
virtual QString screenReaderInfo() const override;
void doAutoplace();
static const std::vector<ChangeSpeedItem> changeSpeedTable;
};
} // namespace Ms
Q_DECLARE_METATYPE(Ms::Dynamic::Range);
#endif
|