Zrythm v2.0.0-alpha.1
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/change_qobject_property_command.h"
7#include "commands/resize_arranger_objects_command.h"
8#include "structure/arrangement/arranger_object_factory.h"
9#include "undo/undo_stack.h"
10#include "utils/variant_helpers.h"
11
12#include <QItemSelectionModel>
13#include <QtQmlIntegration/qqmlintegration.h>
14
15namespace zrythm::actions
16{
17class ArrangerObjectSelectionOperator : public QObject
18{
19 Q_OBJECT
20 QML_ELEMENT
21 QML_UNCREATABLE ("")
22 QML_EXTENDED_NAMESPACE (zrythm::commands)
23
24public:
25 using SelectedObjectsVector =
26 std::vector<structure::arrangement::ArrangerObjectUuidReference>;
27 using ArrangerObjectOwnerPtrVariant =
29 structure::arrangement::ArrangerObjectVariant,
31 using ObjectOwnerProvider = std::function<ArrangerObjectOwnerPtrVariant (
32 structure::arrangement::ArrangerObjectPtrVariant)>;
33
34 explicit ArrangerObjectSelectionOperator (
35 undo::UndoStack &undoStack,
36 QItemSelectionModel &selectionModel,
37 ObjectOwnerProvider objectOwnerProvider,
39 QObject * parent = nullptr);
40
41 Q_INVOKABLE bool moveByTicks (double tick_delta);
42
43 Q_INVOKABLE bool moveNotesByPitch (int pitch_delta);
44
45 Q_INVOKABLE bool changeVelocities (int velocity_delta);
46
47 Q_INVOKABLE bool moveAutomationPointsByDelta (double delta);
48
49 Q_INVOKABLE bool resizeObjects (
50 commands::ResizeType type,
51 commands::ResizeDirection direction,
52 double delta);
53
54 Q_INVOKABLE bool deleteObjects ();
55
56 Q_INVOKABLE bool cloneObjects ();
57
58 Q_INVOKABLE bool toggleMute ();
59
61 Q_INVOKABLE bool
63
65 Q_INVOKABLE bool setTimebaseOverride (dsp::Timebase timebase);
66
69 Q_INVOKABLE bool clearTimebaseOverride ();
70
73 Q_INVOKABLE bool selectionHasTimebaseProviders () const;
74
75private:
76 auto extractSelectedObjects () const -> SelectedObjectsVector;
77
78 static bool validateHorizontalMovement (
79 const SelectedObjectsVector &objects,
80 double tick_delta);
81 static bool
82 validateVerticalMovement (const SelectedObjectsVector &objects, double delta);
83 static bool validateResize (
84 const SelectedObjectsVector &objects,
85 commands::ResizeType type,
86 commands::ResizeDirection direction,
87 double delta);
88 static bool validateBoundsResize (
89 structure::arrangement::ArrangerObjectPtrVariant obj_var,
90 commands::ResizeDirection direction,
91 double delta);
92 static bool validateFadesResize (
93 structure::arrangement::ArrangerObjectPtrVariant obj_var,
94 commands::ResizeDirection direction,
95 double delta);
96
97 bool process_vertical_move (double delta);
98
99private:
100 undo::UndoStack &undo_stack_;
101 QItemSelectionModel &selection_model_;
102 ObjectOwnerProvider object_owner_provider_;
103 structure::arrangement::ArrangerObjectFactory &object_factory_;
104};
105
106} // namespace zrythm::actions
Q_INVOKABLE bool setTimebaseOverride(dsp::Timebase timebase)
Sets a per-clip timebase override on all selected clips.
Q_INVOKABLE bool setStretchAlgorithm(dsp::StretchOptions::Algorithm algorithm)
Sets the timestretch algorithm on all selected AudioClips.
Q_INVOKABLE bool clearTimebaseOverride()
Clears the per-clip timebase override on all selected clips (inherit from parent provider).
Q_INVOKABLE bool selectionHasTimebaseProviders() const
Returns true if any selected object has a timebase provider (i.e., is a clip).
typename to_pointer_variant_impl< Variant >::type to_pointer_variant
Converts a variant to a variant of pointers.
typename wrap_variant_impl< Variant, Wrapper >::type wrap_variant_t
Converts a variant to a variant where each type is wrapped by Wrapper<T>.
Algorithm
Material-aware timestretch algorithm.