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