Use TabBar, add OpenMainWindow and CloseMainWindow to API

This commit is contained in:
Ottermandias 2023-03-08 12:48:59 +01:00
parent 6a54d24634
commit 8d38f73f52
16 changed files with 463 additions and 369 deletions

View file

@ -312,6 +312,9 @@ public class IpcTester : IDisposable
private bool _subscribedToClick = false;
private string _lastClicked = string.Empty;
private string _lastHovered = string.Empty;
private TabType _selectTab = TabType.None;
private string _modName = string.Empty;
private PenumbraApiEc _ec = PenumbraApiEc.Success;
public Ui( DalamudPluginInterface pi )
{
@ -330,6 +333,21 @@ public class IpcTester : IDisposable
return;
}
using( var combo = ImRaii.Combo( "Tab to Open at", _selectTab.ToString() ) )
{
if( combo )
{
foreach( var val in Enum.GetValues< TabType >() )
{
if( ImGui.Selectable( val.ToString(), _selectTab == val ) )
{
_selectTab = val;
}
}
}
}
ImGui.InputTextWithHint( "##openMod", "Mod to Open at...", ref _modName, 256 );
using var table = ImRaii.Table( string.Empty, 3, ImGuiTableFlags.SizingFixedFit );
if( !table )
{
@ -370,6 +388,20 @@ public class IpcTester : IDisposable
ImGui.SameLine();
ImGui.TextUnformatted( _lastClicked );
DrawIntro( Ipc.OpenMainWindow.Label, "Open Mod Window" );
if( ImGui.Button( "Open##window" ) )
{
_ec = Ipc.OpenMainWindow.Subscriber( _pi ).Invoke( _selectTab, _modName, _modName );
}
ImGui.SameLine();
ImGui.TextUnformatted( _ec.ToString() );
DrawIntro( Ipc.CloseMainWindow.Label, "Close Mod Window" );
if( ImGui.Button( "Close##window" ) )
{
Ipc.CloseMainWindow.Subscriber( _pi ).Invoke();
}
}
private void UpdateLastDrawnMod( string name )

View file

@ -171,6 +171,38 @@ public class PenumbraApi : IDisposable, IPenumbraApi
public event ChangedItemHover? ChangedItemTooltip;
public event GameObjectResourceResolvedDelegate? GameObjectResourceResolved;
public PenumbraApiEc OpenMainWindow( TabType tab, string modDirectory, string modName )
{
CheckInitialized();
_penumbra!.ConfigWindow.IsOpen = true;
if( !Enum.IsDefined( tab ) )
return PenumbraApiEc.InvalidArgument;
if( tab != TabType.None )
_penumbra!.ConfigWindow.SelectTab = tab;
if( tab == TabType.Mods && (modDirectory.Length > 0 || modName.Length > 0) )
{
if( Penumbra.ModManager.TryGetMod( modDirectory, modName, out var mod ) )
{
_penumbra!.ConfigWindow.SelectMod( mod );
}
else
{
return PenumbraApiEc.ModMissing;
}
}
return PenumbraApiEc.Success;
}
public void CloseMainWindow()
{
CheckInitialized();
_penumbra!.ConfigWindow.IsOpen = false;
}
public void RedrawObject( int tableIndex, RedrawType setting )
{
CheckInitialized();

View file

@ -29,10 +29,12 @@ public class PenumbraIpcProviders : IDisposable
internal readonly EventProvider< string, bool > ModDirectoryChanged;
// UI
internal readonly EventProvider< string > PreSettingsDraw;
internal readonly EventProvider< string > PostSettingsDraw;
internal readonly EventProvider< ChangedItemType, uint > ChangedItemTooltip;
internal readonly EventProvider< MouseButton, ChangedItemType, uint > ChangedItemClick;
internal readonly EventProvider< string > PreSettingsDraw;
internal readonly EventProvider< string > PostSettingsDraw;
internal readonly EventProvider< ChangedItemType, uint > ChangedItemTooltip;
internal readonly EventProvider< MouseButton, ChangedItemType, uint > ChangedItemClick;
internal readonly FuncProvider< TabType, string, string, PenumbraApiEc > OpenMainWindow;
internal readonly ActionProvider CloseMainWindow;
// Redrawing
internal readonly ActionProvider< RedrawType > RedrawAll;
@ -131,6 +133,8 @@ public class PenumbraIpcProviders : IDisposable
PostSettingsDraw = Ipc.PostSettingsDraw.Provider( pi, a => Api.PostSettingsPanelDraw += a, a => Api.PostSettingsPanelDraw -= a );
ChangedItemTooltip = Ipc.ChangedItemTooltip.Provider( pi, () => Api.ChangedItemTooltip += OnTooltip, () => Api.ChangedItemTooltip -= OnTooltip );
ChangedItemClick = Ipc.ChangedItemClick.Provider( pi, () => Api.ChangedItemClicked += OnClick, () => Api.ChangedItemClicked -= OnClick );
OpenMainWindow = Ipc.OpenMainWindow.Provider( pi, Api.OpenMainWindow );
CloseMainWindow = Ipc.CloseMainWindow.Provider( pi, Api.CloseMainWindow );
// Redrawing
RedrawAll = Ipc.RedrawAll.Provider( pi, Api.RedrawAll );
@ -241,6 +245,8 @@ public class PenumbraIpcProviders : IDisposable
PostSettingsDraw.Dispose();
ChangedItemTooltip.Dispose();
ChangedItemClick.Dispose();
OpenMainWindow.Dispose();
CloseMainWindow.Dispose();
// Redrawing
RedrawAll.Dispose();