OSSIA
Open Scenario System for Interactive Application
search_filter.hpp
1 #pragma once
2 
3 #include "ext.h"
4 
5 #include <ossia/network/base/node.hpp>
6 
7 static const constexpr int MAX_NUM_ITEMS = 256;
8 
9 namespace ossia
10 {
11 namespace max_binding
12 {
13 struct search_filter
14 {
15  t_symbol* m_filter_type[MAX_NUM_ITEMS];
16  long m_filter_type_size{};
17  t_symbol* m_filter_tags[MAX_NUM_ITEMS];
18  long m_filter_tags_size{};
19  t_symbol* m_filter_modes[3];
20  long m_filter_modes_size{};
21  long m_filter_visible{0};
22  long m_filter_terminal{0};
23 
24  bool filter(const ossia::net::node_base& node);
25 
26  template <typename T>
27  static void setup_attribute(t_class* c)
28  {
29  CLASS_ATTR_SYM_VARSIZE(
30  c, "type", 0, T, m_filter_type, m_filter_type_size, MAX_NUM_ITEMS);
31  CLASS_ATTR_LABEL(c, "type", 0, "Type of object to search");
32 
33  CLASS_ATTR_SYM_VARSIZE(
34  c, "tags", 0, T, m_filter_tags, m_filter_tags_size, MAX_NUM_ITEMS);
35  CLASS_ATTR_LABEL(c, "tags", 0, "Filter by tags");
36 
37  CLASS_ATTR_SYM_VARSIZE(c, "mode", 0, T, m_filter_modes, m_filter_modes_size, 3);
38  CLASS_ATTR_LABEL(c, "mode", 0, "Filter by access mode");
39 
40  CLASS_ATTR_LONG(c, "visible", 0, T, m_filter_visible);
41  CLASS_ATTR_LABEL(
42  c, "visible", 0,
43  "Filter by visibility (0 means no filtering, 1 only visible, 2 only hidden");
44  CLASS_ATTR_FILTER_CLIP(c, "visible", 0, 2);
45 
46  CLASS_ATTR_LONG(c, "terminal", 0, T, m_filter_terminal);
47  CLASS_ATTR_STYLE_LABEL(c, "terminal", 0, "onoff", "Only show terminal nodes");
48  }
49 };
50 } // namespace max
51 } // namespace ossia
The node_base class.
Definition: network/base/node.hpp:48
Definition: git_info.h:7