Vuo  2.4.0
VuoInputEditorWithMenu.cc
Go to the documentation of this file.
1
11
17json_object * VuoInputEditorWithMenu::show(QPoint portLeftCenter, json_object *originalValue, json_object *details, map<QString, json_object *> portNamesAndValues)
18{
19 acceptedValue = json_object_get(originalValue);
20 this->details = details;
21 VuoInputEditorMenuItem *menuTree = setUpMenuTree(details);
22
23 QMenu *menu = new QMenu(reinterpret_cast<QWidget *>(parent()));
24 menu->setSeparatorsCollapsible(false);
25 menu->setFont(getDefaultFont());
26 QActionGroup *menuActionGroup;
27 menuActionGroup = new QActionGroup(menu);
28
29 connect(menuActionGroup, &QActionGroup::triggered, this, &VuoInputEditorWithMenu::acceptAction);
30
31 VuoInputEditorMenuItem::buildMenu(menu, menuActionGroup, menuTree);
32 menuActionGroup->setExclusive(true);
33
34 // Select the menu item corresponding to the original value.
35 int checkIndex = 0;
36 int index = 0;
37 string originalValueAsString = json_object_to_json_string_ext(originalValue, JSON_C_TO_STRING_PLAIN);
38 foreach (QAction *action, menuActionGroup->actions())
39 {
40 json_object *actionValue = action->data().value<json_object *>();
41 string actionValueAsString = json_object_to_json_string_ext(actionValue, JSON_C_TO_STRING_PLAIN);
42
43 bool isOriginalValue = (actionValueAsString == originalValueAsString)
44 // Support upgrading a VuoBoolean port to a named enum.
45 || (originalValueAsString == "false" && actionValueAsString == "0")
46 || (originalValueAsString == "true" && actionValueAsString == "1");
47
48 action->setChecked(isOriginalValue);
49 if (isOriginalValue)
50 checkIndex = index;
51 ++index;
52 }
53
54 // Position the right center of the selected menu item at the left center of the port.
55 int xOffset = menu->sizeHint().width();
56 int yOffset = (checkIndex + 0.5) / menu->actions().size() * menu->sizeHint().height();
57 portLeftCenter = portLeftCenter - QPoint(xOffset, yOffset);
58 menu->exec(portLeftCenter);
59
60 return acceptedValue;
61}
62
64{
65 return setUpMenuTree();
66}
67
69{
70 return new VuoInputEditorMenuItem("root");
71}
72
76void VuoInputEditorWithMenu::acceptAction(QAction *action)
77{
78 json_object_put(acceptedValue);
79 acceptedValue = json_object_get(action->data().value<json_object *>());
80}
81
87{
88 json_object *includeValues = NULL;
89 json_object_object_get_ex(details, "includeValues", &includeValues);
90 if (!includeValues)
91 return true;
92
93 bool includeThisValue = false;
94 int includeValuesCount = json_object_array_length(includeValues);
95 const char *valueString = json_object_to_json_string(value);
96 for (int j = 0; j < includeValuesCount; ++j)
97 {
98 const char *includeValueString = json_object_to_json_string(json_object_array_get_idx(includeValues, j));
99 if (strcmp(valueString, includeValueString) == 0)
100 {
101 includeThisValue = true;
102 break;
103 }
104 }
105
106 return includeThisValue;
107}
108
113{
114 json_object *o;
115 if (json_object_object_get_ex(details, "isDark", &o))
116 return json_object_get_boolean(o);
117 return false;
118}