File: dynamic.h

package info (click to toggle)
musescore3 3.2.3%2Bdfsg2-11
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 210,672 kB
  • sloc: cpp: 291,093; xml: 200,238; sh: 3,779; ansic: 1,447; python: 393; makefile: 240; perl: 82; pascal: 79
file content (151 lines) | stat: -rw-r--r-- 4,612 bytes parent folder | download | duplicates (4)
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