|
@@ -335,7 +335,7 @@ private:
|
|
|
|
|
|
|
|
|
hide();
|
|
|
- emit_signal("project_created");
|
|
|
+ emit_signal("project_created", dir);
|
|
|
|
|
|
}
|
|
|
|
|
@@ -881,6 +881,7 @@ void ProjectManager::_load_recent_projects() {
|
|
|
hb->add_child(tf);
|
|
|
|
|
|
VBoxContainer *vb = memnew(VBoxContainer);
|
|
|
+ vb->set_name("project");
|
|
|
hb->add_child(vb);
|
|
|
Control *ec = memnew( Control );
|
|
|
ec->set_custom_minimum_size(Size2(0,1));
|
|
@@ -890,6 +891,7 @@ void ProjectManager::_load_recent_projects() {
|
|
|
title->add_color_override("font_color",font_color);
|
|
|
vb->add_child(title);
|
|
|
Label *fpath = memnew( Label(path) );
|
|
|
+ fpath->set_name("path");
|
|
|
vb->add_child(fpath);
|
|
|
fpath->set_opacity(0.5);
|
|
|
fpath->add_color_override("font_color",font_color);
|
|
@@ -911,6 +913,43 @@ void ProjectManager::_load_recent_projects() {
|
|
|
tabs->set_current_tab(0);
|
|
|
}
|
|
|
|
|
|
+void ProjectManager::_on_project_created(const String& dir) {
|
|
|
+ bool has_already=false;
|
|
|
+ for (int i=0;i<scroll_childs->get_child_count();i++) {
|
|
|
+ HBoxContainer *hb=scroll_childs->get_child(i)->cast_to<HBoxContainer>();
|
|
|
+ Label *fpath=hb->get_node(NodePath("project/path"))->cast_to<Label>();
|
|
|
+ if (fpath->get_text()==dir) {
|
|
|
+ has_already=true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (has_already) {
|
|
|
+ _update_scroll_pos(dir);
|
|
|
+ } else {
|
|
|
+ _load_recent_projects();
|
|
|
+ scroll->connect("draw", this, "_update_scroll_pos", varray(dir), CONNECT_ONESHOT);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void ProjectManager::_update_scroll_pos(const String& dir) {
|
|
|
+ for (int i=0;i<scroll_childs->get_child_count();i++) {
|
|
|
+ HBoxContainer *hb=scroll_childs->get_child(i)->cast_to<HBoxContainer>();
|
|
|
+ Label *fpath=hb->get_node(NodePath("project/path"))->cast_to<Label>();
|
|
|
+ if (fpath->get_text()==dir) {
|
|
|
+ last_clicked=hb->get_meta("name");
|
|
|
+ selected_list.clear();
|
|
|
+ selected_list.insert(hb->get_meta("name"), hb->get_meta("main_scene"));
|
|
|
+ _update_project_buttons();
|
|
|
+ int last_y_visible=scroll->get_v_scroll()+scroll->get_size().y;
|
|
|
+ int offset_diff=(hb->get_pos().y + hb->get_size().y)-last_y_visible;
|
|
|
+
|
|
|
+ if (offset_diff>0)
|
|
|
+ scroll->set_v_scroll(scroll->get_v_scroll()+offset_diff);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void ProjectManager::_open_project_confirm() {
|
|
|
|
|
|
for (Map<String,String>::Element *E=selected_list.front(); E; E=E->next()) {
|
|
@@ -1163,6 +1202,8 @@ void ProjectManager::_bind_methods() {
|
|
|
ObjectTypeDB::bind_method("_erase_project_confirm",&ProjectManager::_erase_project_confirm);
|
|
|
ObjectTypeDB::bind_method("_exit_dialog",&ProjectManager::_exit_dialog);
|
|
|
ObjectTypeDB::bind_method("_load_recent_projects",&ProjectManager::_load_recent_projects);
|
|
|
+ ObjectTypeDB::bind_method("_on_project_created",&ProjectManager::_on_project_created);
|
|
|
+ ObjectTypeDB::bind_method("_update_scroll_pos",&ProjectManager::_update_scroll_pos);
|
|
|
ObjectTypeDB::bind_method("_panel_draw",&ProjectManager::_panel_draw);
|
|
|
ObjectTypeDB::bind_method("_panel_input",&ProjectManager::_panel_input);
|
|
|
ObjectTypeDB::bind_method("_unhandled_input",&ProjectManager::_unhandled_input);
|
|
@@ -1376,7 +1417,7 @@ ProjectManager::ProjectManager() {
|
|
|
npdialog = memnew( NewProjectDialog );
|
|
|
gui_base->add_child(npdialog);
|
|
|
|
|
|
- npdialog->connect("project_created", this,"_load_recent_projects");
|
|
|
+ npdialog->connect("project_created", this,"_on_project_created");
|
|
|
_load_recent_projects();
|
|
|
|
|
|
if ( EditorSettings::get_singleton()->get("global/autoscan_project_path") ) {
|