summaryrefslogtreecommitdiff
path: root/editor/project_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editor/project_manager.cpp')
-rw-r--r--editor/project_manager.cpp50
1 files changed, 35 insertions, 15 deletions
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index cb67d706c3..35b8973818 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -50,6 +50,19 @@
#include "scene/gui/tool_button.h"
#include "version.h"
+static String _find_project_file(DirAccess *p_da) {
+ p_da->list_dir_begin();
+ while (true) {
+ String f = p_da->get_next();
+ if (f == "")
+ break;
+ if (f.get_extension() == "godot")
+ return p_da->get_current_dir() + "/" + f;
+ }
+ p_da->list_dir_end();
+ return "";
+}
+
class NewProjectDialog : public ConfirmationDialog {
GDCLASS(NewProjectDialog, ConfirmationDialog);
@@ -92,18 +105,18 @@ private:
if (mode != MODE_IMPORT) {
- if (d->file_exists("godot.cfg")) {
+ if (_find_project_file(d) != "") {
- error->set_text(TTR("Invalid project path, godot.cfg must not exist."));
+ error->set_text(TTR("Invalid project path, *.godot must not exist."));
memdelete(d);
return "";
}
} else {
- if (valid_path != "" && !d->file_exists("godot.cfg")) {
+ if (valid_path != "" && _find_project_file(d) == "") {
- error->set_text(TTR("Invalid project path, godot.cfg must exist."));
+ error->set_text(TTR("Invalid project path, *.godot must exist."));
memdelete(d);
return "";
}
@@ -136,7 +149,7 @@ private:
String p = p_path;
if (mode == MODE_IMPORT) {
- if (p.ends_with("godot.cfg")) {
+ if (p.get_extension() == "godot") {
p = p.get_base_dir();
}
@@ -162,7 +175,7 @@ private:
fdialog->set_mode(FileDialog::MODE_OPEN_FILE);
fdialog->clear_filters();
- fdialog->add_filter("godot.cfg ; " _MKSTR(VERSION_NAME) " Project");
+ fdialog->add_filter("*.godot ; " _MKSTR(VERSION_NAME) " Project");
} else {
fdialog->set_mode(FileDialog::MODE_OPEN_DIR);
}
@@ -186,9 +199,9 @@ private:
} else {
if (mode == MODE_NEW) {
- FileAccess *f = FileAccess::open(dir.plus_file("/godot.cfg"), FileAccess::WRITE);
+ FileAccess *f = FileAccess::open(dir.plus_file("/" + project_name->get_text().replace(" ", "_") + ".godot"), FileAccess::WRITE);
if (!f) {
- error->set_text(TTR("Couldn't create godot.cfg in project path."));
+ error->set_text(TTR("Couldn't create *.godot project file in project path."));
} else {
f->store_line("; Engine configuration file.");
@@ -405,7 +418,7 @@ public:
l = memnew(Label);
l->set_text(TTR("Project Name:"));
- l->set_pos(Point2(5, 50));
+ l->set_position(Point2(5, 50));
vb->add_child(l);
pn = l;
@@ -624,7 +637,7 @@ void ProjectManager::_unhandled_input(const InputEvent &p_ev) {
selected_list.clear();
selected_list.insert(current, hb->get_meta("main_scene"));
- int offset_diff = scroll->get_v_scroll() - hb->get_pos().y;
+ int offset_diff = scroll->get_v_scroll() - hb->get_position().y;
if (offset_diff > 0)
scroll->set_v_scroll(scroll->get_v_scroll() - offset_diff);
@@ -662,7 +675,7 @@ void ProjectManager::_unhandled_input(const InputEvent &p_ev) {
selected_list.insert(current, hb->get_meta("main_scene"));
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;
+ int offset_diff = (hb->get_position().y + hb->get_size().y) - last_y_visible;
if (offset_diff > 0)
scroll->set_v_scroll(scroll->get_v_scroll() + offset_diff);
@@ -741,10 +754,17 @@ void ProjectManager::_load_recent_projects() {
continue;
String project = _name.get_slice("/", 1);
- String conf = path.plus_file("godot.cfg");
+ DirAccess *dir_access = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
+ if (dir_access->change_dir(path) != OK) {
+ EditorSettings::get_singleton()->erase(_name);
+ continue;
+ }
+ String conf = _find_project_file(dir_access);
+ memdelete(dir_access);
bool favorite = (_name.begins_with("favorite_projects/")) ? true : false;
uint64_t last_modified = 0;
+
if (FileAccess::exists(conf)) {
last_modified = FileAccess::get_modified_time(conf);
@@ -912,7 +932,7 @@ void ProjectManager::_update_scroll_pos(const String &dir) {
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;
+ int offset_diff = (hb->get_position().y + hb->get_size().y) - last_y_visible;
if (offset_diff > 0)
scroll->set_v_scroll(scroll->get_v_scroll() + offset_diff);
@@ -1006,7 +1026,7 @@ void ProjectManager::_scan_dir(DirAccess *da, float pos, float total, List<Strin
while (n != String()) {
if (da->current_is_dir() && !n.begins_with(".")) {
subdirs.push_front(n);
- } else if (n == "godot.cfg") {
+ } else if (n.get_extension() == "godot") {
r_projects->push_back(da->get_current_dir());
}
n = da->get_next();
@@ -1117,7 +1137,7 @@ void ProjectManager::_files_dropped(PoolStringArray p_files, int p_screen) {
dir->list_dir_begin();
String file = dir->get_next();
while (confirm && file != String()) {
- if (!dir->current_is_dir() && file.ends_with("godot.cfg")) {
+ if (!dir->current_is_dir() && file.get_extension() == "godot") {
confirm = false;
}
file = dir->get_next();