瀏覽代碼

Add a project description setting

The description is displayed as a tooltip when hovering the project
in the Project Manager. It can span multiple lines.

This partially addresses #8167.
Hugo Locurcio 6 年之前
父節點
當前提交
5bd01bf637
共有 3 個文件被更改,包括 11 次插入1 次删除
  1. 2 0
      core/project_settings.cpp
  2. 3 0
      doc/classes/ProjectSettings.xml
  3. 6 1
      editor/project_manager.cpp

+ 2 - 0
core/project_settings.cpp

@@ -1000,6 +1000,8 @@ ProjectSettings::ProjectSettings() {
 	Ref<InputEventJoypadButton> joyb;
 	Ref<InputEventJoypadButton> joyb;
 
 
 	GLOBAL_DEF("application/config/name", "");
 	GLOBAL_DEF("application/config/name", "");
+	GLOBAL_DEF("application/config/description", "");
+	custom_prop_info["application/config/description"] = PropertyInfo(Variant::STRING, "application/config/description", PROPERTY_HINT_MULTILINE_TEXT);
 	GLOBAL_DEF("application/run/main_scene", "");
 	GLOBAL_DEF("application/run/main_scene", "");
 	custom_prop_info["application/run/main_scene"] = PropertyInfo(Variant::STRING, "application/run/main_scene", PROPERTY_HINT_FILE, "*.tscn,*.scn,*.res");
 	custom_prop_info["application/run/main_scene"] = PropertyInfo(Variant::STRING, "application/run/main_scene", PROPERTY_HINT_FILE, "*.tscn,*.scn,*.res");
 	GLOBAL_DEF("application/run/disable_stdout", false);
 	GLOBAL_DEF("application/run/disable_stdout", false);

+ 3 - 0
doc/classes/ProjectSettings.xml

@@ -180,6 +180,9 @@
 			This user directory is used for storing persistent data ([code]user://[/code] filesystem). If left empty, [code]user://[/code] resolves to a project-specific folder in Godot's own configuration folder (see [method OS.get_user_data_dir]). If a custom directory name is defined, this name will be used instead and appended to the system-specific user data directory (same parent folder as the Godot configuration folder documented in [method OS.get_user_data_dir]).
 			This user directory is used for storing persistent data ([code]user://[/code] filesystem). If left empty, [code]user://[/code] resolves to a project-specific folder in Godot's own configuration folder (see [method OS.get_user_data_dir]). If a custom directory name is defined, this name will be used instead and appended to the system-specific user data directory (same parent folder as the Godot configuration folder documented in [method OS.get_user_data_dir]).
 			The [member application/config/use_custom_user_dir] setting must be enabled for this to take effect.
 			The [member application/config/use_custom_user_dir] setting must be enabled for this to take effect.
 		</member>
 		</member>
+		<member name="application/config/description" type="String" setter="" getter="" default="&quot;&quot;">
+			The project's description, displayed as a tooltip in the Project Manager when hovering the project.
+		</member>
 		<member name="application/config/icon" type="String" setter="" getter="" default="&quot;&quot;">
 		<member name="application/config/icon" type="String" setter="" getter="" default="&quot;&quot;">
 			Icon used for the project, set when project loads. Exporters will also use this icon when possible.
 			Icon used for the project, set when project loads. Exporters will also use this icon when possible.
 		</member>
 		</member>

+ 6 - 1
editor/project_manager.cpp

@@ -955,6 +955,7 @@ public:
 	struct Item {
 	struct Item {
 		String project_key;
 		String project_key;
 		String project_name;
 		String project_name;
+		String description;
 		String path;
 		String path;
 		String icon;
 		String icon;
 		String main_scene;
 		String main_scene;
@@ -970,6 +971,7 @@ public:
 
 
 		Item(const String &p_project,
 		Item(const String &p_project,
 				const String &p_name,
 				const String &p_name,
+				const String &p_description,
 				const String &p_path,
 				const String &p_path,
 				const String &p_icon,
 				const String &p_icon,
 				const String &p_main_scene,
 				const String &p_main_scene,
@@ -981,6 +983,7 @@ public:
 
 
 			project_key = p_project;
 			project_key = p_project;
 			project_name = p_name;
 			project_name = p_name;
+			description = p_description;
 			path = p_path;
 			path = p_path;
 			icon = p_icon;
 			icon = p_icon;
 			main_scene = p_main_scene;
 			main_scene = p_main_scene;
@@ -1149,6 +1152,7 @@ void ProjectList::load_project_data(const String &p_property_key, Item &p_item,
 		grayed = true;
 		grayed = true;
 	}
 	}
 
 
+	String description = cf->get_value("application", "config/description", "");
 	String icon = cf->get_value("application", "config/icon", "");
 	String icon = cf->get_value("application", "config/icon", "");
 	String main_scene = cf->get_value("application", "run/main_scene", "");
 	String main_scene = cf->get_value("application", "run/main_scene", "");
 
 
@@ -1170,7 +1174,7 @@ void ProjectList::load_project_data(const String &p_property_key, Item &p_item,
 
 
 	String project_key = p_property_key.get_slice("/", 1);
 	String project_key = p_property_key.get_slice("/", 1);
 
 
-	p_item = Item(project_key, project_name, path, icon, main_scene, last_modified, p_favorite, grayed, missing, config_version);
+	p_item = Item(project_key, project_name, description, path, icon, main_scene, last_modified, p_favorite, grayed, missing, config_version);
 }
 }
 
 
 void ProjectList::load_projects() {
 void ProjectList::load_projects() {
@@ -1249,6 +1253,7 @@ void ProjectList::create_project_item_control(int p_index) {
 	hb->connect("draw", this, "_panel_draw", varray(hb));
 	hb->connect("draw", this, "_panel_draw", varray(hb));
 	hb->connect("gui_input", this, "_panel_input", varray(hb));
 	hb->connect("gui_input", this, "_panel_input", varray(hb));
 	hb->add_constant_override("separation", 10 * EDSCALE);
 	hb->add_constant_override("separation", 10 * EDSCALE);
+	hb->set_tooltip(item.description);
 
 
 	VBoxContainer *favorite_box = memnew(VBoxContainer);
 	VBoxContainer *favorite_box = memnew(VBoxContainer);
 	favorite_box->set_name("FavoriteBox");
 	favorite_box->set_name("FavoriteBox");