You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
5.1 KiB
215 lines
5.1 KiB
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) |
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) |
|
|
|
using System; |
|
using System.Collections.Generic; |
|
using System.Collections.ObjectModel; |
|
using System.ComponentModel; |
|
using System.Linq; |
|
|
|
using ICSharpCode.Core; |
|
using ICSharpCode.AddInManager2.Model; |
|
using ICSharpCode.AddInManager2.View; |
|
using ICSharpCode.SharpDevelop; |
|
using NuGet; |
|
|
|
namespace ICSharpCode.AddInManager2.ViewModel |
|
{ |
|
public class AddInManagerViewModel : Model<AddInManagerViewModel>, IDisposable |
|
{ |
|
private string _message; |
|
private bool _hasError; |
|
|
|
private ObservableCollection<AddInsViewModelBase> _viewModels; |
|
|
|
public AddInManagerViewModel() |
|
: base() |
|
{ |
|
Initialize(); |
|
} |
|
|
|
public AddInManagerViewModel(IAddInManagerServices services) |
|
: base(services) |
|
{ |
|
Initialize(); |
|
} |
|
|
|
private void Initialize() |
|
{ |
|
// Visuals |
|
this.Title = SD.ResourceService.GetString("AddInManager.Title"); |
|
|
|
// Add event handlers |
|
AddInManager.Events.OperationStarted += AddInManager_Events_OperationStarted; |
|
AddInManager.Events.AddInOperationError += AddInManager_Events_AddInOperationError; |
|
AddInManager.Events.AcceptLicenses += AddInManager_Events_AcceptLicenses; |
|
|
|
_viewModels = new ObservableCollection<AddInsViewModelBase>(); |
|
|
|
// Create and collect the models |
|
InstalledAddInsViewModel = new InstalledAddInsViewModel(); |
|
AvailableAddInsViewModel = new AvailableAddInsViewModel(); |
|
UpdatedAddInsViewModel = new UpdatedAddInsViewModel(); |
|
|
|
_viewModels.Add(InstalledAddInsViewModel); |
|
_viewModels.Add(AvailableAddInsViewModel); |
|
_viewModels.Add(UpdatedAddInsViewModel); |
|
|
|
foreach (var viewModel in _viewModels) |
|
{ |
|
viewModel.PropertyChanged += ViewModel_PropertyChanged; |
|
} |
|
|
|
AddInManager.Events.OnAddInManagerViewOpened(); |
|
|
|
// Expand the first view |
|
InstalledAddInsViewModel.IsExpandedInView = true; |
|
|
|
// Read the packages |
|
AvailableAddInsViewModel.ReadPackages(); |
|
InstalledAddInsViewModel.ReadPackages(); |
|
UpdatedAddInsViewModel.ReadPackages(); |
|
} |
|
|
|
public AvailableAddInsViewModel AvailableAddInsViewModel |
|
{ |
|
get; |
|
private set; |
|
} |
|
|
|
public InstalledAddInsViewModel InstalledAddInsViewModel |
|
{ |
|
get; |
|
private set; |
|
} |
|
|
|
public UpdatedAddInsViewModel UpdatedAddInsViewModel |
|
{ |
|
get; |
|
private set; |
|
} |
|
|
|
public ObservableCollection<AddInsViewModelBase> ViewModels |
|
{ |
|
get |
|
{ |
|
return _viewModels; |
|
} |
|
} |
|
|
|
public string Title |
|
{ |
|
// get { return viewTitle.Title; } |
|
get; |
|
private set; |
|
} |
|
|
|
public void Dispose() |
|
{ |
|
AddInManager.Events.OperationStarted -= AddInManager_Events_OperationStarted; |
|
AddInManager.Events.AddInOperationError -= AddInManager_Events_AddInOperationError; |
|
AddInManager.Events.AcceptLicenses -= AddInManager_Events_AcceptLicenses; |
|
foreach (var viewModel in _viewModels) |
|
{ |
|
viewModel.PropertyChanged -= ViewModel_PropertyChanged; |
|
} |
|
} |
|
|
|
private void ShowErrorMessage(string message) |
|
{ |
|
this.Message = StringParser.Parse(message); |
|
this.HasError = true; |
|
} |
|
|
|
public string Message |
|
{ |
|
get |
|
{ |
|
return _message; |
|
} |
|
set |
|
{ |
|
_message = value; |
|
OnPropertyChanged(model => model.Message); |
|
} |
|
} |
|
|
|
public bool HasError |
|
{ |
|
get |
|
{ |
|
return _hasError; |
|
} |
|
set |
|
{ |
|
_hasError = value; |
|
OnPropertyChanged(model => model.HasError); |
|
} |
|
} |
|
|
|
private void AddInManager_Events_OperationStarted(object sender, EventArgs e) |
|
{ |
|
ClearMessage(); |
|
} |
|
|
|
private void ClearMessage() |
|
{ |
|
this.Message = null; |
|
this.HasError = false; |
|
} |
|
|
|
private void AddInManager_Events_AddInOperationError(object sender, AddInOperationErrorEventArgs e) |
|
{ |
|
ShowErrorMessage(e.Message); |
|
} |
|
|
|
private void AddInManager_Events_AcceptLicenses(object sender, AcceptLicensesEventArgs e) |
|
{ |
|
// Show a license acceptance prompt to the user |
|
e.IsAccepted = ShowLicenseAcceptancePrompt(e.Packages); |
|
} |
|
|
|
private bool ShowLicenseAcceptancePrompt(IEnumerable<IPackage> packages) |
|
{ |
|
if (packages == null) |
|
{ |
|
// No package -> nothing to accept |
|
return true; |
|
} |
|
|
|
// Create a license acceptance view |
|
var viewModel = new LicenseAcceptanceViewModel(packages); |
|
var view = new LicenseAcceptanceView(); |
|
view.DataContext = viewModel; |
|
view.Owner = SD.Workbench.MainWindow; |
|
return view.ShowDialog() ?? false; |
|
} |
|
|
|
private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) |
|
{ |
|
if (e.PropertyName == "IsExpandedInView") |
|
{ |
|
AddInsViewModelBase expandedViewModel = sender as AddInsViewModelBase; |
|
if (expandedViewModel != null) |
|
{ |
|
if (expandedViewModel.IsExpandedInView) |
|
{ |
|
// Unexpand all view models besides this one |
|
foreach (var viewModel in _viewModels) |
|
{ |
|
if (viewModel != expandedViewModel) |
|
{ |
|
viewModel.IsExpandedInView = false; |
|
} |
|
} |
|
} |
|
else if (!expandedViewModel.IsExpandedInView && (_viewModels.Count(v => v.IsExpandedInView) == 0)) |
|
{ |
|
// This is the last unexpanded view => leave it open |
|
expandedViewModel.IsExpandedInView = true; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|