From 91db9c40b9de3763b6cfd53dc76c8ca6b75dbe1c Mon Sep 17 00:00:00 2001 From: SwEdryG Date: Tue, 4 Aug 2026 22:33:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D0=B1?= =?UTF-8?q?=D0=B5=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TracePad/MainView.cs | 125 ++++++ TracePad/MainWindow.xaml | 771 ++++++++++++++++++------------------ TracePad/MainWindow.xaml.cs | 32 +- TracePad/StepData.cs | 105 +++-- 4 files changed, 601 insertions(+), 432 deletions(-) create mode 100644 TracePad/MainView.cs diff --git a/TracePad/MainView.cs b/TracePad/MainView.cs new file mode 100644 index 0000000..281b38d --- /dev/null +++ b/TracePad/MainView.cs @@ -0,0 +1,125 @@ +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Text.Json; +using System.IO; +using System.Windows; + +namespace TracePad +{ + public class MainView : INotifyPropertyChanged + { + private ObservableCollection _steps; + private Step _currentStep; + + public ObservableCollection Steps + { + get => _steps; + set + { + _steps = value; + OnPropertyChanged(nameof(Steps)); + } + } + + public Step CurrentStep + { + get => _currentStep; + set + { + _currentStep = value; + OnPropertyChanged(nameof(CurrentStep)); + } + } + + public MainView() + { + Steps = new ObservableCollection(); + // Создает начальный шаг + CurrentStep = new Step(); + Steps.Add(CurrentStep); + } + + public void SaveSession() + { + try + { + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string fullPath = Path.Combine(desktopPath, "session.json"); + string json = JsonSerializer.Serialize(this.Steps, new JsonSerializerOptions { WriteIndented = true }); + File.WriteAllText(fullPath, json); + MessageBox.Show("Сессия успешно сохранена на Рабочий стол!", "Успех", MessageBoxButton.OK); + } + catch (Exception ex) + { + MessageBox.Show($"Не удалось сохранить файл: {ex.Message}", "Ошибка", MessageBoxButton.OK); + } + } + + public void LoadSession() + { + try + { + string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); + string fullPath = Path.Combine(desktopPath, "session.json"); + + if (!File.Exists(fullPath)) + { + MessageBox.Show("Файл 'session.json' не найден на Рабочем столе!", "Файл отсутствует", MessageBoxButton.OK); + return; + } + + string json = File.ReadAllText(fullPath); + var loadedSteps = JsonSerializer.Deserialize>(json); + + if (loadedSteps != null) + { + this.Steps.Clear(); + foreach (var step in loadedSteps) + { + this.Steps.Add(step); + } + + if (this.Steps.Count > 0) + { + this.CurrentStep = this.Steps[0]; + } + + MessageBox.Show("Сессия успешно загружена!", "Успех", MessageBoxButton.OK); + } + } + catch (Exception ex) + { + MessageBox.Show($"Ошибка при загрузке или чтении JSON: {ex.Message}", "Ошибка", MessageBoxButton.OK); + } + } + + + public void CreateNextStep() + { + var newStep = new Step(); + Steps.Add(newStep); + CurrentStep = newStep; + } + + public void DeleteStep() + { + if (CurrentStep != null && Steps.Count > 1) + { + var index = Steps.IndexOf(CurrentStep); + Steps.Remove(CurrentStep); + + if (index < Steps.Count) + CurrentStep = Steps[index]; + else if (Steps.Count > 0) + CurrentStep = Steps[Steps.Count - 1]; + } + } + + public event PropertyChangedEventHandler PropertyChanged; + + protected void OnPropertyChanged(string propertyName) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} \ No newline at end of file diff --git a/TracePad/MainWindow.xaml b/TracePad/MainWindow.xaml index b2b04e1..5147516 100644 --- a/TracePad/MainWindow.xaml +++ b/TracePad/MainWindow.xaml @@ -5,7 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TracePad" mc:Ignorable="d" - Title="MainWindow" Height="800" Width="600"> + Title="MainWindow" Height="800" Width="800"> @@ -24,7 +24,7 @@ - + - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +