Browse Source

tools: add open-resource action

Daniele Bartolini 4 years ago
parent
commit
1969ee458d
2 changed files with 46 additions and 35 deletions
  1. 44 15
      tools/level_editor/level_editor.vala
  2. 2 20
      tools/level_editor/project_browser.vala

+ 44 - 15
tools/level_editor/level_editor.vala

@@ -115,21 +115,22 @@ public class LevelEditorApplication : Gtk.Application
 	// Constants
 	private const GLib.ActionEntry[] action_entries_file =
 	{
-		//                                 parameter type
-		// name           activate()       |     state
-		// |              |                |     |
-		{ "menu-file",    null,            null, null },
-		{ "new-level",    on_new_level,    null, null },
-		{ "open-level",   on_open_level,   "s",  null },
-		{ "new-project",  on_new_project,  null, null },
-		{ "open-project", on_open_project, null, null },
-		{ "save",         on_save,         null, null },
-		{ "save-as",      on_save_as,      null, null },
-		{ "import",       on_import,       "s",  null },
-		{ "preferences",  on_preferences,  null, null },
-		{ "deploy",       on_deploy,       null, null },
-		{ "close",        on_close,        null, null },
-		{ "quit",         on_quit,         null, null }
+		//                                   parameter type
+		// name            activate()        |     state
+		// |               |                 |     |
+		{ "menu-file",     null,             null, null },
+		{ "new-level",     on_new_level,     null, null },
+		{ "open-level",    on_open_level,    "s",  null },
+		{ "new-project",   on_new_project,   null, null },
+		{ "open-project",  on_open_project,  null, null },
+		{ "save",          on_save,          null, null },
+		{ "save-as",       on_save_as,       null, null },
+		{ "import",        on_import,        "s",  null },
+		{ "preferences",   on_preferences,   null, null },
+		{ "deploy",        on_deploy,        null, null },
+		{ "close",         on_close,         null, null },
+		{ "quit",          on_quit,          null, null },
+		{ "open-resource", on_open_resource, "s",  null }
 	};
 
 	private const GLib.ActionEntry[] action_entries_edit =
@@ -1708,6 +1709,34 @@ public class LevelEditorApplication : Gtk.Application
 		this.active_window.close();
 	}
 
+	private void on_open_resource(GLib.SimpleAction action, GLib.Variant? param)
+	{
+		string resource_name = param.get_string();
+
+		string? type = Crown.resource_type(resource_name);
+		if (type != null && type == "level")
+		{
+			string? name = Crown.resource_name(type, resource_name);
+			if (name != null)
+				activate_action("open-level", name);
+		}
+		else
+		{
+			try
+			{
+				GLib.File file = GLib.File.new_for_path(Path.build_filename(_project.source_dir(), resource_name));
+				GLib.AppInfo? app = file.query_default_handler();
+				GLib.List<GLib.File> files = new GLib.List<GLib.File>();
+				files.append(file);
+				app.launch(files, null);
+			}
+			catch (Error e)
+			{
+				loge(e.message);
+			}
+		}
+	}
+
 	private void on_show_grid(GLib.SimpleAction action, GLib.Variant? param)
 	{
 		_show_grid = !action.get_state().get_boolean();

+ 2 - 20
tools/level_editor/project_browser.vala

@@ -487,26 +487,8 @@ public class ProjectBrowser : Gtk.Box
 					Value name;
 					_tree_view.model.get_value(iter, ProjectStore.Column.NAME, out name);
 
-					if (type == "level")
-					{
-						Gtk.Application app = ((Gtk.Window)this.get_toplevel()).application;
-						app.activate_action("open-level", (string)name);
-					}
-					else
-					{
-						try
-						{
-							GLib.File file = GLib.File.new_for_path(ProjectBrowser.filename(_project, (string)type, (string)name));
-							GLib.AppInfo? app = file.query_default_handler();
-							GLib.List<GLib.File> files = new GLib.List<GLib.File>();
-							files.append(file);
-							app.launch(files, null);
-						}
-						catch (Error e)
-						{
-							loge(e.message);
-						}
-					}
+					Gtk.Application app = ((Gtk.Window)this.get_toplevel()).application;
+					app.activate_action("open-resource", ProjectBrowser.join((string)type, (string)name));
 				}
 			}
 		}