diff --git a/Definitions/Database/ObjectIndex.cs b/Definitions/Database/ObjectIndex.cs index ef171835..d97d941e 100644 --- a/Definitions/Database/ObjectIndex.cs +++ b/Definitions/Database/ObjectIndex.cs @@ -20,6 +20,8 @@ public class ObjectIndex [JsonIgnore] public const string DefaultIndexDbFileName = "objectIndex.db"; + public LocoDb Database { get; set; } + public ObjectIndex() { } diff --git a/Gui/Models/Converters/IsOfTypeConverter.cs b/Gui/Models/Converters/IsOfTypeConverter.cs new file mode 100644 index 00000000..30c2cdd1 --- /dev/null +++ b/Gui/Models/Converters/IsOfTypeConverter.cs @@ -0,0 +1,17 @@ +using Avalonia.Data.Converters; +using System; +using System.Globalization; + +namespace OpenLoco.Gui.Models.Converters +{ + public class IsOfTypeConverter : IValueConverter + { + public object Convert(object? value, Type targetType, object? parameter, CultureInfo culture) + => value == null || parameter is not Type targetTypeParameter + ? false + : (object)targetTypeParameter.IsAssignableFrom(value.GetType()); + + public object ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) + => throw new NotImplementedException(); + } +} diff --git a/Gui/ViewModels/FolderTreeViewModel.cs b/Gui/ViewModels/FolderTreeViewModel.cs index 03ff77fc..16b2e82a 100644 --- a/Gui/ViewModels/FolderTreeViewModel.cs +++ b/Gui/ViewModels/FolderTreeViewModel.cs @@ -61,6 +61,8 @@ public class FolderTreeViewModel : ReactiveObject public ReactiveCommand? OpenCurrentFolder { get; } + public ReactiveCommand? OpenFolderFor { get; } + public ObservableCollection DisplayModeItems { get; } = [.. Enum.GetValues()]; [Reactive] @@ -85,6 +87,17 @@ public FolderTreeViewModel(ObjectEditorModel model) RefreshDirectoryItems = ReactiveCommand.Create(() => ReloadDirectoryAsync(false)); OpenCurrentFolder = ReactiveCommand.Create(() => PlatformSpecific.FolderOpenInDesktop(IsLocal ? CurrentLocalDirectory : Model.Settings.DownloadFolder, Model.Logger)); + OpenFolderFor = ReactiveCommand.Create((FileSystemItemBase clickedOn) => + { + if (IsLocal && clickedOn is FileSystemItemObject clickedOnObject && File.Exists(clickedOnObject.Filename)) + { + var dir = Directory.GetParent(clickedOnObject.Filename)?.FullName; + if (Directory.Exists(dir)) + { + PlatformSpecific.FolderOpenInDesktop(dir, Model.Logger); + } + } + }); _ = this.WhenAnyValue(o => o.CurrentLocalDirectory) .Skip(1) diff --git a/Gui/Views/FolderTreeView.axaml b/Gui/Views/FolderTreeView.axaml index dfa15922..23caa877 100644 --- a/Gui/Views/FolderTreeView.axaml +++ b/Gui/Views/FolderTreeView.axaml @@ -5,6 +5,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vm="using:OpenLoco.Gui.ViewModels" xmlns:moc="using:OpenLoco.Gui.Models.Converters" + xmlns:mo="using:OpenLoco.Gui.Models" xmlns:materialIcons="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia" mc:Ignorable="d" d:DesignWidth="384" d:DesignHeight="768" Width="384" @@ -19,6 +20,7 @@ + @@ -86,7 +88,16 @@ - + + + + + + + + + +