1 //============================================================================= 2 // MuseScore 3 // Music Composition & Notation 4 // 5 // Copyright (C) 2002-2011 Werner Schweer 6 // 7 // This program is free software; you can redistribute it and/or modify 8 // it under the terms of the GNU General Public License version 2 9 // as published by the Free Software Foundation and appearing in 10 // the file LICENCE.GPL 11 //============================================================================= 12 13 #ifndef __BRACKET_H__ 14 #define __BRACKET_H__ 15 16 #include "element.h" 17 #include "bracketItem.h" 18 19 namespace Ms { 20 21 class MuseScoreView; 22 class System; 23 enum class BracketType : signed char; 24 25 //--------------------------------------------------------- 26 // @@ Bracket 27 //--------------------------------------------------------- 28 29 class Bracket final : public Element { 30 BracketItem* _bi; 31 qreal ay1; 32 qreal h2; 33 34 int _firstStaff; 35 int _lastStaff; 36 37 QPainterPath path; 38 SymId _braceSymbol; 39 Shape _shape; 40 41 // horizontal scaling factor for brace symbol. Cannot be equal to magY or depend on h 42 // because layout needs width of brace before knowing height of system... 43 qreal _magx; 44 Measure* _measure = nullptr; 45 46 public: 47 Bracket(Score*); 48 ~Bracket(); 49 clone()50 Bracket* clone() const override { return new Bracket(*this); } type()51 ElementType type() const override { return ElementType::BRACKET; } 52 setBracketItem(BracketItem * i)53 void setBracketItem(BracketItem* i) { _bi = i; } bracketItem()54 BracketItem* bracketItem() const { return _bi; } 55 bracketType()56 BracketType bracketType() const { return _bi->bracketType(); } 57 static const char* bracketTypeName(BracketType type); 58 firstStaff()59 int firstStaff() const { return _firstStaff; } lastStaff()60 int lastStaff() const { return _lastStaff; } 61 void setStaffSpan(int a, int b); 62 braceSymbol()63 SymId braceSymbol() const { return _braceSymbol; } setBraceSymbol(const SymId & sym)64 void setBraceSymbol(const SymId& sym) { _braceSymbol = sym; } column()65 int column() const { return _bi->column(); } span()66 int span() const { return _bi->bracketSpan(); } magx()67 qreal magx() const { return _magx; } 68 system()69 System* system() const { return (System*)parent(); } 70 measure()71 Measure* measure() const { return _measure; } setMeasure(Measure * measure)72 void setMeasure(Measure* measure) { _measure = measure; } 73 74 Fraction playTick() const override; 75 76 void setHeight(qreal) override; 77 qreal width() const override; 78 shape()79 Shape shape() const override { return _shape; } 80 81 void draw(QPainter*) const override; 82 void layout() override; 83 84 void write(XmlWriter& xml) const override; 85 void read(XmlReader&) override; 86 isEditable()87 bool isEditable() const override { return true; } 88 void startEdit(EditData&) override; 89 bool edit(EditData&) override; 90 void endEdit(EditData&) override; 91 void editDrag(EditData&) override; 92 void endEditDrag(EditData&) override; 93 94 bool acceptDrop(EditData&) const override; 95 Element* drop(EditData&) override; 96 97 QVariant getProperty(Pid propertyId) const override; 98 bool setProperty(Pid propertyId, const QVariant&) override; 99 QVariant propertyDefault(Pid) const override; 100 101 void undoChangeProperty(Pid id, const QVariant& v, PropertyFlags ps) override; 102 using ScoreElement::undoChangeProperty; 103 gripsCount()104 int gripsCount() const override { return 1; } initialEditModeGrip()105 Grip initialEditModeGrip() const override { return Grip::START; } defaultGrip()106 Grip defaultGrip() const override { return Grip::START; } 107 std::vector<QPointF> gripsPositions(const EditData&) const override; 108 109 void setSelected(bool f) override; 110 }; 111 112 113 } // namespace Ms 114 #endif 115 116