@@ -82,11 +82,13 @@ static AddRemoveReferencesViewModel()
82
82
private readonly ObservableCollection < ReferenceModel > _available ;
83
83
private readonly ObservableCollection < ReferenceModel > _project ;
84
84
private readonly IReferenceReconciler _reconciler ;
85
+ private readonly IFileSystemBrowserFactory _browser ;
85
86
86
- public AddRemoveReferencesViewModel ( IAddRemoveReferencesModel model , IReferenceReconciler reconciler )
87
+ public AddRemoveReferencesViewModel ( IAddRemoveReferencesModel model , IReferenceReconciler reconciler , IFileSystemBrowserFactory browser )
87
88
{
88
89
Model = model ;
89
90
_reconciler = reconciler ;
91
+ _browser = browser ;
90
92
91
93
_available = new ObservableCollection < ReferenceModel > ( model . References
92
94
. Where ( reference => ! reference . IsReferenced ) . OrderBy ( reference => reference . Description ) ) ;
@@ -110,25 +112,48 @@ public AddRemoveReferencesViewModel(IAddRemoveReferencesModel model, IReferenceR
110
112
ApplyCommand = new DelegateCommand ( LogManager . GetCurrentClassLogger ( ) , ExecuteApplyCommand ) ;
111
113
}
112
114
115
+ /// <summary>
116
+ /// The IAddRemoveReferencesModel for the view.
117
+ /// </summary>
113
118
public IAddRemoveReferencesModel Model { get ; set ; }
114
119
120
+ /// <summary>
121
+ /// Hides the projects filter if the host does not support them. Statically set.
122
+ /// </summary>
115
123
public bool ProjectsVisible => HostHasProjects ;
116
124
125
+ /// <summary>
126
+ /// The number of built-in (locked) references of the project.
127
+ /// </summary>
117
128
public int BuiltInReferenceCount { get ; }
118
129
130
+ /// <summary>
131
+ /// Adds a reference to the project.
132
+ /// </summary>
119
133
public ICommand AddCommand { get ; }
120
134
135
+ /// <summary>
136
+ /// Removes a reference from the project and makes it "available".
137
+ /// </summary>
121
138
public ICommand RemoveCommand { get ; }
139
+
122
140
/// <summary>
123
- /// Prompts user for a .tlb, .dll, or .ocx file, and attempts to append it to <see cref="ProjectReferences"/> .
141
+ /// Prompts the user to browse for a reference .
124
142
/// </summary>
125
143
public ICommand BrowseCommand { get ; }
126
144
145
+ /// <summary>
146
+ /// Closes the dialog and indicates changes are to be saved.
147
+ /// </summary>
127
148
public CommandBase OkCommand { get ; }
149
+
150
+ /// <summary>
151
+ /// Closes the dialog and indicates changes are not to be saved.
152
+ /// </summary>
128
153
public CommandBase CancelCommand { get ; }
129
154
130
155
/// <summary>
131
- /// Applies all changes to project references .
156
+ /// Applies any changes without closing the dialog .
132
157
/// </summary>
133
158
public ICommand ApplyCommand { get ; }
134
159
@@ -142,10 +167,20 @@ public AddRemoveReferencesViewModel(IAddRemoveReferencesModel model, IReferenceR
142
167
/// </summary>
143
168
public ICommand MoveDownCommand { get ; }
144
169
170
+ /// <summary>
171
+ /// Pins the selected reference from the available list.
172
+ /// </summary>
145
173
public ICommand PinLibraryCommand { get ; }
146
174
175
+ /// <summary>
176
+ /// Pins the selected reference from the referenced list.
177
+ /// </summary>
147
178
public ICommand PinReferenceCommand { get ; }
148
179
180
+ /// <summary>
181
+ /// Delegate for AddCommand.
182
+ /// </summary>
183
+ /// <param name="parameter">Ignored</param>
149
184
private void ExecuteAddCommand ( object parameter )
150
185
{
151
186
if ( SelectedLibrary == null )
@@ -158,8 +193,13 @@ private void ExecuteAddCommand(object parameter)
158
193
EvaluateProjectDirty ( ) ;
159
194
ProjectReferences . Refresh ( ) ;
160
195
_available . Remove ( SelectedLibrary ) ;
196
+ AvailableReferences . Refresh ( ) ;
161
197
}
162
198
199
+ /// <summary>
200
+ /// Delegate for RemoveCommand.
201
+ /// </summary>
202
+ /// <param name="parameter">Ignored</param>
163
203
private void ExecuteRemoveCommand ( object parameter )
164
204
{
165
205
if ( SelectedReference == null )
@@ -179,18 +219,21 @@ private void ExecuteRemoveCommand(object parameter)
179
219
180
220
EvaluateProjectDirty ( ) ;
181
221
ProjectReferences . Refresh ( ) ;
222
+ AvailableReferences . Refresh ( ) ;
182
223
}
183
-
224
+
225
+ /// <summary>
226
+ /// Delegate for BrowseCommand.
227
+ /// </summary>
228
+ /// <param name="parameter">Ignored</param>
184
229
private void ExecuteBrowseCommand ( object parameter )
185
230
{
186
- using ( var dialog = new OpenFileDialog
231
+ using ( var dialog = _browser . CreateOpenFileDialog ( ) )
187
232
{
188
- Filter = string . Join ( "|" , FileFilters ) ,
189
- Title = RubberduckUI . References_BrowseCaption
190
- } )
191
- {
192
- dialog . ShowDialog ( ) ;
193
- if ( string . IsNullOrEmpty ( dialog . FileName ) )
233
+ dialog . Filter = string . Join ( "|" , FileFilters ) ;
234
+ dialog . Title = RubberduckUI . References_BrowseCaption ;
235
+ var result = dialog . ShowDialog ( ) ;
236
+ if ( result != DialogResult . OK || string . IsNullOrEmpty ( dialog . FileName ) )
194
237
{
195
238
return ;
196
239
}
@@ -221,6 +264,10 @@ private void ExecuteBrowseCommand(object parameter)
221
264
}
222
265
}
223
266
267
+ /// <summary>
268
+ /// Delegate for ApplyCommand.
269
+ /// </summary>
270
+ /// <param name="parameter">Ignored</param>
224
271
private void ExecuteApplyCommand ( object parameter )
225
272
{
226
273
var changed = _reconciler . ReconcileReferences ( Model , _available . ToList ( ) ) ;
@@ -233,6 +280,10 @@ private void ExecuteApplyCommand(object parameter)
233
280
ProjectReferences . Refresh ( ) ;
234
281
}
235
282
283
+ /// <summary>
284
+ /// Delegate for MoveUpCommand.
285
+ /// </summary>
286
+ /// <param name="parameter">Ignored</param>
236
287
private void ExecuteMoveUpCommand ( object parameter )
237
288
{
238
289
if ( SelectedReference == null || SelectedReference . IsBuiltIn || SelectedReference . Priority == 1 )
@@ -253,6 +304,10 @@ private void ExecuteMoveUpCommand(object parameter)
253
304
ProjectReferences . Refresh ( ) ;
254
305
}
255
306
307
+ /// <summary>
308
+ /// Delegate for MoveDownCommand.
309
+ /// </summary>
310
+ /// <param name="parameter">Ignored</param>
256
311
private void ExecuteMoveDownCommand ( object parameter )
257
312
{
258
313
if ( SelectedReference == null || SelectedReference . IsBuiltIn || SelectedReference . Priority == _project . Count )
@@ -273,6 +328,10 @@ private void ExecuteMoveDownCommand(object parameter)
273
328
ProjectReferences . Refresh ( ) ;
274
329
}
275
330
331
+ /// <summary>
332
+ /// Delegate for PinLibraryCommand.
333
+ /// </summary>
334
+ /// <param name="parameter">Ignored</param>
276
335
private void ExecutePinLibraryCommand ( object parameter )
277
336
{
278
337
if ( SelectedLibrary == null )
@@ -283,16 +342,23 @@ private void ExecutePinLibraryCommand(object parameter)
283
342
AvailableReferences . Refresh ( ) ;
284
343
}
285
344
345
+ /// <summary>
346
+ /// Delegate for PinReferenceCommand.
347
+ /// </summary>
348
+ /// <param name="parameter">Ignored</param>
286
349
private void ExecutePinReferenceCommand ( object parameter )
287
350
{
288
- if ( SelectedReference == null || SelectedReference . IsBuiltIn )
351
+ if ( SelectedReference == null )
289
352
{
290
353
return ;
291
354
}
292
355
SelectedReference . IsPinned = ! SelectedReference . IsPinned ;
293
356
ProjectReferences . Refresh ( ) ;
294
357
}
295
358
359
+ /// <summary>
360
+ /// Ordered collection of the project's currently selected references.
361
+ /// </summary>
296
362
public ICollectionView ProjectReferences
297
363
{
298
364
get
@@ -303,6 +369,9 @@ public ICollectionView ProjectReferences
303
369
}
304
370
}
305
371
372
+ /// <summary>
373
+ /// Collection of references not currently selected for the project, filtered by the current filter.
374
+ /// </summary>
306
375
public ICollectionView AvailableReferences
307
376
{
308
377
get
@@ -314,16 +383,29 @@ public ICollectionView AvailableReferences
314
383
}
315
384
316
385
private string _filter ;
386
+
387
+ /// <summary>
388
+ /// The currently selected filter. Should be a member of ReferenceFilter.
389
+ /// </summary>
317
390
public string SelectedFilter
318
391
{
319
392
get => _filter ;
320
393
set
321
394
{
395
+ if ( ! Enum . TryParse < ReferenceFilter > ( value , out _ ) )
396
+ {
397
+ return ;
398
+ }
322
399
_filter = value ;
323
400
AvailableReferences . Refresh ( ) ;
324
401
}
325
402
}
326
403
404
+ /// <summary>
405
+ /// Applies selected filter and any search term to CollectionViewSource.
406
+ /// </summary>
407
+ /// <param name="reference">The ReferenceModel to test.</param>
408
+ /// <returns>Returns true if the passed reference is included in the filtered result.</returns>
327
409
private bool Filter ( ReferenceModel reference )
328
410
{
329
411
var filtered = false ;
@@ -353,6 +435,10 @@ private bool Filter(ReferenceModel reference)
353
435
}
354
436
355
437
private string _search = string . Empty ;
438
+
439
+ /// <summary>
440
+ /// Search term for filtering AvailableReferences.
441
+ /// </summary>
356
442
public string Search
357
443
{
358
444
get => _search ;
@@ -364,6 +450,10 @@ public string Search
364
450
}
365
451
366
452
private ReferenceModel _selection ;
453
+
454
+ /// <summary>
455
+ /// The currently selected Reference in the focused list.
456
+ /// </summary>
367
457
public ReferenceModel CurrentSelection
368
458
{
369
459
get => _selection ;
@@ -375,6 +465,10 @@ public ReferenceModel CurrentSelection
375
465
}
376
466
377
467
private ReferenceModel _reference ;
468
+
469
+ /// <summary>
470
+ /// The currently selected Reference for the project.
471
+ /// </summary>
378
472
public ReferenceModel SelectedReference
379
473
{
380
474
get => _reference ;
@@ -386,6 +480,10 @@ public ReferenceModel SelectedReference
386
480
}
387
481
388
482
private ReferenceModel _library ;
483
+
484
+ /// <summary>
485
+ /// The currently selected available (not included in the project) Reference.
486
+ /// </summary>
389
487
public ReferenceModel SelectedLibrary
390
488
{
391
489
get => _library ;
@@ -397,6 +495,10 @@ public ReferenceModel SelectedLibrary
397
495
}
398
496
399
497
private bool _dirty ;
498
+
499
+ /// <summary>
500
+ /// Indicated whether any changes were made to the project's references.
501
+ /// </summary>
400
502
public bool IsProjectDirty
401
503
{
402
504
get => _dirty ;
@@ -407,6 +509,9 @@ public bool IsProjectDirty
407
509
}
408
510
}
409
511
512
+ /// <summary>
513
+ /// Tests to see if any changes have been made to the project and sets IsProjectDirty to the appropriate value.
514
+ /// </summary>
410
515
private void EvaluateProjectDirty ( )
411
516
{
412
517
var selected = _project . Select ( reference => ( reference . Priority , reference . ToReferenceInfo ( ) ) ) . ToList ( ) ;
0 commit comments