using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using OpenNest.Data;
using OpenNest.Desktop.Rendering;
namespace OpenNest.Avalonia
{
///
/// View > Draw Rapids, Pierce Points, Bounds, Offset, Cut Direction and Support: toggles of the
/// active nest's plate view, as each WinForms nest window keeps its own. Rapids and bounds are
/// read from the shared user settings when a nest opens and written back when it closes.
///
public partial class MainWindow
{
private void RestoreViewToggles(NestView view) =>
view.PlateView.Options = snapshotMode
? new PlateViewOptions()
: PlateViewOptions.Read(UserSettingsFile.Read(UserSettingsFile.DefaultPath));
// A snapshot must not depend on the user's settings.
private void UseDefaultViewToggles()
{
foreach (var view in views.Values)
{
view.PlateView.Options = new PlateViewOptions();
view.PlateView.InvalidateVisual();
}
UpdateViewToggles();
}
private void SaveViewToggles(NestView view)
{
if (snapshotMode)
return;
UserSettingsFile.Update(UserSettingsFile.DefaultPath, view.PlateView.Options.WriteTo);
}
// As the WinForms nest windows closing in turn: the last one's toggles are kept.
private void SaveAllViewToggles()
{
foreach (var tab in tabs.Tabs)
{
if (views.TryGetValue(tab, out var view))
SaveViewToggles(view);
}
}
private void UpdateViewToggles()
{
var options = ActiveView?.PlateView.Options;
foreach (var (item, value) in new (MenuItem, Func)[]
{
(DrawRapidsMenuItem, o => o.DrawRapid),
(DrawPiercePointsMenuItem, o => o.DrawPiercePoints),
(DrawBoundsMenuItem, o => o.DrawBounds),
(DrawOffsetMenuItem, o => o.DrawOffset),
(DrawCutDirectionMenuItem, o => o.DrawCutDirection),
(DrawSupportMenuItem, o => o.DrawSupport),
})
{
item.IsEnabled = options != null;
item.IsChecked = options != null && value(options);
}
}
private void Toggle(Action toggle)
{
if (ActiveView is { } view)
{
toggle(view.PlateView.Options);
view.PlateView.InvalidateVisual();
}
UpdateViewToggles();
}
private void OnToggleDrawRapids(object sender, RoutedEventArgs e) => Toggle(o => o.DrawRapid = !o.DrawRapid);
private void OnToggleDrawPiercePoints(object sender, RoutedEventArgs e) =>
Toggle(o => o.DrawPiercePoints = !o.DrawPiercePoints);
private void OnToggleDrawBounds(object sender, RoutedEventArgs e) => Toggle(o => o.DrawBounds = !o.DrawBounds);
private void OnToggleDrawOffset(object sender, RoutedEventArgs e) => Toggle(o => o.DrawOffset = !o.DrawOffset);
private void OnToggleDrawCutDirection(object sender, RoutedEventArgs e) =>
Toggle(o => o.DrawCutDirection = !o.DrawCutDirection);
private void OnToggleDrawSupport(object sender, RoutedEventArgs e) =>
Toggle(o => o.DrawSupport = !o.DrawSupport);
}
}