Skip to content

Commit 7c8873d

Browse files
committed
add predefined directories to obj data folder list
1 parent f789e0f commit 7c8873d

File tree

2 files changed

+65
-16
lines changed

2 files changed

+65
-16
lines changed

Gui/ViewModels/MainWindowViewModel.cs

Lines changed: 65 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Avalonia;
22
using Avalonia.Platform;
33
using Avalonia.Platform.Storage;
4+
using DynamicData;
45
using NuGet.Versioning;
56
using OpenLoco.Common.Logging;
67
using OpenLoco.Dat;
@@ -41,7 +42,7 @@ public class MainWindowViewModel : ViewModelBase
4142
[Reactive]
4243
public TabViewPageViewModel CurrentTabModel { get; set; } = new();
4344

44-
public ObservableCollection<MenuItemViewModel> ObjDataItems { get; }
45+
public ObservableCollection<MenuItemViewModel> ObjDataItems { get; init; } = [];
4546

4647
public ObservableCollection<LogLine> Logs => Model.LoggerObservableLogs;
4748

@@ -103,12 +104,7 @@ public MainWindowViewModel()
103104
_ = CurrentTabModel.WhenAnyValue(o => o.SelectedDocument)
104105
.Subscribe((x) => FolderTreeViewModel.CurrentlySelectedObject = x?.CurrentFile);
105106

106-
ObjDataItems = new ObservableCollection<MenuItemViewModel>(Model.Settings.ObjDataDirectories
107-
.Select(x => new MenuItemViewModel(
108-
x,
109-
ReactiveCommand.Create(() => FolderTreeViewModel.CurrentLocalDirectory = x))));
110-
ObjDataItems.Insert(0, new MenuItemViewModel("Add new folder", ReactiveCommand.Create(SelectNewFolder)));
111-
ObjDataItems.Insert(1, new MenuItemViewModel("-", ReactiveCommand.Create(() => { })));
107+
PopulateObjDataMenu();
112108

113109
OpenSingleObject = ReactiveCommand.Create(LoadSingleObject);
114110
OpenDownloadFolder = ReactiveCommand.Create(() => PlatformSpecific.FolderOpenInDesktop(Model.Settings.DownloadFolder, Model.Logger));
@@ -169,6 +165,36 @@ public MainWindowViewModel()
169165
#endregion
170166
}
171167

168+
void PopulateObjDataMenu()
169+
{
170+
ObjDataItems.Clear();
171+
172+
ObjDataItems.Add(new MenuItemViewModel("Add new folder", ReactiveCommand.Create(SelectNewFolder)));
173+
ObjDataItems.Add(new MenuItemViewModel("-", ReactiveCommand.Create(() => { })));
174+
175+
if (Directory.Exists(Model.Settings.AppDataObjDataFolder))
176+
{
177+
ObjDataItems.Add(new MenuItemViewModel($"[{nameof(GameObjDataFolder.AppData)}] {Model.Settings.AppDataObjDataFolder}", ReactiveCommand.Create(() => FolderTreeViewModel.CurrentLocalDirectory = Model.Settings.AppDataObjDataFolder)));
178+
}
179+
if (Directory.Exists(Model.Settings.LocomotionObjDataFolder))
180+
{
181+
ObjDataItems.Add(new MenuItemViewModel($"[{nameof(GameObjDataFolder.Locomotion)}] {Model.Settings.LocomotionObjDataFolder}", ReactiveCommand.Create(() => FolderTreeViewModel.CurrentLocalDirectory = Model.Settings.LocomotionObjDataFolder)));
182+
}
183+
if (Directory.Exists(Model.Settings.OpenLocoObjDataFolder))
184+
{
185+
ObjDataItems.Add(new MenuItemViewModel($"[{nameof(GameObjDataFolder.OpenLoco)}] {Model.Settings.OpenLocoObjDataFolder}", ReactiveCommand.Create(() => FolderTreeViewModel.CurrentLocalDirectory = Model.Settings.OpenLocoObjDataFolder)));
186+
}
187+
188+
ObjDataItems.Add(new MenuItemViewModel("-", ReactiveCommand.Create(() => { })));
189+
190+
// add the rest
191+
ObjDataItems.AddRange(
192+
Model.Settings.ObjDataDirectories
193+
.Select(x => new MenuItemViewModel(
194+
x,
195+
ReactiveCommand.Create(() => FolderTreeViewModel.CurrentLocalDirectory = x))));
196+
}
197+
172198
public static async Task<FileSystemItemBase?> GetFileSystemItemFromUser(IReadOnlyList<FilePickerFileType> filetypes)
173199
{
174200
var openFile = await PlatformSpecific.OpenFilePicker(filetypes);
@@ -362,16 +388,40 @@ public async Task SelectNewFolder()
362388
}
363389

364390
var dirPath = dir.Path.LocalPath;
365-
if (Directory.Exists(dirPath) && !Model.Settings.ObjDataDirectories.Contains(dirPath))
366-
{
367-
FolderTreeViewModel.CurrentLocalDirectory = dirPath; // this will cause the reindexing
368-
var menuItem = new MenuItemViewModel(
369-
dirPath,
370-
ReactiveCommand.Create(() => FolderTreeViewModel.CurrentLocalDirectory = dirPath)
371-
/*ReactiveCommand.Create(() => ObjDataItems.RemoveAt(ObjDataItems.Count))*/);
372391

373-
ObjDataItems.Add(menuItem);
392+
if (!Directory.Exists(dirPath))
393+
{
394+
Model.Logger.Warning("Directory doesn't exist");
395+
return;
396+
}
397+
if (Model.Settings.ObjDataDirectories.Contains(dirPath))
398+
{
399+
Model.Logger.Warning("Object directory is already in the list");
400+
return;
374401
}
402+
if (Model.Settings.AppDataObjDataFolder != dirPath)
403+
{
404+
Model.Logger.Warning("No need to add - this is the predefined AppData folder");
405+
return;
406+
}
407+
if (Model.Settings.LocomotionObjDataFolder != dirPath)
408+
{
409+
Model.Logger.Warning("No need to add - this is the predefined Locomotion ObjData folder");
410+
return;
411+
}
412+
if (Model.Settings.OpenLocoObjDataFolder != dirPath)
413+
{
414+
Model.Logger.Warning("No need to add - this is the predefined OpenLoco object folder");
415+
return;
416+
}
417+
418+
FolderTreeViewModel.CurrentLocalDirectory = dirPath; // this will cause the reindexing
419+
var menuItem = new MenuItemViewModel(
420+
dirPath,
421+
ReactiveCommand.Create(() => FolderTreeViewModel.CurrentLocalDirectory = dirPath)
422+
/*ReactiveCommand.Create(() => ObjDataItems.RemoveAt(ObjDataItems.Count))*/);
423+
424+
ObjDataItems.Add(menuItem);
375425
}
376426

377427
public static bool IsDarkTheme

Gui/Views/MainWindow.axaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,6 @@
326326
</Button>
327327
</DockPanel>
328328
<ContentControl Content="{Binding}" />
329-
<!--<vi:DatObjectEditorView/>-->
330329
</DockPanel>
331330
</Border>
332331
</DataTemplate>

0 commit comments

Comments
 (0)