32class ChordPadBank :
public QAbstractListModel
41 ChordDescriptorRole = Qt::UserRole + 1,
44 explicit ChordPadBank (QObject * parent =
nullptr);
50 QHash<int, QByteArray> roleNames ()
const override;
51 int rowCount (
const QModelIndex &parent = {})
const override;
52 QVariant data (
const QModelIndex &index,
int role)
const override;
59 dsp::MusicalNote root,
61 dsp::ChordAccent accent = dsp::ChordAccent::None,
63 std::optional<dsp::MusicalNote> bass = std::nullopt);
67 dsp::MusicalNote root,
69 dsp::ChordAccent accent = dsp::ChordAccent::None,
71 std::optional<dsp::MusicalNote> bass = std::nullopt);
73 void removeChord (
int index);
75 void moveChord (
int from,
int to);
77 void transposeChords (
bool up);
79 void applyPresetFromScale (
81 dsp::MusicalNote root_note);
98 std::optional<dsp::ChordDescriptor::ChordPitches>
103 friend void to_json (nlohmann::json &j,
const ChordPadBank &bank);
104 friend void from_json (
const nlohmann::json &j, ChordPadBank &bank);
107 static constexpr auto kChordsKey =
"chords"sv;
114 struct ChordPadPlaybackData
118 bool has_chord =
false;
121 std::array<Slot, 12> slots{};
124 void rebuild_playback_data ();
125 void connect_chord_signals ();
126 void connect_chord_signal (
int index);
128 std::vector<zrythm::utils::QObjectUniquePtr<dsp::ChordDescriptor>> chords_;
130 farbot::RealtimeObject<
131 ChordPadPlaybackData,
132 farbot::RealtimeObjectOptions::nonRealtimeMutatable>