score-lib-process/Process/ProcessMetadata.hpp
1 #pragma once
2 #include <Process/Dataflow/PortType.hpp>
3 #include <Process/ProcessFlags.hpp>
4 
5 #include <score/plugins/SerializableInterface.hpp>
7 #include <score/tools/Metadata.hpp>
8 #include <score/tools/std/Optional.hpp>
9 
10 #include <QStringList>
11 
12 #include <cinttypes>
13 
14 namespace Process
15 {
16 SCORE_LIB_PROCESS_EXPORT
17 const QIcon& getCategoryIcon(const QString& category) noexcept;
18 enum ProcessCategory : uint64_t
19 {
20  Other,
21  Automation,
22  Generator, // lfo, etc
23  MediaSource, // sound, video, image, etc
24  Analyzer,
25  AudioEffect, // audio in and audio out
26  MidiEffect, // midi in and midi out
27  Synth, // midi in and audio out
28  Mapping, // value in and value out
29  Script, // JS, PD, etc
30  Structure, // scenario, loop, etc
31  Visual, // gfx processes
32  Deprecated = (1ULL << 63), // gfx processes
33 };
34 
35 struct Descriptor
36 {
37  QString prettyName;
38  ProcessCategory category{};
39  QString categoryText;
40  QString description;
41  QString author{"ossia score"};
42  QStringList tags;
43  std::optional<std::vector<Process::PortType>> inlets;
44  std::optional<std::vector<Process::PortType>> outlets;
45 };
46 class Descriptor_k;
47 }
48 #define PROCESS_FLAGS_METADATA(Export, Model, Flags) \
49  TYPED_METADATA(Export, Model, Process::ProcessFlags_k, Process::ProcessFlags, Flags)
50 
51 #define PROCESS_METADATA( \
52  Export, Model, Uuid, ObjectKey, PrettyName, CategoryEnum, Category, Desc, Author, \
53  Tags, InputSpec, OutputSpec, Flags) \
54  MODEL_METADATA(Export, Process::ProcessModel, Model, Uuid, ObjectKey, PrettyName) \
55  CATEGORY_METADATA(Export, Model, Category) \
56  TAGS_METADATA(Export, Model, Tags) \
57  PROCESS_FLAGS_METADATA(Export, Model, (Process::ProcessFlags)(Flags)) \
58  template <> \
59  struct Export Metadata<::Process::Descriptor_k, Model> \
60  { \
61  static ::Process::Descriptor get() \
62  { \
63  static const ::Process::Descriptor k{PrettyName, CategoryEnum, Category, \
64  Desc, Author, Tags, \
65  InputSpec, OutputSpec}; \
66  return k; \
67  } \
68  };
69 
70 #define PROCESS_METADATA_IMPL(Model) \
71  MODEL_METADATA_IMPL(Model) \
72  QString prettyShortName() const noexcept override \
73  { \
74  return Metadata<PrettyName_k, Model>::get(); \
75  } \
76  QString category() const noexcept override \
77  { \
78  return Metadata<Category_k, Model>::get(); \
79  } \
80  QStringList tags() const noexcept override \
81  { \
82  return Metadata<Tags_k, Model>::get(); \
83  } \
84  Process::ProcessFlags flags() const noexcept override \
85  { \
86  return Metadata<Process::ProcessFlags_k, Model>::get(); \
87  }
Definition: QmlObjects.hpp:435
Namespace related to the Automation process.
Definition: AutomationColors.cpp:8
Base classes and tools to implement processes and layers.
Definition: JSONVisitor.hpp:1324
Definition: score-lib-process/Process/ProcessMetadata.hpp:36