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
|
//=============================================================================
// MuseScore
// Music Composition & Notation
//
// Copyright (C) 2002-2017 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 __TIMESIG_H__
#define __TIMESIG_H__
#include "element.h"
#include "sig.h"
#include "mscore.h"
#include "groups.h"
namespace Ms {
class MuseScoreView;
class Segment;
//---------------------------------------------------------
// TimeSigType
//---------------------------------------------------------
enum class TimeSigType : char {
NORMAL, // use sz/sn text
FOUR_FOUR, // common time (4/4)
ALLA_BREVE, // cut time (2/2)
};
//---------------------------------------------------------------------------------------
// @@ TimeSig
/// This class represents a time signature.
//---------------------------------------------------------------------------------------
class TimeSig final : public Element {
QString _numeratorString; // calculated from actualSig() if !customText
QString _denominatorString;
std::vector<SymId> ns;
std::vector<SymId> ds;
QPointF pz;
QPointF pn;
QPointF pointLargeLeftParen;
QPointF pointLargeRightParen;
Fraction _sig;
Fraction _stretch; // localSig / globalSig
Groups _groups;
QSizeF _scale;
TimeSigType _timeSigType;
bool _showCourtesySig;
bool _largeParentheses;
public:
TimeSig(Score* = 0);
QString ssig() const;
void setSSig(const QString&);
virtual TimeSig* clone() const override { return new TimeSig(*this); }
virtual ElementType type() const override { return ElementType::TIMESIG; }
TimeSigType timeSigType() const { return _timeSigType; }
bool operator==(const TimeSig&) const;
bool operator!=(const TimeSig& ts) const { return !(*this == ts); }
virtual qreal mag() const override;
virtual void draw(QPainter*) const override;
virtual void write(XmlWriter& xml) const override;
virtual void read(XmlReader&) override;
virtual void layout() override;
virtual Shape shape() const override;
Fraction sig() const { return _sig; }
void setSig(const Fraction& f, TimeSigType st = TimeSigType::NORMAL);
int numerator() const { return _sig.numerator(); }
int denominator() const { return _sig.denominator(); }
Fraction stretch() const { return _stretch; }
void setStretch(const Fraction& s) { _stretch = s; }
int numeratorStretch() const { return _stretch.numerator(); }
int denominatorStretch() const { return _stretch.denominator(); }
bool acceptDrop(EditData&) const override;
virtual Element* drop(EditData&) override;
Segment* segment() const { return (Segment*)parent(); }
Measure* measure() const { return (Measure*)parent()->parent(); }
bool showCourtesySig() const { return _showCourtesySig; }
void setShowCourtesySig(bool v) { _showCourtesySig = v; }
QString numeratorString() const { return _numeratorString; }
void setNumeratorString(const QString&);
QString denominatorString() const { return _denominatorString; }
void setDenominatorString(const QString&);
void setLargeParentheses(bool v) { _largeParentheses = v; }
void setScale(const QSizeF& s) { _scale = s; }
void setFrom(const TimeSig*);
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;
const Groups& groups() const { return _groups; }
void setGroups(const Groups& e) { _groups = e; }
Fraction globalSig() const { return (_sig * _stretch).reduced(); }
void setGlobalSig(const Fraction& f) { _stretch = (_sig / f).reduced(); }
bool isLocal() const { return _stretch != Fraction(1,1); }
virtual Element* nextSegmentElement();
virtual Element* prevSegmentElement();
virtual QString accessibleInfo() const override;
};
} // namespace Ms
#endif
|