/// <summary> /// <para>Display the package information as a GUI.</para> /// <para>パッケージ情報をGUIとして表示する。</para> /// </summary> /// <param name="data"> /// <para>Package infomation.</para> /// <para>パッケージ情報。</para> /// </param> /// <param name="bold"> /// <para>Bold GUIStyle.</para> /// <para>太字のGUIStyle。</para> /// </param> /// <param name="window"> /// <para>Main window of NuGet importer.</para> /// <para>NuGet importerのメインウィンドウ。</para> /// </param> /// <param name="selected"> /// <para>Whether the package is selected.</para> /// <para>選択されたパッケージかどうか。</para> /// </param> /// <param name="onlyStable"> /// <para>Whether only stable.</para> /// <para>安定版のみか。</para> /// </param> /// <returns> /// <para>Task</para> /// </returns> internal static async Task ToGUI(this Datum data, GUIStyle bold, NuGetImporterWindow window, bool selected, bool onlyStable) { var tasks = new List <Task>(); var sizeScale = window.position.width / 1920; if (onlyStable) { if (!data.versions.Any(version => !version.version.Contains('-') && version.version[0] != '0')) { return; } } Color color = GUI.color; if (selected) { GUI.color = Color.cyan; } using (var scope = new EditorGUILayout.HorizontalScope("Box", GUILayout.MinHeight(150), GUILayout.ExpandWidth(true))) { GUI.color = color; Event currentEvent = Event.current; if (currentEvent.type == EventType.MouseDown) { if (scope.rect.Contains(currentEvent.mousePosition)) { tasks.Add(window.UpdateSelected(data)); } } using (new EditorGUILayout.VerticalScope(GUILayout.MinHeight(150), GUILayout.Width(150 * sizeScale))) { GUILayout.FlexibleSpace(); using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); EditorGUILayout.LabelField(new GUIContent(data.icon), GUILayout.Width(128 * sizeScale), GUILayout.Height(128 * sizeScale)); GUILayout.FlexibleSpace(); } GUILayout.FlexibleSpace(); } using (new EditorGUILayout.VerticalScope(GUILayout.ExpandWidth(true))) { using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(true))) { GUILayoutExtention.WrapedLabel(data.id, 24); } using (new EditorGUILayout.HorizontalScope(GUILayout.ExpandWidth(true))) { GUILayout.Label("Author : ", bold); GUILayoutExtention.WrapedLabel(string.Join(", ", data.authors)); GUILayout.Label("Download :", bold); GUILayout.Label(data.totalDownloads.ToString()); GUILayout.FlexibleSpace(); IEnumerable <string> sortedVersions = data.GetAllVersion().AsEnumerable().Reverse(); var version = onlyStable ? sortedVersions.First(ver => !ver.Contains('-') && ver[0] != '0') : sortedVersions.First(); if (PackageManager.Installed != null && PackageManager.Installed.package != null) { IEnumerable <Package> installed = PackageManager.Installed.package.Where(package => package.id == data.id); if (installed != null && installed.Any()) { version = installed.First().version; } } GUILayout.Label("v" + version); } GUILayoutExtention.WrapedLabel(data.summary == "" ? data.description : data.summary); } } await Task.WhenAll(tasks); }