1
0
Files
BallanceTasToolbox/BallanceTasEditor/BallanceTasEditor/Frontend/Shared/DialogService.cs

185 lines
6.3 KiB
C#
Raw Normal View History

2026-04-02 20:35:30 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace BallanceTasEditor.Frontend.Shared {
public interface IDialogService {
NewFileDialogResult? ShowNewFileDialog();
OpenFileDialogResult? ShowOpenFileDialog();
void ShowOpenFileFailedDialog(Exception e);
SaveFileDialogResult? ShowSaveFileDialog();
void ShowSaveFileFailedDialog(Exception e);
bool ShowConfirmCloseFileDialog(string message);
bool ShowConfirmExitWhenOpeningFileDialog();
bool ShowFileChangedDialog();
GotoDialogResult? ShowGotoDialog();
EditFpsDialogResult? ShowEditFpsDialog();
AddFrameDialogResult? ShowAddFrameDialog();
PreferenceDialogResult? ShowPreferenceDialog();
void ShowManuallyReportBugDialog();
void ShowAboutDialog();
}
public record NewFileDialogResult {
public required uint Fps { get; init; }
public required int Count { get; init; }
}
public record OpenFileDialogResult {
public required string Path { get; init; }
}
public record SaveFileDialogResult {
public required string Path { get; init; }
}
2026-04-02 20:35:30 +08:00
public record GotoDialogResult { }
public record EditFpsDialogResult { }
public record AddFrameDialogResult { }
public record PreferenceDialogResult { }
public class DialogService : IDialogService {
2026-04-02 20:35:30 +08:00
public DialogService(Window parent) {
m_Parent = parent;
}
private readonly Window m_Parent;
public NewFileDialogResult? ShowNewFileDialog() {
var dialog = new Views.NewFileDialog();
2026-04-02 20:35:30 +08:00
dialog.Owner = m_Parent;
if (dialog.ShowDialog() is true) {
// TODO: Finish result extraction
return new NewFileDialogResult() { Count = 0, Fps = 60 };
2026-04-02 20:35:30 +08:00
} else {
return null;
}
}
public OpenFileDialogResult? ShowOpenFileDialog() {
2026-04-02 20:35:30 +08:00
Microsoft.Win32.OpenFileDialog op = new Microsoft.Win32.OpenFileDialog();
op.RestoreDirectory = true;
op.Multiselect = false;
op.Filter = "TAS file(*.tas)|*.tas|All file(*.*)|*.*";
if (op.ShowDialog() is true) {
return new OpenFileDialogResult() { Path = op.FileName };
2026-04-02 20:35:30 +08:00
} else {
return null;
}
}
public void ShowOpenFileFailedDialog(Exception e) {
MessageBox.Show("Fail to open file. This file might not a legal TAS file." + e.Message,
"Error",
MessageBoxButton.OK, MessageBoxImage.Error);
}
public SaveFileDialogResult? ShowSaveFileDialog() {
2026-04-02 20:35:30 +08:00
Microsoft.Win32.SaveFileDialog op = new Microsoft.Win32.SaveFileDialog();
op.RestoreDirectory = true;
op.Filter = "TAS file(*.tas)|*.tas|All file(*.*)|*.*";
if (op.ShowDialog() is true) {
return new SaveFileDialogResult() { Path = op.FileName };
2026-04-02 20:35:30 +08:00
} else {
return null;
}
}
public void ShowSaveFileFailedDialog(Exception e) {
MessageBox.Show(
"Fail to save file." + e.Message,
"Error",
MessageBoxButton.OK, MessageBoxImage.Error);
}
public bool ShowConfirmCloseFileDialog(string message) {
var rv = MessageBox.Show(
"Do you want to close this TAS file? All changes will not be saved.",
"File Is Not Saved",
MessageBoxButton.YesNo, MessageBoxImage.Warning);
return rv == MessageBoxResult.Yes;
}
public bool ShowConfirmExitWhenOpeningFileDialog() {
var rv = MessageBox.Show(
"File is not closed. Do you want to just quit? All changes will not be saved.",
"File Is Not Saved",
MessageBoxButton.YesNo, MessageBoxImage.Warning);
return rv == MessageBoxResult.Yes;
}
public bool ShowFileChangedDialog() {
var rv = MessageBox.Show(
"File is changed. Do you want to reload it?",
"File Is Changed",
MessageBoxButton.YesNo, MessageBoxImage.Question);
return rv == MessageBoxResult.Yes;
}
public GotoDialogResult? ShowGotoDialog() {
var dialog = new Views.GotoDialog();
2026-04-02 20:35:30 +08:00
dialog.Owner = m_Parent;
if (dialog.ShowDialog() is true) {
// TODO: Finish result extraction
return new GotoDialogResult();
2026-04-02 20:35:30 +08:00
} else {
return null;
}
}
public EditFpsDialogResult? ShowEditFpsDialog() {
var dialog = new Views.EditFpsDialog();
2026-04-02 20:35:30 +08:00
dialog.Owner = m_Parent;
if (dialog.ShowDialog() is true) {
// TODO: Finish result extraction
return new EditFpsDialogResult();
2026-04-02 20:35:30 +08:00
} else {
return null;
}
}
public AddFrameDialogResult? ShowAddFrameDialog() {
var dialog = new Views.AddFrameDialog();
2026-04-02 20:35:30 +08:00
dialog.Owner = m_Parent;
if (dialog.ShowDialog() is true) {
// TODO: Finish result extraction
return new AddFrameDialogResult();
2026-04-02 20:35:30 +08:00
} else {
return null;
}
}
public PreferenceDialogResult? ShowPreferenceDialog() {
var dialog = new Views.PreferenceDialog();
2026-04-02 20:35:30 +08:00
dialog.Owner = m_Parent;
if (dialog.ShowDialog() is true) {
// TODO: Finish result extraction
return new PreferenceDialogResult();
2026-04-02 20:35:30 +08:00
} else {
return null;
}
}
public void ShowManuallyReportBugDialog() {
MessageBox.Show($"We can not open browser automatically for you. Please visit {Shared.Constant.REPORT_BUG_URL} manually to report bug.",
"Can not Open Browser",
MessageBoxButton.OK, MessageBoxImage.Information);
}
2026-04-02 20:35:30 +08:00
public void ShowAboutDialog() {
var dialog = new Views.AboutDialog();
2026-04-02 20:35:30 +08:00
dialog.Owner = m_Parent;
dialog.ShowDialog();
}
2026-04-02 20:35:30 +08:00
}
}