diff --git a/BallanceTasEditor/BallanceTasEditor/Backend/FileWatcher.cs b/BallanceTasEditor/BallanceTasEditor/Backend/FileWatcher.cs
new file mode 100644
index 0000000..4a1c5e3
--- /dev/null
+++ b/BallanceTasEditor/BallanceTasEditor/Backend/FileWatcher.cs
@@ -0,0 +1,190 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace BallanceTasEditor.Backend {
+ public class FileWatcher : IDisposable {
+ ///
+ /// Create a file watcher.
+ ///
+ ///
+ /// This new created file watcher is not watching specified file
+ /// unless you explicitly call method.
+ ///
+ /// The path to watching file.
+ public FileWatcher(string filepath) {
+ m_FilePath = filepath;
+ m_IsWatching = false;
+ m_EventMutex = new Mutex();
+ m_IsEventProcessing = false;
+
+ // Get directory and file info
+ string directory = Path.GetDirectoryName(filepath) ?? throw new ArgumentException("Invalid file path", nameof(filepath));
+ string filename = Path.GetFileName(filepath);
+
+ // Create FileSystemWatcher
+ m_FileSystemWatcher = new FileSystemWatcher(directory, filename) {
+ NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.Size | NotifyFilters.FileName,
+ EnableRaisingEvents = false
+ };
+ m_FileSystemWatcher.Changed += OnFileSystemChanged;
+ m_FileSystemWatcher.Deleted += OnFileSystemDeleted;
+ m_FileSystemWatcher.Renamed += OnFileSystemRenamed;
+ }
+
+ ///
+ /// The path to watching file.
+ ///
+ private string m_FilePath;
+ ///
+ /// Whether the file watcher is watching file.
+ ///
+ private bool m_IsWatching;
+ ///
+ /// The FileSystemWatcher instance.
+ ///
+ private readonly FileSystemWatcher m_FileSystemWatcher;
+
+ ///
+ /// Flag to indicate if disposed.
+ ///
+ private bool m_Disposed = false;
+
+ ///
+ /// Start watching file.
+ ///
+ public void Start() {
+ if (m_Disposed) throw new ObjectDisposedException(nameof(FileWatcher));
+
+ if (m_IsWatching) {
+ throw new InvalidOperationException("File watcher is already watching file.");
+ } else {
+ m_FileSystemWatcher.EnableRaisingEvents = true;
+ m_IsWatching = true;
+ }
+ }
+
+ ///
+ /// Stop watching file.
+ ///
+ public void Stop() {
+ if (m_Disposed) throw new ObjectDisposedException(nameof(FileWatcher));
+
+ if (m_IsWatching) {
+ m_FileSystemWatcher.EnableRaisingEvents = false;
+ m_IsWatching = false;
+ } else {
+ throw new InvalidOperationException("File watcher is not watching file.");
+ }
+ }
+
+ ///
+ /// Dispose the file watcher and release resources.
+ ///
+ public void Dispose() {
+ if (!m_Disposed) {
+ // Stop watching.
+ if (m_IsWatching) {
+ Stop();
+ }
+ // Dispose members
+ m_FileSystemWatcher.Dispose();
+ m_EventMutex.Dispose();
+ m_Disposed = true;
+ }
+ }
+
+ ///
+ /// The event handler when file is modified.
+ ///
+ public delegate void FileModifiedHandler();
+ ///
+ /// The event handler when file is deleted.
+ ///
+ public delegate void FileDeletedHandler();
+
+ ///
+ /// The event when file is modified.
+ ///
+ ///
+ /// Before user process this event completely,
+ /// there is no any other event will be triggered.
+ ///
+ public event FileModifiedHandler? FileModified;
+ ///
+ /// The event when file is deleted.
+ ///
+ ///
+ /// Before user process this event completely,
+ /// there is no any other event will be triggered.
+ ///
+ public event FileDeletedHandler? FileDeleted;
+
+ private Mutex m_EventMutex;
+ private bool m_IsEventProcessing;
+
+ private void OnFileModified() {
+ if (FileModified is not null) {
+ lock (m_EventMutex) {
+ if (m_IsEventProcessing) return;
+ else m_IsEventProcessing = true;
+ }
+ try {
+ FileModified.Invoke();
+ }
+ finally {
+ lock (m_EventMutex) {
+ m_IsEventProcessing = false;
+ }
+ }
+ }
+
+ }
+
+ private void OnFileDeleted() {
+ if (FileDeleted is not null) {
+ lock (m_EventMutex) {
+ if (m_IsEventProcessing) return;
+ else m_IsEventProcessing = true;
+ }
+ try {
+ FileDeleted.Invoke();
+ }
+ finally {
+ lock (m_EventMutex) {
+ m_IsEventProcessing = false;
+ }
+ }
+ }
+ }
+
+ ///
+ /// Handler for FileSystemWatcher Changed event.
+ ///
+ private void OnFileSystemChanged(object sender, FileSystemEventArgs e) {
+ // Filter out our own change notifications to avoid infinite loops
+ if (e.ChangeType == WatcherChangeTypes.Changed) {
+ OnFileModified();
+ }
+ }
+
+ ///
+ /// Handler for FileSystemWatcher Deleted event.
+ ///
+ private void OnFileSystemDeleted(object sender, FileSystemEventArgs e) {
+ OnFileDeleted();
+ }
+
+ ///
+ /// Handler for FileSystemWatcher Renamed event.
+ ///
+ private void OnFileSystemRenamed(object sender, RenamedEventArgs e) {
+ // Treat rename as a delete since the original file is gone
+ OnFileDeleted();
+ }
+ }
+}
diff --git a/BallanceTasEditor/BallanceTasEditor/Backend/TasFrame.cs b/BallanceTasEditor/BallanceTasEditor/Backend/TasFrame.cs
index 189d9a6..f8a6853 100644
--- a/BallanceTasEditor/BallanceTasEditor/Backend/TasFrame.cs
+++ b/BallanceTasEditor/BallanceTasEditor/Backend/TasFrame.cs
@@ -25,7 +25,7 @@ namespace BallanceTasEditor.Backend {
///
/// 描述TAS文件中一帧的结构。
///
- public class TasFrame {
+ public class TasFrame : IEquatable {
///
/// 以指定的FPS,无任何按键初始化当前帧。
///
@@ -43,6 +43,15 @@ namespace BallanceTasEditor.Backend {
m_KeyFlags = raw.KeyFlags;
}
+ ///
+ /// 将原始TAS数据覆写到自身
+ ///
+ /// 要写入的原始TAS数据
+ public void FromRaw(RawTasFrame raw) {
+ m_TimeDelta = raw.TimeDelta;
+ m_KeyFlags = raw.KeyFlags;
+ }
+
///
/// 转换为原始TAS数据。
///
@@ -156,6 +165,38 @@ namespace BallanceTasEditor.Backend {
m_KeyFlags = 0;
}
+ ///
+ /// 指示当前对象是否等于另一个 TasFrame 对象。
+ ///
+ /// 要比较的 TasFrame 对象。
+ /// 如果两个对象相等则为 true,否则为 false。
+ public bool Equals(TasFrame? other) {
+ return other is not null &&
+ m_TimeDelta == other.m_TimeDelta &&
+ m_KeyFlags == other.m_KeyFlags;
+ }
+
+ ///
+ /// 指示当前对象是否等于另一个对象。
+ ///
+ /// 要比较的对象。
+ /// 如果两个对象相等则为 true,否则为 false。
+ public override bool Equals(object? obj) {
+ if (obj is TasFrame other) {
+ return Equals(other);
+ } else {
+ return false;
+ }
+ }
+
+ ///
+ /// 返回此实例的哈希代码。
+ ///
+ /// 32 位有符号整数哈希代码。
+ public override int GetHashCode() {
+ return HashCode.Combine(m_TimeDelta, m_KeyFlags);
+ }
+
}
///
diff --git a/BallanceTasEditor/BallanceTasEditor/BallanceTasEditor.csproj b/BallanceTasEditor/BallanceTasEditor/BallanceTasEditor.csproj
index 73ee33d..5aab69b 100644
--- a/BallanceTasEditor/BallanceTasEditor/BallanceTasEditor.csproj
+++ b/BallanceTasEditor/BallanceTasEditor/BallanceTasEditor.csproj
@@ -10,7 +10,7 @@
-
+
@@ -19,4 +19,8 @@
+
+
+
+
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/About.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/About.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/About.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/About.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/AddFrame.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/AddFrame.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/AddFrame.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/AddFrame.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/App.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/App.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/App.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/App.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Cancel.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Cancel.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Cancel.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Cancel.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/ClearKeys.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/ClearKeys.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/ClearKeys.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/ClearKeys.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/CloseFile.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/CloseFile.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/CloseFile.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/CloseFile.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/CopyFrame.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/CopyFrame.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/CopyFrame.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/CopyFrame.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Count.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Count.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Count.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Count.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/CutFrame.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/CutFrame.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/CutFrame.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/CutFrame.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/DeleteFrame.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/DeleteFrame.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/DeleteFrame.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/DeleteFrame.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/DrawMode.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/DrawMode.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/DrawMode.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/DrawMode.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/EditorLayout.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/EditorLayout.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/EditorLayout.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/EditorLayout.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Exit.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Exit.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Exit.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Exit.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/FillMode.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/FillMode.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/FillMode.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/FillMode.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/FlipCell.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/FlipCell.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/FlipCell.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/FlipCell.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Fps.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Fps.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Fps.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Fps.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Goto.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Goto.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Goto.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Goto.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/NewFile.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/NewFile.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/NewFile.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/NewFile.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/NextItem.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/NextItem.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/NextItem.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/NextItem.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/NextPage.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/NextPage.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/NextPage.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/NextPage.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Ok.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Ok.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Ok.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Ok.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/OpenFile.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/OpenFile.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/OpenFile.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/OpenFile.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/PasteFrame.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/PasteFrame.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/PasteFrame.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/PasteFrame.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Preference.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Preference.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Preference.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Preference.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/PreviousItem.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/PreviousItem.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/PreviousItem.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/PreviousItem.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/PreviousPage.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/PreviousPage.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/PreviousPage.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/PreviousPage.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Redo.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Redo.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Redo.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Redo.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/ReportBug.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/ReportBug.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/ReportBug.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/ReportBug.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/SaveFile.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SaveFile.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/SaveFile.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SaveFile.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/SaveFileAs.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SaveFileAs.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/SaveFileAs.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SaveFileAs.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/SaveFileThenRunGame.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SaveFileThenRunGame.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/SaveFileThenRunGame.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SaveFileThenRunGame.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/SelectMode.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SelectMode.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/SelectMode.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SelectMode.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/SetCell.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SetCell.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/SetCell.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SetCell.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/SetFps.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SetFps.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/SetFps.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/SetFps.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/Undo.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Undo.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/Undo.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/Undo.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Assets/UnsetCell.ico b/BallanceTasEditor/BallanceTasEditor/Frontend/Assets/UnsetCell.ico
similarity index 100%
rename from BallanceTasEditor/BallanceTasEditor/Assets/UnsetCell.ico
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Assets/UnsetCell.ico
diff --git a/BallanceTasEditor/BallanceTasEditor/Converters/GenericConverter.cs b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/GenericConverter.cs
similarity index 92%
rename from BallanceTasEditor/BallanceTasEditor/Converters/GenericConverter.cs
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Converters/GenericConverter.cs
index 860999a..43ca0dc 100644
--- a/BallanceTasEditor/BallanceTasEditor/Converters/GenericConverter.cs
+++ b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/GenericConverter.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
-namespace BallanceTasEditor.Converters {
+namespace BallanceTasEditor.Frontend.Converters {
[ValueConversion(typeof(int), typeof(string))]
public class FpsConverter : IValueConverter {
public static FpsConverter Instance = new FpsConverter();
@@ -15,7 +15,7 @@ namespace BallanceTasEditor.Converters {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
if (value is int tv) {
if (tv <= 0) return DependencyProperty.UnsetValue;
- else return Utils.FpsConverter.ToDelta(tv).ToString();
+ else return Backend.FpsConverter.ToDelta(tv).ToString();
} else {
return DependencyProperty.UnsetValue;
}
diff --git a/BallanceTasEditor/BallanceTasEditor/Converters/StringifyConverter.cs b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifyConverter.cs
similarity index 94%
rename from BallanceTasEditor/BallanceTasEditor/Converters/StringifyConverter.cs
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifyConverter.cs
index 3bbb84c..4dc9bd5 100644
--- a/BallanceTasEditor/BallanceTasEditor/Converters/StringifyConverter.cs
+++ b/BallanceTasEditor/BallanceTasEditor/Frontend/Converters/StringifyConverter.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
-namespace BallanceTasEditor.Converters {
+namespace BallanceTasEditor.Frontend.Converters {
[ValueConversion(typeof(int?), typeof(string))]
public class StringifyIntegerConverter : IValueConverter {
diff --git a/BallanceTasEditor/BallanceTasEditor/Styles/AccessoryIcon.cs b/BallanceTasEditor/BallanceTasEditor/Frontend/Styles/AccessoryIcon.cs
similarity index 97%
rename from BallanceTasEditor/BallanceTasEditor/Styles/AccessoryIcon.cs
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Styles/AccessoryIcon.cs
index 4bc0877..1042eb8 100644
--- a/BallanceTasEditor/BallanceTasEditor/Styles/AccessoryIcon.cs
+++ b/BallanceTasEditor/BallanceTasEditor/Frontend/Styles/AccessoryIcon.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -7,7 +7,7 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
-namespace BallanceTasEditor.Styles {
+namespace BallanceTasEditor.Frontend.Styles {
public class AccessoryIcon {
public static ImageSource GetIcon(DependencyObject obj) {
diff --git a/BallanceTasEditor/BallanceTasEditor/Styles/AccessoryIconControl.xaml b/BallanceTasEditor/BallanceTasEditor/Frontend/Styles/AccessoryIconControl.xaml
similarity index 90%
rename from BallanceTasEditor/BallanceTasEditor/Styles/AccessoryIconControl.xaml
rename to BallanceTasEditor/BallanceTasEditor/Frontend/Styles/AccessoryIconControl.xaml
index 49c11e7..9b81796 100644
--- a/BallanceTasEditor/BallanceTasEditor/Styles/AccessoryIconControl.xaml
+++ b/BallanceTasEditor/BallanceTasEditor/Frontend/Styles/AccessoryIconControl.xaml
@@ -1,6 +1,6 @@
-
+ xmlns:local="clr-namespace:BallanceTasEditor.Frontend.Styles">