summaryrefslogtreecommitdiff
path: root/scene/gui
diff options
context:
space:
mode:
Diffstat (limited to 'scene/gui')
-rw-r--r--scene/gui/graph_edit.cpp77
-rw-r--r--scene/gui/graph_edit.h9
-rw-r--r--scene/gui/graph_node.cpp31
-rw-r--r--scene/gui/text_edit.cpp176
4 files changed, 197 insertions, 96 deletions
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index 957e63e3ce..3cd0dd3d16 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -1,5 +1,6 @@
#include "graph_edit.h"
-
+#include "os/input.h"
+#include "os/keyboard.h"
bool GraphEditFilter::has_point(const Point2& p_point) const {
return ge->_filter_input(p_point);
@@ -53,7 +54,7 @@ void GraphEdit::disconnect_node(const StringName& p_from, int p_from_port,const
}
}
-void GraphEdit::get_connection_list(List<Connection> *r_connections) {
+void GraphEdit::get_connection_list(List<Connection> *r_connections) const {
*r_connections=connections;
}
@@ -88,7 +89,6 @@ void GraphEdit::_update_scroll() {
updating=true;
Rect2 screen;
- screen.size=get_size();
for(int i=0;i<get_child_count();i++) {
GraphNode *gn=get_child(i)->cast_to<GraphNode>();
@@ -101,6 +101,10 @@ void GraphEdit::_update_scroll() {
screen = screen.merge(r);
}
+ screen.pos-=get_size();
+ screen.size+=get_size()*2.0;
+
+
h_scroll->set_min(screen.pos.x);
h_scroll->set_max(screen.pos.x+screen.size.x);
h_scroll->set_page(get_size().x);
@@ -265,6 +269,37 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
Vector2 pos = gn->get_connection_input_pos(j)+gn->get_pos();
if (pos.distance_to(mpos)<grab_r) {
+
+ if (right_disconnects) {
+ //check disconnect
+ for (List<Connection>::Element*E=connections.front();E;E=E->next()) {
+
+ if (E->get().to==gn->get_name() && E->get().to_port==j) {
+
+ Node*fr = get_node(String(E->get().from));
+ if (fr && fr->cast_to<GraphNode>()) {
+
+ connecting_from=E->get().from;
+ connecting_index=E->get().from_port;
+ connecting_out=true;
+ connecting_type=fr->cast_to<GraphNode>()->get_connection_output_type(E->get().from_port);
+ connecting_color=fr->cast_to<GraphNode>()->get_connection_output_color(E->get().from_port);
+ connecting_target=false;
+ connecting_to=pos;
+
+ emit_signal("disconnection_request",E->get().from,E->get().from_port,E->get().to,E->get().to_port);
+ fr = get_node(String(connecting_from)); //maybe it was erased
+ if (fr && fr->cast_to<GraphNode>()) {
+ connecting=true;
+ }
+ return;
+ }
+
+ }
+ }
+ }
+
+
connecting=true;
connecting_from=gn->get_name();
connecting_index=j;
@@ -461,7 +496,7 @@ void GraphEdit::_top_layer_draw() {
void GraphEdit::_input_event(const InputEvent& p_ev) {
- if (p_ev.type==InputEvent::MOUSE_MOTION && p_ev.mouse_motion.button_mask&BUTTON_MASK_MIDDLE) {
+ if (p_ev.type==InputEvent::MOUSE_MOTION && (p_ev.mouse_motion.button_mask&BUTTON_MASK_MIDDLE || (p_ev.mouse_motion.button_mask&BUTTON_MASK_LEFT && Input::get_singleton()->is_key_pressed(KEY_SPACE)))) {
h_scroll->set_val( h_scroll->get_val() - p_ev.mouse_motion.relative_x );
v_scroll->set_val( v_scroll->get_val() - p_ev.mouse_motion.relative_y );
}
@@ -474,11 +509,41 @@ void GraphEdit::clear_connections() {
}
+void GraphEdit::set_right_disconnects(bool p_enable) {
+
+ right_disconnects=p_enable;
+}
+
+bool GraphEdit::is_right_disconnects_enabled() const{
+
+ return right_disconnects;
+}
+
+Array GraphEdit::_get_connection_list() const {
+
+ List<Connection> conns;
+ get_connection_list(&conns);
+ Array arr;
+ for(List<Connection>::Element *E=conns.front();E;E=E->next()) {
+ Dictionary d;
+ d["from"]=E->get().from;
+ d["from_port"]=E->get().from_port;
+ d["to"]=E->get().to;
+ d["to_port"]=E->get().to_port;
+ arr.push_back(d);
+ }
+ return arr;
+}
void GraphEdit::_bind_methods() {
ObjectTypeDB::bind_method(_MD("connect_node:Error","from","from_port","to","to_port"),&GraphEdit::connect_node);
ObjectTypeDB::bind_method(_MD("is_node_connected","from","from_port","to","to_port"),&GraphEdit::is_node_connected);
ObjectTypeDB::bind_method(_MD("disconnect_node","from","from_port","to","to_port"),&GraphEdit::disconnect_node);
+ ObjectTypeDB::bind_method(_MD("get_connection_list"),&GraphEdit::_get_connection_list);
+
+ ObjectTypeDB::bind_method(_MD("set_right_disconnects","enable"),&GraphEdit::set_right_disconnects);
+ ObjectTypeDB::bind_method(_MD("is_right_disconnects_enabled"),&GraphEdit::is_right_disconnects_enabled);
+
ObjectTypeDB::bind_method(_MD("_graph_node_moved"),&GraphEdit::_graph_node_moved);
ObjectTypeDB::bind_method(_MD("_graph_node_raised"),&GraphEdit::_graph_node_raised);
@@ -489,9 +554,12 @@ void GraphEdit::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_input_event"),&GraphEdit::_input_event);
ADD_SIGNAL(MethodInfo("connection_request",PropertyInfo(Variant::STRING,"from"),PropertyInfo(Variant::INT,"from_slot"),PropertyInfo(Variant::STRING,"to"),PropertyInfo(Variant::INT,"to_slot")));
+ ADD_SIGNAL(MethodInfo("disconnection_request",PropertyInfo(Variant::STRING,"from"),PropertyInfo(Variant::INT,"from_slot"),PropertyInfo(Variant::STRING,"to"),PropertyInfo(Variant::INT,"to_slot")));
}
+
+
GraphEdit::GraphEdit() {
top_layer=NULL;
top_layer=memnew(GraphEditFilter(this));
@@ -511,6 +579,7 @@ GraphEdit::GraphEdit() {
top_layer->add_child(v_scroll);
updating=false;
connecting=false;
+ right_disconnects=false;
h_scroll->connect("value_changed", this,"_scroll_moved");
v_scroll->connect("value_changed", this,"_scroll_moved");
diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h
index f8a2f3fee7..0a9da73ab6 100644
--- a/scene/gui/graph_edit.h
+++ b/scene/gui/graph_edit.h
@@ -51,6 +51,7 @@ private:
+ bool right_disconnects;
bool updating;
List<Connection> connections;
@@ -68,6 +69,8 @@ private:
void _top_layer_draw();
void _update_scroll_offset();
+ Array _get_connection_list() const;
+
friend class GraphEditFilter;
bool _filter_input(const Point2& p_point);
protected:
@@ -84,7 +87,11 @@ public:
void disconnect_node(const StringName& p_from, int p_from_port,const StringName& p_to,int p_to_port);
void clear_connections();
- void get_connection_list(List<Connection> *r_connections);
+ GraphEditFilter *get_top_layer() const { return top_layer; }
+ void get_connection_list(List<Connection> *r_connections) const;
+
+ void set_right_disconnects(bool p_enable);
+ bool is_right_disconnects_enabled() const;
GraphEdit();
diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp
index 50ee9abcf8..444b37855f 100644
--- a/scene/gui/graph_node.cpp
+++ b/scene/gui/graph_node.cpp
@@ -1,4 +1,5 @@
#include "graph_node.h"
+#include "method_bind_ext.inc"
bool GraphNode::_set(const StringName& p_name, const Variant& p_value) {
@@ -38,9 +39,8 @@ bool GraphNode::_set(const StringName& p_name, const Variant& p_value) {
bool GraphNode::_get(const StringName& p_name,Variant &r_ret) const{
- print_line("get "+p_name.operator String());
- if (!p_name.operator String().begins_with("slot/")) {
- print_line("no begins");
+
+ if (!p_name.operator String().begins_with("slot/")) {
return false;
}
@@ -68,7 +68,6 @@ bool GraphNode::_get(const StringName& p_name,Variant &r_ret) const{
else
return false;
- print_line("ask for: "+p_name.operator String()+" get: "+String(r_ret));
return true;
}
void GraphNode::_get_property_list( List<PropertyInfo> *p_list) const{
@@ -540,6 +539,30 @@ void GraphNode::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_title"),&GraphNode::get_title);
ObjectTypeDB::bind_method(_MD("_input_event"),&GraphNode::_input_event);
+ ObjectTypeDB::bind_method(_MD("set_slot","idx","enable_left","type_left","color_left","enable_right","type_right","color_right"),&GraphNode::set_slot);
+ ObjectTypeDB::bind_method(_MD("clear_slot","idx"),&GraphNode::clear_slot);
+ ObjectTypeDB::bind_method(_MD("clear_all_slots","idx"),&GraphNode::clear_all_slots);
+ ObjectTypeDB::bind_method(_MD("is_slot_enabled_left","idx"),&GraphNode::is_slot_enabled_left);
+ ObjectTypeDB::bind_method(_MD("get_slot_type_left","idx"),&GraphNode::get_slot_type_left);
+ ObjectTypeDB::bind_method(_MD("get_slot_color_left","idx"),&GraphNode::get_slot_color_left);
+ ObjectTypeDB::bind_method(_MD("is_slot_enabled_right","idx"),&GraphNode::is_slot_enabled_right);
+ ObjectTypeDB::bind_method(_MD("get_slot_type_right","idx"),&GraphNode::get_slot_type_right);
+ ObjectTypeDB::bind_method(_MD("get_slot_color_right","idx"),&GraphNode::get_slot_color_right);
+
+ ObjectTypeDB::bind_method(_MD("set_offset","offset"),&GraphNode::set_offset);
+ ObjectTypeDB::bind_method(_MD("get_offset"),&GraphNode::get_offset);
+
+ ObjectTypeDB::bind_method(_MD("get_connection_output_count"),&GraphNode::get_connection_output_count);
+ ObjectTypeDB::bind_method(_MD("get_connection_input_count"),&GraphNode::get_connection_input_count);
+
+ ObjectTypeDB::bind_method(_MD("get_connection_output_pos","idx"),&GraphNode::get_connection_output_pos);
+ ObjectTypeDB::bind_method(_MD("get_connection_output_type","idx"),&GraphNode::get_connection_output_type);
+ ObjectTypeDB::bind_method(_MD("get_connection_output_color","idx"),&GraphNode::get_connection_output_color);
+ ObjectTypeDB::bind_method(_MD("get_connection_input_pos","idx"),&GraphNode::get_connection_input_pos);
+ ObjectTypeDB::bind_method(_MD("get_connection_input_type","idx"),&GraphNode::get_connection_input_type);
+ ObjectTypeDB::bind_method(_MD("get_connection_input_color","idx"),&GraphNode::get_connection_input_color);
+
+
ObjectTypeDB::bind_method(_MD("set_show_close_button","show"),&GraphNode::set_show_close_button);
ObjectTypeDB::bind_method(_MD("is_close_button_visible"),&GraphNode::is_close_button_visible);
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 50a440e91c..d589b93049 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -1293,106 +1293,108 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
break;
bool valid=true;
- if (k.mod.command || k.mod.alt || k.mod.meta)
+ if (k.mod.command || k.mod.meta)
valid=false;
if (valid) {
- if (k.scancode==KEY_UP) {
-
- if (completion_index>0) {
- completion_index--;
+ if (!k.mod.alt) {
+ if (k.scancode==KEY_UP) {
+
+ if (completion_index>0) {
+ completion_index--;
+ completion_current=completion_options[completion_index];
+ update();
+ }
+ accept_event();
+ return;
+ }
+
+
+ if (k.scancode==KEY_DOWN) {
+
+ if (completion_index<completion_options.size()-1) {
+ completion_index++;
+ completion_current=completion_options[completion_index];
+ update();
+ }
+ accept_event();
+ return;
+ }
+
+ if (k.scancode==KEY_PAGEUP) {
+
+ completion_index-=get_constant("completion_lines");
+ if (completion_index<0)
+ completion_index=0;
completion_current=completion_options[completion_index];
update();
+ accept_event();
+ return;
}
- accept_event();
- return;
- }
-
-
- if (k.scancode==KEY_DOWN) {
-
- if (completion_index<completion_options.size()-1) {
- completion_index++;
+
+
+ if (k.scancode==KEY_PAGEDOWN) {
+
+ completion_index+=get_constant("completion_lines");
+ if (completion_index>=completion_options.size())
+ completion_index=completion_options.size()-1;
completion_current=completion_options[completion_index];
update();
+ accept_event();
+ return;
}
- accept_event();
- return;
- }
-
- if (k.scancode==KEY_PAGEUP) {
-
- completion_index-=get_constant("completion_lines");
- if (completion_index<0)
+
+ if (k.scancode==KEY_HOME) {
+
completion_index=0;
- completion_current=completion_options[completion_index];
- update();
- accept_event();
- return;
- }
-
-
- if (k.scancode==KEY_PAGEDOWN) {
-
- completion_index+=get_constant("completion_lines");
- if (completion_index>=completion_options.size())
+ completion_current=completion_options[completion_index];
+ update();
+ accept_event();
+ return;
+ }
+
+ if (k.scancode==KEY_END) {
+
completion_index=completion_options.size()-1;
- completion_current=completion_options[completion_index];
- update();
- accept_event();
- return;
- }
-
- if (k.scancode==KEY_HOME) {
-
- completion_index=0;
- completion_current=completion_options[completion_index];
- update();
- accept_event();
- return;
- }
-
- if (k.scancode==KEY_END) {
-
- completion_index=completion_options.size()-1;
- completion_current=completion_options[completion_index];
- update();
- accept_event();
- return;
- }
-
-
- if (k.scancode==KEY_DOWN) {
-
- if (completion_index<completion_options.size()-1) {
- completion_index++;
completion_current=completion_options[completion_index];
update();
+ accept_event();
+ return;
+ }
+
+
+ if (k.scancode==KEY_DOWN) {
+
+ if (completion_index<completion_options.size()-1) {
+ completion_index++;
+ completion_current=completion_options[completion_index];
+ update();
+ }
+ accept_event();
+ return;
+ }
+
+ if (k.scancode==KEY_RETURN || k.scancode==KEY_TAB) {
+
+ _confirm_completion();
+ accept_event();
+ return;
+ }
+
+ if (k.scancode==KEY_BACKSPACE) {
+
+ backspace_at_cursor();
+ _update_completion_candidates();
+ accept_event();
+ return;
+ }
+
+
+ if (k.scancode==KEY_SHIFT) {
+ accept_event();
+ return;
}
- accept_event();
- return;
- }
-
- if (k.scancode==KEY_RETURN || k.scancode==KEY_TAB) {
-
- _confirm_completion();
- accept_event();
- return;
- }
-
- if (k.scancode==KEY_BACKSPACE) {
-
- backspace_at_cursor();
- _update_completion_candidates();
- accept_event();
- return;
- }
-
-
- if (k.scancode==KEY_SHIFT) {
- accept_event();
- return;
}
if (k.unicode>32) {
@@ -1972,7 +1974,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
} break;
case KEY_U:{
- if (!k.mod.command || k.mod.shift || k.mod.alt) {
+ if (!k.mod.command || k.mod.shift) {
scancode_handled=false;
break;
}
@@ -2018,7 +2020,7 @@ void TextEdit::_input_event(const InputEvent& p_input_event) {
}
}
*/
- if (!scancode_handled && !k.mod.command && !k.mod.alt) { //for german kbds
+ if (!scancode_handled && !k.mod.command) { //for german kbds
if (k.unicode>=32) {