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
|
//=============================================================================
// 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 __MEASUREBASE_H__
#define __MEASUREBASE_H__
/**
\file
Definition of MeasureBase class.
*/
#include "element.h"
#include "layoutbreak.h"
namespace Ms {
class Score;
class System;
class Measure;
//---------------------------------------------------------
// @@ MeasureBase
/// Virtual base class for Measure, HBox and VBox
//
// @P lineBreak bool true if a system break is positioned on this measure
// @P nextMeasure Measure the next Measure (read-only)
// @P nextMeasureMM Measure the next multi-measure rest Measure (read-only)
// @P pageBreak bool true if a page break is positioned on this measure
// @P prevMeasure Measure the previous Measure (read-only)
// @P prevMeasureMM Measure the previous multi-measure rest Measure (read-only)
//---------------------------------------------------------
class MeasureBase : public Element {
Q_OBJECT
Q_PROPERTY(bool lineBreak READ lineBreak WRITE undoSetLineBreak)
Q_PROPERTY(Ms::Measure* nextMeasure READ nextMeasure)
Q_PROPERTY(Ms::Measure* nextMeasureMM READ nextMeasureMM)
Q_PROPERTY(bool pageBreak READ pageBreak WRITE undoSetPageBreak)
Q_PROPERTY(Ms::Measure* prevMeasure READ prevMeasure)
Q_PROPERTY(Ms::Measure* prevMeasureMM READ prevMeasureMM)
MeasureBase* _next;
MeasureBase* _prev;
int _tick;
bool _breakHint;
protected:
ElementList _el; ///< Measure(/tick) relative -elements: with defined start time
///< but outside the staff
bool _lineBreak; ///< Forced line break
bool _pageBreak; ///< Forced page break
LayoutBreak* _sectionBreak;
public:
MeasureBase(Score* score = 0);
~MeasureBase();
MeasureBase(const MeasureBase&);
virtual MeasureBase* clone() const = 0;
virtual Element::Type type() const = 0;
virtual void setScore(Score* s) override;
MeasureBase* next() const { return _next; }
MeasureBase* nextMM() const;
void setNext(MeasureBase* e) { _next = e; }
MeasureBase* prev() const { return _prev; }
void setPrev(MeasureBase* e) { _prev = e; }
Ms::Measure* nextMeasure() const;
Ms::Measure* prevMeasure() const;
Ms::Measure* nextMeasureMM() const;
Ms::Measure* prevMeasureMM() const;
virtual int ticks() const { return 0; }
virtual void write(Xml&) const override = 0;
virtual void write(Xml&, int, bool) const = 0;
virtual void layout();
virtual void scanElements(void* data, void (*func)(void*, Element*), bool all=true);
ElementList el() { return _el; }
const ElementList& el() const { return _el; }
System* system() const { return (System*)parent(); }
void setSystem(System* s) { setParent((Element*)s); }
bool breakHint() const { return _breakHint; }
bool lineBreak() const { return _lineBreak; }
bool pageBreak() const { return _pageBreak; }
LayoutBreak* sectionBreak() const { return _sectionBreak; }
void setLineBreak(bool v) { _lineBreak = v; }
void setPageBreak(bool v) { _pageBreak = v; }
void setSectionBreak(LayoutBreak* v) { _sectionBreak = v; }
void undoSetBreak(bool v, LayoutBreak::Type type);
void undoSetLineBreak(bool v) { undoSetBreak(v, LayoutBreak::Type::LINE);}
void undoSetPageBreak(bool v) { undoSetBreak(v, LayoutBreak::Type::PAGE);}
void undoSetSectionBreak(bool v) { undoSetBreak(v, LayoutBreak::Type::SECTION);}
virtual void moveTicks(int diff) { setTick(tick() + diff); }
virtual qreal distanceUp(int) const { return 0.0; }
virtual qreal distanceDown(int) const { return 0.0; }
virtual qreal userDistanceUp(int) const { return .0; }
virtual qreal userDistanceDown(int) const { return .0; }
virtual void add(Element*) override;
virtual void remove(Element*) override;
int tick() const { return _tick; }
int endTick() const { return tick() + ticks(); }
void setTick(int t) { _tick = t; }
qreal pause() const;
virtual QVariant getProperty(P_ID propertyId) const override;
virtual bool setProperty(P_ID propertyId, const QVariant&) override;
void clearElements();
ElementList takeElements();
};
} // namespace Ms
#endif
|