1
//=========================================================
4
// $Id: items.h,v 1.2 2001/11/20 15:19:33 muse Exp $
5
// (C) Copyright 1999,2000 Werner Schweer (ws@seh.de)
6
//=========================================================
29
//---------------------------------------------------------
31
// represents an object in the score layout
32
//---------------------------------------------------------
36
enum State {Normal, Selected, Moving};
42
int _tick; // sort key
43
QPoint _moving; // Position of Object while moving
44
mutable QRect r; // bounding box relative to pt
45
QPoint pt; // Position of Object in StaveRow coordinates
49
ScoreItem(int t, const QPoint&);
50
ScoreItem(int t, StaveRow* sr);
51
StaveRow* staveRow() const { return sr; }
52
void setStaveRow(StaveRow* _sr) { sr = _sr; }
53
int tick() const { return _tick; }
54
void setTick(int n) { _tick = n; }
55
State state() const { return _state; }
56
void setState(State s) { _state = s; }
57
void setMoving(const QPoint& p) { _moving = p; }
58
QPoint moving() const { return _moving; }
59
QPoint pos() const { return pt; }
60
void setPos(const QPoint& d) { pt = d; }
61
void setPos(int x, int y) { pt.setX(x); pt.setY(y); }
62
void setXPos(int x) { pt.setX(x); }
63
void setYPos(int y) { pt.setY(y); }
64
void setBBox(int x, int y, int w, int h) { r.setRect(x,y,w,h); }
67
bool intersects(const QRect& rr) const { return rr.intersects(r); }
68
bool contains(const QPoint& p) { return r.contains(p); }
69
bool isSelected() const { return _state == Selected; }
71
virtual ~ScoreItem() {}
72
virtual void quantize(int, int, int) {}
73
virtual void setEnh(int) {}
74
virtual void draw(QPainter&) const {}
75
virtual void print(FILE*) const {}
76
virtual void remove() {}
77
virtual void place(int) {}
78
virtual MidiEvent* event() const { return 0; }
80
virtual void move(MidiEditor*, SystemLayout*, bool) {}
82
QPoint offset() const { return _offset; }
83
void setOffset(const QPoint& p) { _offset = p; }
88
//-----------------------------------------------
89
// Note und Ghost-Note
90
//-----------------------------------------------
92
class NoteItem : public ScoreItem {
95
int _stem; // Notenhals
98
int _hline; // h-Linie innerhalb des Liniensystems
102
int _prefix; // accidental: 0-none, 1-sharp, 2-flat, 3-norm
103
bool _flags; // draw flags if true
106
NoteItem(int t, MidiEvent* e, MidiPart* part, bool flag = false);
108
bool ghost() const { return _ghost; }
109
void setGhost(bool f) { _ghost = f; }
110
void setAccidental(int i) { _prefix = i; }
111
int accidental() const { return _prefix; }
112
bool flags() const { return _flags; }
113
void setFlags(bool f) { _flags = f; }
116
void setTieFrom(Tie* t) { _tieFrom = t; }
117
Tie* tieTo() const { return _tieTo; }
118
Tie* tieFrom() const { return _tieFrom; }
120
void setHLine(int n) { _hline = n; }
121
int hline() const { return _hline; }
122
bool isStemDown() const { return _stem < 0; }
123
int stem() const { return _stem; }
125
void stemDown(bool f) {
126
if ((f && _stem > 0) || (!f && _stem < 0))
129
void setStem(int n) {
130
_stem = (_stem < 0) ? -n : n;
132
int head() const { return _head; }
133
void setHead(int n) { _head = n; }
135
int len() const { return _len; }
136
void setLen(int n) { _len = n; }
138
MidiPart* part() const { return _part; }
140
virtual void quantize(int start_tick, int nq, int rq);
141
virtual MidiEvent* event() const { return _event; }
142
void setEvent(MidiEvent* e) { _event = e; }
143
virtual void draw(QPainter&) const;
144
virtual void print(FILE* f) const;
145
virtual void remove();
146
virtual void move(MidiEditor*, SystemLayout*, bool);
149
//-----------------------------------------------
151
//-----------------------------------------------
153
class Tie : public ScoreItem {
159
Tie(int tick, NoteItem* n1, NoteItem* n2)
165
void setUp(bool f) { _up = f; }
166
bool up() const { return _up; }
167
NoteItem* startNote() const { return note1; }
168
NoteItem* endNote() const { return note2; }
169
void setStartNote(NoteItem* i) { note1 = i; }
170
void setEndNote(NoteItem* i) { note2 = i; }
171
virtual void draw(QPainter&) const;
172
virtual void print(FILE* f) const;
175
//---------------------------------------------------------
177
//---------------------------------------------------------
179
class PixmapItem : public ScoreItem {
184
PixmapItem(int tick, const QPoint&, const QPixmap*);
185
PixmapItem(int tick, const QPoint&);
186
void setPixmap(const QPixmap*);
187
virtual void draw(QPainter& p) const;
190
//-----------------------------------------------
192
//-----------------------------------------------
194
class RestItem : public PixmapItem {
197
RestItem(int tick, const QPoint&, int len, int ticksBar);
198
virtual void print(FILE* f) const;
201
//---------------------------------------------------------
203
//---------------------------------------------------------
205
class BracketItem : public PixmapItem {
208
BracketItem(int tick, int h)
209
: PixmapItem(tick, QPoint(-10, 0), bracketBM)
213
virtual void print(FILE* f) const;
216
//---------------------------------------------------------
218
//---------------------------------------------------------
220
class Symbol : public PixmapItem {
224
Symbol(const QPoint&, int, MidiEvent*, MidiPart*);
226
virtual MidiEvent* event() const { return _event; }
227
void setEvent(MidiEvent* e) { _event = e; }
228
MidiPart* part() const { return _part; }
229
virtual void print(FILE* f) const;
230
virtual void remove();
231
virtual void move(MidiEditor*, SystemLayout*, bool);
234
//---------------------------------------------------------
236
//---------------------------------------------------------
238
class SystemItem : public ScoreItem {
242
SystemItem(int tick, int l, int w)
248
virtual void draw(QPainter&) const;
249
virtual void print(FILE* f) const;
252
//-----------------------------------------------
254
//-----------------------------------------------
256
class MeasureItem : public ScoreItem {
260
MeasureItem(int tick, const QPoint& p, int _h, int t = 0)
266
virtual void draw(QPainter&) const;
267
virtual void print(FILE* f) const;
270
//---------------------------------------------------------
272
//---------------------------------------------------------
274
class Text : public ScoreItem {
282
Text(int t, const QString& qs, const QFont& f, const QColor& c = Qt::black)
283
: ScoreItem(t), color(c), s(qs), font(f) {
284
align = QPainter::AlignLeft|QPainter::AlignBottom;
286
Text(int t, const QFont& f, const QColor& c = Qt::black)
287
: ScoreItem(t), color(c), font(f) {
288
align = QPainter::AlignLeft|QPainter::AlignBottom;
291
virtual void draw(QPainter&) const;
292
virtual void print(FILE* f) const;
293
void setAlign(int n) { align = n; }
294
void setText(const QString& txt) { s = txt; }
295
QString text() const { return s; }
296
void setNum(int n) { s.setNum(n); }
299
//---------------------------------------------------------
301
//---------------------------------------------------------
303
class QuantItem : public Text {
310
QuantItem(int t, MidiEvent*, MidiPart*, int n, int r);
311
MidiPart* part() const { return _part; }
312
int noteQuant() const { return nq; }
313
int restQuant() const { return rq; }
314
virtual MidiEvent* event() const { return _event; }
315
virtual void print(FILE*) const {}
316
virtual void remove();
319
class TrackNameItem : public Text {
321
TrackNameItem(int t, const QString& ps, const QFont& f)
325
class TitleItem : public Text {
327
TitleItem(int t, const QString& ps, const QFont& f)
329
virtual void move(MidiEditor*, SystemLayout*, bool);
332
class Comp1Item : public Text {
334
Comp1Item(int t, const QString& ps, const QFont& f)
338
class Comp2Item : public Text {
340
Comp2Item(int t, const QString& ps, const QFont& f)
344
class LyricsItem : public Text {
345
Attribute* _attribute; // points to Attribute in _note->event()
351
LyricsItem(const QPoint& p, Attribute* a, NoteItem* ni, const QFont&);
352
Attribute* attribute() const { return _attribute; }
353
NoteItem* noteItem() const { return _note; }
354
virtual void draw(QPainter&) const;
355
virtual void print(FILE* f) const;
356
void del() { s.truncate(s.length()-1); }
358
void resetEditState();
359
void add(const QString& s);
361
virtual MidiEvent* event() { return _note->event(); }
362
virtual void remove();
363
virtual void move(MidiEditor*, SystemLayout*, bool);
366
//-----------------------------------------------
368
//-----------------------------------------------
370
class MeasureNo : public Text {
372
MeasureNo(int tick, const QPoint& p, int i, const QFont& f)
379
//---------------------------------------------------------
381
//---------------------------------------------------------
383
class KeyItem : public ScoreItem {
387
KeyItem(const QPoint& p, int tick, NKey* k)
393
virtual void draw(QPainter&) const;
394
virtual void print(FILE* f) const;
397
//---------------------------------------------------------
399
//---------------------------------------------------------
401
class TimesigItem : public ScoreItem {
403
int nom1, nom2, nom3, denom;
407
TimesigItem(const QPoint& p, int tick, int t, int n1, int n2, int n3, int d)
415
font = QFont("Carter", 18, QFont::Normal);
418
virtual void draw(QPainter&) const;
419
virtual void print(FILE* f) const;
422
//---------------------------------------------------------
424
//---------------------------------------------------------
426
class Clef : public ScoreItem {
431
Clef(const QPoint& p, int tick, Scale* s, NKey* k)
438
virtual void draw(QPainter&) const;
439
virtual void print(FILE* f) const;
442
//-----------------------------------------------
444
//-----------------------------------------------
446
class ScoreList: public std::multimap<int, ScoreItem*, std::less<int> > {
449
~ScoreList() { clear(); }
451
ScoreItem* find(const QPoint& pos) const;
452
ScoreList::iterator add(ScoreItem* i) {
453
return insert(std::pair<const int, ScoreItem*>(i->tick(), i));
457
class NoteList: public std::list<NoteItem*> {
461
typedef ScoreList::iterator iScore;
462
typedef ScoreList::const_iterator ciScore;
464
typedef NoteList::iterator iNote;
465
typedef NoteList::const_iterator ciNote;
467
//---------------------------------------------------------
469
//---------------------------------------------------------
471
class Beam : public ScoreItem {
475
Beam(int tick, int _min, int _max) : ScoreItem(tick) {
479
void addNote(NoteItem* item) { notes.push_back(item); }
480
virtual void draw(QPainter&) const;
481
virtual void print(FILE* f) const;