Skip to content

Commit b6c8c87

Browse files
committed
Refactor MainWindowViewModel: Split into multiple partial classes to improve maintainability and organization.
1 parent 1f0941e commit b6c8c87

11 files changed

+1051
-1003
lines changed

src/Spectron/Spectron.csproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,4 @@
4545
<ProjectReference Include="..\Spectron.Emulation\Spectron.Emulation.csproj" />
4646
<ProjectReference Include="..\Spectron.Recorder\Spectron.Recorder.csproj" />
4747
</ItemGroup>
48-
49-
<ItemGroup>
50-
<Compile Update="ViewModels\MainWindowViewModel.Handlers.cs">
51-
<DependentUpon>MainWindowViewModel.cs</DependentUpon>
52-
</Compile>
53-
</ItemGroup>
5448
</Project>
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
using System.Threading.Tasks;
2+
using CommunityToolkit.Mvvm.Messaging;
3+
using Microsoft.Extensions.Logging;
4+
using OldBit.Spectron.Debugger.ViewModels;
5+
using OldBit.Spectron.Extensions;
6+
using OldBit.Spectron.Messages;
7+
using OldBit.Spectron.Theming;
8+
9+
namespace OldBit.Spectron.ViewModels;
10+
11+
partial class MainWindowViewModel
12+
{
13+
public async Task OpenPreferencesWindow()
14+
{
15+
var resumeAfter = false;
16+
17+
if (!IsPaused)
18+
{
19+
Pause();
20+
resumeAfter = true;
21+
}
22+
23+
var preferences = await WeakReferenceMessenger.Default.Send(new ShowPreferencesViewMessage(_preferences, _gamepadManager));
24+
25+
ThemeManager.SelectTheme(preferences?.Theme ?? _preferences.Theme);
26+
27+
if (preferences != null)
28+
{
29+
_preferences = preferences;
30+
31+
IsUlaPlusEnabled = preferences.IsUlaPlusEnabled;
32+
Emulator.SetUlaPlus(IsUlaPlusEnabled);
33+
34+
TapeLoadSpeed = preferences.Tape.LoadSpeed;
35+
Emulator.SetTapeSettings(_preferences.Tape);
36+
37+
IsTimeMachineEnabled = preferences.TimeMachine.IsEnabled;
38+
_timeMachine.SnapshotInterval = preferences.TimeMachine.SnapshotInterval;
39+
_timeMachine.MaxDuration = preferences.TimeMachine.MaxDuration;
40+
TimeMachineCountdownSeconds = preferences.TimeMachine.CountdownSeconds;
41+
42+
JoystickType = preferences.Joystick.JoystickType;
43+
MouseType = preferences.Mouse.MouseType;
44+
SetMouseCursor();
45+
46+
ConfigureEmulatorSettings();
47+
}
48+
49+
if (resumeAfter)
50+
{
51+
Resume();
52+
}
53+
}
54+
55+
private async Task OpenTimeMachineWindow()
56+
{
57+
if (!_preferences.TimeMachine.IsEnabled || _isTimeMachineOpen)
58+
{
59+
return;
60+
}
61+
62+
if (!IsPaused)
63+
{
64+
Pause();
65+
}
66+
67+
_isTimeMachineOpen = true;
68+
69+
var viewModel = new TimeMachineViewModel(_timeMachine, Emulator!.JoystickManager, Emulator.CommandManager, _logger);
70+
71+
var entry = await WeakReferenceMessenger.Default.Send(new ShowTimeMachineViewMessage(viewModel));
72+
73+
if (entry != null)
74+
{
75+
var snapshot = entry.GetSnapshot();
76+
77+
if (snapshot == null)
78+
{
79+
_logger.LogError("Failed to get snapshot from time machine entry");
80+
return;
81+
}
82+
83+
IsTimeMachineCountdownVisible = true;
84+
85+
CreateEmulator(snapshot);
86+
}
87+
88+
_isTimeMachineOpen = false;
89+
90+
if (!IsTimeMachineCountdownVisible)
91+
{
92+
Resume();
93+
}
94+
}
95+
96+
private static void OpenAboutWindow() =>
97+
WeakReferenceMessenger.Default.Send(new ShowAboutViewMessage());
98+
99+
private static void ShowKeyboardHelpWindow() =>
100+
WeakReferenceMessenger.Default.Send(new ShowKeyboardViewMessage());
101+
102+
private void OpenScreenshotViewer() =>
103+
WeakReferenceMessenger.Default.Send(new ShowScreenshotViewMessage(_screenshotViewModel));
104+
105+
private void OpenTrainersWindow() =>
106+
WeakReferenceMessenger.Default.Send(new ShowTrainerViewMessage(Emulator!, _pokeFile));
107+
108+
private void OpenPrintOutputViewer() =>
109+
WeakReferenceMessenger.Default.Send(new ShowPrintOutputViewMessage(Emulator!.Printer));
110+
111+
private void OpenDebuggerWindow()
112+
{
113+
_debuggerViewModel = new DebuggerViewModel(_debuggerContext, Emulator!, _preferences.Debugger);
114+
115+
if (!IsPaused)
116+
{
117+
Pause(showOverlay: false);
118+
}
119+
120+
WeakReferenceMessenger.Default.Send(new ShowDebuggerViewMessage(_debuggerViewModel));
121+
}
122+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using Avalonia.Controls;
2+
using OldBit.Spectron.Screen;
3+
4+
namespace OldBit.Spectron.ViewModels;
5+
6+
partial class MainWindowViewModel
7+
{
8+
private void HandleChangeBorderSize(BorderSize borderSize)
9+
{
10+
BorderSize = borderSize;
11+
12+
_frameBufferConverter.SetBorderSize(borderSize);
13+
SpectrumScreen = _frameBufferConverter.ScreenBitmap;
14+
}
15+
16+
private void HandleToggleFullScreen() =>
17+
WindowState = WindowState == WindowState.FullScreen ? WindowState.Normal : WindowState.FullScreen;
18+
}

0 commit comments

Comments
 (0)