You've already forked godot
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:
@@ -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() {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user