Browse Source

Prompt save dialog if running a unsaved scene. Solution for #966

Maximillian 10 years ago
parent
commit
cf616e5845
2 changed files with 26 additions and 5 deletions
  1. 24 5
      tools/editor/editor_node.cpp
  2. 2 0
      tools/editor/editor_node.h

+ 24 - 5
tools/editor/editor_node.cpp

@@ -975,9 +975,19 @@ void EditorNode::_dialog_action(String p_file) {
 			if (file->get_mode()==FileDialog::MODE_SAVE_FILE) {
 
 				_save_scene(p_file);
+				_run(false);
 			}
 
 		} break;
+
+		case FILE_SAVE_AND_RUN: {
+			if (file->get_mode()==FileDialog::MODE_SAVE_FILE) {
+
+				_save_scene(p_file);
+				_run(false);
+			}
+		} break;
+
 		case FILE_EXPORT_MESH_LIBRARY: {
 
 			Ref<MeshLibrary> ml;
@@ -1391,13 +1401,10 @@ void EditorNode::_run(bool p_current,const String& p_custom) {
 		}
 
 		if (scene->get_filename()=="") {
-
-
 			current_option=-1;
 			//accept->get_cancel()->hide();
-			accept->get_ok()->set_text("I see..");
-			accept->set_text("Scene has never been saved. Save before running!");
-			accept->popup_centered(Size2(300,70));;
+			/**/
+			_menu_option_confirm(FILE_SAVE_BEFORE_RUN, false);
 			return;
 
 		}
@@ -1664,6 +1671,18 @@ void EditorNode::_menu_option_confirm(int p_option,bool p_confirmed) {
 			
 		} break;
 
+		case FILE_SAVE_BEFORE_RUN: {
+			if (!p_confirmed) {
+				accept->get_ok()->set_text("Yes");
+				accept->set_text("This scene has never been saved. Save before running?");
+				accept->popup_centered(Size2(300, 70));
+				break;
+			}
+
+			_menu_option(FILE_SAVE_AS_SCENE);
+			_menu_option_confirm(FILE_SAVE_AND_RUN, true);
+		} break;
+
 		case FILE_DUMP_STRINGS: {
 
 			Node *scene = edited_scene;

+ 2 - 0
tools/editor/editor_node.h

@@ -108,6 +108,8 @@ class EditorNode : public Node {
 		FILE_OPEN_SCENE,
 		FILE_SAVE_SCENE,
 		FILE_SAVE_AS_SCENE,
+		FILE_SAVE_BEFORE_RUN,
+		FILE_SAVE_AND_RUN,
 		FILE_IMPORT_SUBSCENE,
 		FILE_EXPORT_PROJECT,
 		FILE_EXPORT_MESH_LIBRARY,