using System.Collections.Generic;
using Microsoft.UI.Xaml.Controls;
using Wino.Core.Domain.Models.Printing;
using Wino.Core.WinUI.Models;
namespace Wino.Core.WinUI.Dialogs;
///
/// Custom print dialog for configuring WebView2 print settings.
///
public sealed partial class PrintDialog : ContentDialog
{
///
/// The ViewModel that handles the dialog's data binding and logic.
///
public PrintDialogViewModel ViewModel { get; }
///
/// Gets the configured print settings from the dialog.
///
public WebView2PrintSettingsModel PrintSettings => ViewModel.PrintSettings;
public PrintDialog()
{
this.InitializeComponent();
ViewModel = new PrintDialogViewModel();
ViewModel.Initialize();
}
///
/// Initializes the dialog with existing print settings.
///
/// The initial print settings to load.
public PrintDialog(WebView2PrintSettingsModel printSettings)
{
this.InitializeComponent();
ViewModel = new PrintDialogViewModel();
ViewModel.Initialize(printSettings);
}
///
/// Sets the list of available printers for the dialog.
///
/// List of available printer names.
public void SetAvailablePrinters(IEnumerable printers)
{
ViewModel.SetAvailablePrinters(printers);
}
///
/// Validates the current print settings before closing the dialog.
///
/// True if settings are valid, false otherwise.
private bool ValidateSettings()
{
// Validate printer selection
if (string.IsNullOrWhiteSpace(PrintSettings.PrinterName))
{
// Show error message or set focus to printer selection
return false;
}
// Validate copies
if (PrintSettings.Copies <= 0)
{
return false;
}
// Validate page ranges if custom range is specified
if (ViewModel.IsCustomPageRange && !string.IsNullOrWhiteSpace(PrintSettings.PageRanges))
{
// Basic validation for page ranges format
// More comprehensive validation could be added here
var pageRanges = PrintSettings.PageRanges.Trim();
if (string.IsNullOrEmpty(pageRanges))
{
return false;
}
}
// Validate margins
if (PrintSettings.MarginTop < 0 || PrintSettings.MarginBottom < 0 ||
PrintSettings.MarginLeft < 0 || PrintSettings.MarginRight < 0)
{
return false;
}
// Validate scale factor
if (PrintSettings.ScaleFactor < 0.1 || PrintSettings.ScaleFactor > 2.0)
{
return false;
}
return true;
}
private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
// Validate settings before closing
if (!ValidateSettings())
{
args.Cancel = true;
// Could show error message here
}
}
private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
// Cancel was clicked, no validation needed
}
}