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 "transaction/undoablecommand.h"
26 :
27 : #include "../dom/spanner.h"
28 :
29 : namespace mu::engraving {
30 : class Score;
31 : class Segment;
32 : class Transaction;
33 :
34 : class EditSpanner
35 : {
36 : public:
37 : static void addSpanner(Transaction& tx, Score* score, Spanner* spanner, const PointF& pos, bool systemStavesOnly = false);
38 : static void addSpanner(Transaction& tx, Score* score, Spanner* spanner, staff_idx_t staffIdx, Segment* startSegment,
39 : Segment* endSegment, bool ctrlModifier = false);
40 : };
41 :
42 : class ChangeSpannerElements : public UndoableCommand
43 : {
44 148 : OBJECT_ALLOCATOR(engraving, ChangeSpannerElements)
45 :
46 : Spanner* spanner = nullptr;
47 : EngravingItem* startElement = nullptr;
48 : EngravingItem* endElement = nullptr;
49 :
50 : void flip() override;
51 :
52 : public:
53 94 : ChangeSpannerElements(Spanner* s, EngravingItem* se, EngravingItem* ee)
54 94 : : spanner(s), startElement(se), endElement(ee) {}
55 :
56 100 : UNDO_TYPE(CommandType::ChangeSpannerElements)
57 0 : UNDO_NAME("ChangeSpannerElements")
58 300 : UNDO_CHANGED_OBJECTS({ spanner })
59 : };
60 :
61 : class ChangeStartEndSpanner : public UndoableCommand
62 : {
63 30 : OBJECT_ALLOCATOR(engraving, ChangeStartEndSpanner)
64 :
65 : Spanner* spanner = nullptr;
66 : EngravingItem* start = nullptr;
67 : EngravingItem* end = nullptr;
68 :
69 : void flip() override;
70 :
71 : public:
72 15 : ChangeStartEndSpanner(Spanner* sp, EngravingItem* s, EngravingItem* e)
73 15 : : spanner(sp), start(s), end(e) {}
74 :
75 10 : UNDO_TYPE(CommandType::ChangeStartEndSpanner)
76 0 : UNDO_NAME("ChangeStartEndSpanner")
77 30 : UNDO_CHANGED_OBJECTS({ spanner })
78 : };
79 : }
|