1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-08 12:40:44 +00:00

Merge pull request #56646 from Chaosus/vst_context_menu

This commit is contained in:
Rémi Verschelde
2022-01-12 11:39:06 +01:00
committed by GitHub
2 changed files with 59 additions and 15 deletions

View File

@@ -1973,7 +1973,7 @@ void VisualScriptEditor::input(const Ref<InputEvent> &p_event) {
// GUI input for VS Editor Plugin // GUI input for VS Editor Plugin
Ref<InputEventMouseButton> key = p_event; Ref<InputEventMouseButton> key = p_event;
if (key.is_valid() && !key->is_pressed()) { if (key.is_valid() && key->is_pressed()) {
mouse_up_position = get_screen_position() + get_local_mouse_position(); mouse_up_position = get_screen_position() + get_local_mouse_position();
} }
} }
@@ -1982,10 +1982,28 @@ void VisualScriptEditor::_graph_gui_input(const Ref<InputEvent> &p_event) {
Ref<InputEventMouseButton> key = p_event; Ref<InputEventMouseButton> key = p_event;
if (key.is_valid() && key->is_pressed() && key->get_button_mask() == MouseButton::RIGHT) { if (key.is_valid() && key->is_pressed() && key->get_button_mask() == MouseButton::RIGHT) {
saved_position = graph->get_local_mouse_position(); bool is_empty_selection = true;
Point2 gpos = get_screen_position() + get_local_mouse_position(); for (int i = 0; i < graph->get_child_count(); i++) {
_generic_search(script->get_instance_base_type(), gpos); GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
if (gn && gn->is_selected()) {
is_empty_selection = false;
break;
}
}
if (is_empty_selection && clipboard->nodes.is_empty()) {
_generic_search(script->get_instance_base_type(), mouse_up_position);
} else {
popup_menu->set_item_disabled(int(EDIT_CUT_NODES), is_empty_selection);
popup_menu->set_item_disabled(int(EDIT_COPY_NODES), is_empty_selection);
popup_menu->set_item_disabled(int(EDIT_PASTE_NODES), clipboard->nodes.is_empty());
popup_menu->set_item_disabled(int(EDIT_DELETE_NODES), is_empty_selection);
popup_menu->set_item_disabled(int(EDIT_DUPLICATE_NODES), is_empty_selection);
popup_menu->set_item_disabled(int(EDIT_CLEAR_COPY_BUFFER), clipboard->nodes.is_empty());
popup_menu->set_position(mouse_up_position);
popup_menu->popup();
}
} }
} }
@@ -3873,6 +3891,9 @@ void VisualScriptEditor::_comment_node_resized(const Vector2 &p_new_size, int p_
void VisualScriptEditor::_menu_option(int p_what) { void VisualScriptEditor::_menu_option(int p_what) {
switch (p_what) { switch (p_what) {
case EDIT_ADD_NODE: {
_generic_search(script->get_instance_base_type(), mouse_up_position);
} break;
case EDIT_DELETE_NODES: { case EDIT_DELETE_NODES: {
_on_nodes_delete(); _on_nodes_delete();
} break; } break;
@@ -3913,6 +3934,9 @@ void VisualScriptEditor::_menu_option(int p_what) {
case EDIT_PASTE_NODES: { case EDIT_PASTE_NODES: {
_on_nodes_paste(); _on_nodes_paste();
} break; } break;
case EDIT_DUPLICATE_NODES: {
_on_nodes_duplicate();
} break;
case EDIT_CREATE_FUNCTION: { case EDIT_CREATE_FUNCTION: {
// Create Function. // Create Function.
Map<int, Ref<VisualScriptNode>> nodes; Map<int, Ref<VisualScriptNode>> nodes;
@@ -4140,6 +4164,12 @@ void VisualScriptEditor::_menu_option(int p_what) {
case REFRESH_GRAPH: { case REFRESH_GRAPH: {
_update_graph(); _update_graph();
} break; } break;
case EDIT_CLEAR_COPY_BUFFER: {
clipboard->nodes.clear();
clipboard->nodes_positions.clear();
clipboard->data_connections.clear();
clipboard->sequence_connections.clear();
} break;
} }
} }
@@ -4327,9 +4357,6 @@ VisualScriptEditor::VisualScriptEditor() {
if (!clipboard) { if (!clipboard) {
clipboard = memnew(Clipboard); clipboard = memnew(Clipboard);
} }
updating_graph = false;
saved_pos_dirty = false;
saved_position = Vector2(0, 0);
edit_menu = memnew(MenuButton); edit_menu = memnew(MenuButton);
edit_menu->set_shortcut_context(this); edit_menu->set_shortcut_context(this);
@@ -4561,6 +4588,18 @@ VisualScriptEditor::VisualScriptEditor() {
new_virtual_method_select = memnew(VisualScriptPropertySelector); new_virtual_method_select = memnew(VisualScriptPropertySelector);
add_child(new_virtual_method_select); add_child(new_virtual_method_select);
new_virtual_method_select->connect("selected", callable_mp(this, &VisualScriptEditor::_selected_new_virtual_method)); new_virtual_method_select->connect("selected", callable_mp(this, &VisualScriptEditor::_selected_new_virtual_method));
popup_menu = memnew(PopupMenu);
add_child(popup_menu);
popup_menu->add_item(TTR("Add Node"), EDIT_ADD_NODE);
popup_menu->add_separator();
popup_menu->add_item(TTR("Cut"), EDIT_CUT_NODES);
popup_menu->add_item(TTR("Copy"), EDIT_COPY_NODES);
popup_menu->add_item(TTR("Paste"), EDIT_PASTE_NODES);
popup_menu->add_item(TTR("Delete"), EDIT_DELETE_NODES);
popup_menu->add_item(TTR("Duplicate"), EDIT_DUPLICATE_NODES);
popup_menu->add_item(TTR("Clear Copy Buffer"), EDIT_CLEAR_COPY_BUFFER);
popup_menu->connect("id_pressed", callable_mp(this, &VisualScriptEditor::_menu_option));
} }
VisualScriptEditor::~VisualScriptEditor() { VisualScriptEditor::~VisualScriptEditor() {

View File

@@ -54,13 +54,18 @@ class VisualScriptEditor : public ScriptEditorBase {
}; };
enum { enum {
EDIT_ADD_NODE,
EDIT_SEPARATOR, // popup menu separator - ignored
EDIT_CUT_NODES,
EDIT_COPY_NODES,
EDIT_PASTE_NODES,
EDIT_DELETE_NODES, EDIT_DELETE_NODES,
EDIT_DUPLICATE_NODES,
EDIT_CLEAR_COPY_BUFFER,
EDIT_CREATE_FUNCTION,
EDIT_TOGGLE_BREAKPOINT, EDIT_TOGGLE_BREAKPOINT,
EDIT_FIND_NODE_TYPE, EDIT_FIND_NODE_TYPE,
EDIT_COPY_NODES,
EDIT_CUT_NODES,
EDIT_PASTE_NODES,
EDIT_CREATE_FUNCTION,
REFRESH_GRAPH, REFRESH_GRAPH,
}; };
@@ -123,7 +128,7 @@ class VisualScriptEditor : public ScriptEditorBase {
Label *select_func_text; Label *select_func_text;
bool updating_graph; bool updating_graph = false;
void _show_hint(const String &p_hint); void _show_hint(const String &p_hint);
void _hide_timer(); void _hide_timer();
@@ -162,7 +167,8 @@ class VisualScriptEditor : public ScriptEditorBase {
static Clipboard *clipboard; static Clipboard *clipboard;
PopupMenu *member_popup; PopupMenu *popup_menu = nullptr;
PopupMenu *member_popup = nullptr;
MemberType member_type; MemberType member_type;
String member_name; String member_name;
@@ -172,8 +178,7 @@ class VisualScriptEditor : public ScriptEditorBase {
Vector2 port_action_pos; Vector2 port_action_pos;
int port_action_new_node; int port_action_new_node;
bool saved_pos_dirty; bool saved_pos_dirty = false;
Vector2 saved_position;
Vector2 mouse_up_position; Vector2 mouse_up_position;