Browse Source

Export Path now has a folder icon to select the path

Marcelo Fernandez 6 years ago
parent
commit
e49a090919
4 changed files with 53 additions and 12 deletions
  1. 7 1
      editor/editor_properties.cpp
  2. 2 0
      editor/editor_properties.h
  3. 38 9
      editor/project_export.cpp
  4. 6 2
      editor/project_export.h

+ 7 - 1
editor/editor_properties.cpp

@@ -233,7 +233,7 @@ void EditorPropertyPath::_path_pressed() {
 		dialog->set_mode(EditorFileDialog::MODE_OPEN_DIR);
 		dialog->set_current_dir(full_path);
 	} else {
-		dialog->set_mode(EditorFileDialog::MODE_OPEN_FILE);
+		dialog->set_mode(save_mode ? EditorFileDialog::MODE_SAVE_FILE : EditorFileDialog::MODE_OPEN_FILE);
 		for (int i = 0; i < extensions.size(); i++) {
 			String e = extensions[i].strip_edges();
 			if (e != String()) {
@@ -260,6 +260,11 @@ void EditorPropertyPath::setup(const Vector<String> &p_extensions, bool p_folder
 	global = p_global;
 }
 
+void EditorPropertyPath::set_save_mode() {
+
+	save_mode = true;
+}
+
 void EditorPropertyPath::_notification(int p_what) {
 
 	if (p_what == NOTIFICATION_ENTER_TREE || p_what == NOTIFICATION_THEME_CHANGED) {
@@ -296,6 +301,7 @@ EditorPropertyPath::EditorPropertyPath() {
 	path_edit->connect("pressed", this, "_path_pressed");
 	folder = false;
 	global = false;
+	save_mode = false;
 }
 
 ///////////////////// CLASS NAME /////////////////////////

+ 2 - 0
editor/editor_properties.h

@@ -106,6 +106,7 @@ class EditorPropertyPath : public EditorProperty {
 	Vector<String> extensions;
 	bool folder;
 	bool global;
+	bool save_mode;
 	EditorFileDialog *dialog;
 	LineEdit *path;
 	Button *path_edit;
@@ -120,6 +121,7 @@ protected:
 
 public:
 	void setup(const Vector<String> &p_extensions, bool p_folder, bool p_global);
+	void set_save_mode();
 	virtual void update_property();
 	EditorPropertyPath();
 };

+ 38 - 9
editor/project_export.cpp

@@ -191,7 +191,7 @@ void ProjectExportDialog::_edit_preset(int p_index) {
 	if (p_index < 0 || p_index >= presets->get_item_count()) {
 		name->set_text("");
 		name->set_editable(false);
-		export_path->set_editable(false);
+		export_path->hide();
 		runnable->set_disabled(true);
 		parameters->edit(NULL);
 		presets->unselect_all();
@@ -213,11 +213,19 @@ void ProjectExportDialog::_edit_preset(int p_index) {
 	sections->show();
 
 	name->set_editable(true);
-	export_path->set_editable(true);
+	export_path->show();
 	duplicate_preset->set_disabled(false);
 	delete_preset->set_disabled(false);
 	name->set_text(current->get_name());
-	export_path->set_text(current->get_export_path());
+
+	List<String> extension_list = current->get_platform()->get_binary_extensions(current);
+	Vector<String> extension_vector;
+	for (int i = 0; i < extension_list.size(); i++) {
+		extension_vector.push_back("*." + extension_list[i]);
+	}
+
+	export_path->setup(extension_vector, false, true);
+	export_path->update_property();
 	runnable->set_disabled(false);
 	runnable->set_pressed(current->is_runnable());
 	parameters->edit(current.ptr());
@@ -457,7 +465,21 @@ void ProjectExportDialog::_name_changed(const String &p_string) {
 	_update_presets();
 }
 
-void ProjectExportDialog::_export_path_changed(const String &p_string) {
+void ProjectExportDialog::set_export_path(const String &p_value) {
+	Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current());
+	ERR_FAIL_COND(current.is_null());
+
+	current->set_export_path(p_value);
+}
+
+String ProjectExportDialog::get_export_path() {
+	Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current());
+	ERR_FAIL_COND_V(current.is_null(), String(""));
+
+	return current->get_export_path();
+}
+
+void ProjectExportDialog::_export_path_changed(const StringName &p_property, const Variant &p_value) {
 
 	if (updating)
 		return;
@@ -465,7 +487,7 @@ void ProjectExportDialog::_export_path_changed(const String &p_string) {
 	Ref<EditorExportPreset> current = EditorExport::get_singleton()->get_export_preset(presets->get_current());
 	ERR_FAIL_COND(current.is_null());
 
-	current->set_export_path(p_string);
+	current->set_export_path(p_value);
 	_update_presets();
 }
 
@@ -954,6 +976,10 @@ void ProjectExportDialog::_bind_methods() {
 	ClassDB::bind_method("_export_all_dialog_action", &ProjectExportDialog::_export_all_dialog_action);
 	ClassDB::bind_method("_custom_features_changed", &ProjectExportDialog::_custom_features_changed);
 	ClassDB::bind_method("_tab_changed", &ProjectExportDialog::_tab_changed);
+	ClassDB::bind_method("set_export_path", &ProjectExportDialog::set_export_path);
+	ClassDB::bind_method("get_export_path", &ProjectExportDialog::get_export_path);
+
+	ADD_PROPERTY(PropertyInfo(Variant::STRING, "export_path"), "set_export_path", "get_export_path");
 }
 
 ProjectExportDialog::ProjectExportDialog() {
@@ -1006,9 +1032,12 @@ ProjectExportDialog::ProjectExportDialog() {
 	runnable->connect("pressed", this, "_runnable_pressed");
 	settings_vb->add_child(runnable);
 
-	export_path = memnew(LineEdit);
-	settings_vb->add_margin_child(TTR("Export Path:"), export_path);
-	export_path->connect("text_changed", this, "_export_path_changed");
+	export_path = memnew(EditorPropertyPath);
+	settings_vb->add_child(export_path);
+	export_path->set_label(TTR("Export Path"));
+	export_path->set_object_and_property(this, "export_path");
+	export_path->set_save_mode();
+	export_path->connect("property_changed", this, "_export_path_changed");
 
 	sections = memnew(TabContainer);
 	sections->set_tab_align(TabContainer::ALIGN_LEFT);
@@ -1100,7 +1129,7 @@ ProjectExportDialog::ProjectExportDialog() {
 
 	//disable by default
 	name->set_editable(false);
-	export_path->set_editable(false);
+	export_path->hide();
 	runnable->set_disabled(true);
 	duplicate_preset->set_disabled(true);
 	delete_preset->set_disabled(true);

+ 6 - 2
editor/project_export.h

@@ -37,6 +37,7 @@
 #include "editor/editor_file_dialog.h"
 #include "editor/editor_file_system.h"
 #include "editor/editor_inspector.h"
+#include "editor/editor_properties.h"
 #include "scene/gui/button.h"
 #include "scene/gui/check_button.h"
 #include "scene/gui/control.h"
@@ -66,7 +67,7 @@ private:
 	ItemList *presets;
 
 	LineEdit *name;
-	LineEdit *export_path;
+	EditorPropertyPath *export_path;
 	EditorInspector *parameters;
 	CheckButton *runnable;
 
@@ -110,7 +111,7 @@ private:
 	void _runnable_pressed();
 	void _update_parameters(const String &p_edited_property);
 	void _name_changed(const String &p_string);
-	void _export_path_changed(const String &p_string);
+	void _export_path_changed(const StringName &p_property, const Variant &p_value);
 	void _add_preset(int p_platform);
 	void _edit_preset(int p_index);
 	void _duplicate_preset();
@@ -162,6 +163,9 @@ protected:
 public:
 	void popup_export();
 
+	void set_export_path(const String &p_value);
+	String get_export_path();
+
 	ProjectExportDialog();
 	~ProjectExportDialog();
 };