This commit is contained in:
goaaats 2021-10-07 19:08:38 +02:00
commit bc558fb425
No known key found for this signature in database
GPG key ID: F18F057873895461
9 changed files with 130 additions and 73 deletions

View file

@ -149,10 +149,10 @@ namespace Dalamud.Interface.Internal
foreach (var tag in pluginCategoryTags)
{
// only tags from whitelist can be accepted
int matchIdx = Array.FindIndex(this.CategoryList, x => x.Tag.Equals(tag, StringComparison.InvariantCultureIgnoreCase));
var matchIdx = Array.FindIndex(this.CategoryList, x => x.Tag.Equals(tag, StringComparison.InvariantCultureIgnoreCase));
if (matchIdx >= 0)
{
int categoryId = this.CategoryList[matchIdx].CategoryId;
var categoryId = this.CategoryList[matchIdx].CategoryId;
if (categoryId >= FirstTagBasedCategoryId)
{
categoryList.Add(categoryId);
@ -202,7 +202,7 @@ namespace Dalamud.Interface.Internal
{
var groupInfo = this.groupList[this.currentGroupIdx];
bool includeAll = (this.currentCategoryIdx == 0) || (groupInfo.GroupKind != GroupKind.Available);
var includeAll = (this.currentCategoryIdx == 0) || (groupInfo.GroupKind != GroupKind.Available);
if (includeAll)
{
result.AddRange(plugins);
@ -215,7 +215,7 @@ namespace Dalamud.Interface.Internal
{
if (this.mapPluginCategories.TryGetValue(plugin, out var pluginCategoryIds))
{
int matchIdx = Array.IndexOf(pluginCategoryIds, selectedCategoryInfo.CategoryId);
var matchIdx = Array.IndexOf(pluginCategoryIds, selectedCategoryInfo.CategoryId);
if (matchIdx >= 0)
{
result.Add(plugin);

View file

@ -34,9 +34,18 @@ namespace Dalamud.Interface.Internal.Windows
("DalamudWhite", ImGuiColors.DalamudWhite),
("DalamudWhite2", ImGuiColors.DalamudWhite2),
("DalamudOrange", ImGuiColors.DalamudOrange),
("DalamudYellow", ImGuiColors.DalamudYellow),
("DalamudViolet", ImGuiColors.DalamudViolet),
("TankBlue", ImGuiColors.TankBlue),
("HealerGreen", ImGuiColors.HealerGreen),
("DPSRed", ImGuiColors.DPSRed),
("ParsedGrey", ImGuiColors.ParsedGrey),
("ParsedGreen", ImGuiColors.ParsedGreen),
("ParsedBlue", ImGuiColors.ParsedBlue),
("ParsedPurple", ImGuiColors.ParsedPurple),
("ParsedOrange", ImGuiColors.ParsedOrange),
("ParsedPink", ImGuiColors.ParsedPink),
("ParsedGold", ImGuiColors.ParsedGold),
}.OrderBy(colorDemo => colorDemo.Name).ToList();
}

View file

@ -195,7 +195,6 @@ namespace Dalamud.Interface.Internal.Windows
public override void Draw()
{
this.DrawHeader();
// this.DrawPluginTabBar();
this.DrawPluginCategories();
this.DrawFooter();
this.DrawErrorModal();
@ -470,6 +469,7 @@ namespace Dalamud.Interface.Internal.Windows
}
}
/*
private void DrawPluginTabBar()
{
ImGui.SetCursorPosY(ImGui.GetCursorPosY() - (5 * ImGuiHelpers.GlobalScale));
@ -490,7 +490,9 @@ namespace Dalamud.Interface.Internal.Windows
ImGui.PopStyleVar();
}
*/
/*
private void DrawPluginTab(string title, Action drawPluginList)
{
if (ImGui.BeginTabItem(title))
@ -511,6 +513,7 @@ namespace Dalamud.Interface.Internal.Windows
ImGui.EndTabItem();
}
}
*/
private void DrawAvailablePluginList()
{
@ -522,30 +525,38 @@ namespace Dalamud.Interface.Internal.Windows
return;
}
var filteredList = pluginList
var filteredManifests = pluginList
.Where(rm => !this.IsManifestFiltered(rm))
.ToList();
if (filteredList.Count == 0)
if (filteredManifests.Count == 0)
{
ImGui.TextColored(ImGuiColors.DalamudGrey2, Locs.TabBody_SearchNoMatching);
return;
}
var i = 0;
foreach (var manifest in filteredList)
// reset opened list of collapsibles when switching between categories
if (this.categoryManager.IsContentDirty)
{
var (isInstalled, plugin) = this.IsManifestInstalled(manifest);
this.openPluginCollapsibles.Clear();
}
var categoryManifestsList = this.categoryManager.GetCurrentCategoryContent(filteredManifests);
var i = 0;
foreach (var manifest in categoryManifestsList)
{
var remoteManifest = manifest as RemotePluginManifest;
var (isInstalled, plugin) = this.IsManifestInstalled(remoteManifest);
ImGui.PushID($"{manifest.InternalName}{manifest.AssemblyVersion}");
if (isInstalled)
{
this.DrawInstalledPlugin(plugin, i++, true);
}
else
{
this.DrawAvailablePlugin(manifest, i++);
this.DrawAvailablePlugin(remoteManifest, i++);
}
ImGui.PopID();
@ -610,10 +621,10 @@ namespace Dalamud.Interface.Internal.Windows
private void DrawPluginCategories()
{
float useContentHeight = -40; // button height + spacing
float useMenuWidth = 180; // works fine as static value, table can be resized by user
var useContentHeight = -40f; // button height + spacing
var useMenuWidth = 180f; // works fine as static value, table can be resized by user
float useContentWidth = ImGui.GetContentRegionAvail().X;
var useContentWidth = ImGui.GetContentRegionAvail().X;
if (ImGui.BeginChild("InstallerCategories", new Vector2(useContentWidth, useContentHeight * ImGuiHelpers.GlobalScale)))
{
@ -628,12 +639,12 @@ namespace Dalamud.Interface.Internal.Windows
this.DrawPluginCategorySelectors();
ImGui.TableNextColumn();
if (ImGui.BeginChild($"ScrollingPlugins", new Vector2(useContentWidth, 0), false, ImGuiWindowFlags.HorizontalScrollbar | ImGuiWindowFlags.NoBackground))
if (ImGui.BeginChild("ScrollingPlugins", new Vector2(-1, 0), false, ImGuiWindowFlags.HorizontalScrollbar | ImGuiWindowFlags.NoBackground))
{
this.DrawPluginCategoryContent();
ImGui.EndChild();
}
ImGui.EndChild();
ImGui.EndTable();
}
@ -654,7 +665,7 @@ namespace Dalamud.Interface.Internal.Windows
}
}
for (int groupIdx = 0; groupIdx < this.categoryManager.GroupList.Length; groupIdx++)
for (var groupIdx = 0; groupIdx < this.categoryManager.GroupList.Length; groupIdx++)
{
var groupInfo = this.categoryManager.GroupList[groupIdx];
var canShowGroup = (groupInfo.GroupKind != PluginCategoryManager.GroupKind.DevTools) || this.hasDevPlugins;
@ -673,11 +684,11 @@ namespace Dalamud.Interface.Internal.Windows
ImGui.Indent();
var categoryItemSize = new Vector2(ImGui.GetContentRegionAvail().X - (5 * ImGuiHelpers.GlobalScale), ImGui.GetTextLineHeight());
for (int categoryIdx = 0; categoryIdx < groupInfo.Categories.Count; categoryIdx++)
for (var categoryIdx = 0; categoryIdx < groupInfo.Categories.Count; categoryIdx++)
{
var categoryInfo = Array.Find(this.categoryManager.CategoryList, x => x.CategoryId == groupInfo.Categories[categoryIdx]);
bool hasSearchHighlight = this.categoryManager.IsCategoryHighlighted(categoryInfo.CategoryId);
var hasSearchHighlight = this.categoryManager.IsCategoryHighlighted(categoryInfo.CategoryId);
if (hasSearchHighlight)
{
ImGui.PushStyleColor(ImGuiCol.Text, colorSearchHighlight);
@ -712,6 +723,8 @@ namespace Dalamud.Interface.Internal.Windows
return;
}
ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, ImGuiHelpers.ScaledVector2(1, 3));
var groupInfo = this.categoryManager.GroupList[this.categoryManager.CurrentGroupIdx];
if (groupInfo.GroupKind == PluginCategoryManager.GroupKind.DevTools)
{
@ -737,42 +750,10 @@ namespace Dalamud.Interface.Internal.Windows
}
else
{
var pluginList = this.pluginListAvailable;
if (pluginList.Count > 0)
{
// reset opened list of collapsibles when switching between categories
if (this.categoryManager.IsContentDirty)
{
this.openPluginCollapsibles.Clear();
}
var filteredManifests = pluginList.Where(rm => !this.IsManifestFiltered(rm) && !this.IsManifestInstalled(rm).IsInstalled);
var categoryManifestsList = this.categoryManager.GetCurrentCategoryContent(filteredManifests);
if (categoryManifestsList.Count > 0)
{
var i = 0;
foreach (var manifest in categoryManifestsList)
{
var rmManifest = manifest as RemotePluginManifest;
if (rmManifest != null)
{
ImGui.PushID($"{rmManifest.InternalName}{rmManifest.AssemblyVersion}");
this.DrawAvailablePlugin(rmManifest, i++);
ImGui.PopID();
}
}
}
else
{
ImGui.Text(Locs.TabBody_SearchNoMatching);
}
}
else
{
ImGui.Text(Locs.TabBody_SearchNoCompatible);
}
this.DrawAvailablePluginList();
}
ImGui.PopStyleVar();
}
private void DrawImageTester()
@ -2166,6 +2147,10 @@ namespace Dalamud.Interface.Internal.Windows
if (didAny)
{
Log.Verbose($"Plugin images for {manifest.InternalName} loaded from disk");
if (pluginImages.Contains(null))
pluginImages = pluginImages.Where(image => image != null).ToArray();
this.pluginImagesMap[manifest.InternalName] = pluginImages;
return;
@ -2218,6 +2203,10 @@ namespace Dalamud.Interface.Internal.Windows
if (didAny)
{
Log.Verbose($"Plugin images for {manifest.InternalName} downloaded");
if (pluginImages.Contains(null))
pluginImages = pluginImages.Where(image => image != null).ToArray();
this.pluginImagesMap[manifest.InternalName] = pluginImages;
return;