PoolStringArray mono_array_to_PoolStringArray(MonoArray *p_array) { PoolStringArray ret; int length = mono_array_length(p_array); for (int i = 0; i < length; i++) { MonoString *elem = mono_array_get(p_array, MonoString *, i); ret.push_back(mono_string_to_godot(elem)); } return ret; }
Dictionary InstancePlaceholder::get_stored_values(bool p_with_order) { Dictionary ret; PoolStringArray order; for (List<PropSet>::Element *E = stored_values.front(); E; E = E->next()) { ret[E->get().name] = E->get().value; if (p_with_order) order.push_back(E->get().name); }; if (p_with_order) ret[".order"] = order; return ret; };
PoolStringArray MIDIDriverCoreMidi::get_connected_inputs() { PoolStringArray list; for (int i = 0; i < connected_sources.size(); i++) { MIDIEndpointRef source = connected_sources[i]; CFStringRef ref = NULL; char name[256]; MIDIObjectGetStringProperty(source, kMIDIPropertyDisplayName, &ref); CFStringGetCString(ref, name, sizeof(name), kCFStringEncodingUTF8); CFRelease(ref); list.push_back(name); } return list; }
Variant EditorAutoloadSettings::get_drag_data_fw(const Point2& p_point, Control *p_control) { if (autoload_cache.size() <= 1) return false; PoolStringArray autoloads; TreeItem *next = tree->get_next_selected(NULL); while (next) { autoloads.push_back(next->get_text(0)); next = tree->get_next_selected(next); } if (autoloads.size() == 0 || autoloads.size() == autoload_cache.size()) return Variant(); VBoxContainer *preview = memnew( VBoxContainer ); int max_size = MIN(PREVIEW_LIST_MAX_SIZE, autoloads.size()); for (int i = 0; i < max_size; i++) { Label *label = memnew( Label(autoloads[i]) ); label->set_self_modulate(Color(1,1,1,Math::lerp(1, 0, float(i)/PREVIEW_LIST_MAX_SIZE))); preview->add_child(label); } tree->set_drop_mode_flags(Tree::DROP_MODE_INBETWEEN); tree->set_drag_preview(preview); Dictionary drop_data; drop_data["type"] = "autoload"; drop_data["autoloads"] = autoloads; return drop_data; }
void ConnectionsDock::update_tree() { tree->clear(); if (!selectedNode) return; TreeItem *root = tree->create_item(); List<MethodInfo> node_signals; selectedNode->get_signal_list(&node_signals); //node_signals.sort_custom<_ConnectionsDockMethodInfoSort>(); bool did_script = false; StringName base = selectedNode->get_class(); while (base) { List<MethodInfo> node_signals; Ref<Texture> icon; String name; if (!did_script) { Ref<Script> scr = selectedNode->get_script(); if (scr.is_valid()) { scr->get_script_signal_list(&node_signals); if (scr->get_path().is_resource_file()) name = scr->get_path().get_file(); else name = scr->get_class(); if (has_icon(scr->get_class(), "EditorIcons")) { icon = get_icon(scr->get_class(), "EditorIcons"); } } } else { ClassDB::get_signal_list(base, &node_signals, true); if (has_icon(base, "EditorIcons")) { icon = get_icon(base, "EditorIcons"); } name = base; } TreeItem *pitem = NULL; if (node_signals.size()) { pitem = tree->create_item(root); pitem->set_text(0, name); pitem->set_icon(0, icon); pitem->set_selectable(0, false); pitem->set_editable(0, false); pitem->set_custom_bg_color(0, get_color("prop_subsection", "Editor")); node_signals.sort(); } for (List<MethodInfo>::Element *E = node_signals.front(); E; E = E->next()) { MethodInfo &mi = E->get(); String signaldesc; signaldesc = mi.name + "("; PoolStringArray argnames; if (mi.arguments.size()) { signaldesc += " "; for (int i = 0; i < mi.arguments.size(); i++) { PropertyInfo &pi = mi.arguments[i]; if (i > 0) signaldesc += ", "; String tname = "var"; if (pi.type == Variant::OBJECT && pi.class_name != StringName()) { tname = pi.class_name.operator String(); } else if (pi.type != Variant::NIL) { tname = Variant::get_type_name(pi.type); } signaldesc += tname + " " + (pi.name == "" ? String("arg " + itos(i)) : pi.name); argnames.push_back(pi.name + ":" + tname); } signaldesc += " "; } signaldesc += ")"; TreeItem *item = tree->create_item(pitem); item->set_text(0, signaldesc); Dictionary sinfo; sinfo["name"] = mi.name; sinfo["args"] = argnames; item->set_metadata(0, sinfo); item->set_icon(0, get_icon("Signal", "EditorIcons")); List<Object::Connection> connections; selectedNode->get_signal_connection_list(mi.name, &connections); for (List<Object::Connection>::Element *F = connections.front(); F; F = F->next()) { Object::Connection &c = F->get(); if (!(c.flags & CONNECT_PERSIST)) continue; Node *target = Object::cast_to<Node>(c.target); if (!target) continue; String path = String(selectedNode->get_path_to(target)) + " :: " + c.method + "()"; if (c.flags & CONNECT_DEFERRED) path += " (deferred)"; if (c.flags & CONNECT_ONESHOT) path += " (oneshot)"; if (c.binds.size()) { path += " binds( "; for (int i = 0; i < c.binds.size(); i++) { if (i > 0) path += ", "; path += c.binds[i].operator String(); } path += " )"; } TreeItem *item2 = tree->create_item(item); item2->set_text(0, path); item2->set_metadata(0, c); item2->set_icon(0, get_icon("Slot", "EditorIcons")); } } if (!did_script) { did_script = true; } else { base = ClassDB::get_parent_class(base); } } connect_button->set_text(TTR("Connect")); connect_button->set_disabled(true); }