Line data Source code
1 : /*
2 : * SPDX-License-Identifier: GPL-3.0-only
3 : * MuseScore-Studio-CLA-applies
4 : *
5 : * MuseScore Studio
6 : * Music Composition & Notation
7 : *
8 : * Copyright (C) 2021 MuseScore Limited and others
9 : *
10 : * This program is free software: you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License version 3 as
12 : * published by the Free Software Foundation.
13 : *
14 : * This program is distributed in the hope that it will be useful,
15 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 : * GNU General Public License for more details.
18 : *
19 : * You should have received a copy of the GNU General Public License
20 : * along with this program. If not, see <https://www.gnu.org/licenses/>.
21 : */
22 :
23 : #pragma once
24 :
25 : #include <vector>
26 :
27 : #include "engravingitem.h"
28 :
29 : namespace mu::engraving {
30 : class Transaction;
31 :
32 : //---------------------------------------------------------
33 : // @@ BSymbol
34 : /// base class for Symbol and Image
35 : //---------------------------------------------------------
36 :
37 : class BSymbol : public EngravingItem
38 : {
39 0 : OBJECT_ALLOCATOR(engraving, BSymbol)
40 : public:
41 :
42 0 : Segment* segment() const { return (Segment*)ownershipParent(); }
43 :
44 : void scanElements(std::function<void(EngravingItem*)> func) override;
45 :
46 : BSymbol& operator=(const BSymbol&) = delete;
47 :
48 : void add(EngravingItem*) override;
49 : void remove(EngravingItem*) override;
50 : bool acceptDrop(EditData&) const override;
51 : EngravingItem* drop(Transaction& tx, EditData&) override;
52 : RectF drag(EditData&) override;
53 :
54 360 : Align align() const { return m_align; }
55 : void setAlign(Align a) { m_align = a; }
56 :
57 108 : const std::vector<EngravingItem*>& leafs() const { return m_leafs; }
58 : PointF pagePos() const override;
59 : PointF canvasPos() const override;
60 : std::vector<LineF> dragAnchorLines() const override;
61 :
62 : protected:
63 0 : BSymbol(const ElementType& type, EngravingObject* parent, ElementFlags f = ElementFlag::NOTHING);
64 : BSymbol(const BSymbol&);
65 :
66 : private:
67 :
68 : std::vector<EngravingItem*> m_leafs;
69 : Align m_align = { AlignH::LEFT, AlignV::BASELINE };
70 : };
71 : }
|