Files
XLAB/XLAB2/DialogService.cs
Курнат Андрей a47a7a5a3b edit
2026-03-19 23:31:41 +03:00

162 lines
5.9 KiB
C#

using System.Collections.Generic;
using System.Windows;
namespace XLAB2
{
internal interface IDialogService
{
DocumentEditorResult ShowCreateDocumentDialog(DocumentEditorResult seed);
IReadOnlyList<AvailableInstrumentItem> ShowInstrumentPickerDialog(string customerName, IReadOnlyList<AvailableInstrumentItem> instruments);
InstrumentTypeSelectionResult ShowInstrumentTypeDialog(string customerName, IReadOnlyList<AvailableInstrumentItem> instrumentTypes);
IReadOnlyList<string> ShowCloneVerificationDialog(CloneVerificationSeed seed);
SpoiDirectoryItem ShowSpoiEditDialog(SpoiDirectoryItem seed, bool isNew, IReadOnlyList<SpoiDirectoryItem> existingItems);
SpnmtpDirectoryItem ShowSpnmtpEditDialog(SpnmtpDirectoryItem seed, bool isNew, IReadOnlyList<SpnmtpDirectoryItem> existingItems);
VerificationEditResult ShowVerificationDialog(
VerificationEditSeed seed,
IReadOnlyList<PersonReference> verifiers,
IReadOnlyList<DocumentFormReference> documentForms);
bool Confirm(string message);
void ShowError(string message);
void ShowInfo(string message);
void ShowWarning(string message);
}
internal sealed class DialogService : IDialogService
{
public DialogService()
{
}
public DialogService(Window owner)
{
Owner = owner;
}
public Window Owner { get; set; }
public DocumentEditorResult ShowCreateDocumentDialog(DocumentEditorResult seed)
{
var viewModel = new CreateDocumentWindowViewModel(seed);
var window = new CreateDocumentWindow(viewModel);
AttachOwner(window);
var result = window.ShowDialog();
return result.HasValue && result.Value ? viewModel.ToResult() : null;
}
public IReadOnlyList<AvailableInstrumentItem> ShowInstrumentPickerDialog(string customerName, IReadOnlyList<AvailableInstrumentItem> instruments)
{
var viewModel = new SelectInstrumentsWindowViewModel(customerName, instruments);
var window = new SelectInstrumentsWindow(viewModel);
AttachOwner(window);
var result = window.ShowDialog();
return result.HasValue && result.Value ? viewModel.GetSelectedItems() : null;
}
public InstrumentTypeSelectionResult ShowInstrumentTypeDialog(string customerName, IReadOnlyList<AvailableInstrumentItem> instrumentTypes)
{
var viewModel = new SelectInstrumentTypeWindowViewModel(customerName, instrumentTypes);
var window = new SelectInstrumentTypeWindow(viewModel);
AttachOwner(window);
var result = window.ShowDialog();
return result.HasValue && result.Value ? viewModel.GetResult() : null;
}
public IReadOnlyList<string> ShowCloneVerificationDialog(CloneVerificationSeed seed)
{
var viewModel = new CloneVerificationWindowViewModel(seed);
var window = new CloneVerificationWindow(viewModel);
AttachOwner(window);
var result = window.ShowDialog();
return result.HasValue && result.Value ? viewModel.GetSerialNumbers() : null;
}
public SpoiDirectoryItem ShowSpoiEditDialog(SpoiDirectoryItem seed, bool isNew, IReadOnlyList<SpoiDirectoryItem> existingItems)
{
var viewModel = new SpoiEditWindowViewModel(seed, isNew, existingItems);
var window = new SpoiEditWindow(viewModel);
AttachOwner(window);
var result = window.ShowDialog();
return result.HasValue && result.Value ? viewModel.ToResult() : null;
}
public SpnmtpDirectoryItem ShowSpnmtpEditDialog(SpnmtpDirectoryItem seed, bool isNew, IReadOnlyList<SpnmtpDirectoryItem> existingItems)
{
var viewModel = new SpnmtpEditWindowViewModel(seed, isNew, existingItems);
var window = new SpnmtpEditWindow(viewModel);
AttachOwner(window);
var result = window.ShowDialog();
return result.HasValue && result.Value ? viewModel.ToResult() : null;
}
public VerificationEditResult ShowVerificationDialog(
VerificationEditSeed seed,
IReadOnlyList<PersonReference> verifiers,
IReadOnlyList<DocumentFormReference> documentForms)
{
var viewModel = new VerificationEditWindowViewModel(seed, verifiers, documentForms);
var window = new VerificationEditWindow(viewModel);
AttachOwner(window);
var result = window.ShowDialog();
return result.HasValue && result.Value ? viewModel.ToResult() : null;
}
public bool Confirm(string message)
{
return Owner == null
? MessageBox.Show(message, "ПСВ", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes
: MessageBox.Show(Owner, message, "ПСВ", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes;
}
public void ShowError(string message)
{
ShowMessage(message, MessageBoxImage.Error);
}
public void ShowInfo(string message)
{
ShowMessage(message, MessageBoxImage.Information);
}
public void ShowWarning(string message)
{
ShowMessage(message, MessageBoxImage.Warning);
}
private void AttachOwner(Window window)
{
if (Owner != null)
{
window.Owner = Owner;
}
}
private void ShowMessage(string message, MessageBoxImage image)
{
if (Owner == null)
{
MessageBox.Show(message, "ПСВ", MessageBoxButton.OK, image);
return;
}
MessageBox.Show(Owner, message, "ПСВ", MessageBoxButton.OK, image);
}
}
}