diff options
-rw-r--r-- | core/globals.cpp | 11 | ||||
-rw-r--r-- | core/globals.h | 3 | ||||
-rw-r--r-- | drivers/theora/video_stream_theora.cpp | 15 | ||||
-rw-r--r-- | scene/animation/animation_tree_player.cpp | 69 | ||||
-rw-r--r-- | scene/animation/animation_tree_player.h | 2 | ||||
-rw-r--r-- | scene/gui/video_player.cpp | 3 | ||||
-rw-r--r-- | tools/editor/editor_name_dialog.cpp (renamed from tools/editor/editor_layout_dialog.cpp) | 62 | ||||
-rw-r--r-- | tools/editor/editor_name_dialog.h (renamed from tools/editor/editor_layout_dialog.h) | 21 | ||||
-rw-r--r-- | tools/editor/editor_node.cpp | 7 | ||||
-rw-r--r-- | tools/editor/editor_node.h | 4 | ||||
-rw-r--r-- | tools/editor/project_manager.cpp | 7 | ||||
-rw-r--r-- | tools/editor/project_manager.h | 1 | ||||
-rw-r--r-- | tools/editor/project_settings.cpp | 64 | ||||
-rw-r--r-- | tools/editor/project_settings.h | 4 |
14 files changed, 195 insertions, 78 deletions
diff --git a/core/globals.cpp b/core/globals.cpp index 0a6a1876b3..fd0f2dbe14 100644 --- a/core/globals.cpp +++ b/core/globals.cpp @@ -1414,6 +1414,7 @@ Globals::Globals() { joyb.joy_button.button_index=JOY_BUTTON_0; va.push_back(joyb); set("input/ui_accept",va); + input_presets.push_back("input/ui_accept"); va=Array(); key.key.scancode=KEY_SPACE; @@ -1421,6 +1422,7 @@ Globals::Globals() { joyb.joy_button.button_index=JOY_BUTTON_3; va.push_back(joyb); set("input/ui_select",va); + input_presets.push_back("input/ui_select"); va=Array(); key.key.scancode=KEY_ESCAPE; @@ -1428,17 +1430,20 @@ Globals::Globals() { joyb.joy_button.button_index=JOY_BUTTON_1; va.push_back(joyb); set("input/ui_cancel",va); + input_presets.push_back("input/ui_cancel"); va=Array(); key.key.scancode=KEY_TAB; va.push_back(key); set("input/ui_focus_next",va); + input_presets.push_back("input/ui_focus_next"); va=Array(); key.key.scancode=KEY_TAB; key.key.mod.shift=true; va.push_back(key); set("input/ui_focus_prev",va); + input_presets.push_back("input/ui_focus_prev"); key.key.mod.shift=false; va=Array(); @@ -1447,6 +1452,7 @@ Globals::Globals() { joyb.joy_button.button_index=JOY_DPAD_LEFT; va.push_back(joyb); set("input/ui_left",va); + input_presets.push_back("input/ui_left"); va=Array(); key.key.scancode=KEY_RIGHT; @@ -1454,6 +1460,7 @@ Globals::Globals() { joyb.joy_button.button_index=JOY_DPAD_RIGHT; va.push_back(joyb); set("input/ui_right",va); + input_presets.push_back("input/ui_right"); va=Array(); key.key.scancode=KEY_UP; @@ -1461,6 +1468,7 @@ Globals::Globals() { joyb.joy_button.button_index=JOY_DPAD_UP; va.push_back(joyb); set("input/ui_up",va); + input_presets.push_back("input/ui_up"); va=Array(); key.key.scancode=KEY_DOWN; @@ -1468,17 +1476,20 @@ Globals::Globals() { joyb.joy_button.button_index=JOY_DPAD_DOWN; va.push_back(joyb); set("input/ui_down",va); + input_presets.push_back("input/ui_down"); va=Array(); key.key.scancode=KEY_PAGEUP; va.push_back(key); set("input/ui_page_up",va); + input_presets.push_back("input/ui_page_up"); va=Array(); key.key.scancode=KEY_PAGEDOWN; va.push_back(key); set("input/ui_page_down",va); + input_presets.push_back("input/ui_page_down"); // set("display/orientation", "landscape"); diff --git a/core/globals.h b/core/globals.h index 2ec56966f6..25c7f96be2 100644 --- a/core/globals.h +++ b/core/globals.h @@ -70,6 +70,7 @@ protected: Map<StringName,PropertyInfo> custom_prop_info; bool disable_platform_override; bool using_datapack; + List<String> input_presets; bool _set(const StringName& p_name, const Variant& p_value); @@ -124,6 +125,8 @@ public: Vector<String> get_optimizer_presets() const; + List<String> get_input_presets() const { return input_presets; } + void set_disable_platform_override(bool p_disable); Object* get_singleton_object(const String& p_name) const; diff --git a/drivers/theora/video_stream_theora.cpp b/drivers/theora/video_stream_theora.cpp index fe248bc911..3fad19b476 100644 --- a/drivers/theora/video_stream_theora.cpp +++ b/drivers/theora/video_stream_theora.cpp @@ -504,6 +504,10 @@ void VideoStreamPlaybackTheora::update(float p_delta) { bool audio_pending = false; + bool no_vorbis=false; + bool no_theora=false; + + while (vorbis_p) { int ret; float **pcm; @@ -575,6 +579,7 @@ void VideoStreamPlaybackTheora::update(float p_delta) { } } else { /* we need more data; break out to suck in another page */ //printf("need moar data\n"); + no_vorbis=true; break; }; } @@ -625,17 +630,19 @@ void VideoStreamPlaybackTheora::update(float p_delta) { /*If we are too slow, reduce the pp level.*/ pp_inc=pp_level>0?-1:0; } + } else { + } } else { - + no_theora=true; break; } } #ifdef THEORA_USE_THREAD_STREAMING - if (file && thread_eof && ring_buffer.data_left()==0) { + if (file && thread_eof && && (no_vorbis || no_theora) && ring_buffer.data_left()==0) { #else - if (file && /*!videobuf_ready && */ file->eof_reached()) { + if (file && /*!videobuf_ready && */ (no_vorbis || no_theora) && file->eof_reached()) { #endif printf("video done, stopping\n"); stop(); @@ -723,7 +730,7 @@ bool VideoStreamPlaybackTheora::is_playing() const { void VideoStreamPlaybackTheora::set_paused(bool p_paused) { - playing = !p_paused; + //pau = !p_paused; }; bool VideoStreamPlaybackTheora::is_paused(bool p_paused) const { diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index c7e259c3c6..c04c653819 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -432,7 +432,7 @@ void AnimationTreePlayer::_notification(int p_what) { } -float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode **r_prev_anim,float p_weight, float p_time, bool p_seek,const HashMap<NodePath,bool> *p_filter, float p_reverse_weight) { +float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode **r_prev_anim,float p_weight, float p_time, bool switched, bool p_seek,const HashMap<NodePath,bool> *p_filter, float p_reverse_weight) { ERR_FAIL_COND_V(!node_map.has(p_node), 0); NodeBase *nb=node_map[p_node]; @@ -445,7 +445,7 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode case NODE_OUTPUT: { NodeOut *on = static_cast<NodeOut*>(nb); - return _process_node(on->inputs[0].node,r_prev_anim,p_weight,p_time,p_seek); + return _process_node(on->inputs[0].node,r_prev_anim,p_weight,p_time,switched,p_seek); } break; case NODE_ANIMATION: { @@ -479,6 +479,9 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode an->time=anim_size; } + if (switched && an->time >= anim_size) { + an->time = 0.0; + } an->skip=true; for (List<AnimationNode::TrackRef>::Element *E=an->tref.front();E;E=E->next()) { @@ -520,7 +523,7 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode if (!osn->active) { //make it as if this node doesn't exist, pass input 0 by. - return _process_node(osn->inputs[0].node,r_prev_anim,p_weight,p_time,p_seek,p_filter,p_reverse_weight); + return _process_node(osn->inputs[0].node,r_prev_anim,p_weight,p_time,switched,p_seek,p_filter,p_reverse_weight); } if (p_seek) @@ -551,13 +554,13 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode if (!osn->filter.empty()) { - main_rem = _process_node(osn->inputs[0].node,r_prev_anim,(osn->mix?p_weight:p_weight*(1.0-blend)),p_time,p_seek,&osn->filter,p_weight); - os_rem = _process_node(osn->inputs[1].node,r_prev_anim,p_weight*blend,p_time,p_seek,&osn->filter,-1); + main_rem = _process_node(osn->inputs[0].node,r_prev_anim,(osn->mix?p_weight:p_weight*(1.0-blend)),p_time,switched,p_seek,&osn->filter,p_weight); + os_rem = _process_node(osn->inputs[1].node,r_prev_anim,p_weight*blend,p_time,osn->start,p_seek,&osn->filter,-1); } else { - main_rem = _process_node(osn->inputs[0].node,r_prev_anim,(osn->mix?p_weight:p_weight*(1.0-blend)),p_time,p_seek); - os_rem = _process_node(osn->inputs[1].node,r_prev_anim,p_weight*blend,p_time,p_seek); + main_rem = _process_node(osn->inputs[0].node,r_prev_anim,(osn->mix?p_weight:p_weight*(1.0-blend)),p_time,switched,p_seek); + os_rem = _process_node(osn->inputs[1].node,r_prev_anim,p_weight*blend,p_time,osn->start,p_seek); } if (osn->start) { @@ -578,8 +581,8 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode MixNode *mn = static_cast<MixNode*>(nb); - float rem = _process_node(mn->inputs[0].node,r_prev_anim,p_weight,p_time,p_seek,p_filter,p_reverse_weight); - _process_node(mn->inputs[1].node,r_prev_anim,p_weight*mn->amount,p_time,p_seek,p_filter,p_reverse_weight); + float rem = _process_node(mn->inputs[0].node,r_prev_anim,p_weight,p_time,switched,p_seek,p_filter,p_reverse_weight); + _process_node(mn->inputs[1].node,r_prev_anim,p_weight*mn->amount,p_time,switched,p_seek,p_filter,p_reverse_weight); return rem; } break; @@ -590,12 +593,12 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode float rem; if (!bn->filter.empty()) { - rem = _process_node(bn->inputs[0].node,r_prev_anim,p_weight*(1.0-bn->value),p_time,p_seek,&bn->filter,p_weight); - _process_node(bn->inputs[1].node,r_prev_anim,p_weight*bn->value,p_time,p_seek,&bn->filter,-1); + rem = _process_node(bn->inputs[0].node,r_prev_anim,p_weight*(1.0-bn->value),p_time,switched,p_seek,&bn->filter,p_weight); + _process_node(bn->inputs[1].node,r_prev_anim,p_weight*bn->value,p_time,switched,p_seek,&bn->filter,-1); } else { - rem = _process_node(bn->inputs[0].node,r_prev_anim,p_weight*(1.0-bn->value),p_time,p_seek,p_filter,p_reverse_weight*(1.0-bn->value)); - _process_node(bn->inputs[1].node,r_prev_anim,p_weight*bn->value,p_time,p_seek,p_filter,p_reverse_weight*bn->value); + rem = _process_node(bn->inputs[0].node,r_prev_anim,p_weight*(1.0-bn->value),p_time,switched,p_seek,p_filter,p_reverse_weight*(1.0-bn->value)); + _process_node(bn->inputs[1].node,r_prev_anim,p_weight*bn->value,p_time,switched,p_seek,p_filter,p_reverse_weight*bn->value); } return rem; @@ -606,16 +609,16 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode float rem; if (bn->value==0) { - rem = _process_node(bn->inputs[1].node,r_prev_anim,p_weight,p_time,p_seek,p_filter,p_reverse_weight); + rem = _process_node(bn->inputs[1].node,r_prev_anim,p_weight,p_time,switched,p_seek,p_filter,p_reverse_weight); } else if (bn->value>0) { - rem = _process_node(bn->inputs[1].node,r_prev_anim,p_weight*(1.0-bn->value),p_time,p_seek,p_filter,p_reverse_weight*(1.0-bn->value)); - _process_node(bn->inputs[2].node,r_prev_anim,p_weight*bn->value,p_time,p_seek,p_filter,p_reverse_weight*bn->value); + rem = _process_node(bn->inputs[1].node,r_prev_anim,p_weight*(1.0-bn->value),p_time,switched,p_seek,p_filter,p_reverse_weight*(1.0-bn->value)); + _process_node(bn->inputs[2].node,r_prev_anim,p_weight*bn->value,p_time,switched,p_seek,p_filter,p_reverse_weight*bn->value); } else { - rem = _process_node(bn->inputs[1].node,r_prev_anim,p_weight*(1.0+bn->value),p_time,p_seek,p_filter,p_reverse_weight*(1.0+bn->value)); - _process_node(bn->inputs[0].node,r_prev_anim,p_weight*-bn->value,p_time,p_seek,p_filter,p_reverse_weight*-bn->value); + rem = _process_node(bn->inputs[1].node,r_prev_anim,p_weight*(1.0+bn->value),p_time,switched,p_seek,p_filter,p_reverse_weight*(1.0+bn->value)); + _process_node(bn->inputs[0].node,r_prev_anim,p_weight*-bn->value,p_time,switched,p_seek,p_filter,p_reverse_weight*-bn->value); } return rem; @@ -623,10 +626,10 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode case NODE_BLEND4: { Blend4Node *bn = static_cast<Blend4Node*>(nb); - float rem = _process_node(bn->inputs[0].node,r_prev_anim,p_weight*(1.0-bn->value.x),p_time,p_seek,p_filter,p_reverse_weight*(1.0-bn->value.x)); - _process_node(bn->inputs[1].node,r_prev_anim,p_weight*bn->value.x,p_time,p_seek,p_filter,p_reverse_weight*bn->value.x); - float rem2 = _process_node(bn->inputs[2].node,r_prev_anim,p_weight*(1.0-bn->value.y),p_time,p_seek,p_filter,p_reverse_weight*(1.0-bn->value.y)); - _process_node(bn->inputs[3].node,r_prev_anim,p_weight*bn->value.y,p_time,p_seek,p_filter,p_reverse_weight*bn->value.y); + float rem = _process_node(bn->inputs[0].node,r_prev_anim,p_weight*(1.0-bn->value.x),p_time,switched,p_seek,p_filter,p_reverse_weight*(1.0-bn->value.x)); + _process_node(bn->inputs[1].node,r_prev_anim,p_weight*bn->value.x,p_time,switched,p_seek,p_filter,p_reverse_weight*bn->value.x); + float rem2 = _process_node(bn->inputs[2].node,r_prev_anim,p_weight*(1.0-bn->value.y),p_time,switched,p_seek,p_filter,p_reverse_weight*(1.0-bn->value.y)); + _process_node(bn->inputs[3].node,r_prev_anim,p_weight*bn->value.y,p_time,switched,p_seek,p_filter,p_reverse_weight*bn->value.y); return MAX(rem,rem2); @@ -634,9 +637,9 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode case NODE_TIMESCALE: { TimeScaleNode *tsn = static_cast<TimeScaleNode*>(nb); if (p_seek) - return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time,true,p_filter,p_reverse_weight); + return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time,switched,true,p_filter,p_reverse_weight); else - return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time*tsn->scale,false,p_filter,p_reverse_weight); + return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time*tsn->scale,switched,false,p_filter,p_reverse_weight); } break; case NODE_TIMESEEK: { @@ -644,12 +647,12 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode TimeSeekNode *tsn = static_cast<TimeSeekNode*>(nb); if (tsn->seek_pos>=0) { - float res = _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,tsn->seek_pos,true,p_filter,p_reverse_weight); + float res = _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,tsn->seek_pos,switched,true,p_filter,p_reverse_weight); tsn->seek_pos=-1; return res; } else - return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time,p_seek); + return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time,switched,p_seek); } break; case NODE_TRANSITION: { @@ -658,7 +661,7 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode if (tn->prev<0) { - float rem = _process_node(tn->inputs[tn->current].node,r_prev_anim,p_weight,p_time,p_seek,p_filter,p_reverse_weight); + float rem = _process_node(tn->inputs[tn->current].node,r_prev_anim,p_weight,p_time,switched,p_seek,p_filter,p_reverse_weight); if (p_seek) tn->time=p_time; else @@ -687,10 +690,10 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode if (!p_seek && tn->switched) { //just switched - rem = _process_node(tn->inputs[tn->current].node,r_prev_anim,p_weight*(1.0-blend),0,true,p_filter,p_reverse_weight*(1.0-blend)); + rem = _process_node(tn->inputs[tn->current].node,r_prev_anim,p_weight*(1.0-blend),0,true,true,p_filter,p_reverse_weight*(1.0-blend)); } else { - rem = _process_node(tn->inputs[tn->current].node,r_prev_anim,p_weight*(1.0-blend),p_time,p_seek,p_filter,p_reverse_weight*(1.0-blend)); + rem = _process_node(tn->inputs[tn->current].node,r_prev_anim,p_weight*(1.0-blend),p_time,switched,p_seek,p_filter,p_reverse_weight*(1.0-blend)); } @@ -700,10 +703,10 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode if (p_seek) { - _process_node(tn->inputs[tn->prev].node,r_prev_anim,p_weight*blend,0,false,p_filter,p_reverse_weight*blend); + _process_node(tn->inputs[tn->prev].node,r_prev_anim,p_weight*blend,0,true,false,p_filter,p_reverse_weight*blend); tn->time=p_time; } else { - _process_node(tn->inputs[tn->prev].node,r_prev_anim,p_weight*blend,p_time,false,p_filter,p_reverse_weight*blend); + _process_node(tn->inputs[tn->prev].node,r_prev_anim,p_weight*blend,p_time,switched,false,p_filter,p_reverse_weight*blend); tn->time+=p_time; tn->prev_xfading-=p_time; if (tn->prev_xfading<0) { @@ -740,10 +743,10 @@ void AnimationTreePlayer::_process_animation(float p_delta) { AnimationNode *prev=NULL; if (reset_request) { - _process_node(out_name,&prev, 1.0, 0, true ); + _process_node(out_name,&prev, 1.0, 0, true, true ); reset_request=false; } else - _process_node(out_name,&prev, 1.0, p_delta, false ); + _process_node(out_name,&prev, 1.0, p_delta, false, false ); if (dirty_caches) { //some animation changed.. ignore this pass diff --git a/scene/animation/animation_tree_player.h b/scene/animation/animation_tree_player.h index 9ea5ccf330..fb1c9016ff 100644 --- a/scene/animation/animation_tree_player.h +++ b/scene/animation/animation_tree_player.h @@ -267,7 +267,7 @@ private: Map<StringName,NodeBase*> node_map; // return time left to finish animation - float _process_node(const StringName& p_node,AnimationNode **r_prev_anim, float p_weight,float p_step, bool p_seek=false,const HashMap<NodePath,bool> *p_filter=NULL, float p_reverse_weight=0); + float _process_node(const StringName& p_node,AnimationNode **r_prev_anim, float p_weight,float p_step, bool switched, bool p_seek=false,const HashMap<NodePath,bool> *p_filter=NULL, float p_reverse_weight=0); void _process_animation(float p_delta); bool reset_request; diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp index 22b19f50b2..58683a07ad 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -117,8 +117,9 @@ void VideoPlayer::_notification(int p_notification) { case NOTIFICATION_ENTER_TREE: { //set_idle_process(false); //don't annoy - if (stream.is_valid() && autoplay && !get_tree()->is_editor_hint()) + if (stream.is_valid() && autoplay && !get_tree()->is_editor_hint()) { play(); + } } break; case NOTIFICATION_PROCESS: { diff --git a/tools/editor/editor_layout_dialog.cpp b/tools/editor/editor_name_dialog.cpp index d3a60f90dd..82050e0a56 100644 --- a/tools/editor/editor_layout_dialog.cpp +++ b/tools/editor/editor_name_dialog.cpp @@ -1,5 +1,5 @@ /*************************************************************************/ -/* editor_layout_dialog.cpp */ +/* editor_name_dialog.cpp */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -27,39 +27,63 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#include "editor_layout_dialog.h" +#include "editor_name_dialog.h" #include "object_type_db.h" +#include "os/keyboard.h" -void EditorLayoutDialog::clear_layout_name() { +void EditorNameDialog::_line_input_event(const InputEvent& p_event) { - layout_name->clear(); + if (p_event.type == InputEvent::KEY) { + + if (!p_event.key.pressed) + return; + + switch (p_event.key.scancode) { + case KEY_ENTER: + case KEY_RETURN: { + + if (get_hide_on_ok()) + hide(); + ok_pressed(); + accept_event(); + } break; + case KEY_ESCAPE: { + + hide(); + accept_event(); + } break; + } + } } -void EditorLayoutDialog::_post_popup() { +void EditorNameDialog::_post_popup() { ConfirmationDialog::_post_popup(); - layout_name->grab_focus(); + name->clear(); + name->grab_focus(); } -void EditorLayoutDialog::ok_pressed() { +void EditorNameDialog::ok_pressed() { - if (layout_name->get_text()!="") { - emit_signal("layout_selected", layout_name->get_text()); + if (name->get_text()!="") { + emit_signal("name_confirmed", name->get_text()); } } -void EditorLayoutDialog::_bind_methods() { +void EditorNameDialog::_bind_methods() { + + ObjectTypeDB::bind_method("_line_input_event",&EditorNameDialog::_line_input_event); - ADD_SIGNAL(MethodInfo("layout_selected",PropertyInfo( Variant::STRING,"layout_name"))); + ADD_SIGNAL(MethodInfo("name_confirmed",PropertyInfo( Variant::STRING,"name"))); } -EditorLayoutDialog::EditorLayoutDialog() +EditorNameDialog::EditorNameDialog() { - - layout_name = memnew( LineEdit ); - layout_name->set_margin(MARGIN_TOP,5); - layout_name->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5); - layout_name->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,5); - add_child(layout_name); - move_child(layout_name, get_label()->get_index()+1); + name = memnew( LineEdit ); + add_child(name); + move_child(name, get_label()->get_index()+1); + name->set_margin(MARGIN_TOP,5); + name->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5); + name->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,5); + name->connect("input_event", this, "_line_input_event"); } diff --git a/tools/editor/editor_layout_dialog.h b/tools/editor/editor_name_dialog.h index be9644f8ae..85f4f772e6 100644 --- a/tools/editor/editor_layout_dialog.h +++ b/tools/editor/editor_name_dialog.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* editor_layout_dialog.h */ +/* editor_name_dialog.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ @@ -27,17 +27,19 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef EDITOR_LAYOUT_DIALOG_H -#define EDITOR_LAYOUT_DIALOG_H +#ifndef EDITOR_NAME_DIALOG_H +#define EDITOR_NAME_DIALOG_H #include "scene/gui/dialogs.h" #include "scene/gui/line_edit.h" -class EditorLayoutDialog : public ConfirmationDialog { +class EditorNameDialog : public ConfirmationDialog { - OBJ_TYPE( EditorLayoutDialog, ConfirmationDialog ); + OBJ_TYPE( EditorNameDialog, ConfirmationDialog ); - LineEdit *layout_name; + LineEdit *name; + + void _line_input_event(const InputEvent& p_event); protected: @@ -46,9 +48,10 @@ protected: virtual void _post_popup(); public: - void clear_layout_name(); - EditorLayoutDialog(); + LineEdit* get_line_edit() { return name; } + + EditorNameDialog(); }; -#endif // EDITOR_LAYOUT_DIALOG_H +#endif // EDITOR_NAME_DIALOG_H diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp index 1166d1b133..6352a235f7 100644 --- a/tools/editor/editor_node.cpp +++ b/tools/editor/editor_node.cpp @@ -4124,7 +4124,6 @@ void EditorNode::_bind_methods() { ObjectTypeDB::bind_method("_dock_move_right",&EditorNode::_dock_move_right); ObjectTypeDB::bind_method("_layout_menu_option",&EditorNode::_layout_menu_option); - ObjectTypeDB::bind_method("_layout_dialog_action",&EditorNode::_dialog_action); ObjectTypeDB::bind_method("set_current_scene",&EditorNode::set_current_scene); ObjectTypeDB::bind_method("set_current_version",&EditorNode::set_current_version); @@ -4624,7 +4623,6 @@ void EditorNode::_layout_menu_option(int p_id) { case SETTINGS_LAYOUT_SAVE: { current_option=p_id; - layout_dialog->clear_layout_name(); layout_dialog->set_title("Save Layout"); layout_dialog->get_ok()->set_text("Save"); layout_dialog->popup_centered(); @@ -4632,7 +4630,6 @@ void EditorNode::_layout_menu_option(int p_id) { case SETTINGS_LAYOUT_DELETE: { current_option=p_id; - layout_dialog->clear_layout_name(); layout_dialog->set_title("Delete Layout"); layout_dialog->get_ok()->set_text("Delete"); layout_dialog->popup_centered(); @@ -5428,13 +5425,13 @@ EditorNode::EditorNode() { p->add_separator(); p->add_item("About",SETTINGS_ABOUT); - layout_dialog = memnew( EditorLayoutDialog ); + layout_dialog = memnew( EditorNameDialog ); gui_base->add_child(layout_dialog); layout_dialog->set_hide_on_ok(false); layout_dialog->set_size(Size2(175, 70)); confirm_error = memnew( AcceptDialog ); layout_dialog->add_child(confirm_error); - layout_dialog->connect("layout_selected", this,"_layout_dialog_action"); + layout_dialog->connect("name_confirmed", this,"_dialog_action"); sources_button = memnew( ToolButton ); right_menu_hb->add_child(sources_button); diff --git a/tools/editor/editor_node.h b/tools/editor/editor_node.h index c4429f943b..113d897eee 100644 --- a/tools/editor/editor_node.h +++ b/tools/editor/editor_node.h @@ -76,7 +76,7 @@ #include "editor_reimport_dialog.h" #include "import_settings.h" #include "tools/editor/editor_plugin.h" -#include "tools/editor/editor_layout_dialog.h" +#include "tools/editor/editor_name_dialog.h" #include "fileserver/editor_file_server.h" #include "editor_resource_preview.h" @@ -290,7 +290,7 @@ class EditorNode : public Node { Ref<ConfigFile> default_theme; PopupMenu *editor_layouts; - EditorLayoutDialog *layout_dialog; + EditorNameDialog *layout_dialog; AcceptDialog *confirm_error; //OptimizedPresetsDialog *optimized_presets; diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp index 4db56ea2f9..880df85c19 100644 --- a/tools/editor/project_manager.cpp +++ b/tools/editor/project_manager.cpp @@ -348,6 +348,13 @@ struct ProjectItem { _FORCE_INLINE_ bool operator ==(const ProjectItem& l) const { return project==l.project; } }; +void ProjectManager::_notification(int p_what) { + + if (p_what==NOTIFICATION_ENTER_TREE) { + + get_tree()->set_editor_hint(true); + } +} void ProjectManager::_panel_draw(Node *p_hb) { diff --git a/tools/editor/project_manager.h b/tools/editor/project_manager.h index 1e6ea9c1c9..f8edb6dc10 100644 --- a/tools/editor/project_manager.h +++ b/tools/editor/project_manager.h @@ -85,6 +85,7 @@ class ProjectManager : public Control { protected: + void _notification(int p_what); static void _bind_methods(); public: ProjectManager(); diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp index a2419895eb..2ca15449aa 100644 --- a/tools/editor/project_settings.cpp +++ b/tools/editor/project_settings.cpp @@ -338,6 +338,15 @@ void ProjectSettings::_action_button_pressed(Object* p_obj, int p_column,int p_i add_at="input/"+ti->get_text(0); } else if (p_id==2) { + //rename + + add_at="input/"+ti->get_text(0); + rename_action->popup_centered(); + rename_action->get_line_edit()->set_text(ti->get_text(0)); + rename_action->get_line_edit()->set_cursor_pos(ti->get_text(0).length()); + rename_action->get_line_edit()->select_all(); + + } else if (p_id==3) { //remove if (ti->get_parent()==input_editor->get_root()) { @@ -418,7 +427,9 @@ void ProjectSettings::_update_actions() { item->set_cell_mode(0,TreeItem::CELL_MODE_CHECK); item->set_text(0,name); item->add_button(0,get_icon("Add","EditorIcons"),1); - item->add_button(0,get_icon("Remove","EditorIcons"),2); + if (!Globals::get_singleton()->get_input_presets().find(pi.name)) + item->add_button(0,get_icon("Rename","EditorIcons"),2); + item->add_button(0,get_icon("Remove","EditorIcons"),3); item->set_custom_bg_color(0,get_color("prop_subsection","Editor")); item->set_editable(0,true); item->set_checked(0,pi.usage&PROPERTY_USAGE_CHECKED); @@ -486,7 +497,7 @@ void ProjectSettings::_update_actions() { action->set_icon(0,get_icon("JoyAxis","EditorIcons")); } break; } - action->add_button(0,get_icon("Remove","EditorIcons"),2); + action->add_button(0,get_icon("Remove","EditorIcons"),3); action->set_metadata(0,i); } } @@ -616,6 +627,45 @@ void ProjectSettings::_action_add() { } +void ProjectSettings::_action_rename(const String &p_name) { + + + if (p_name.find("/")!=-1 || p_name.find(":")!=-1 || p_name=="") { + message->set_text("Invalid Action (Anything goes but / or :)."); + message->popup_centered(Size2(300,100)); + return; + } + + String new_name = "input/"+p_name; + + if (Globals::get_singleton()->has(new_name)) { + message->set_text("Action '"+p_name+"' already exists!."); + message->popup_centered(Size2(300,100)); + return; + } + + int order = Globals::get_singleton()->get_order(add_at); + Array va = Globals::get_singleton()->get(add_at); + bool persisting = Globals::get_singleton()->is_persisting(add_at); + + undo_redo->create_action("Rename Input Action Event"); + undo_redo->add_do_method(Globals::get_singleton(),"clear",add_at); + undo_redo->add_do_method(Globals::get_singleton(),"set",new_name,va); + undo_redo->add_do_method(Globals::get_singleton(),"set_persisting",new_name,persisting); + undo_redo->add_do_method(Globals::get_singleton(),"set_order",new_name,order); + undo_redo->add_undo_method(Globals::get_singleton(),"clear",new_name); + undo_redo->add_undo_method(Globals::get_singleton(),"set",add_at,va); + undo_redo->add_undo_method(Globals::get_singleton(),"set_persisting",add_at,persisting); + undo_redo->add_undo_method(Globals::get_singleton(),"set_order",add_at,order); + undo_redo->add_do_method(this,"_update_actions"); + undo_redo->add_undo_method(this,"_update_actions"); + undo_redo->add_do_method(this,"_settings_changed"); + undo_redo->add_undo_method(this,"_settings_changed"); + undo_redo->commit_action(); + + rename_action->hide(); +} + void ProjectSettings::_item_checked(const String& p_item, bool p_check) { @@ -1219,6 +1269,7 @@ void ProjectSettings::_bind_methods() { ObjectTypeDB::bind_method(_MD("_action_adds"),&ProjectSettings::_action_adds); ObjectTypeDB::bind_method(_MD("_action_persist_toggle"),&ProjectSettings::_action_persist_toggle); ObjectTypeDB::bind_method(_MD("_action_button_pressed"),&ProjectSettings::_action_button_pressed); + ObjectTypeDB::bind_method(_MD("_action_rename"),&ProjectSettings::_action_rename); ObjectTypeDB::bind_method(_MD("_update_actions"),&ProjectSettings::_update_actions); ObjectTypeDB::bind_method(_MD("_wait_for_key"),&ProjectSettings::_wait_for_key); ObjectTypeDB::bind_method(_MD("_add_item"),&ProjectSettings::_add_item); @@ -1438,12 +1489,17 @@ ProjectSettings::ProjectSettings(EditorData *p_data) { add_child(popup_add); popup_add->connect("item_pressed",this,"_add_item"); + rename_action = memnew( EditorNameDialog ); + add_child(rename_action); + rename_action->set_hide_on_ok(false); + rename_action->set_size(Size2(200, 70)); + rename_action->set_title("Rename Input Action"); + rename_action->connect("name_confirmed", this,"_action_rename"); + press_a_key = memnew( ConfirmationDialog ); press_a_key->set_focus_mode(FOCUS_ALL); add_child(press_a_key); - - l = memnew( Label ); l->set_text("Press a Key.."); l->set_area_as_parent_rect(); diff --git a/tools/editor/project_settings.h b/tools/editor/project_settings.h index b122609e52..225a556eb8 100644 --- a/tools/editor/project_settings.h +++ b/tools/editor/project_settings.h @@ -34,6 +34,7 @@ #include "optimized_save_dialog.h" #include "undo_redo.h" #include "editor_data.h" +#include "editor_name_dialog.h" //#include "project_export_settings.h" class ProjectSettings : public AcceptDialog { @@ -66,6 +67,8 @@ class ProjectSettings : public AcceptDialog { Label *device_index_label; MenuButton *popup_platform; + EditorNameDialog *rename_action; + LineEdit *action_name; Tree *input_editor; bool setting; @@ -106,6 +109,7 @@ class ProjectSettings : public AcceptDialog { void _action_adds(String); void _action_add(); + void _action_rename(const String& p_name); void _device_input_add(); void _item_checked(const String& p_item, bool p_check); |