1+ using Avalonia ;
2+ using Avalonia . Controls . ApplicationLifetimes ;
13using Definitions . ObjectModels . Objects . Region ;
24using Definitions . ObjectModels . Types ;
35using Gui . Models ;
6+ using Gui . Views ;
47using ReactiveUI ;
8+ using ReactiveUI . Fody . Helpers ;
59using System . Collections . Generic ;
610using System . ComponentModel ;
711using System . Linq ;
812using System . Reactive ;
13+ using System . Reactive . Linq ;
914using System . Text . Json ;
1015using System . Threading . Tasks ;
1116
@@ -24,7 +29,11 @@ public RegionViewModel(RegionObject model, ObjectEditorContext? editorContext =
2429 CargoInfluenceObjects = new BindingList < ObjectModelHeader > ( model . CargoInfluenceObjects ) ;
2530 CargoInfluenceTownFilter = new BindingList < CargoInfluenceTownFilterType > ( model . CargoInfluenceTownFilter ) ;
2631
32+ var hasSelection = this . WhenAnyValue ( x => x . SelectedDependentObject ) . Select ( obj => obj != null ) ;
33+
2734 PopulateDependentObjectsFromFolderCommand = ReactiveCommand . CreateFromTask ( PopulateDependentObjectsFromFolder ) ;
35+ AddDependentObjectCommand = ReactiveCommand . CreateFromTask ( AddDependentObjectAsync ) ;
36+ RemoveSelectedDependentObjectCommand = ReactiveCommand . Create ( RemoveSelectedDependentObject , hasSelection ) ;
2837 CopyDependentObjectsCommand = ReactiveCommand . CreateFromTask ( CopyDependentObjectsAsync ) ;
2938 PasteDependentObjectsCommand = ReactiveCommand . CreateFromTask ( PasteDependentObjectsAsync ) ;
3039 ClearDependentObjectsCommand = ReactiveCommand . Create ( ClearDependentObjects ) ;
@@ -45,6 +54,10 @@ public uint8_t pad_07
4554 [ Browsable ( false ) ]
4655 public BindingList < ObjectModelHeader > DependentObjects { get ; }
4756
57+ [ Browsable ( false ) ]
58+ [ Reactive ]
59+ public ObjectModelHeader ? SelectedDependentObject { get ; set ; }
60+
4861 [ Category ( "Cargo" ) ]
4962 public BindingList < ObjectModelHeader > CargoInfluenceObjects { get ; }
5063
@@ -54,6 +67,12 @@ public uint8_t pad_07
5467 [ Browsable ( false ) ]
5568 public ReactiveCommand < Unit , Unit > PopulateDependentObjectsFromFolderCommand { get ; }
5669
70+ [ Browsable ( false ) ]
71+ public ReactiveCommand < Unit , Unit > AddDependentObjectCommand { get ; }
72+
73+ [ Browsable ( false ) ]
74+ public ReactiveCommand < Unit , Unit > RemoveSelectedDependentObjectCommand { get ; }
75+
5776 [ Browsable ( false ) ]
5877 public ReactiveCommand < Unit , Unit > CopyDependentObjectsCommand { get ; }
5978
@@ -80,6 +99,37 @@ Task PopulateDependentObjectsFromFolder()
8099 return Task . CompletedTask ;
81100 }
82101
102+ async Task AddDependentObjectAsync ( )
103+ {
104+ var objectIndex = editorContext ? . ObjectIndex ;
105+ if ( objectIndex == null )
106+ {
107+ return ;
108+ }
109+
110+ if ( Application . Current ? . ApplicationLifetime is not IClassicDesktopStyleApplicationLifetime app || app . MainWindow == null )
111+ {
112+ return ;
113+ }
114+
115+ var vm = new ObjectSelectionWindowViewModel ( objectIndex . Objects ) ;
116+ var dialog = new ObjectSelectionWindow { DataContext = vm } ;
117+ var result = await dialog . ShowDialog < ObjectSelectionWindowViewModel ? > ( app . MainWindow ) ;
118+
119+ if ( result ? . SelectedObject is { DatChecksum : not null } selected )
120+ {
121+ DependentObjects . Add ( new ObjectModelHeader ( selected . DisplayName , selected . ObjectType , selected . ObjectSource , selected . DatChecksum . Value ) ) ;
122+ }
123+ }
124+
125+ void RemoveSelectedDependentObject ( )
126+ {
127+ if ( SelectedDependentObject != null )
128+ {
129+ DependentObjects . Remove ( SelectedDependentObject ) ;
130+ }
131+ }
132+
83133 async Task CopyDependentObjectsAsync ( )
84134 {
85135 var json = JsonSerializer . Serialize ( DependentObjects . ToList ( ) , JsonSerializerOptions ) ;
0 commit comments