Loading...
Searching...
No Matches
PresetItemModel.hpp
1#pragma once
2#include <Process/Preset.hpp>
3#include <Process/Process.hpp>
4
5#include <QAbstractItemModel>
6#include <QPersistentModelIndex>
7#include <QPointer>
8
9#include <score_plugin_library_export.h>
10
11#include <verdigris>
12
13#include <memory>
14#include <optional>
15#include <vector>
16
17namespace score
18{
19struct GUIApplicationContext;
20}
21
22namespace Process
23{
24class ApplicationPlugin;
25}
26
27namespace Library
28{
33class SCORE_PLUGIN_LIBRARY_EXPORT PresetItemModel final : public QAbstractItemModel
34{
35 W_OBJECT(PresetItemModel)
36public:
37 PresetItemModel(const score::GUIApplicationContext& ctx, QObject* parent);
39
40 std::vector<Process::Preset>& presets;
41
43 void setProcess(std::optional<Process::ProcessIdentifier> id);
44 const std::optional<Process::ProcessIdentifier>& process() const noexcept
45 {
46 return m_process;
47 }
48
51 void setTarget(const Process::ProcessModel* proc);
52 const Process::ProcessModel* target() const noexcept { return m_target; }
54 void refreshCurrent();
56 QModelIndex currentPresetIndex() const;
57
59 void setFilterText(const QString& text);
60 const QString& filterText() const noexcept { return m_filter; }
61
64 int presetRow(const QModelIndex& index) const;
65 const Process::Preset* preset(const QModelIndex& index) const;
66 QModelIndex indexOfPreset(int presetRow) const;
68 int presetRowOf(const QString& path) const;
70 QStringList folderPath(const QModelIndex& index) const;
71 QModelIndex indexOfFolder(const QStringList& path) const;
72
74 bool savePreset(const Process::ProcessModel& proc, const QString& category = {});
76 bool canEdit(int presetRow) const;
78 bool removePreset(int presetRow);
80 bool movePreset(int presetRow, const QString& category);
83 QModelIndex addCategory(const QStringList& path);
85 QStringList categories() const;
87 bool isBuiltin(const QModelIndex& index) const;
88
90 void renamed(QModelIndex index) E_SIGNAL(SCORE_PLUGIN_LIBRARY_EXPORT, renamed, index)
91
92 QModelIndex index(int row, int column, const QModelIndex& parent) const override;
93 QModelIndex parent(const QModelIndex& child) const override;
94 int rowCount(const QModelIndex& parent) const override;
95 int columnCount(const QModelIndex& parent) const override;
96 QVariant data(const QModelIndex& index, int role) const override;
97 Qt::ItemFlags flags(const QModelIndex& index) const override;
98 bool setData(const QModelIndex& index, const QVariant& value, int role) override;
99
100 bool dropMimeData(
101 const QMimeData* data, Qt::DropAction act, int row, int col,
102 const QModelIndex& parent) override;
103 bool canDropMimeData(
104 const QMimeData* data, Qt::DropAction act, int row, int col,
105 const QModelIndex& parent) const override;
106 QMimeData* mimeData(const QModelIndexList& indexes) const override;
107 Qt::DropActions supportedDragActions() const override;
108 Qt::DropActions supportedDropActions() const override;
109
110 struct Node;
111
112private:
113 bool shows(const Process::Preset& p) const noexcept;
114 QString categoryKey() const;
115 Node& folder(const QStringList& path);
116 void rebuild();
119 void rebuildSoon();
120 void build();
121 Node* node(const QModelIndex& index) const;
122 QModelIndex indexOf(const Node* n) const;
123
124 Process::ApplicationPlugin* m_plugin{};
125 std::optional<Process::ProcessIdentifier> m_process;
126 QPointer<const Process::ProcessModel> m_target;
127 std::vector<Process::Preset> m_builtins;
128 QString m_filter;
129 std::unique_ptr<Node> m_root;
131 bool m_removingShown{};
133 std::vector<std::pair<QString, QStringList>> m_emptyCategories;
135 mutable QString m_dragged;
137 QPointer<const Process::ProcessModel> m_builtinsOf;
139 QPersistentModelIndex m_current;
141 bool m_coalescing{};
142 bool m_stale{};
143};
144}
Definition PresetItemModel.hpp:34
void renamed(QModelIndex index)
After a rename, where the preset now is.
Definition score-lib-process/Process/ApplicationPlugin.hpp:17
The Process class.
Definition score-lib-process/Process/Process.hpp:82
Base classes and tools to implement processes and layers.
Definition JSONVisitor.hpp:1115
Base toolkit upon which the software is built.
Definition Application.cpp:83
Definition PresetItemModel.cpp:58
Definition Preset.hpp:32
Specializes ApplicationContext with the QMainWindow.
Definition GUIApplicationContext.hpp:15