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
|
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2012 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 __CURSOR_H__
#define __CURSOR_H__
#include "segment.h"
namespace Ms {
class Element;
class Score;
class Chord;
class Rest;
class Note;
// class Segment;
class RepeatSegment;
class ChordRest;
class StaffText;
class Measure;
class TimeSig;
//---------------------------------------------------------
// @@ Cursor
// @P track int current track
// @P staffIdx int current staff (track / 4)
// @P voice int current voice (track % 4)
// @P filter enum segment type filter
// @P element Ms::Element* current element at track, read only
// @P segment Ms::Segment* current segment, read only
// @P measure Ms::Measure* current measure, read only
// @P tick int midi tick position, read only
// @P time double time at tick position, read only
// @P tempo float tempo at tick position, read only
// @P keySignature int key signature of current staff at tick pos. (read only)
// @P timeSignature Ms::TimeSig* time signature of current staff at tick pos. (read only)
// @P score Ms::Score* associated score
//---------------------------------------------------------
class Cursor : public QObject {
Q_OBJECT
Q_PROPERTY(int track READ track WRITE setTrack)
Q_PROPERTY(int staffIdx READ staffIdx WRITE setStaffIdx)
Q_PROPERTY(int voice READ voice WRITE setVoice)
Q_PROPERTY(int filter READ filter WRITE setFilter)
Q_PROPERTY(Ms::Element* element READ element)
Q_PROPERTY(Ms::Segment* segment READ segment)
Q_PROPERTY(Ms::Measure* measure READ measure)
Q_PROPERTY(int tick READ tick)
Q_PROPERTY(double time READ time)
//@ get tempo at current tick
Q_PROPERTY(qreal tempo READ tempo)
Q_PROPERTY(int keySignature READ qmlKeySignature)
Q_PROPERTY(Ms::TimeSig* timeSignature READ qmlTimeSignature)
Q_PROPERTY(Ms::Score* score READ score WRITE setScore)
Score* _score;
int _track;
bool _expandRepeats;
//state
Segment* _segment;
Segment::Type _filter { Segment::Type::ChordRest };
// utility methods
void nextInTrack();
public:
Cursor(Score* c = 0);
Cursor(Score*, bool);
Score* score() const { return _score; }
void setScore(Score* s);
int track() const { return _track; }
void setTrack(int v);
int staffIdx() const;
void setStaffIdx(int v);
int voice() const;
void setVoice(int v);
int filter() const { return int(_filter); }
void setFilter(int f) { _filter = Segment::Type(f); }
Element* element() const;
Segment* segment() const { return _segment; }
Measure* measure() const;
int tick();
double time();
qreal tempo();
int qmlKeySignature();
TimeSig* qmlTimeSignature();
//@ rewind cursor
//@ type=0 rewind to start of score
//@ type=1 rewind to start of selection
//@ type=2 rewind to end of selection
Q_INVOKABLE void rewind(int type);
Q_INVOKABLE bool next();
Q_INVOKABLE bool nextMeasure();
Q_INVOKABLE void add(Ms::Element*);
Q_INVOKABLE void addNote(int pitch);
//@ set duration
//@ z: numerator
//@ n: denominator
//@ Quarter, if n == 0
Q_INVOKABLE void setDuration(int z, int n);
};
} // namespace Ms
#endif
|