mirror of
https://github.com/xivdev/Penumbra.git
synced 2026-02-21 07:17:53 +01:00
Add some methods and interface to view currently Changed Items.
This commit is contained in:
parent
982385ccbb
commit
0c0eeec158
9 changed files with 219 additions and 40 deletions
72
Penumbra/UI/MenuTabs/TabChangedItems.cs
Normal file
72
Penumbra/UI/MenuTabs/TabChangedItems.cs
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using ImGuiNET;
|
||||
using Penumbra.Mods;
|
||||
using Penumbra.UI.Custom;
|
||||
using Penumbra.Util;
|
||||
|
||||
namespace Penumbra.UI
|
||||
{
|
||||
public partial class SettingsInterface
|
||||
{
|
||||
private class TabChangedItems
|
||||
{
|
||||
private const string LabelTab = "Changed Items";
|
||||
private readonly ModManager _modManager;
|
||||
private readonly SettingsInterface _base;
|
||||
|
||||
private string _filter = string.Empty;
|
||||
private string _filterLower = string.Empty;
|
||||
|
||||
public TabChangedItems( SettingsInterface ui )
|
||||
{
|
||||
_base = ui;
|
||||
_modManager = Service< ModManager >.Get();
|
||||
}
|
||||
|
||||
public void Draw()
|
||||
{
|
||||
var items = _modManager.Collections.ActiveCollection.Cache?.ChangedItems ?? new Dictionary< string, object? >();
|
||||
var forced = _modManager.Collections.ForcedCollection.Cache?.ChangedItems ?? new Dictionary< string, object? >();
|
||||
var count = items.Count + forced.Count;
|
||||
if( count > 0 && !ImGui.BeginTabItem( LabelTab ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using var raii = ImGuiRaii.DeferredEnd( ImGui.EndTabItem );
|
||||
|
||||
ImGui.SetNextItemWidth( -1 );
|
||||
if( ImGui.InputTextWithHint( "##ChangedItemsFilter", "Filter...", ref _filter, 64 ) )
|
||||
{
|
||||
_filterLower = _filter.ToLowerInvariant();
|
||||
}
|
||||
|
||||
if( !ImGui.BeginTable( "##ChangedItemsTable", 1, ImGuiTableFlags.RowBg, AutoFillSize ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
raii.Push( ImGui.EndTable );
|
||||
|
||||
var list = items.AsEnumerable();
|
||||
if( forced.Count > 0 )
|
||||
{
|
||||
list = list.Concat( forced ).OrderBy( kvp => kvp.Key );
|
||||
}
|
||||
|
||||
if( _filter.Any() )
|
||||
{
|
||||
list = list.Where( kvp => kvp.Key.ToLowerInvariant().Contains( _filterLower ) );
|
||||
}
|
||||
|
||||
foreach( var (name, data) in list )
|
||||
{
|
||||
ImGui.TableNextRow();
|
||||
ImGui.TableNextColumn();
|
||||
_base.DrawChangedItem( name, data );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -185,30 +185,7 @@ namespace Penumbra.UI
|
|||
raii.Push( ImGui.EndListBox );
|
||||
foreach( var (name, data) in Mod.Data.ChangedItems )
|
||||
{
|
||||
var ret = ImGui.Selectable( name ) ? MouseButton.Left : MouseButton.None;
|
||||
ret = ImGui.IsItemClicked( ImGuiMouseButton.Right ) ? MouseButton.Right : ret;
|
||||
ret = ImGui.IsItemClicked( ImGuiMouseButton.Middle ) ? MouseButton.Middle : ret;
|
||||
|
||||
if( ret != MouseButton.None )
|
||||
{
|
||||
_base._penumbra.Api.InvokeClick( ret, data );
|
||||
}
|
||||
|
||||
if( _base._penumbra.Api.HasTooltip && ImGui.IsItemHovered() )
|
||||
{
|
||||
ImGui.BeginTooltip();
|
||||
raii.Push( ImGui.EndTooltip );
|
||||
_base._penumbra.Api.InvokeTooltip( data );
|
||||
raii.Pop();
|
||||
}
|
||||
|
||||
if( data is Item it )
|
||||
{
|
||||
var modelId = $"({( ( Quad )it.ModelMain ).A})";
|
||||
var offset = ImGui.CalcTextSize( modelId ).X - ImGui.GetStyle().ItemInnerSpacing.X;
|
||||
ImGui.SameLine(ImGui.GetWindowContentRegionWidth() - offset);
|
||||
ImGui.TextColored( new Vector4(0.5f, 0.5f, 0.5f, 1 ), modelId );
|
||||
}
|
||||
_base.DrawChangedItem( name, data );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ using System.Text.RegularExpressions;
|
|||
using Dalamud.Interface;
|
||||
using Dalamud.Logging;
|
||||
using ImGuiNET;
|
||||
using Penumbra.GameData.Enums;
|
||||
using Penumbra.Interop;
|
||||
using Penumbra.Mods;
|
||||
using Penumbra.UI.Custom;
|
||||
|
|
|
|||
|
|
@ -19,9 +19,10 @@ namespace Penumbra.UI
|
|||
private readonly TabSettings _settingsTab;
|
||||
private readonly TabImport _importTab;
|
||||
private readonly TabBrowser _browserTab;
|
||||
private readonly TabEffective _effectiveTab;
|
||||
private readonly TabChangedItems _changedItems;
|
||||
internal readonly TabCollections CollectionsTab;
|
||||
internal readonly TabInstalled InstalledTab;
|
||||
private readonly TabEffective _effectiveTab;
|
||||
|
||||
public SettingsMenu( SettingsInterface ui )
|
||||
{
|
||||
|
|
@ -32,6 +33,7 @@ namespace Penumbra.UI
|
|||
InstalledTab = new TabInstalled( _base );
|
||||
CollectionsTab = new TabCollections( InstalledTab.Selector );
|
||||
_effectiveTab = new TabEffective();
|
||||
_changedItems = new TabChangedItems( _base );
|
||||
}
|
||||
|
||||
#if DEBUG
|
||||
|
|
@ -72,7 +74,7 @@ namespace Penumbra.UI
|
|||
{
|
||||
_browserTab.Draw();
|
||||
InstalledTab.Draw();
|
||||
|
||||
_changedItems.Draw();
|
||||
if( Penumbra.Config.ShowAdvanced )
|
||||
{
|
||||
_effectiveTab.Draw();
|
||||
|
|
|
|||
39
Penumbra/UI/UiHelpers.cs
Normal file
39
Penumbra/UI/UiHelpers.cs
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
using System.Numerics;
|
||||
using ImGuiNET;
|
||||
using Lumina.Data.Parsing;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Penumbra.GameData.Enums;
|
||||
using Penumbra.UI.Custom;
|
||||
|
||||
namespace Penumbra.UI
|
||||
{
|
||||
public partial class SettingsInterface
|
||||
{
|
||||
internal void DrawChangedItem( string name, object? data )
|
||||
{
|
||||
var ret = ImGui.Selectable( name ) ? MouseButton.Left : MouseButton.None;
|
||||
ret = ImGui.IsItemClicked( ImGuiMouseButton.Right ) ? MouseButton.Right : ret;
|
||||
ret = ImGui.IsItemClicked( ImGuiMouseButton.Middle ) ? MouseButton.Middle : ret;
|
||||
|
||||
if( ret != MouseButton.None )
|
||||
{
|
||||
_penumbra.Api.InvokeClick( ret, data );
|
||||
}
|
||||
|
||||
if( _penumbra.Api.HasTooltip && ImGui.IsItemHovered() )
|
||||
{
|
||||
ImGui.BeginTooltip();
|
||||
using var tooltip = ImGuiRaii.DeferredEnd( ImGui.EndTooltip );
|
||||
_penumbra.Api.InvokeTooltip( data );
|
||||
}
|
||||
|
||||
if( data is Item it )
|
||||
{
|
||||
var modelId = $"({( ( Quad )it.ModelMain ).A})";
|
||||
var offset = ImGui.CalcTextSize( modelId ).X - ImGui.GetStyle().ItemInnerSpacing.X;
|
||||
ImGui.SameLine( ImGui.GetWindowContentRegionWidth() - offset );
|
||||
ImGui.TextColored( new Vector4( 0.5f, 0.5f, 0.5f, 1 ), modelId );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue