/
accidental.h
168 lines (134 loc) · 5.22 KB
/
accidental.h
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2004-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 __ACCIDENTAL_H__
#define __ACCIDENTAL_H__
/**
\file
Definition of class Accidental
*/
#include "element.h"
#include "mscore.h"
class QPainter;
namespace Ms {
class Note;
//---------------------------------------------------------
// SymElement
//---------------------------------------------------------
struct SymElement {
int sym;
qreal x;
SymElement(int _sym, qreal _x) : sym(_sym), x(_x) {}
};
//---------------------------------------------------------
// @@ Accidental
// @P hasBracket bool
// @P small bool
// @P acctype enum ACC_NONE, ACC_SHARP, ACC_FLAT, ACC_SHARP2, ACC_FLAT2, ACC_NATURAL, ... (read only)
// @P role enum ACC_AUTO, ACC_USER (read only)
//---------------------------------------------------------
class Accidental : public Element {
public:
enum AccidentalRole {
ACC_AUTO, // layout created accidental
ACC_USER // user created accidental
};
enum AccidentalType {
ACC_NONE,
ACC_SHARP,
ACC_FLAT,
ACC_SHARP2,
ACC_FLAT2,
ACC_NATURAL,
ACC_FLAT_SLASH,
ACC_FLAT_SLASH2,
ACC_MIRRORED_FLAT2,
ACC_MIRRORED_FLAT,
ACC_MIRRIRED_FLAT_SLASH,
ACC_FLAT_FLAT_SLASH,
ACC_SHARP_SLASH,
ACC_SHARP_SLASH2,
ACC_SHARP_SLASH3,
ACC_SHARP_SLASH4,
ACC_SHARP_ARROW_UP,
ACC_SHARP_ARROW_DOWN,
ACC_SHARP_ARROW_BOTH,
ACC_FLAT_ARROW_UP,
ACC_FLAT_ARROW_DOWN,
ACC_FLAT_ARROW_BOTH,
ACC_NATURAL_ARROW_UP,
ACC_NATURAL_ARROW_DOWN,
ACC_NATURAL_ARROW_BOTH,
ACC_SORI,
ACC_KORON,
ACC_END
};
private:
Q_OBJECT
Q_PROPERTY(bool hasBracket READ hasBracket WRITE undoSetHasBracket)
Q_PROPERTY(bool small READ small WRITE undoSetSmall)
Q_PROPERTY(AccidentalType accType READ accidentalType)
Q_PROPERTY(AccidentalRole role READ role)
Q_ENUMS(AccidentalType)
Q_ENUMS(AccidentalRole)
QList<SymElement> el;
AccidentalType _accidentalType;
bool _hasBracket;
bool _small;
AccidentalRole _role;
public:
Accidental(Score* s = 0);
virtual Accidental* clone() const { return new Accidental(*this); }
virtual ElementType type() const { return ACCIDENTAL; }
const char* subtypeUserName() const;
void setSubtype(const QString& s);
void setAccidentalType(AccidentalType t) { _accidentalType = t; }
AccidentalType accidentalType() const { return _accidentalType; }
virtual bool acceptDrop(MuseScoreView*, const QPointF&, Element*) const;
virtual Element* drop(const DropData&);
virtual void layout();
virtual void draw(QPainter*) const;
virtual bool isEditable() const { return true; }
virtual void startEdit(MuseScoreView*, const QPointF&) { setGenerated(false); }
int symbol() const;
Note* note() const { return (Note*)parent(); }
bool hasBracket() const { return _hasBracket; }
void setHasBracket(bool val) { _hasBracket = val; }
void undoSetHasBracket(bool val);
AccidentalRole role() const { return _role; }
void setRole(AccidentalRole r) { _role = r; }
bool small() const { return _small; }
void setSmall(bool val) { _small = val; }
void undoSetSmall(bool val);
virtual void read(XmlReader&);
virtual void write(Xml& xml) const;
virtual QVariant getProperty(P_ID propertyId) const;
virtual bool setProperty(P_ID propertyId, const QVariant&);
static AccidentalVal subtype2value(AccidentalType); // return effective pitch offset
static const char* subtype2name(AccidentalType);
static AccidentalType value2subtype(AccidentalVal);
static AccidentalType name2subtype(const QString&);
};
//---------------------------------------------------------
// @@ AccidentalBracket
/// used as icon in palette
//---------------------------------------------------------
class AccidentalBracket : public Compound {
Q_OBJECT
public:
AccidentalBracket(Score*);
virtual AccidentalBracket* clone() const { return new AccidentalBracket(*this); }
virtual ElementType type() const { return ACCIDENTAL_BRACKET; }
};
} // namespace Ms
Q_DECLARE_METATYPE(Ms::Accidental::AccidentalRole)
Q_DECLARE_METATYPE(Ms::Accidental::AccidentalType)
#endif