Persist sidebar state

This commit is contained in:
Ben Olden-Cooligan 2024-09-15 19:48:15 -07:00
parent f9e9f4cd1c
commit 451ee4e84e
6 changed files with 24 additions and 3 deletions

View File

@ -203,4 +203,10 @@ public class CommonConfig
[Common]
public bool DisableScannerSharing { get; set; }
[User]
public bool SidebarVisible { get; set; }
[User]
public int SidebarWidth { get; set; }
}

View File

@ -58,6 +58,7 @@ public static class InternalDefaults
DesktopToolStripDock = DockStyle.Top,
EventLogging = EventType.None,
ShowPageNumbers = false,
SidebarVisible = true,
PdfSettings = new PdfSettings
{
Metadata = new PdfMetadata

View File

@ -88,6 +88,7 @@ public class Sidebar
public LayoutElement CreateView(IFormBase parentWindow)
{
_sidebarVis.IsVisible = _config.Get(c => c.SidebarVisible);
_profile.SelectedItem = _profileManager.DefaultProfile;
_deviceSelectorWidget = new DeviceSelectorWidget(_scanPerformer, _deviceCapsCache, _iconProvider, parentWindow)
@ -217,5 +218,6 @@ public class Sidebar
public void ToggleVisibility()
{
_sidebarVis.IsVisible = !_sidebarVis.IsVisible;
_config.User.Set(c => c.SidebarVisible, _sidebarVis.IsVisible);
}
}

View File

@ -56,7 +56,7 @@ public static class L
return new BufferLayoutElement(element, left, top, right, bottom);
}
public static LayoutElement LeftPanel(LayoutElement left, LayoutElement right)
public static LayoutLeftPanel LeftPanel(LayoutElement left, LayoutElement right)
{
return new LayoutLeftPanel(left, right);
}

View File

@ -10,6 +10,8 @@ public class LayoutLeftPanel : LayoutElement
private readonly LayoutOverlay _overlay;
private readonly Splitter _splitter;
private Func<int> _widthGetter = () => 0;
private Action<int> _widthSetter = _ => { };
private bool _isInitialized;
public LayoutLeftPanel(LayoutElement left, LayoutElement right)
@ -37,12 +39,13 @@ public class LayoutLeftPanel : LayoutElement
if (!_isInitialized)
{
_left.Width = _splitter.Position = _splitter.Panel1MinimumSize;
_left.Width = _splitter.Position = Math.Max(_widthGetter(), _splitter.Panel1MinimumSize);
_splitter.PositionChanged += (_, _) =>
{
if (_left.Width != _splitter.Position)
{
_left.Width = _splitter.Position;
_widthSetter(_splitter.Position);
context.Invalidate();
}
};
@ -74,4 +77,11 @@ public class LayoutLeftPanel : LayoutElement
{
return _overlay.GetPreferredSize(context, parentBounds);
}
public LayoutLeftPanel SizeConfig(Func<int> getter, Action<int> setter)
{
_widthGetter = getter;
_widthSetter = setter;
return this;
}
}

View File

@ -135,7 +135,9 @@ public abstract class DesktopForm : EtoFormBase
_notificationArea.Content)
).Padding(8)
).Scale()
);
).SizeConfig(
() => Config.Get(c => c.SidebarWidth),
width => Config.User.Set(c => c.SidebarWidth, width));
}
private void OpeningContextMenu(object? sender, EventArgs e)