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 } }