Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
arranger_object_selection_operator.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "commands/resize_arranger_objects_command.h"
7#include "structure/arrangement/arranger_object_factory.h"
8#include "undo/undo_stack.h"
9#include "utils/variant_helpers.h"
10
11#include <QItemSelectionModel>
12#include <QtQmlIntegration/qqmlintegration.h>
13
14namespace zrythm::actions
15{
16class ArrangerObjectSelectionOperator : public QObject
17{
18 Q_OBJECT
19 QML_ELEMENT
20 QML_UNCREATABLE ("")
21 QML_EXTENDED_NAMESPACE (zrythm::commands)
22
23public:
24 using SelectedObjectsVector =
25 std::vector<structure::arrangement::ArrangerObjectUuidReference>;
26 using ArrangerObjectOwnerPtrVariant = to_pointer_variant<wrap_variant_t<
27 structure::arrangement::ArrangerObjectVariant,
29 using ObjectOwnerProvider = std::function<ArrangerObjectOwnerPtrVariant (
30 structure::arrangement::ArrangerObjectPtrVariant)>;
31
32 explicit ArrangerObjectSelectionOperator (
33 undo::UndoStack &undoStack,
34 QItemSelectionModel &selectionModel,
35 ObjectOwnerProvider objectOwnerProvider,
37 QObject * parent = nullptr);
38
39 Q_INVOKABLE bool moveByTicks (double tick_delta);
40
41 Q_INVOKABLE bool moveNotesByPitch (int pitch_delta);
42
43 Q_INVOKABLE bool changeVelocities (int velocity_delta);
44
45 Q_INVOKABLE bool moveAutomationPointsByDelta (double delta);
46
47 Q_INVOKABLE bool resizeObjects (
48 commands::ResizeType type,
49 commands::ResizeDirection direction,
50 double delta);
51
52 Q_INVOKABLE bool deleteObjects ();
53
54 Q_INVOKABLE bool cloneObjects ();
55
56private:
57 auto extractSelectedObjects () const -> SelectedObjectsVector;
58
59 static bool validateHorizontalMovement (
60 const SelectedObjectsVector &objects,
61 double tick_delta);
62 static bool
63 validateVerticalMovement (const SelectedObjectsVector &objects, double delta);
64 static bool validateResize (
65 const SelectedObjectsVector &objects,
66 commands::ResizeType type,
67 commands::ResizeDirection direction,
68 double delta);
69 static bool validateBoundsResize (
70 structure::arrangement::ArrangerObjectPtrVariant obj_var,
71 commands::ResizeDirection direction,
72 double delta);
73 static bool validateFadesResize (
75 commands::ResizeDirection direction,
76 double delta);
77
78 bool process_vertical_move (double delta);
79
80private:
81 undo::UndoStack &undo_stack_;
82 QItemSelectionModel &selection_model_;
83 ObjectOwnerProvider object_owner_provider_;
85};
86
87} // namespace zrythm::actions
Base class for all objects in the arranger.