-Merged Script and Help tabs
-Help tabs can be opened many at the same time -Color temperatures for opened scripts -Dominant script opening when switching scene tab
This commit is contained in:
parent
8420c24f7f
commit
081a236c67
@ -244,6 +244,8 @@ void VideoStreamPlaybackTheora::set_file(const String& p_file) {
|
|||||||
int stateflag = 0;
|
int stateflag = 0;
|
||||||
|
|
||||||
int audio_track_skip=audio_track;
|
int audio_track_skip=audio_track;
|
||||||
|
|
||||||
|
|
||||||
while(!stateflag){
|
while(!stateflag){
|
||||||
int ret=buffer_data();
|
int ret=buffer_data();
|
||||||
if(ret==0)break;
|
if(ret==0)break;
|
||||||
@ -273,6 +275,10 @@ void VideoStreamPlaybackTheora::set_file(const String& p_file) {
|
|||||||
if (audio_track_skip) {
|
if (audio_track_skip) {
|
||||||
vorbis_info_clear(&vi);
|
vorbis_info_clear(&vi);
|
||||||
vorbis_comment_clear(&vc);
|
vorbis_comment_clear(&vc);
|
||||||
|
ogg_stream_clear(&test);
|
||||||
|
vorbis_info_init(&vi);
|
||||||
|
vorbis_comment_init(&vc);
|
||||||
|
|
||||||
audio_track_skip--;
|
audio_track_skip--;
|
||||||
} else {
|
} else {
|
||||||
copymem(&vo,&test,sizeof(test));
|
copymem(&vo,&test,sizeof(test));
|
||||||
|
@ -235,6 +235,37 @@ int ItemList::get_current() const {
|
|||||||
return current;
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemList::move_item(int p_item,int p_to_pos) {
|
||||||
|
|
||||||
|
ERR_FAIL_INDEX(p_item,items.size());
|
||||||
|
ERR_FAIL_INDEX(p_to_pos,items.size()+1);
|
||||||
|
|
||||||
|
Item it=items[p_item];
|
||||||
|
items.remove(p_item);;
|
||||||
|
|
||||||
|
if (p_to_pos>p_item) {
|
||||||
|
p_to_pos--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_to_pos>=items.size()) {
|
||||||
|
items.push_back(it);
|
||||||
|
} else {
|
||||||
|
items.insert(p_to_pos,it);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current<0) {
|
||||||
|
//do none
|
||||||
|
} if (p_item==current) {
|
||||||
|
current=p_to_pos;
|
||||||
|
} else if (p_to_pos>p_item && current>p_item && current<p_to_pos) {
|
||||||
|
current--;
|
||||||
|
} else if (p_to_pos<p_item && current<p_item && current>p_to_pos) {
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
int ItemList::get_item_count() const{
|
int ItemList::get_item_count() const{
|
||||||
|
|
||||||
|
@ -101,6 +101,7 @@ public:
|
|||||||
void set_current(int p_current);
|
void set_current(int p_current);
|
||||||
int get_current() const;
|
int get_current() const;
|
||||||
|
|
||||||
|
void move_item(int p_item,int p_to_pos);
|
||||||
|
|
||||||
int get_item_count() const;
|
int get_item_count() const;
|
||||||
void remove_item(int p_idx);
|
void remove_item(int p_idx);
|
||||||
|
@ -54,6 +54,8 @@ void MenuButton::_unhandled_key_input(InputEvent p_event) {
|
|||||||
|
|
||||||
|
|
||||||
int item = popup->find_item_by_accelerator(code);
|
int item = popup->find_item_by_accelerator(code);
|
||||||
|
|
||||||
|
|
||||||
if (item>=0 && ! popup->is_item_disabled(item))
|
if (item>=0 && ! popup->is_item_disabled(item))
|
||||||
popup->activate_item(item);
|
popup->activate_item(item);
|
||||||
/*
|
/*
|
||||||
|
@ -719,7 +719,7 @@ void RichTextLabel::_input_event(InputEvent p_event) {
|
|||||||
case InputEvent::KEY: {
|
case InputEvent::KEY: {
|
||||||
|
|
||||||
const InputEventKey &k=p_event.key;
|
const InputEventKey &k=p_event.key;
|
||||||
if (k.pressed) {
|
if (k.pressed && !k.mod.alt && !k.mod.shift && !k.mod.command && !k.mod.meta) {
|
||||||
bool handled=true;
|
bool handled=true;
|
||||||
switch(k.scancode) {
|
switch(k.scancode) {
|
||||||
case KEY_PAGEUP: {
|
case KEY_PAGEUP: {
|
||||||
@ -765,6 +765,7 @@ void RichTextLabel::_input_event(InputEvent p_event) {
|
|||||||
default: handled=false;
|
default: handled=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (handled)
|
if (handled)
|
||||||
accept_event();
|
accept_event();
|
||||||
}
|
}
|
||||||
|
@ -384,12 +384,12 @@ void VideoPlayer::_bind_methods() {
|
|||||||
ObjectTypeDB::bind_method(_MD("set_buffering_msec","msec"),&VideoPlayer::set_buffering_msec);
|
ObjectTypeDB::bind_method(_MD("set_buffering_msec","msec"),&VideoPlayer::set_buffering_msec);
|
||||||
ObjectTypeDB::bind_method(_MD("get_buffering_msec"),&VideoPlayer::get_buffering_msec);
|
ObjectTypeDB::bind_method(_MD("get_buffering_msec"),&VideoPlayer::get_buffering_msec);
|
||||||
|
|
||||||
|
ADD_PROPERTY( PropertyInfo(Variant::INT, "stream/audio_track",PROPERTY_HINT_RANGE,"0,128,1"), _SCS("set_audio_track"), _SCS("get_audio_track") );
|
||||||
ADD_PROPERTY( PropertyInfo(Variant::OBJECT, "stream/stream", PROPERTY_HINT_RESOURCE_TYPE,"VideoStream"), _SCS("set_stream"), _SCS("get_stream") );
|
ADD_PROPERTY( PropertyInfo(Variant::OBJECT, "stream/stream", PROPERTY_HINT_RESOURCE_TYPE,"VideoStream"), _SCS("set_stream"), _SCS("get_stream") );
|
||||||
// ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/loop"), _SCS("set_loop"), _SCS("has_loop") );
|
// ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/loop"), _SCS("set_loop"), _SCS("has_loop") );
|
||||||
ADD_PROPERTY( PropertyInfo(Variant::REAL, "stream/volume_db", PROPERTY_HINT_RANGE,"-80,24,0.01"), _SCS("set_volume_db"), _SCS("get_volume_db") );
|
ADD_PROPERTY( PropertyInfo(Variant::REAL, "stream/volume_db", PROPERTY_HINT_RANGE,"-80,24,0.01"), _SCS("set_volume_db"), _SCS("get_volume_db") );
|
||||||
ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/autoplay"), _SCS("set_autoplay"), _SCS("has_autoplay") );
|
ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/autoplay"), _SCS("set_autoplay"), _SCS("has_autoplay") );
|
||||||
ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/paused"), _SCS("set_paused"), _SCS("is_paused") );
|
ADD_PROPERTY( PropertyInfo(Variant::BOOL, "stream/paused"), _SCS("set_paused"), _SCS("is_paused") );
|
||||||
ADD_PROPERTY( PropertyInfo(Variant::INT, "stream/audio_track",PROPERTY_HINT_RANGE,"0,128,1"), _SCS("set_audio_track"), _SCS("get_audio_track") );
|
|
||||||
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "expand" ), _SCS("set_expand"),_SCS("has_expand") );
|
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "expand" ), _SCS("set_expand"),_SCS("has_expand") );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,6 +188,7 @@ void make_default_theme() {
|
|||||||
// Font Colors
|
// Font Colors
|
||||||
|
|
||||||
Color control_font_color = Color::html("e0e0e0");
|
Color control_font_color = Color::html("e0e0e0");
|
||||||
|
Color control_font_color_lower = Color::html("a0a0a0");
|
||||||
Color control_font_color_low = Color::html("b0b0b0");
|
Color control_font_color_low = Color::html("b0b0b0");
|
||||||
Color control_font_color_hover = Color::html("f0f0f0");
|
Color control_font_color_hover = Color::html("f0f0f0");
|
||||||
Color control_font_color_disabled = Color(0.9,0.9,0.9,0.2);
|
Color control_font_color_disabled = Color(0.9,0.9,0.9,0.2);
|
||||||
@ -273,7 +274,7 @@ void make_default_theme() {
|
|||||||
t->set_color("font_color_hover","ToolButton", control_font_color_hover );
|
t->set_color("font_color_hover","ToolButton", control_font_color_hover );
|
||||||
t->set_color("font_color_disabled","ToolButton", Color(0.9,0.95,1,0.3) );
|
t->set_color("font_color_disabled","ToolButton", Color(0.9,0.95,1,0.3) );
|
||||||
|
|
||||||
t->set_constant("hseparation","ToolButton", 0 );
|
t->set_constant("hseparation","ToolButton", 3 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -649,7 +650,7 @@ void make_default_theme() {
|
|||||||
t->set_constant("icon_margin","ItemList",4);
|
t->set_constant("icon_margin","ItemList",4);
|
||||||
t->set_constant("line_separation","ItemList",2);
|
t->set_constant("line_separation","ItemList",2);
|
||||||
t->set_font("font","ItemList", default_font );
|
t->set_font("font","ItemList", default_font );
|
||||||
t->set_color("font_color","ItemList", control_font_color_low );
|
t->set_color("font_color","ItemList", control_font_color_lower );
|
||||||
t->set_color("font_color_selected","ItemList", control_font_color_pressed );
|
t->set_color("font_color_selected","ItemList", control_font_color_pressed );
|
||||||
t->set_color("guide_color","ItemList", Color(0,0,0,0.1) );
|
t->set_color("guide_color","ItemList", Color(0,0,0,0.1) );
|
||||||
t->set_stylebox("selected","ItemList", item_selected_oof );
|
t->set_stylebox("selected","ItemList", item_selected_oof );
|
||||||
|
@ -618,7 +618,7 @@ CodeTextEditor::CodeTextEditor() {
|
|||||||
line_col = memnew( Label );
|
line_col = memnew( Label );
|
||||||
add_child(line_col);
|
add_child(line_col);
|
||||||
line_col->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,135);
|
line_col->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_END,135);
|
||||||
line_col->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,20);
|
line_col->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,15);
|
||||||
line_col->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
|
line_col->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
|
||||||
line_col->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,5);
|
line_col->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,5);
|
||||||
//line_col->set_align(Label::ALIGN_RIGHT);
|
//line_col->set_align(Label::ALIGN_RIGHT);
|
||||||
@ -637,7 +637,7 @@ CodeTextEditor::CodeTextEditor() {
|
|||||||
error = memnew( Label );
|
error = memnew( Label );
|
||||||
add_child(error);
|
add_child(error);
|
||||||
error->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5);
|
error->set_anchor_and_margin(MARGIN_LEFT,ANCHOR_BEGIN,5);
|
||||||
error->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,20);
|
error->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,15);
|
||||||
error->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
|
error->set_anchor_and_margin(MARGIN_BOTTOM,ANCHOR_END,1);
|
||||||
error->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,130);
|
error->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,130);
|
||||||
error->hide();
|
error->hide();
|
||||||
|
@ -300,9 +300,9 @@ void EditorHelpSearch::_bind_methods() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
EditorHelpSearch::EditorHelpSearch(EditorNode *p_editor) {
|
EditorHelpSearch::EditorHelpSearch() {
|
||||||
|
|
||||||
editor=p_editor;
|
editor=EditorNode::get_singleton();
|
||||||
VBoxContainer *vbc = memnew( VBoxContainer );
|
VBoxContainer *vbc = memnew( VBoxContainer );
|
||||||
add_child(vbc);
|
add_child(vbc);
|
||||||
set_child_rect(vbc);
|
set_child_rect(vbc);
|
||||||
@ -318,17 +318,138 @@ EditorHelpSearch::EditorHelpSearch(EditorNode *p_editor) {
|
|||||||
search_box->connect("input_event",this,"_sbox_input");
|
search_box->connect("input_event",this,"_sbox_input");
|
||||||
search_options = memnew( Tree );
|
search_options = memnew( Tree );
|
||||||
vbc->add_margin_child("Matches:",search_options,true);
|
vbc->add_margin_child("Matches:",search_options,true);
|
||||||
get_ok()->set_text("View");
|
get_ok()->set_text("Open");
|
||||||
get_ok()->set_disabled(true);
|
get_ok()->set_disabled(true);
|
||||||
register_text_enter(search_box);
|
register_text_enter(search_box);
|
||||||
set_hide_on_ok(false);
|
set_hide_on_ok(false);
|
||||||
search_options->connect("item_activated",this,"_confirmed");
|
search_options->connect("item_activated",this,"_confirmed");
|
||||||
set_title("Search Classes");
|
set_title("Search Classes");
|
||||||
|
|
||||||
// search_options->set_hide_root(true);
|
// search_options->set_hide_root(true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////
|
||||||
|
/// /////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void EditorHelpIndex::add_type(const String& p_type,HashMap<String,TreeItem*>& p_types,TreeItem *p_root) {
|
||||||
|
|
||||||
|
if (p_types.has(p_type))
|
||||||
|
return;
|
||||||
|
// if (!ObjectTypeDB::is_type(p_type,base) || p_type==base)
|
||||||
|
// return;
|
||||||
|
|
||||||
|
String inherits=EditorHelp::get_doc_data()->class_list[p_type].inherits;
|
||||||
|
|
||||||
|
TreeItem *parent=p_root;
|
||||||
|
|
||||||
|
|
||||||
|
if (inherits.length()) {
|
||||||
|
|
||||||
|
if (!p_types.has(inherits)) {
|
||||||
|
|
||||||
|
add_type(inherits,p_types,p_root);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_types.has(inherits) )
|
||||||
|
parent=p_types[inherits];
|
||||||
|
}
|
||||||
|
|
||||||
|
TreeItem *item = class_list->create_item(parent);
|
||||||
|
item->set_metadata(0,p_type);
|
||||||
|
item->set_tooltip(0,EditorHelp::get_doc_data()->class_list[p_type].brief_description);
|
||||||
|
item->set_text(0,p_type);
|
||||||
|
|
||||||
|
|
||||||
|
if (has_icon(p_type,"EditorIcons")) {
|
||||||
|
|
||||||
|
item->set_icon(0, get_icon(p_type,"EditorIcons"));
|
||||||
|
}
|
||||||
|
|
||||||
|
p_types[p_type]=item;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void EditorHelpIndex::_tree_item_selected() {
|
||||||
|
|
||||||
|
|
||||||
|
TreeItem *s=class_list->get_selected();
|
||||||
|
if (!s)
|
||||||
|
return;
|
||||||
|
|
||||||
|
emit_signal("open_class",s->get_text(0));
|
||||||
|
|
||||||
|
hide();
|
||||||
|
|
||||||
|
//_goto_desc(s->get_text(0));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorHelpIndex::select_class(const String& p_class) {
|
||||||
|
|
||||||
|
if (!tree_item_map.has(p_class))
|
||||||
|
return;
|
||||||
|
tree_item_map[p_class]->select(0);
|
||||||
|
class_list->ensure_cursor_is_visible();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorHelpIndex::_notification(int p_what) {
|
||||||
|
|
||||||
|
if (p_what==NOTIFICATION_ENTER_TREE) {
|
||||||
|
|
||||||
|
class_list->clear();
|
||||||
|
tree_item_map.clear();
|
||||||
|
TreeItem *root = class_list->create_item();
|
||||||
|
class_list->set_hide_root(true);
|
||||||
|
connect("confirmed",this,"_tree_item_selected");
|
||||||
|
|
||||||
|
|
||||||
|
for(Map<String,DocData::ClassDoc>::Element *E=EditorHelp::get_doc_data()->class_list.front();E;E=E->next()) {
|
||||||
|
|
||||||
|
|
||||||
|
add_type(E->key(),tree_item_map,root);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorHelpIndex::_bind_methods() {
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method("_tree_item_selected",&EditorHelpIndex::_tree_item_selected);
|
||||||
|
ObjectTypeDB::bind_method("select_class",&EditorHelpIndex::select_class);
|
||||||
|
ADD_SIGNAL( MethodInfo("open_class"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EditorHelpIndex::EditorHelpIndex() {
|
||||||
|
|
||||||
|
|
||||||
|
VBoxContainer *vbc = memnew( VBoxContainer );
|
||||||
|
add_child(vbc);
|
||||||
|
set_child_rect(vbc);
|
||||||
|
|
||||||
|
class_list = memnew( Tree );
|
||||||
|
vbc->add_margin_child("Class List: ",class_list,true);
|
||||||
|
class_list->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
|
|
||||||
|
|
||||||
|
class_list->connect("item_activated",this,"_tree_item_selected");
|
||||||
|
|
||||||
|
|
||||||
|
get_ok()->set_text("Open");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////////////
|
||||||
|
/// /////////////////////////////////
|
||||||
DocData *EditorHelp::doc=NULL;
|
DocData *EditorHelp::doc=NULL;
|
||||||
|
|
||||||
void EditorHelp::_unhandled_key_input(const InputEvent& p_ev) {
|
void EditorHelp::_unhandled_key_input(const InputEvent& p_ev) {
|
||||||
@ -339,8 +460,6 @@ void EditorHelp::_unhandled_key_input(const InputEvent& p_ev) {
|
|||||||
|
|
||||||
search->grab_focus();
|
search->grab_focus();
|
||||||
search->select_all();
|
search->select_all();
|
||||||
} else if (p_ev.key.mod.shift && p_ev.key.scancode==KEY_F1) {
|
|
||||||
class_search->popup();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -351,17 +470,19 @@ void EditorHelp::_search(const String&) {
|
|||||||
|
|
||||||
|
|
||||||
String stext=search->get_text();
|
String stext=search->get_text();
|
||||||
bool keep = prev_search==stext && class_list->get_selected() && prev_search_page==class_list->get_selected()->get_text(0);
|
bool keep = prev_search==stext;
|
||||||
|
|
||||||
class_desc->search(stext, keep);
|
bool ret = class_desc->search(stext, keep);
|
||||||
|
if (!ret) {
|
||||||
|
class_desc->search(stext, false);
|
||||||
|
}
|
||||||
|
|
||||||
prev_search=stext;
|
prev_search=stext;
|
||||||
if (class_list->get_selected())
|
|
||||||
prev_search_page=class_list->get_selected()->get_text(0);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
void EditorHelp::_button_pressed(int p_idx) {
|
void EditorHelp::_button_pressed(int p_idx) {
|
||||||
|
|
||||||
if (p_idx==PAGE_CLASS_LIST) {
|
if (p_idx==PAGE_CLASS_LIST) {
|
||||||
@ -399,16 +520,11 @@ void EditorHelp::_button_pressed(int p_idx) {
|
|||||||
} else if (p_idx==PAGE_SEARCH) {
|
} else if (p_idx==PAGE_SEARCH) {
|
||||||
|
|
||||||
_search("");
|
_search("");
|
||||||
} else if (p_idx==CLASS_SEARCH) {
|
}
|
||||||
|
|
||||||
class_search->popup();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void EditorHelp::_class_list_select(const String& p_select) {
|
void EditorHelp::_class_list_select(const String& p_select) {
|
||||||
|
|
||||||
@ -417,16 +533,28 @@ void EditorHelp::_class_list_select(const String& p_select) {
|
|||||||
|
|
||||||
void EditorHelp::_class_desc_select(const String& p_select) {
|
void EditorHelp::_class_desc_select(const String& p_select) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// print_line("LINK: "+p_select);
|
||||||
if (p_select.begins_with("#")) {
|
if (p_select.begins_with("#")) {
|
||||||
_goto_desc(p_select.substr(1,p_select.length()));
|
//_goto_desc(p_select.substr(1,p_select.length()));
|
||||||
|
emit_signal("go_to_help","class_name:"+p_select.substr(1,p_select.length()));
|
||||||
return;
|
return;
|
||||||
} else if (p_select.begins_with("@")) {
|
} else if (p_select.begins_with("@")) {
|
||||||
|
|
||||||
String m = p_select.substr(1,p_select.length());
|
String m = p_select.substr(1,p_select.length());
|
||||||
|
|
||||||
|
if (m.find(".")!=-1) {
|
||||||
|
//must go somewhere else
|
||||||
|
|
||||||
|
emit_signal("go_to_help","class_method:"+m.get_slice(".",0)+":"+m.get_slice(".",0));
|
||||||
|
} else {
|
||||||
|
|
||||||
if (!method_line.has(m))
|
if (!method_line.has(m))
|
||||||
return;
|
return;
|
||||||
class_desc->scroll_to_line(method_line[m]);
|
class_desc->scroll_to_line(method_line[m]);
|
||||||
return;
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -449,68 +577,40 @@ void EditorHelp::_add_type(const String& p_type) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorHelp::_update_history_buttons() {
|
|
||||||
|
|
||||||
back->set_disabled(history_pos<2);
|
|
||||||
forward->set_disabled(history_pos>=history.size());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void EditorHelp::_scroll_changed(double p_scroll) {
|
void EditorHelp::_scroll_changed(double p_scroll) {
|
||||||
|
|
||||||
if (scroll_locked)
|
if (scroll_locked)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int p = history_pos -1;
|
|
||||||
if (p<0 || p>=history.size())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (class_desc->get_v_scroll()->is_hidden())
|
if (class_desc->get_v_scroll()->is_hidden())
|
||||||
p_scroll=0;
|
p_scroll=0;
|
||||||
|
|
||||||
history[p].scroll=p_scroll;
|
//history[p].scroll=p_scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error EditorHelp::_goto_desc(const String& p_class,bool p_update_history,int p_vscr) {
|
Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
|
||||||
|
|
||||||
//ERR_FAIL_COND(!doc->class_list.has(p_class));
|
//ERR_FAIL_COND(!doc->class_list.has(p_class));
|
||||||
if (!doc->class_list.has(p_class))
|
if (!doc->class_list.has(p_class))
|
||||||
return ERR_DOES_NOT_EXIST;
|
return ERR_DOES_NOT_EXIST;
|
||||||
|
|
||||||
|
|
||||||
if (tree_item_map.has(p_class)) {
|
//if (tree_item_map.has(p_class)) {
|
||||||
select_locked = true;
|
select_locked = true;
|
||||||
tree_item_map[p_class]->select(0);
|
//}
|
||||||
class_list->ensure_cursor_is_visible();
|
|
||||||
}
|
|
||||||
|
|
||||||
class_desc->show();
|
class_desc->show();
|
||||||
//tabs->set_current_tab(PAGE_CLASS_DESC);
|
//tabs->set_current_tab(PAGE_CLASS_DESC);
|
||||||
edited_class->set_pressed(true);
|
|
||||||
class_list_button->set_pressed(false);
|
|
||||||
description_line=0;
|
description_line=0;
|
||||||
|
|
||||||
if (p_class==edited_class->get_text())
|
if (p_class==edited_class)
|
||||||
return OK; //already there
|
return OK; //already there
|
||||||
|
|
||||||
scroll_locked=true;
|
scroll_locked=true;
|
||||||
|
|
||||||
if (p_update_history) {
|
|
||||||
|
|
||||||
history.resize(history_pos);
|
|
||||||
history_pos++;
|
|
||||||
History h;
|
|
||||||
h.c=p_class;
|
|
||||||
h.scroll=0;
|
|
||||||
history.push_back(h);
|
|
||||||
_update_history_buttons();
|
|
||||||
class_desc->get_v_scroll()->set_val(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
class_desc->clear();
|
class_desc->clear();
|
||||||
method_line.clear();
|
method_line.clear();
|
||||||
edited_class->set_text(p_class);
|
edited_class=p_class;
|
||||||
//edited_class->show();
|
//edited_class->show();
|
||||||
|
|
||||||
|
|
||||||
@ -925,10 +1025,7 @@ Error EditorHelp::_goto_desc(const String& p_class,bool p_update_history,int p_v
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_update_history) {
|
|
||||||
|
|
||||||
class_desc->get_v_scroll()->set_val(history[history_pos-1].scroll);
|
|
||||||
}
|
|
||||||
|
|
||||||
scroll_locked=false;
|
scroll_locked=false;
|
||||||
|
|
||||||
@ -939,8 +1036,6 @@ void EditorHelp::_request_help(const String& p_string) {
|
|||||||
Error err = _goto_desc(p_string);
|
Error err = _goto_desc(p_string);
|
||||||
if (err==OK) {
|
if (err==OK) {
|
||||||
editor->call("_editor_select",3);
|
editor->call("_editor_select",3);
|
||||||
} else {
|
|
||||||
class_search->popup(p_string);
|
|
||||||
}
|
}
|
||||||
//100 palabras
|
//100 palabras
|
||||||
}
|
}
|
||||||
@ -1209,63 +1304,11 @@ void EditorHelp::_add_text(const String& p_bbcode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EditorHelp::add_type(const String& p_type,HashMap<String,TreeItem*>& p_types,TreeItem *p_root) {
|
|
||||||
|
|
||||||
if (p_types.has(p_type))
|
|
||||||
return;
|
|
||||||
// if (!ObjectTypeDB::is_type(p_type,base) || p_type==base)
|
|
||||||
// return;
|
|
||||||
|
|
||||||
String inherits=doc->class_list[p_type].inherits;
|
|
||||||
|
|
||||||
TreeItem *parent=p_root;
|
|
||||||
|
|
||||||
|
|
||||||
if (inherits.length()) {
|
|
||||||
|
|
||||||
if (!p_types.has(inherits)) {
|
|
||||||
|
|
||||||
add_type(inherits,p_types,p_root);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p_types.has(inherits) )
|
|
||||||
parent=p_types[inherits];
|
|
||||||
}
|
|
||||||
|
|
||||||
TreeItem *item = class_list->create_item(parent);
|
|
||||||
item->set_metadata(0,p_type);
|
|
||||||
item->set_tooltip(0,doc->class_list[p_type].brief_description);
|
|
||||||
item->set_text(0,p_type);
|
|
||||||
|
|
||||||
|
|
||||||
if (has_icon(p_type,"EditorIcons")) {
|
|
||||||
|
|
||||||
item->set_icon(0, get_icon(p_type,"EditorIcons"));
|
|
||||||
}
|
|
||||||
|
|
||||||
p_types[p_type]=item;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void EditorHelp::_update_doc() {
|
void EditorHelp::_update_doc() {
|
||||||
|
|
||||||
|
|
||||||
class_list->clear();
|
|
||||||
|
|
||||||
List<StringName> type_list;
|
|
||||||
|
|
||||||
tree_item_map.clear();
|
|
||||||
|
|
||||||
TreeItem *root = class_list->create_item();
|
|
||||||
class_list->set_hide_root(true);
|
|
||||||
List<StringName>::Element *I=type_list.front();
|
|
||||||
|
|
||||||
for(Map<String,DocData::ClassDoc>::Element *E=doc->class_list.front();E;E=E->next()) {
|
|
||||||
|
|
||||||
|
|
||||||
add_type(E->key(),tree_item_map,root);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1289,8 +1332,8 @@ void EditorHelp::_notification(int p_what) {
|
|||||||
case NOTIFICATION_READY: {
|
case NOTIFICATION_READY: {
|
||||||
|
|
||||||
|
|
||||||
forward->set_icon(get_icon("Forward","EditorIcons"));
|
// forward->set_icon(get_icon("Forward","EditorIcons"));
|
||||||
back->set_icon(get_icon("Back","EditorIcons"));
|
// back->set_icon(get_icon("Back","EditorIcons"));
|
||||||
_update_doc();
|
_update_doc();
|
||||||
editor->connect("request_help",this,"_request_help");
|
editor->connect("request_help",this,"_request_help");
|
||||||
|
|
||||||
@ -1298,226 +1341,121 @@ void EditorHelp::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorHelp::_tree_item_selected() {
|
|
||||||
|
|
||||||
if (select_locked) {
|
|
||||||
select_locked = false;
|
|
||||||
return;
|
void EditorHelp::go_to_help(const String& p_help) {
|
||||||
|
|
||||||
|
_help_callback(p_help);
|
||||||
}
|
}
|
||||||
TreeItem *s=class_list->get_selected();
|
|
||||||
if (!s)
|
void EditorHelp::go_to_class(const String& p_class,int p_scroll) {
|
||||||
return;
|
|
||||||
select_locked=true;
|
_goto_desc(p_class,p_scroll);
|
||||||
_goto_desc(s->get_text(0));
|
}
|
||||||
select_locked=false;
|
|
||||||
|
void EditorHelp::popup_search() {
|
||||||
|
|
||||||
|
|
||||||
|
search_dialog->popup_centered(Size2(250,80));
|
||||||
|
search->grab_focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorHelp::_search_cbk() {
|
||||||
|
|
||||||
|
_search(search->get_text());
|
||||||
|
}
|
||||||
|
|
||||||
|
String EditorHelp::get_class_name() {
|
||||||
|
|
||||||
|
return edited_class;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditorHelp::search_again() {
|
||||||
|
_search(prev_search);
|
||||||
|
}
|
||||||
|
|
||||||
|
int EditorHelp::get_scroll() const {
|
||||||
|
|
||||||
|
return class_desc->get_v_scroll()->get_val();
|
||||||
|
}
|
||||||
|
void EditorHelp::set_scroll(int p_scroll) {
|
||||||
|
|
||||||
|
|
||||||
|
class_desc->get_v_scroll()->set_val(p_scroll);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorHelp::_bind_methods() {
|
void EditorHelp::_bind_methods() {
|
||||||
|
|
||||||
ObjectTypeDB::bind_method("_class_list_select",&EditorHelp::_class_list_select);
|
ObjectTypeDB::bind_method("_class_list_select",&EditorHelp::_class_list_select);
|
||||||
ObjectTypeDB::bind_method("_class_desc_select",&EditorHelp::_class_desc_select);
|
ObjectTypeDB::bind_method("_class_desc_select",&EditorHelp::_class_desc_select);
|
||||||
ObjectTypeDB::bind_method("_button_pressed",&EditorHelp::_button_pressed);
|
// ObjectTypeDB::bind_method("_button_pressed",&EditorHelp::_button_pressed);
|
||||||
ObjectTypeDB::bind_method("_scroll_changed",&EditorHelp::_scroll_changed);
|
ObjectTypeDB::bind_method("_scroll_changed",&EditorHelp::_scroll_changed);
|
||||||
ObjectTypeDB::bind_method("_request_help",&EditorHelp::_request_help);
|
ObjectTypeDB::bind_method("_request_help",&EditorHelp::_request_help);
|
||||||
ObjectTypeDB::bind_method("_unhandled_key_input",&EditorHelp::_unhandled_key_input);
|
ObjectTypeDB::bind_method("_unhandled_key_input",&EditorHelp::_unhandled_key_input);
|
||||||
ObjectTypeDB::bind_method("_search",&EditorHelp::_search);
|
ObjectTypeDB::bind_method("_search",&EditorHelp::_search);
|
||||||
ObjectTypeDB::bind_method("_tree_item_selected",&EditorHelp::_tree_item_selected);
|
ObjectTypeDB::bind_method("_search_cbk",&EditorHelp::_search_cbk);
|
||||||
|
|
||||||
ObjectTypeDB::bind_method("_help_callback",&EditorHelp::_help_callback);
|
ObjectTypeDB::bind_method("_help_callback",&EditorHelp::_help_callback);
|
||||||
|
|
||||||
|
ADD_SIGNAL(MethodInfo("go_to_help"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorHelp::EditorHelp(EditorNode *p_editor) {
|
EditorHelp::EditorHelp() {
|
||||||
|
|
||||||
editor=p_editor;
|
editor=EditorNode::get_singleton();
|
||||||
|
|
||||||
VBoxContainer *vbc = this;
|
VBoxContainer *vbc = this;
|
||||||
|
|
||||||
HBoxContainer *panel_hb = memnew( HBoxContainer );
|
|
||||||
|
|
||||||
Button *b = memnew( Button );
|
|
||||||
b->set_text("Class List");
|
|
||||||
panel_hb->add_child(b);
|
|
||||||
vbc->add_child(panel_hb);
|
|
||||||
b->set_toggle_mode(true);
|
|
||||||
b->set_pressed(true);
|
|
||||||
b->connect("pressed",this,"_button_pressed",make_binds(PAGE_CLASS_LIST));
|
|
||||||
class_list_button=b;
|
|
||||||
class_list_button->hide();
|
|
||||||
|
|
||||||
b = memnew( Button );
|
|
||||||
b->set_text("Class");
|
|
||||||
panel_hb->add_child(b);
|
|
||||||
edited_class=b;
|
|
||||||
edited_class->hide();
|
|
||||||
b->set_toggle_mode(true);
|
|
||||||
b->connect("pressed",this,"_button_pressed",make_binds(PAGE_CLASS_DESC));
|
|
||||||
|
|
||||||
b = memnew( Button );
|
|
||||||
b->set_text("Search in Classes");
|
|
||||||
panel_hb->add_child(b);
|
|
||||||
b->connect("pressed",this,"_button_pressed",make_binds(CLASS_SEARCH));
|
|
||||||
|
|
||||||
Control *expand = memnew( Control );
|
|
||||||
expand->set_h_size_flags(SIZE_EXPAND_FILL);
|
|
||||||
panel_hb->add_child(expand);
|
|
||||||
|
|
||||||
b = memnew( Button );
|
|
||||||
panel_hb->add_child(b);
|
|
||||||
back=b;
|
|
||||||
b->connect("pressed",this,"_button_pressed",make_binds(PAGE_CLASS_PREV));
|
|
||||||
|
|
||||||
b = memnew( Button );
|
|
||||||
panel_hb->add_child(b);
|
|
||||||
forward=b;
|
|
||||||
b->connect("pressed",this,"_button_pressed",make_binds(PAGE_CLASS_NEXT));
|
|
||||||
|
|
||||||
Separator *hs = memnew( VSeparator );
|
|
||||||
panel_hb->add_child(hs);
|
|
||||||
Control *ec = memnew( Control );
|
|
||||||
ec->set_custom_minimum_size(Size2(200,1));
|
|
||||||
panel_hb->add_child(ec);
|
|
||||||
search = memnew( LineEdit );
|
|
||||||
ec->add_child(search);
|
|
||||||
search->set_area_as_parent_rect();
|
|
||||||
search->connect("text_entered",this,"_search");
|
|
||||||
|
|
||||||
b = memnew( Button );
|
|
||||||
b->set_text("Find");
|
|
||||||
panel_hb->add_child(b);
|
|
||||||
b->connect("pressed",this,"_button_pressed",make_binds(PAGE_SEARCH));
|
|
||||||
|
|
||||||
hs = memnew( VSeparator );
|
|
||||||
panel_hb->add_child(hs);
|
|
||||||
|
|
||||||
h_split = memnew( HSplitContainer );
|
|
||||||
h_split->set_v_size_flags(SIZE_EXPAND_FILL);
|
|
||||||
|
|
||||||
|
|
||||||
vbc->add_child(h_split);
|
|
||||||
|
|
||||||
class_list = memnew( Tree );
|
|
||||||
h_split->add_child(class_list);
|
|
||||||
//class_list->connect("meta_clicked",this,"_class_list_select");
|
//class_list->connect("meta_clicked",this,"_class_list_select");
|
||||||
//class_list->set_selection_enabled(true);
|
//class_list->set_selection_enabled(true);
|
||||||
|
|
||||||
{
|
{
|
||||||
PanelContainer *pc = memnew( PanelContainer );
|
Panel *pc = memnew( Panel );
|
||||||
Ref<StyleBoxFlat> style( memnew( StyleBoxFlat ) );
|
Ref<StyleBoxFlat> style( memnew( StyleBoxFlat ) );
|
||||||
style->set_bg_color( EditorSettings::get_singleton()->get("text_editor/background_color") );
|
style->set_bg_color( EditorSettings::get_singleton()->get("text_editor/background_color") );
|
||||||
style->set_default_margin(MARGIN_LEFT,20);
|
pc->set_v_size_flags(SIZE_EXPAND_FILL);
|
||||||
style->set_default_margin(MARGIN_TOP,20);
|
|
||||||
pc->add_style_override("panel", style); //get_stylebox("normal","TextEdit"));
|
pc->add_style_override("panel", style); //get_stylebox("normal","TextEdit"));
|
||||||
h_split->add_child(pc);
|
vbc->add_child(pc);
|
||||||
class_desc = memnew( RichTextLabel );
|
class_desc = memnew( RichTextLabel );
|
||||||
pc->add_child(class_desc);
|
pc->add_child(class_desc);
|
||||||
|
class_desc->set_area_as_parent_rect(8);
|
||||||
class_desc->connect("meta_clicked",this,"_class_desc_select");
|
class_desc->connect("meta_clicked",this,"_class_desc_select");
|
||||||
}
|
}
|
||||||
|
|
||||||
class_desc->get_v_scroll()->connect("value_changed",this,"_scroll_changed");
|
class_desc->get_v_scroll()->connect("value_changed",this,"_scroll_changed");
|
||||||
class_desc->set_selection_enabled(true);
|
class_desc->set_selection_enabled(true);
|
||||||
editor=p_editor;
|
|
||||||
history_pos=0;
|
|
||||||
scroll_locked=false;
|
scroll_locked=false;
|
||||||
select_locked=false;
|
select_locked=false;
|
||||||
set_process_unhandled_key_input(true);
|
set_process_unhandled_key_input(true);
|
||||||
h_split->set_split_offset(200);
|
|
||||||
class_list->connect("cell_selected",this,"_tree_item_selected");
|
|
||||||
class_desc->hide();
|
class_desc->hide();
|
||||||
|
|
||||||
class_search = memnew( EditorHelpSearch(editor) );
|
search_dialog = memnew( ConfirmationDialog );
|
||||||
|
add_child(search_dialog);
|
||||||
|
VBoxContainer *search_vb = memnew( VBoxContainer );
|
||||||
|
search_dialog->add_child(search_vb);
|
||||||
|
search_dialog->set_child_rect(search_vb);
|
||||||
|
search = memnew( LineEdit );
|
||||||
|
search_dialog->register_text_enter(search);
|
||||||
|
search_vb->add_margin_child("Search Text",search);
|
||||||
|
search_dialog->get_ok()->set_text("Find");
|
||||||
|
search_dialog->connect("confirmed",this,"_search_cbk");
|
||||||
|
search_dialog->set_hide_on_ok(false);
|
||||||
|
search_dialog->set_self_opacity(0.8);
|
||||||
|
|
||||||
|
|
||||||
|
/*class_search = memnew( EditorHelpSearch(editor) );
|
||||||
editor->get_gui_base()->add_child(class_search);
|
editor->get_gui_base()->add_child(class_search);
|
||||||
class_search->connect("go_to_help",this,"_help_callback");
|
class_search->connect("go_to_help",this,"_help_callback");*/
|
||||||
|
|
||||||
// prev_search_page=-1;
|
// prev_search_page=-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorHelp::~EditorHelp() {
|
EditorHelp::~EditorHelp() {
|
||||||
if (doc)
|
|
||||||
memdelete(doc);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void EditorHelpPlugin::edit(Object *p_object) {
|
|
||||||
|
|
||||||
if (!p_object->cast_to<Script>())
|
|
||||||
return;
|
|
||||||
|
|
||||||
//editor_help->edit(p_object->cast_to<Script>());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool EditorHelpPlugin::handles(Object *p_object) const {
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorHelpPlugin::make_visible(bool p_visible) {
|
|
||||||
|
|
||||||
if (p_visible) {
|
|
||||||
editor_help->show();
|
|
||||||
} else {
|
|
||||||
|
|
||||||
editor_help->hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditorHelpPlugin::selected_notify() {
|
|
||||||
|
|
||||||
//editor_help->ensure_select_current();
|
|
||||||
}
|
|
||||||
|
|
||||||
Dictionary EditorHelpPlugin::get_state() const {
|
|
||||||
|
|
||||||
return Dictionary();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorHelpPlugin::set_state(const Dictionary& p_state) {
|
|
||||||
|
|
||||||
//editor_help->set_state(p_state);
|
|
||||||
}
|
|
||||||
void EditorHelpPlugin::clear() {
|
|
||||||
|
|
||||||
//editor_help->clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorHelpPlugin::save_external_data() {
|
|
||||||
|
|
||||||
//editor_help->save_external_data();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorHelpPlugin::apply_changes() {
|
|
||||||
|
|
||||||
//editor_help->apply_helps();
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorHelpPlugin::restore_global_state() {
|
|
||||||
|
|
||||||
//if (bool(EDITOR_DEF("text_editor/restore_helps_on_load",true))) {
|
|
||||||
// editor_help->_load_files_state();
|
|
||||||
//}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditorHelpPlugin::save_global_state() {
|
|
||||||
|
|
||||||
//if (bool(EDITOR_DEF("text_editor/restore_helps_on_load",true))) {
|
|
||||||
// editor_help->_save_files_state();
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
EditorHelpPlugin::EditorHelpPlugin(EditorNode *p_node) {
|
|
||||||
|
|
||||||
editor=p_node;
|
|
||||||
editor_help = memnew( EditorHelp(p_node) );
|
|
||||||
editor->get_viewport()->add_child(editor_help);
|
|
||||||
editor_help->set_area_as_parent_rect();
|
|
||||||
editor_help->hide();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
EditorHelpPlugin::~EditorHelpPlugin()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
@ -70,9 +70,29 @@ public:
|
|||||||
|
|
||||||
void popup(const String& p_term="");
|
void popup(const String& p_term="");
|
||||||
|
|
||||||
EditorHelpSearch(EditorNode *p_editor);
|
EditorHelpSearch();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class EditorHelpIndex : public ConfirmationDialog {
|
||||||
|
OBJ_TYPE( EditorHelpIndex, ConfirmationDialog );
|
||||||
|
|
||||||
|
|
||||||
|
Tree *class_list;
|
||||||
|
HashMap<String,TreeItem*> tree_item_map;
|
||||||
|
|
||||||
|
void _tree_item_selected();
|
||||||
|
void add_type(const String& p_type,HashMap<String,TreeItem*>& p_types,TreeItem *p_root);
|
||||||
|
protected:
|
||||||
|
|
||||||
|
void _notification(int p_what);
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
void select_class(const String& p_class);
|
||||||
|
|
||||||
|
EditorHelpIndex();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
class EditorHelp : public VBoxContainer {
|
class EditorHelp : public VBoxContainer {
|
||||||
@ -91,17 +111,11 @@ class EditorHelp : public VBoxContainer {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct History {
|
|
||||||
String c;
|
|
||||||
int scroll;
|
|
||||||
};
|
|
||||||
|
|
||||||
Vector<History> history;
|
|
||||||
int history_pos;
|
|
||||||
bool select_locked;
|
bool select_locked;
|
||||||
|
|
||||||
String prev_search;
|
String prev_search;
|
||||||
String prev_search_page;
|
|
||||||
|
String edited_class;
|
||||||
|
|
||||||
EditorNode *editor;
|
EditorNode *editor;
|
||||||
Map<String,int> method_line;
|
Map<String,int> method_line;
|
||||||
@ -111,21 +125,17 @@ class EditorHelp : public VBoxContainer {
|
|||||||
Map<String,int> constant_line;
|
Map<String,int> constant_line;
|
||||||
int description_line;
|
int description_line;
|
||||||
|
|
||||||
Tree *class_list;
|
|
||||||
|
|
||||||
RichTextLabel *class_desc;
|
RichTextLabel *class_desc;
|
||||||
HSplitContainer *h_split;
|
HSplitContainer *h_split;
|
||||||
static DocData *doc;
|
static DocData *doc;
|
||||||
|
|
||||||
Button *class_list_button;
|
|
||||||
Button *edited_class;
|
ConfirmationDialog *search_dialog;
|
||||||
Button *back;
|
|
||||||
Button *forward;
|
|
||||||
LineEdit *search;
|
LineEdit *search;
|
||||||
|
|
||||||
String base_path;
|
|
||||||
|
|
||||||
HashMap<String,TreeItem*> tree_item_map;
|
String base_path;
|
||||||
|
|
||||||
|
|
||||||
void _help_callback(const String& p_topic);
|
void _help_callback(const String& p_topic);
|
||||||
@ -133,25 +143,24 @@ class EditorHelp : public VBoxContainer {
|
|||||||
void _add_text(const String& p_text);
|
void _add_text(const String& p_text);
|
||||||
bool scroll_locked;
|
bool scroll_locked;
|
||||||
|
|
||||||
void _button_pressed(int p_idx);
|
//void _button_pressed(int p_idx);
|
||||||
void _add_type(const String& p_type);
|
void _add_type(const String& p_type);
|
||||||
|
|
||||||
void _scroll_changed(double p_scroll);
|
void _scroll_changed(double p_scroll);
|
||||||
void _class_list_select(const String& p_select);
|
void _class_list_select(const String& p_select);
|
||||||
void _class_desc_select(const String& p_select);
|
void _class_desc_select(const String& p_select);
|
||||||
|
|
||||||
Error _goto_desc(const String& p_class,bool p_update_history=true,int p_vscr=-1);
|
Error _goto_desc(const String& p_class, int p_vscr=-1);
|
||||||
void _update_history_buttons();
|
//void _update_history_buttons();
|
||||||
void _update_doc();
|
void _update_doc();
|
||||||
|
|
||||||
void _request_help(const String& p_string);
|
void _request_help(const String& p_string);
|
||||||
void _search(const String& p_str);
|
void _search(const String& p_str);
|
||||||
|
void _search_cbk();
|
||||||
|
|
||||||
void _unhandled_key_input(const InputEvent& p_ev);
|
void _unhandled_key_input(const InputEvent& p_ev);
|
||||||
void add_type(const String& p_type,HashMap<String,TreeItem*>& p_types,TreeItem *p_root);
|
|
||||||
void _tree_item_selected();
|
|
||||||
|
|
||||||
EditorHelpSearch *class_search;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@ -163,41 +172,25 @@ public:
|
|||||||
static void generate_doc();
|
static void generate_doc();
|
||||||
static DocData *get_doc_data() { return doc; }
|
static DocData *get_doc_data() { return doc; }
|
||||||
|
|
||||||
EditorHelp(EditorNode *p_editor=NULL);
|
void go_to_help(const String& p_help);
|
||||||
|
void go_to_class(const String& p_class,int p_scroll=0);
|
||||||
|
|
||||||
|
void popup_search();
|
||||||
|
void search_again();
|
||||||
|
|
||||||
|
String get_class_name();
|
||||||
|
|
||||||
|
void set_focused() { class_desc->grab_focus(); }
|
||||||
|
|
||||||
|
int get_scroll() const;
|
||||||
|
void set_scroll(int p_scroll);
|
||||||
|
|
||||||
|
EditorHelp();
|
||||||
~EditorHelp();
|
~EditorHelp();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class EditorHelpPlugin : public EditorPlugin {
|
|
||||||
|
|
||||||
OBJ_TYPE( EditorHelpPlugin, EditorPlugin );
|
|
||||||
|
|
||||||
EditorHelp *editor_help;
|
|
||||||
EditorNode *editor;
|
|
||||||
public:
|
|
||||||
|
|
||||||
virtual String get_name() const { return "Help"; }
|
|
||||||
bool has_main_screen() const { return true; }
|
|
||||||
virtual void edit(Object *p_node);
|
|
||||||
virtual bool handles(Object *p_node) const;
|
|
||||||
virtual void make_visible(bool p_visible);
|
|
||||||
virtual void selected_notify();
|
|
||||||
|
|
||||||
Dictionary get_state() const;
|
|
||||||
virtual void set_state(const Dictionary& p_state);
|
|
||||||
virtual void clear();
|
|
||||||
|
|
||||||
virtual void save_external_data();
|
|
||||||
virtual void apply_changes();
|
|
||||||
|
|
||||||
virtual void restore_global_state();
|
|
||||||
virtual void save_global_state();
|
|
||||||
|
|
||||||
EditorHelpPlugin(EditorNode *p_node);
|
|
||||||
~EditorHelpPlugin();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif // EDITOR_HELP_H
|
#endif // EDITOR_HELP_H
|
||||||
|
@ -163,12 +163,12 @@ void EditorNode::_unhandled_input(const InputEvent& p_event) {
|
|||||||
|
|
||||||
switch(p_event.key.scancode) {
|
switch(p_event.key.scancode) {
|
||||||
|
|
||||||
case KEY_F1:
|
/*case KEY_F1:
|
||||||
if (!p_event.key.mod.shift && !p_event.key.mod.command)
|
if (!p_event.key.mod.shift && !p_event.key.mod.command)
|
||||||
_editor_select(3);
|
_editor_select(3);
|
||||||
break;
|
break;*/
|
||||||
case KEY_F2: _editor_select(0); break;
|
case KEY_F1: _editor_select(0); break;
|
||||||
case KEY_F3: _editor_select(1); break;
|
case KEY_F2: _editor_select(1); break;
|
||||||
case KEY_F4: _editor_select(2); break;
|
case KEY_F4: _editor_select(2); break;
|
||||||
case KEY_F5: _menu_option_confirm((p_event.key.mod.control&&p_event.key.mod.shift)?RUN_PLAY_CUSTOM_SCENE:RUN_PLAY,true); break;
|
case KEY_F5: _menu_option_confirm((p_event.key.mod.control&&p_event.key.mod.shift)?RUN_PLAY_CUSTOM_SCENE:RUN_PLAY,true); break;
|
||||||
case KEY_F6: _menu_option_confirm(RUN_PLAY_SCENE,true); break;
|
case KEY_F6: _menu_option_confirm(RUN_PLAY_SCENE,true); break;
|
||||||
@ -2846,7 +2846,7 @@ Control* EditorNode::get_viewport() {
|
|||||||
void EditorNode::_editor_select(int p_which) {
|
void EditorNode::_editor_select(int p_which) {
|
||||||
|
|
||||||
static bool selecting=false;
|
static bool selecting=false;
|
||||||
if (selecting)
|
if (selecting || changing_scene)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
selecting=true;
|
selecting=true;
|
||||||
@ -3223,9 +3223,14 @@ Dictionary EditorNode::_get_main_scene_state() {
|
|||||||
void EditorNode::_set_main_scene_state(Dictionary p_state) {
|
void EditorNode::_set_main_scene_state(Dictionary p_state) {
|
||||||
|
|
||||||
//print_line("set current 7 ");
|
//print_line("set current 7 ");
|
||||||
|
changing_scene=false;
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (p_state.has("main_tab")) {
|
if (p_state.has("main_tab")) {
|
||||||
int idx = p_state["main_tab"];
|
int idx = p_state["main_tab"];
|
||||||
|
|
||||||
|
|
||||||
|
print_line("comes with tab: "+itos(idx));
|
||||||
int current=-1;
|
int current=-1;
|
||||||
for(int i=0;i<editor_table.size();i++) {
|
for(int i=0;i<editor_table.size();i++) {
|
||||||
if (editor_plugin_screen==editor_table[i]) {
|
if (editor_plugin_screen==editor_table[i]) {
|
||||||
@ -3234,12 +3239,41 @@ void EditorNode::_set_main_scene_state(Dictionary p_state) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (idx<2 && current<2) {
|
if (idx<2 && current<2) {
|
||||||
//only set tab for 2D and 3D
|
//only set tab for 2D and 3D
|
||||||
_editor_select(p_state["main_tab"]);
|
_editor_select(idx);
|
||||||
//print_line(" setting main tab: "+itos(p_state["main_tab"]));
|
//print_line(" setting main tab: "+itos(p_state["main_tab"]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
if (get_edited_scene()) {
|
||||||
|
|
||||||
|
int current=-1;
|
||||||
|
for(int i=0;i<editor_table.size();i++) {
|
||||||
|
if (editor_plugin_screen==editor_table[i]) {
|
||||||
|
current=i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current<2) {
|
||||||
|
//use heuristic instead
|
||||||
|
|
||||||
|
int n2d=0,n3d=0;
|
||||||
|
_find_node_types(get_edited_scene(),n2d,n3d);
|
||||||
|
if (n2d>n3d) {
|
||||||
|
_editor_select(0);
|
||||||
|
} else if (n3d>n2d) {
|
||||||
|
_editor_select(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (p_state.has("scene_tree_offset"))
|
if (p_state.has("scene_tree_offset"))
|
||||||
scene_tree_dock->get_tree_editor()->get_scene_tree()->get_vscroll_bar()->set_val(p_state["scene_tree_offset"]);
|
scene_tree_dock->get_tree_editor()->get_scene_tree()->get_vscroll_bar()->set_val(p_state["scene_tree_offset"]);
|
||||||
@ -3248,6 +3282,12 @@ void EditorNode::_set_main_scene_state(Dictionary p_state) {
|
|||||||
|
|
||||||
//print_line("set current 8 ");
|
//print_line("set current 8 ");
|
||||||
|
|
||||||
|
//this should only happen at the very end
|
||||||
|
|
||||||
|
//changing_scene=true; //avoid script change from opening editor
|
||||||
|
ScriptEditor::get_singleton()->get_debugger()->update_live_edit_root();
|
||||||
|
ScriptEditor::get_singleton()->set_scene_root_script( editor_data.get_scene_root_script(editor_data.get_edited_scene()) );
|
||||||
|
//changing_scene=false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3312,8 +3352,6 @@ void EditorNode::set_current_scene(int p_idx) {
|
|||||||
|
|
||||||
call_deferred("_set_main_scene_state",state); //do after everything else is done setting up
|
call_deferred("_set_main_scene_state",state); //do after everything else is done setting up
|
||||||
//print_line("set current 6 ");
|
//print_line("set current 6 ");
|
||||||
changing_scene=false;
|
|
||||||
ScriptEditor::get_singleton()->get_debugger()->update_live_edit_root();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -5493,7 +5531,6 @@ EditorNode::EditorNode() {
|
|||||||
add_editor_plugin( memnew( CanvasItemEditorPlugin(this) ) );
|
add_editor_plugin( memnew( CanvasItemEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( SpatialEditorPlugin(this) ) );
|
add_editor_plugin( memnew( SpatialEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( ScriptEditorPlugin(this) ) );
|
add_editor_plugin( memnew( ScriptEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( EditorHelpPlugin(this) ) );
|
|
||||||
add_editor_plugin( memnew( AnimationPlayerEditorPlugin(this) ) );
|
add_editor_plugin( memnew( AnimationPlayerEditorPlugin(this) ) );
|
||||||
add_editor_plugin( memnew( ShaderGraphEditorPlugin(this,true) ) );
|
add_editor_plugin( memnew( ShaderGraphEditorPlugin(this,true) ) );
|
||||||
add_editor_plugin( memnew( ShaderGraphEditorPlugin(this,false) ) );
|
add_editor_plugin( memnew( ShaderGraphEditorPlugin(this,false) ) );
|
||||||
@ -5669,6 +5706,7 @@ EditorNode::EditorNode() {
|
|||||||
EditorNode::~EditorNode() {
|
EditorNode::~EditorNode() {
|
||||||
|
|
||||||
|
|
||||||
|
memdelete( EditorHelp::get_doc_data() );
|
||||||
memdelete(editor_selection);
|
memdelete(editor_selection);
|
||||||
memdelete(file_server);
|
memdelete(file_server);
|
||||||
EditorSettings::destroy();
|
EditorSettings::destroy();
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 822 B After Width: | Height: | Size: 841 B |
@ -572,28 +572,119 @@ void ScriptEditor::_goto_script_line(REF p_script,int p_line) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScriptEditor::_update_history_arrows() {
|
||||||
|
|
||||||
|
script_back->set_disabled( history_pos<=0 );
|
||||||
|
script_forward->set_disabled( history_pos>=history.size()-1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScriptEditor::_go_to_tab(int p_idx) {
|
||||||
|
|
||||||
|
Node *cn = tab_container->get_child(p_idx);
|
||||||
|
if (!cn)
|
||||||
|
return;
|
||||||
|
Control *c = cn->cast_to<Control>();
|
||||||
|
if (!c)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (history_pos>=0 && history_pos<history.size() && history[history_pos].control==tab_container->get_current_tab_control()) {
|
||||||
|
|
||||||
|
Node *n = tab_container->get_current_tab_control();
|
||||||
|
|
||||||
|
if (n->cast_to<ScriptTextEditor>()) {
|
||||||
|
|
||||||
|
history[history_pos].scroll_pos=n->cast_to<ScriptTextEditor>()->get_text_edit()->get_v_scroll();
|
||||||
|
history[history_pos].cursor_column=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_column();
|
||||||
|
history[history_pos].cursor_row=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_line();
|
||||||
|
}
|
||||||
|
if (n->cast_to<EditorHelp>()) {
|
||||||
|
|
||||||
|
history[history_pos].scroll_pos=n->cast_to<EditorHelp>()->get_scroll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
history.resize(history_pos+1);
|
||||||
|
ScriptHistory sh;
|
||||||
|
sh.control=c;
|
||||||
|
sh.scroll_pos=0;
|
||||||
|
|
||||||
|
history.push_back(sh);
|
||||||
|
history_pos++;
|
||||||
|
|
||||||
|
|
||||||
|
tab_container->set_current_tab(p_idx);
|
||||||
|
|
||||||
|
c = tab_container->get_current_tab_control();
|
||||||
|
|
||||||
|
if (c->cast_to<ScriptTextEditor>()) {
|
||||||
|
|
||||||
|
script_name_label->set_text(c->cast_to<ScriptTextEditor>()->get_name());
|
||||||
|
script_icon->set_texture(c->cast_to<ScriptTextEditor>()->get_icon());
|
||||||
|
if (is_visible())
|
||||||
|
c->cast_to<ScriptTextEditor>()->get_text_edit()->grab_focus();
|
||||||
|
}
|
||||||
|
if (c->cast_to<EditorHelp>()) {
|
||||||
|
|
||||||
|
script_name_label->set_text(c->cast_to<EditorHelp>()->get_class_name());
|
||||||
|
script_icon->set_texture(get_icon("Help","EditorIcons"));
|
||||||
|
if (is_visible())
|
||||||
|
c->cast_to<EditorHelp>()->set_focused();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
c->set_meta("__editor_pass",++edit_pass);
|
||||||
|
_update_history_arrows();
|
||||||
|
_update_script_colors();
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptEditor::_close_current_tab() {
|
void ScriptEditor::_close_current_tab() {
|
||||||
|
|
||||||
int selected = tab_container->get_current_tab();
|
int selected = tab_container->get_current_tab();
|
||||||
if (selected<0 || selected>=tab_container->get_child_count())
|
if (selected<0 || selected>=tab_container->get_child_count())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Node *tselected = tab_container->get_child(selected);
|
||||||
ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>();
|
ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>();
|
||||||
if (!current)
|
if (current) {
|
||||||
return;
|
|
||||||
|
|
||||||
apply_scripts();
|
apply_scripts();
|
||||||
|
}
|
||||||
|
|
||||||
|
//remove from history
|
||||||
|
history.resize(history_pos+1);
|
||||||
|
|
||||||
|
for(int i=0;i<history.size();i++) {
|
||||||
|
if (history[i].control==tselected) {
|
||||||
|
history.remove(i);
|
||||||
|
i--;
|
||||||
|
history_pos--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (history_pos>=history.size()) {
|
||||||
|
history_pos=history.size()-1;
|
||||||
|
}
|
||||||
|
|
||||||
int idx = tab_container->get_current_tab();
|
int idx = tab_container->get_current_tab();
|
||||||
memdelete(current);
|
memdelete(tselected);
|
||||||
if (idx>=tab_container->get_child_count())
|
if (idx>=tab_container->get_child_count())
|
||||||
idx=tab_container->get_child_count()-1;
|
idx=tab_container->get_child_count()-1;
|
||||||
if (idx>=0) {
|
if (idx>=0) {
|
||||||
|
|
||||||
|
if (history_pos>=0) {
|
||||||
|
idx = history[history_pos].control->get_index();
|
||||||
|
}
|
||||||
tab_container->set_current_tab(idx);
|
tab_container->set_current_tab(idx);
|
||||||
|
|
||||||
//script_list->select(idx);
|
//script_list->select(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_update_history_arrows();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_update_script_names();
|
_update_script_names();
|
||||||
EditorNode::get_singleton()->save_layout();
|
EditorNode::get_singleton()->save_layout();
|
||||||
@ -755,33 +846,15 @@ void ScriptEditor::swap_lines(TextEdit *tx, int line1, int line2)
|
|||||||
void ScriptEditor::_menu_option(int p_option) {
|
void ScriptEditor::_menu_option(int p_option) {
|
||||||
|
|
||||||
|
|
||||||
if (p_option==FILE_OPEN) {
|
|
||||||
editor->open_resource("Script");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int selected = tab_container->get_current_tab();
|
|
||||||
if (selected<0 || selected>=tab_container->get_child_count())
|
|
||||||
return;
|
|
||||||
|
|
||||||
ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>();
|
|
||||||
if (!current)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch(p_option) {
|
switch(p_option) {
|
||||||
case FILE_NEW: {
|
case FILE_NEW: {
|
||||||
script_create_dialog->config("Node", ".gd");
|
script_create_dialog->config("Node", ".gd");
|
||||||
script_create_dialog->popup_centered(Size2(300, 300));
|
script_create_dialog->popup_centered(Size2(300, 300));
|
||||||
} break;
|
} break;
|
||||||
case FILE_SAVE: {
|
case FILE_OPEN: {
|
||||||
if (!_test_script_times_on_disk())
|
|
||||||
|
editor->open_resource("Script");
|
||||||
return;
|
return;
|
||||||
editor->save_resource( current->get_edited_script() );
|
|
||||||
|
|
||||||
} break;
|
|
||||||
case FILE_SAVE_AS: {
|
|
||||||
|
|
||||||
editor->save_resource_as( current->get_edited_script() );
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case FILE_SAVE_ALL: {
|
case FILE_SAVE_ALL: {
|
||||||
|
|
||||||
@ -805,6 +878,67 @@ void ScriptEditor::_menu_option(int p_option) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case SEARCH_HELP: {
|
||||||
|
|
||||||
|
help_search_dialog->popup("current");
|
||||||
|
} break;
|
||||||
|
case SEARCH_CLASSES: {
|
||||||
|
|
||||||
|
if (tab_container->get_tab_count()==0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
String current;
|
||||||
|
|
||||||
|
EditorHelp *eh = tab_container->get_child( tab_container->get_current_tab() )->cast_to<EditorHelp>();
|
||||||
|
if (eh) {
|
||||||
|
current=eh->get_class_name();
|
||||||
|
}
|
||||||
|
|
||||||
|
help_index->popup_centered_ratio(0.6);
|
||||||
|
|
||||||
|
if (current!="") {
|
||||||
|
help_index->call_deferred("select_class",current);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
case SEARCH_WEBSITE: {
|
||||||
|
|
||||||
|
OS::get_singleton()->shell_open("http://www.godotengine.org/projects/godot-engine/wiki/Documentation#Tutorials");
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case WINDOW_NEXT: {
|
||||||
|
|
||||||
|
_history_forward();
|
||||||
|
} break;
|
||||||
|
case WINDOW_PREV: {
|
||||||
|
_history_back();
|
||||||
|
} break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int selected = tab_container->get_current_tab();
|
||||||
|
if (selected<0 || selected>=tab_container->get_child_count())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ScriptTextEditor *current = tab_container->get_child(selected)->cast_to<ScriptTextEditor>();
|
||||||
|
if (current) {
|
||||||
|
|
||||||
|
switch(p_option) {
|
||||||
|
case FILE_NEW: {
|
||||||
|
script_create_dialog->config("Node", ".gd");
|
||||||
|
script_create_dialog->popup_centered(Size2(300, 300));
|
||||||
|
} break;
|
||||||
|
case FILE_SAVE: {
|
||||||
|
if (!_test_script_times_on_disk())
|
||||||
|
return;
|
||||||
|
editor->save_resource( current->get_edited_script() );
|
||||||
|
|
||||||
|
} break;
|
||||||
|
case FILE_SAVE_AS: {
|
||||||
|
|
||||||
|
editor->save_resource_as( current->get_edited_script() );
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case EDIT_UNDO: {
|
case EDIT_UNDO: {
|
||||||
current->get_text_edit()->undo();
|
current->get_text_edit()->undo();
|
||||||
@ -1146,7 +1280,7 @@ void ScriptEditor::_menu_option(int p_option) {
|
|||||||
if (text == "")
|
if (text == "")
|
||||||
text = current->get_text_edit()->get_word_under_cursor();
|
text = current->get_text_edit()->get_word_under_cursor();
|
||||||
if (text != "")
|
if (text != "")
|
||||||
editor->emit_signal("request_help", text);
|
help_search_dialog->popup(text);
|
||||||
} break;
|
} break;
|
||||||
case FILE_CLOSE: {
|
case FILE_CLOSE: {
|
||||||
if (current->get_text_edit()->get_version()!=current->get_text_edit()->get_saved_version()) {
|
if (current->get_text_edit()->get_version()!=current->get_text_edit()->get_saved_version()) {
|
||||||
@ -1176,6 +1310,7 @@ void ScriptEditor::_menu_option(int p_option) {
|
|||||||
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
|
|
||||||
if (p_option>=WINDOW_SELECT_BASE) {
|
if (p_option>=WINDOW_SELECT_BASE) {
|
||||||
@ -1186,6 +1321,27 @@ void ScriptEditor::_menu_option(int p_option) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorHelp *help = tab_container->get_child(selected)->cast_to<EditorHelp>();
|
||||||
|
if (help) {
|
||||||
|
|
||||||
|
switch(p_option) {
|
||||||
|
|
||||||
|
case SEARCH_FIND: {
|
||||||
|
help->popup_search();
|
||||||
|
} break;
|
||||||
|
case SEARCH_FIND_NEXT: {
|
||||||
|
help->search_again();
|
||||||
|
} break;
|
||||||
|
case FILE_CLOSE: {
|
||||||
|
_close_current_tab();
|
||||||
|
} break;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1217,6 +1373,14 @@ void ScriptEditor::_notification(int p_what) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
EditorSettings::get_singleton()->connect("settings_changed",this,"_editor_settings_changed");
|
EditorSettings::get_singleton()->connect("settings_changed",this,"_editor_settings_changed");
|
||||||
|
help_search->set_icon(get_icon("Help","EditorIcons"));
|
||||||
|
site_search->set_icon(get_icon("Godot","EditorIcons"));
|
||||||
|
class_search->set_icon(get_icon("ClassList","EditorIcons"));
|
||||||
|
|
||||||
|
script_forward->set_icon(get_icon("Forward","EditorIcons"));
|
||||||
|
script_back->set_icon(get_icon("Back","EditorIcons"));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1346,7 +1510,7 @@ void ScriptEditor::set_state(const Dictionary& p_state) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
void ScriptEditor::clear() {
|
void ScriptEditor::clear() {
|
||||||
|
#if 0
|
||||||
List<ScriptTextEditor*> stes;
|
List<ScriptTextEditor*> stes;
|
||||||
for(int i=0;i<tab_container->get_child_count();i++) {
|
for(int i=0;i<tab_container->get_child_count();i++) {
|
||||||
|
|
||||||
@ -1371,7 +1535,7 @@ void ScriptEditor::clear() {
|
|||||||
script_list->select( script_list->find_metadata(idx) );
|
script_list->select( script_list->find_metadata(idx) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1402,31 +1566,6 @@ void ScriptEditor::get_breakpoints(List<String> *p_breakpoints) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ScriptEditor::_bind_methods() {
|
|
||||||
|
|
||||||
ObjectTypeDB::bind_method("_tab_changed",&ScriptEditor::_tab_changed);
|
|
||||||
ObjectTypeDB::bind_method("_menu_option",&ScriptEditor::_menu_option);
|
|
||||||
ObjectTypeDB::bind_method("_close_current_tab",&ScriptEditor::_close_current_tab);
|
|
||||||
ObjectTypeDB::bind_method("_editor_play",&ScriptEditor::_editor_play);
|
|
||||||
ObjectTypeDB::bind_method("_editor_pause",&ScriptEditor::_editor_pause);
|
|
||||||
ObjectTypeDB::bind_method("_editor_stop",&ScriptEditor::_editor_stop);
|
|
||||||
ObjectTypeDB::bind_method("_add_callback",&ScriptEditor::_add_callback);
|
|
||||||
ObjectTypeDB::bind_method("_reload_scripts",&ScriptEditor::_reload_scripts);
|
|
||||||
ObjectTypeDB::bind_method("_resave_scripts",&ScriptEditor::_resave_scripts);
|
|
||||||
ObjectTypeDB::bind_method("_res_saved_callback",&ScriptEditor::_res_saved_callback);
|
|
||||||
ObjectTypeDB::bind_method("_goto_script_line",&ScriptEditor::_goto_script_line);
|
|
||||||
ObjectTypeDB::bind_method("_goto_script_line2",&ScriptEditor::_goto_script_line2);
|
|
||||||
ObjectTypeDB::bind_method("_breaked",&ScriptEditor::_breaked);
|
|
||||||
ObjectTypeDB::bind_method("_show_debugger",&ScriptEditor::_show_debugger);
|
|
||||||
ObjectTypeDB::bind_method("_get_debug_tooltip",&ScriptEditor::_get_debug_tooltip);
|
|
||||||
ObjectTypeDB::bind_method("_autosave_scripts",&ScriptEditor::_autosave_scripts);
|
|
||||||
ObjectTypeDB::bind_method("_editor_settings_changed",&ScriptEditor::_editor_settings_changed);
|
|
||||||
ObjectTypeDB::bind_method("_update_script_names",&ScriptEditor::_update_script_names);
|
|
||||||
ObjectTypeDB::bind_method("_tree_changed",&ScriptEditor::_tree_changed);
|
|
||||||
ObjectTypeDB::bind_method("_script_selected",&ScriptEditor::_script_selected);
|
|
||||||
ObjectTypeDB::bind_method("_script_created",&ScriptEditor::_script_created);
|
|
||||||
ObjectTypeDB::bind_method("_script_split_dragged",&ScriptEditor::_script_split_dragged);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void ScriptEditor::ensure_focus_current() {
|
void ScriptEditor::ensure_focus_current() {
|
||||||
@ -1448,7 +1587,8 @@ void ScriptEditor::ensure_focus_current() {
|
|||||||
void ScriptEditor::_script_selected(int p_idx) {
|
void ScriptEditor::_script_selected(int p_idx) {
|
||||||
|
|
||||||
grab_focus_block = !Input::get_singleton()->is_mouse_button_pressed(1); //amazing hack, simply amazing
|
grab_focus_block = !Input::get_singleton()->is_mouse_button_pressed(1); //amazing hack, simply amazing
|
||||||
tab_container->set_current_tab(script_list->get_item_metadata(p_idx));
|
|
||||||
|
_go_to_tab(script_list->get_item_metadata(p_idx));
|
||||||
grab_focus_block=false;
|
grab_focus_block=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1457,15 +1597,37 @@ void ScriptEditor::ensure_select_current() {
|
|||||||
|
|
||||||
if (tab_container->get_child_count() && tab_container->get_current_tab()>=0) {
|
if (tab_container->get_child_count() && tab_container->get_current_tab()>=0) {
|
||||||
|
|
||||||
ScriptTextEditor *ste = tab_container->get_child(tab_container->get_current_tab())->cast_to<ScriptTextEditor>();
|
Node *current = tab_container->get_child(tab_container->get_current_tab());
|
||||||
if (!ste)
|
|
||||||
return;
|
|
||||||
|
ScriptTextEditor *ste = current->cast_to<ScriptTextEditor>();
|
||||||
|
if (ste) {
|
||||||
|
|
||||||
Ref<Script> script = ste->get_edited_script();
|
Ref<Script> script = ste->get_edited_script();
|
||||||
|
|
||||||
if (!grab_focus_block && is_inside_tree())
|
if (!grab_focus_block && is_inside_tree())
|
||||||
ste->get_text_edit()->grab_focus();
|
ste->get_text_edit()->grab_focus();
|
||||||
|
|
||||||
|
edit_menu->show();
|
||||||
|
search_menu->show();
|
||||||
|
script_search_menu->hide();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EditorHelp *eh = current->cast_to<EditorHelp>();
|
||||||
|
|
||||||
|
if (eh) {
|
||||||
|
edit_menu->hide();
|
||||||
|
search_menu->hide();
|
||||||
|
script_search_menu->show();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1485,6 +1647,56 @@ void ScriptEditor::_find_scripts(Node* p_base, Node* p_current, Set<Ref<Script>
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct _ScriptEditorItemData {
|
||||||
|
|
||||||
|
String name;
|
||||||
|
Ref<Texture> icon;
|
||||||
|
int index;
|
||||||
|
String tooltip;
|
||||||
|
bool used;
|
||||||
|
|
||||||
|
|
||||||
|
bool operator<(const _ScriptEditorItemData& id) const {
|
||||||
|
|
||||||
|
return name.nocasecmp_to(id.name)<0;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void ScriptEditor::_update_script_colors() {
|
||||||
|
|
||||||
|
bool enabled = EditorSettings::get_singleton()->get("text_editor/script_temperature_enabled");
|
||||||
|
if (!enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int hist_size = EditorSettings::get_singleton()->get("text_editor/script_temperature_history_size");
|
||||||
|
Color hot_color=EditorSettings::get_singleton()->get("text_editor/script_temperature_hot_color");
|
||||||
|
Color cold_color=EditorSettings::get_singleton()->get("text_editor/script_temperature_cold_color");
|
||||||
|
|
||||||
|
for(int i=0;i<script_list->get_item_count();i++) {
|
||||||
|
|
||||||
|
int c = script_list->get_item_metadata(i);
|
||||||
|
Node *n = tab_container->get_child(c);
|
||||||
|
if (!n)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
script_list->set_item_custom_bg_color(i,Color(0,0,0,0));
|
||||||
|
if (!n->has_meta("__editor_pass")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pass=n->get_meta("__editor_pass");
|
||||||
|
int h = edit_pass - pass;
|
||||||
|
if (h>hist_size) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
float v = Math::ease((edit_pass-pass)/float_t(hist_size),0.4);
|
||||||
|
|
||||||
|
|
||||||
|
script_list->set_item_custom_bg_color(i,hot_color.linear_interpolate(cold_color,v));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ScriptEditor::_update_script_names() {
|
void ScriptEditor::_update_script_names() {
|
||||||
|
|
||||||
@ -1496,31 +1708,73 @@ void ScriptEditor::_update_script_names() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
script_list->clear();
|
script_list->clear();
|
||||||
|
|
||||||
|
Vector<_ScriptEditorItemData> sedata;
|
||||||
|
|
||||||
for(int i=0;i<tab_container->get_child_count();i++) {
|
for(int i=0;i<tab_container->get_child_count();i++) {
|
||||||
|
|
||||||
|
|
||||||
ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>();
|
ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>();
|
||||||
if (!ste)
|
if (ste) {
|
||||||
continue;
|
|
||||||
|
|
||||||
String script = ste->get_name();
|
String name = ste->get_name();
|
||||||
Ref<Texture> icon = ste->get_icon();
|
Ref<Texture> icon = ste->get_icon();
|
||||||
String path = ste->get_edited_script()->get_path();
|
String tooltip = ste->get_edited_script()->get_path();
|
||||||
script_list->add_item(script,icon);
|
|
||||||
|
|
||||||
|
_ScriptEditorItemData sd;
|
||||||
|
sd.icon=icon;
|
||||||
|
sd.name=name;
|
||||||
|
sd.tooltip=tooltip;
|
||||||
|
sd.index=i;
|
||||||
|
sd.used=used.has(ste->get_edited_script());
|
||||||
|
|
||||||
|
sedata.push_back(sd);
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorHelp *eh = tab_container->get_child(i)->cast_to<EditorHelp>();
|
||||||
|
if (eh) {
|
||||||
|
|
||||||
|
String name = eh->get_class_name();
|
||||||
|
Ref<Texture> icon = get_icon("Help","EditorIcons");
|
||||||
|
String tooltip = name+" Class Reference";
|
||||||
|
|
||||||
|
_ScriptEditorItemData sd;
|
||||||
|
sd.icon=icon;
|
||||||
|
sd.name=name;
|
||||||
|
sd.tooltip=tooltip;
|
||||||
|
sd.index=i;
|
||||||
|
sd.used=false;
|
||||||
|
sedata.push_back(sd);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sedata.sort();
|
||||||
|
|
||||||
|
for(int i=0;i<sedata.size();i++) {
|
||||||
|
|
||||||
|
script_list->add_item(sedata[i].name,sedata[i].icon);
|
||||||
int index = script_list->get_item_count()-1;
|
int index = script_list->get_item_count()-1;
|
||||||
|
script_list->set_item_tooltip(index,sedata[i].tooltip);
|
||||||
script_list->set_item_tooltip(index,path);
|
script_list->set_item_metadata(index,sedata[i].index);
|
||||||
script_list->set_item_metadata(index,i);
|
if (sedata[i].used) {
|
||||||
if (used.has(ste->get_edited_script())) {
|
|
||||||
|
|
||||||
script_list->set_item_custom_bg_color(index,Color(88/255.0,88/255.0,60/255.0));
|
script_list->set_item_custom_bg_color(index,Color(88/255.0,88/255.0,60/255.0));
|
||||||
}
|
}
|
||||||
if (tab_container->get_current_tab()==index) {
|
if (tab_container->get_current_tab()==sedata[i].index) {
|
||||||
script_list->select(index);
|
script_list->select(index);
|
||||||
|
script_name_label->set_text(sedata[i].name);
|
||||||
|
script_icon->set_texture(sedata[i].icon);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
script_list->sort_items_by_text();
|
_update_script_colors();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1531,6 +1785,8 @@ void ScriptEditor::edit(const Ref<Script>& p_script) {
|
|||||||
|
|
||||||
// see if already has it
|
// see if already has it
|
||||||
|
|
||||||
|
bool open_dominant = EditorSettings::get_singleton()->get("text_editor/open_dominant_script_on_scene_change");
|
||||||
|
|
||||||
if (p_script->get_path().is_resource_file() && bool(EditorSettings::get_singleton()->get("external_editor/use_external_editor"))) {
|
if (p_script->get_path().is_resource_file() && bool(EditorSettings::get_singleton()->get("external_editor/use_external_editor"))) {
|
||||||
|
|
||||||
String path = EditorSettings::get_singleton()->get("external_editor/exec_path");
|
String path = EditorSettings::get_singleton()->get("external_editor/exec_path");
|
||||||
@ -1559,11 +1815,12 @@ void ScriptEditor::edit(const Ref<Script>& p_script) {
|
|||||||
|
|
||||||
if (ste->get_edited_script()==p_script) {
|
if (ste->get_edited_script()==p_script) {
|
||||||
|
|
||||||
if (!EditorNode::get_singleton()->is_changing_scene()) {
|
if (open_dominant || !EditorNode::get_singleton()->is_changing_scene()) {
|
||||||
if (tab_container->get_current_tab()!=i) {
|
if (tab_container->get_current_tab()!=i) {
|
||||||
tab_container->set_current_tab(i);
|
_go_to_tab(i);
|
||||||
script_list->select( script_list->find_metadata(i) );
|
script_list->select( script_list->find_metadata(i) );
|
||||||
}
|
}
|
||||||
|
if (is_visible())
|
||||||
ste->get_text_edit()->grab_focus();
|
ste->get_text_edit()->grab_focus();
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -1576,7 +1833,8 @@ void ScriptEditor::edit(const Ref<Script>& p_script) {
|
|||||||
ste->set_edited_script(p_script);
|
ste->set_edited_script(p_script);
|
||||||
ste->get_text_edit()->set_tooltip_request_func(this,"_get_debug_tooltip",ste);
|
ste->get_text_edit()->set_tooltip_request_func(this,"_get_debug_tooltip",ste);
|
||||||
tab_container->add_child(ste);
|
tab_container->add_child(ste);
|
||||||
tab_container->set_current_tab(tab_container->get_tab_count()-1);
|
_go_to_tab(tab_container->get_tab_count()-1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1675,7 +1933,7 @@ void ScriptEditor::_add_callback(Object *p_obj, const String& p_function, const
|
|||||||
ste->get_text_edit()->insert_text_at_cursor("\n\n"+func);
|
ste->get_text_edit()->insert_text_at_cursor("\n\n"+func);
|
||||||
}
|
}
|
||||||
|
|
||||||
tab_container->set_current_tab(i);
|
_go_to_tab(i);
|
||||||
ste->get_text_edit()->cursor_set_line(pos);
|
ste->get_text_edit()->cursor_set_line(pos);
|
||||||
ste->get_text_edit()->cursor_set_column(1);
|
ste->get_text_edit()->cursor_set_column(1);
|
||||||
|
|
||||||
@ -1726,10 +1984,13 @@ void ScriptEditor::set_window_layout(Ref<ConfigFile> p_layout) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!p_layout->has_section_key("ScriptEditor","open_scripts"))
|
if (!p_layout->has_section_key("ScriptEditor","open_scripts") && !p_layout->has_section_key("ScriptEditor","open_help"))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Array scripts = p_layout->get_value("ScriptEditor","open_scripts");
|
Array scripts = p_layout->get_value("ScriptEditor","open_scripts");
|
||||||
|
Array helps;
|
||||||
|
if (p_layout->has_section_key("ScriptEditor","open_help"))
|
||||||
|
helps=p_layout->get_value("ScriptEditor","open_help");
|
||||||
|
|
||||||
restoring_layout=true;
|
restoring_layout=true;
|
||||||
|
|
||||||
@ -1742,6 +2003,18 @@ void ScriptEditor::set_window_layout(Ref<ConfigFile> p_layout) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<helps.size();i++) {
|
||||||
|
|
||||||
|
String path = helps[i];
|
||||||
|
_help_class_open(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0;i<tab_container->get_child_count();i++) {
|
||||||
|
tab_container->get_child(i)->set_meta("__editor_pass",Variant());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (p_layout->has_section_key("ScriptEditor","split_offset")) {
|
if (p_layout->has_section_key("ScriptEditor","split_offset")) {
|
||||||
script_split->set_split_offset(p_layout->get_value("ScriptEditor","split_offset"));
|
script_split->set_split_offset(p_layout->get_value("ScriptEditor","split_offset"));
|
||||||
}
|
}
|
||||||
@ -1754,27 +2027,184 @@ void ScriptEditor::set_window_layout(Ref<ConfigFile> p_layout) {
|
|||||||
void ScriptEditor::get_window_layout(Ref<ConfigFile> p_layout) {
|
void ScriptEditor::get_window_layout(Ref<ConfigFile> p_layout) {
|
||||||
|
|
||||||
Array scripts;
|
Array scripts;
|
||||||
|
Array helps;
|
||||||
|
|
||||||
for(int i=0;i<tab_container->get_child_count();i++) {
|
for(int i=0;i<tab_container->get_child_count();i++) {
|
||||||
|
|
||||||
ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>();
|
ScriptTextEditor *ste = tab_container->get_child(i)->cast_to<ScriptTextEditor>();
|
||||||
if (!ste)
|
if (ste) {
|
||||||
continue;
|
|
||||||
|
|
||||||
String path = ste->get_edited_script()->get_path();
|
String path = ste->get_edited_script()->get_path();
|
||||||
if (!path.is_resource_file())
|
if (!path.is_resource_file())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
scripts.push_back(path);
|
scripts.push_back(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorHelp *eh = tab_container->get_child(i)->cast_to<EditorHelp>();
|
||||||
|
|
||||||
|
if (eh) {
|
||||||
|
|
||||||
|
helps.push_back(eh->get_class_name());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p_layout->set_value("ScriptEditor","open_scripts",scripts);
|
p_layout->set_value("ScriptEditor","open_scripts",scripts);
|
||||||
|
p_layout->set_value("ScriptEditor","open_help",helps);
|
||||||
p_layout->set_value("ScriptEditor","split_offset",script_split->get_split_offset());
|
p_layout->set_value("ScriptEditor","split_offset",script_split->get_split_offset());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ScriptEditor::_help_class_open(const String& p_class) {
|
||||||
|
|
||||||
|
|
||||||
|
for(int i=0;i<tab_container->get_child_count();i++) {
|
||||||
|
|
||||||
|
EditorHelp *eh = tab_container->get_child(i)->cast_to<EditorHelp>();
|
||||||
|
|
||||||
|
if (eh && eh->get_class_name()==p_class) {
|
||||||
|
|
||||||
|
_go_to_tab(i);
|
||||||
|
_update_script_names();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorHelp * eh = memnew( EditorHelp );
|
||||||
|
|
||||||
|
|
||||||
|
eh->set_name(p_class);
|
||||||
|
tab_container->add_child(eh);
|
||||||
|
_go_to_tab(tab_container->get_tab_count()-1);
|
||||||
|
eh->go_to_class(p_class,0);
|
||||||
|
eh->connect("go_to_help",this,"_help_class_goto");
|
||||||
|
_update_script_names();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptEditor::_help_class_goto(const String& p_desc) {
|
||||||
|
|
||||||
|
|
||||||
|
String cname=p_desc.get_slice(":",1);
|
||||||
|
|
||||||
|
for(int i=0;i<tab_container->get_child_count();i++) {
|
||||||
|
|
||||||
|
EditorHelp *eh = tab_container->get_child(i)->cast_to<EditorHelp>();
|
||||||
|
|
||||||
|
if (eh && eh->get_class_name()==cname) {
|
||||||
|
|
||||||
|
_go_to_tab(i);
|
||||||
|
eh->go_to_help(p_desc);
|
||||||
|
_update_script_names();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EditorHelp * eh = memnew( EditorHelp );
|
||||||
|
|
||||||
|
eh->set_name(cname);
|
||||||
|
tab_container->add_child(eh);
|
||||||
|
_go_to_tab(tab_container->get_tab_count()-1);
|
||||||
|
eh->go_to_help(p_desc);
|
||||||
|
eh->connect("go_to_help",this,"_help_class_goto");
|
||||||
|
_update_script_names();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptEditor::_update_history_pos(int p_new_pos) {
|
||||||
|
|
||||||
|
Node *n = tab_container->get_current_tab_control();
|
||||||
|
|
||||||
|
if (n->cast_to<ScriptTextEditor>()) {
|
||||||
|
|
||||||
|
history[history_pos].scroll_pos=n->cast_to<ScriptTextEditor>()->get_text_edit()->get_v_scroll();
|
||||||
|
history[history_pos].cursor_column=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_column();
|
||||||
|
history[history_pos].cursor_row=n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_get_line();
|
||||||
|
}
|
||||||
|
if (n->cast_to<EditorHelp>()) {
|
||||||
|
|
||||||
|
history[history_pos].scroll_pos=n->cast_to<EditorHelp>()->get_scroll();
|
||||||
|
}
|
||||||
|
|
||||||
|
history_pos=p_new_pos;
|
||||||
|
tab_container->set_current_tab(history[history_pos].control->get_index());
|
||||||
|
|
||||||
|
n = history[history_pos].control;
|
||||||
|
|
||||||
|
if (n->cast_to<ScriptTextEditor>()) {
|
||||||
|
|
||||||
|
n->cast_to<ScriptTextEditor>()->get_text_edit()->set_v_scroll(history[history_pos].scroll_pos);
|
||||||
|
n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_set_column( history[history_pos].cursor_column );
|
||||||
|
n->cast_to<ScriptTextEditor>()->get_text_edit()->cursor_set_line( history[history_pos].cursor_row );
|
||||||
|
n->cast_to<ScriptTextEditor>()->get_text_edit()->grab_focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (n->cast_to<EditorHelp>()) {
|
||||||
|
|
||||||
|
n->cast_to<EditorHelp>()->set_scroll(history[history_pos].scroll_pos);
|
||||||
|
n->cast_to<EditorHelp>()->set_focused();
|
||||||
|
}
|
||||||
|
|
||||||
|
n->set_meta("__editor_pass",++edit_pass);
|
||||||
|
_update_script_names();
|
||||||
|
_update_history_arrows();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptEditor::_history_forward() {
|
||||||
|
|
||||||
|
if (history_pos<history.size()-1) {
|
||||||
|
_update_history_pos(history_pos+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptEditor::_history_back(){
|
||||||
|
|
||||||
|
if (history_pos>0) {
|
||||||
|
_update_history_pos(history_pos-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
void ScriptEditor::set_scene_root_script( Ref<Script> p_script ) {
|
||||||
|
|
||||||
|
bool open_dominant = EditorSettings::get_singleton()->get("text_editor/open_dominant_script_on_scene_change");
|
||||||
|
if (open_dominant && p_script.is_valid()) {
|
||||||
|
edit(p_script);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScriptEditor::_bind_methods() {
|
||||||
|
|
||||||
|
ObjectTypeDB::bind_method("_tab_changed",&ScriptEditor::_tab_changed);
|
||||||
|
ObjectTypeDB::bind_method("_menu_option",&ScriptEditor::_menu_option);
|
||||||
|
ObjectTypeDB::bind_method("_close_current_tab",&ScriptEditor::_close_current_tab);
|
||||||
|
ObjectTypeDB::bind_method("_editor_play",&ScriptEditor::_editor_play);
|
||||||
|
ObjectTypeDB::bind_method("_editor_pause",&ScriptEditor::_editor_pause);
|
||||||
|
ObjectTypeDB::bind_method("_editor_stop",&ScriptEditor::_editor_stop);
|
||||||
|
ObjectTypeDB::bind_method("_add_callback",&ScriptEditor::_add_callback);
|
||||||
|
ObjectTypeDB::bind_method("_reload_scripts",&ScriptEditor::_reload_scripts);
|
||||||
|
ObjectTypeDB::bind_method("_resave_scripts",&ScriptEditor::_resave_scripts);
|
||||||
|
ObjectTypeDB::bind_method("_res_saved_callback",&ScriptEditor::_res_saved_callback);
|
||||||
|
ObjectTypeDB::bind_method("_goto_script_line",&ScriptEditor::_goto_script_line);
|
||||||
|
ObjectTypeDB::bind_method("_goto_script_line2",&ScriptEditor::_goto_script_line2);
|
||||||
|
ObjectTypeDB::bind_method("_breaked",&ScriptEditor::_breaked);
|
||||||
|
ObjectTypeDB::bind_method("_show_debugger",&ScriptEditor::_show_debugger);
|
||||||
|
ObjectTypeDB::bind_method("_get_debug_tooltip",&ScriptEditor::_get_debug_tooltip);
|
||||||
|
ObjectTypeDB::bind_method("_autosave_scripts",&ScriptEditor::_autosave_scripts);
|
||||||
|
ObjectTypeDB::bind_method("_editor_settings_changed",&ScriptEditor::_editor_settings_changed);
|
||||||
|
ObjectTypeDB::bind_method("_update_script_names",&ScriptEditor::_update_script_names);
|
||||||
|
ObjectTypeDB::bind_method("_tree_changed",&ScriptEditor::_tree_changed);
|
||||||
|
ObjectTypeDB::bind_method("_script_selected",&ScriptEditor::_script_selected);
|
||||||
|
ObjectTypeDB::bind_method("_script_created",&ScriptEditor::_script_created);
|
||||||
|
ObjectTypeDB::bind_method("_script_split_dragged",&ScriptEditor::_script_split_dragged);
|
||||||
|
ObjectTypeDB::bind_method("_help_class_open",&ScriptEditor::_help_class_open);
|
||||||
|
ObjectTypeDB::bind_method("_help_class_goto",&ScriptEditor::_help_class_goto);
|
||||||
|
ObjectTypeDB::bind_method("_history_forward",&ScriptEditor::_history_forward);
|
||||||
|
ObjectTypeDB::bind_method("_history_back",&ScriptEditor::_history_back);
|
||||||
|
}
|
||||||
|
|
||||||
ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
||||||
|
|
||||||
@ -1816,6 +2246,9 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
file_menu->get_popup()->add_item("Save As..",FILE_SAVE_AS);
|
file_menu->get_popup()->add_item("Save As..",FILE_SAVE_AS);
|
||||||
file_menu->get_popup()->add_item("Save All",FILE_SAVE_ALL,KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_S);
|
file_menu->get_popup()->add_item("Save All",FILE_SAVE_ALL,KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_S);
|
||||||
file_menu->get_popup()->add_separator();
|
file_menu->get_popup()->add_separator();
|
||||||
|
file_menu->get_popup()->add_item("History Prev",WINDOW_PREV,KEY_MASK_CTRL|KEY_MASK_ALT|KEY_LEFT);
|
||||||
|
file_menu->get_popup()->add_item("History Next",WINDOW_NEXT,KEY_MASK_CTRL|KEY_MASK_ALT|KEY_RIGHT);
|
||||||
|
file_menu->get_popup()->add_separator();
|
||||||
file_menu->get_popup()->add_item("Close",FILE_CLOSE,KEY_MASK_CMD|KEY_W);
|
file_menu->get_popup()->add_item("Close",FILE_CLOSE,KEY_MASK_CMD|KEY_W);
|
||||||
file_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
file_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
||||||
|
|
||||||
@ -1851,13 +2284,22 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
menu_hb->add_child(search_menu);
|
menu_hb->add_child(search_menu);
|
||||||
search_menu->set_text("Search");
|
search_menu->set_text("Search");
|
||||||
search_menu->get_popup()->add_item("Find..",SEARCH_FIND,KEY_MASK_CMD|KEY_F);
|
search_menu->get_popup()->add_item("Find..",SEARCH_FIND,KEY_MASK_CMD|KEY_F);
|
||||||
search_menu->get_popup()->add_item("Find Next",SEARCH_FIND_NEXT,KEY_MASK_CMD|KEY_G);
|
search_menu->get_popup()->add_item("Find Next",SEARCH_FIND_NEXT,KEY_F3);
|
||||||
search_menu->get_popup()->add_item("Replace..",SEARCH_REPLACE,KEY_MASK_CMD|KEY_R);
|
search_menu->get_popup()->add_item("Replace..",SEARCH_REPLACE,KEY_MASK_CMD|KEY_R);
|
||||||
search_menu->get_popup()->add_separator();
|
search_menu->get_popup()->add_separator();
|
||||||
search_menu->get_popup()->add_item("Goto Function..",SEARCH_LOCATE_FUNCTION,KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F);
|
search_menu->get_popup()->add_item("Goto Function..",SEARCH_LOCATE_FUNCTION,KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F);
|
||||||
search_menu->get_popup()->add_item("Goto Line..",SEARCH_GOTO_LINE,KEY_MASK_CMD|KEY_L);
|
search_menu->get_popup()->add_item("Goto Line..",SEARCH_GOTO_LINE,KEY_MASK_CMD|KEY_L);
|
||||||
search_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
search_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
||||||
|
|
||||||
|
script_search_menu = memnew( MenuButton );
|
||||||
|
menu_hb->add_child(script_search_menu);
|
||||||
|
script_search_menu->set_text("Search");
|
||||||
|
script_search_menu->get_popup()->add_item("Find..",SEARCH_FIND,KEY_MASK_CMD|KEY_F);
|
||||||
|
script_search_menu->get_popup()->add_item("Find Next",SEARCH_FIND_NEXT,KEY_F3);
|
||||||
|
script_search_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
||||||
|
script_search_menu->hide();
|
||||||
|
|
||||||
|
|
||||||
debug_menu = memnew( MenuButton );
|
debug_menu = memnew( MenuButton );
|
||||||
menu_hb->add_child(debug_menu);
|
menu_hb->add_child(debug_menu);
|
||||||
debug_menu->set_text("Debug");
|
debug_menu->set_text("Debug");
|
||||||
@ -1897,6 +2339,53 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
help_menu->get_popup()->add_item("Contextual", HELP_CONTEXTUAL, KEY_MASK_SHIFT|KEY_F1);
|
help_menu->get_popup()->add_item("Contextual", HELP_CONTEXTUAL, KEY_MASK_SHIFT|KEY_F1);
|
||||||
help_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
help_menu->get_popup()->connect("item_pressed", this,"_menu_option");
|
||||||
|
|
||||||
|
menu_hb->add_spacer();
|
||||||
|
|
||||||
|
|
||||||
|
script_icon = memnew( TextureFrame );
|
||||||
|
menu_hb->add_child(script_icon);
|
||||||
|
script_name_label = memnew( Label );
|
||||||
|
menu_hb->add_child(script_name_label);
|
||||||
|
|
||||||
|
script_icon->hide();
|
||||||
|
script_name_label->hide();
|
||||||
|
|
||||||
|
menu_hb->add_spacer();
|
||||||
|
|
||||||
|
site_search = memnew( ToolButton );
|
||||||
|
site_search->set_text("Tutorials");
|
||||||
|
site_search->connect("pressed",this,"_menu_option",varray(SEARCH_WEBSITE));
|
||||||
|
menu_hb->add_child(site_search);
|
||||||
|
site_search->set_tooltip("Open http://www.godotengine.org at tutorials section.");
|
||||||
|
|
||||||
|
class_search = memnew( ToolButton );
|
||||||
|
class_search->set_text("Classes");
|
||||||
|
class_search->connect("pressed",this,"_menu_option",varray(SEARCH_CLASSES));
|
||||||
|
menu_hb->add_child(class_search);
|
||||||
|
class_search->set_tooltip("Search the class hierarchy.");
|
||||||
|
|
||||||
|
help_search = memnew( ToolButton );
|
||||||
|
help_search->set_text("Search Help");
|
||||||
|
help_search->connect("pressed",this,"_menu_option",varray(SEARCH_HELP));
|
||||||
|
menu_hb->add_child(help_search);
|
||||||
|
help_search->set_tooltip("Search the reference documentation.");
|
||||||
|
|
||||||
|
menu_hb->add_child( memnew( VSeparator) );
|
||||||
|
|
||||||
|
script_back = memnew( ToolButton );
|
||||||
|
script_back->connect("pressed",this,"_history_back");
|
||||||
|
menu_hb->add_child(script_back);
|
||||||
|
script_back->set_disabled(true);
|
||||||
|
help_search->set_tooltip("Go to previous edited document.");
|
||||||
|
|
||||||
|
script_forward = memnew( ToolButton );
|
||||||
|
script_forward->connect("pressed",this,"_history_forward");
|
||||||
|
menu_hb->add_child(script_forward);
|
||||||
|
script_forward->set_disabled(true);
|
||||||
|
help_search->set_tooltip("Go to next edited document.");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
tab_container->connect("tab_changed", this,"_tab_changed");
|
tab_container->connect("tab_changed", this,"_tab_changed");
|
||||||
|
|
||||||
find_replace_dialog = memnew(FindReplaceDialog);
|
find_replace_dialog = memnew(FindReplaceDialog);
|
||||||
@ -1959,8 +2448,20 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
|
|||||||
|
|
||||||
grab_focus_block=false;
|
grab_focus_block=false;
|
||||||
|
|
||||||
|
help_search_dialog = memnew( EditorHelpSearch );
|
||||||
|
add_child(help_search_dialog);
|
||||||
|
help_search_dialog->connect("go_to_help",this,"_help_class_goto");
|
||||||
|
|
||||||
|
|
||||||
|
help_index = memnew( EditorHelpIndex );
|
||||||
|
add_child(help_index);
|
||||||
|
help_index->connect("open_class",this,"_help_class_open");
|
||||||
|
|
||||||
|
history_pos=-1;
|
||||||
// debugger_gui->hide();
|
// debugger_gui->hide();
|
||||||
|
|
||||||
|
edit_pass=0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2062,8 +2563,13 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) {
|
|||||||
script_editor->hide();
|
script_editor->hide();
|
||||||
|
|
||||||
EDITOR_DEF("text_editor/auto_reload_changed_scripts",false);
|
EDITOR_DEF("text_editor/auto_reload_changed_scripts",false);
|
||||||
|
EDITOR_DEF("text_editor/open_dominant_script_on_scene_change",true);
|
||||||
EDITOR_DEF("external_editor/use_external_editor",false);
|
EDITOR_DEF("external_editor/use_external_editor",false);
|
||||||
EDITOR_DEF("external_editor/exec_path","");
|
EDITOR_DEF("external_editor/exec_path","");
|
||||||
|
EDITOR_DEF("text_editor/script_temperature_enabled",true);
|
||||||
|
EDITOR_DEF("text_editor/script_temperature_history_size",15);
|
||||||
|
EDITOR_DEF("text_editor/script_temperature_hot_color",Color(1,0,0,0.3));
|
||||||
|
EDITOR_DEF("text_editor/script_temperature_cold_color",Color(0,0,1,0.3));
|
||||||
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"external_editor/exec_path",PROPERTY_HINT_GLOBAL_FILE));
|
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"external_editor/exec_path",PROPERTY_HINT_GLOBAL_FILE));
|
||||||
EDITOR_DEF("external_editor/exec_flags","");
|
EDITOR_DEF("external_editor/exec_flags","");
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "tools/editor/code_editor.h"
|
#include "tools/editor/code_editor.h"
|
||||||
#include "scene/gui/split_container.h"
|
#include "scene/gui/split_container.h"
|
||||||
#include "scene/gui/item_list.h"
|
#include "scene/gui/item_list.h"
|
||||||
|
#include "tools/editor/editor_help.h"
|
||||||
|
|
||||||
class ScriptEditorQuickOpen : public ConfirmationDialog {
|
class ScriptEditorQuickOpen : public ConfirmationDialog {
|
||||||
|
|
||||||
@ -141,6 +142,9 @@ class ScriptEditor : public VBoxContainer {
|
|||||||
SEARCH_REPLACE,
|
SEARCH_REPLACE,
|
||||||
SEARCH_LOCATE_FUNCTION,
|
SEARCH_LOCATE_FUNCTION,
|
||||||
SEARCH_GOTO_LINE,
|
SEARCH_GOTO_LINE,
|
||||||
|
SEARCH_HELP,
|
||||||
|
SEARCH_CLASSES,
|
||||||
|
SEARCH_WEBSITE,
|
||||||
DEBUG_TOGGLE_BREAKPOINT,
|
DEBUG_TOGGLE_BREAKPOINT,
|
||||||
DEBUG_NEXT,
|
DEBUG_NEXT,
|
||||||
DEBUG_STEP,
|
DEBUG_STEP,
|
||||||
@ -150,6 +154,8 @@ class ScriptEditor : public VBoxContainer {
|
|||||||
HELP_CONTEXTUAL,
|
HELP_CONTEXTUAL,
|
||||||
WINDOW_MOVE_LEFT,
|
WINDOW_MOVE_LEFT,
|
||||||
WINDOW_MOVE_RIGHT,
|
WINDOW_MOVE_RIGHT,
|
||||||
|
WINDOW_NEXT,
|
||||||
|
WINDOW_PREV,
|
||||||
WINDOW_SELECT_BASE=100
|
WINDOW_SELECT_BASE=100
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -157,11 +163,17 @@ class ScriptEditor : public VBoxContainer {
|
|||||||
MenuButton *file_menu;
|
MenuButton *file_menu;
|
||||||
MenuButton *edit_menu;
|
MenuButton *edit_menu;
|
||||||
MenuButton *search_menu;
|
MenuButton *search_menu;
|
||||||
|
MenuButton *script_search_menu;
|
||||||
MenuButton *debug_menu;
|
MenuButton *debug_menu;
|
||||||
MenuButton *help_menu;
|
MenuButton *help_menu;
|
||||||
Timer *autosave_timer;
|
Timer *autosave_timer;
|
||||||
uint64_t idle;
|
uint64_t idle;
|
||||||
|
|
||||||
|
Button *help_search;
|
||||||
|
Button *site_search;
|
||||||
|
Button *class_search;
|
||||||
|
EditorHelpSearch *help_search_dialog;
|
||||||
|
|
||||||
ItemList *script_list;
|
ItemList *script_list;
|
||||||
HSplitContainer *script_split;
|
HSplitContainer *script_split;
|
||||||
TabContainer *tab_container;
|
TabContainer *tab_container;
|
||||||
@ -172,6 +184,27 @@ class ScriptEditor : public VBoxContainer {
|
|||||||
ScriptEditorDebugger* debugger;
|
ScriptEditorDebugger* debugger;
|
||||||
ToolButton *scripts_visible;
|
ToolButton *scripts_visible;
|
||||||
|
|
||||||
|
TextureFrame *script_icon;
|
||||||
|
Label *script_name_label;
|
||||||
|
|
||||||
|
ToolButton *script_back;
|
||||||
|
ToolButton *script_forward;
|
||||||
|
|
||||||
|
|
||||||
|
struct ScriptHistory {
|
||||||
|
|
||||||
|
Control *control;
|
||||||
|
int scroll_pos;
|
||||||
|
int cursor_column;
|
||||||
|
int cursor_row;
|
||||||
|
};
|
||||||
|
|
||||||
|
Vector<ScriptHistory> history;
|
||||||
|
int history_pos;
|
||||||
|
|
||||||
|
|
||||||
|
EditorHelpIndex *help_index;
|
||||||
|
|
||||||
void _tab_changed(int p_which);
|
void _tab_changed(int p_which);
|
||||||
void _menu_option(int p_optin);
|
void _menu_option(int p_optin);
|
||||||
|
|
||||||
@ -201,6 +234,8 @@ class ScriptEditor : public VBoxContainer {
|
|||||||
void _editor_pause();
|
void _editor_pause();
|
||||||
void _editor_stop();
|
void _editor_stop();
|
||||||
|
|
||||||
|
int edit_pass;
|
||||||
|
|
||||||
void _add_callback(Object *p_obj, const String& p_function, const StringArray& p_args);
|
void _add_callback(Object *p_obj, const String& p_function, const StringArray& p_args);
|
||||||
void _res_saved_callback(const Ref<Resource>& p_res);
|
void _res_saved_callback(const Ref<Resource>& p_res);
|
||||||
|
|
||||||
@ -224,8 +259,20 @@ class ScriptEditor : public VBoxContainer {
|
|||||||
|
|
||||||
void _script_split_dragged(float);
|
void _script_split_dragged(float);
|
||||||
|
|
||||||
|
|
||||||
|
void _history_forward();
|
||||||
|
void _history_back();
|
||||||
|
|
||||||
bool waiting_update_names;
|
bool waiting_update_names;
|
||||||
|
|
||||||
|
void _help_class_open(const String& p_class);
|
||||||
|
void _help_class_goto(const String& p_desc);
|
||||||
|
void _update_history_arrows();
|
||||||
|
void _go_to_tab(int p_idx);
|
||||||
|
void _update_history_pos(int p_new_pos);
|
||||||
|
void _update_script_colors();
|
||||||
|
|
||||||
|
|
||||||
static ScriptEditor *script_editor;
|
static ScriptEditor *script_editor;
|
||||||
protected:
|
protected:
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
@ -253,6 +300,8 @@ public:
|
|||||||
void set_window_layout(Ref<ConfigFile> p_layout);
|
void set_window_layout(Ref<ConfigFile> p_layout);
|
||||||
void get_window_layout(Ref<ConfigFile> p_layout);
|
void get_window_layout(Ref<ConfigFile> p_layout);
|
||||||
|
|
||||||
|
void set_scene_root_script( Ref<Script> p_script );
|
||||||
|
|
||||||
ScriptEditorDebugger *get_debugger() { return debugger; }
|
ScriptEditorDebugger *get_debugger() { return debugger; }
|
||||||
|
|
||||||
ScriptEditor(EditorNode *p_editor);
|
ScriptEditor(EditorNode *p_editor);
|
||||||
|
Loading…
Reference in New Issue
Block a user