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) 2025 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 "../dom/engravingitem.h"
26 : #include "../dom/property.h"
27 :
28 : namespace mu::engraving {
29 : //-----------------------------------------------------------------------------
30 : // ElementEditData
31 : // holds element specific data during element editing:
32 : //
33 : // startDragGrip(EditData&) creates data and attaches it to EditData
34 : // dragGrip(EditData&)
35 : // endDragGrip(EditData&) use data to create undo records
36 : //-----------------------------------------------------------------------------
37 :
38 : enum class EditDataType : signed char {
39 : ElementEditData,
40 : TextEditData,
41 : BarLineEditData,
42 : BeamEditData,
43 : NoteEditData,
44 : };
45 :
46 : class ElementEditData
47 : {
48 : public:
49 4 : virtual ~ElementEditData() = default;
50 :
51 : struct PropertyData {
52 : Pid id;
53 : PropertyValue data;
54 : PropertyFlags f;
55 : };
56 :
57 : EngravingItem* e = nullptr;
58 : std::vector<PropertyData> propertyData;
59 :
60 0 : void pushProperty(Pid pid)
61 : {
62 0 : propertyData.emplace_back(PropertyData { pid, e->getProperty(pid), e->propertyFlags(pid) });
63 0 : }
64 :
65 0 : virtual EditDataType type() { return EditDataType::ElementEditData; }
66 : };
67 :
68 : using ElementEditDataPtr = std::shared_ptr<ElementEditData>;
69 : }
|