Browse Source

Can now browse for a directory containing NuGet packages in the options dialog.

pull/15/head
mrward 15 years ago
parent
commit
787fce196d
  1. 16
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin
  2. 13
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  3. 6
      src/AddIns/Misc/PackageManagement/Project/Src/Design/DesignTimeRegisteredPackageSourcesViewModel.cs
  4. 23
      src/AddIns/Misc/PackageManagement/Project/Src/FolderBrowser.cs
  5. 12
      src/AddIns/Misc/PackageManagement/Project/Src/IFolderBrowser.cs
  6. 12
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml
  7. 12
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml.cs
  8. 66
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs
  9. 16
      src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs
  10. 3
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  11. 18
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFolderBrowser.cs
  12. 107
      src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs

16
src/AddIns/Misc/PackageManagement/Project/PackageManagement.addin

@ -52,11 +52,19 @@ @@ -52,11 +52,19 @@
</Path>
<!-- Tools options -->
<Path name="/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">
<Path name="/SharpDevelop/Dialogs/OptionsDialog">
<OptionPanel
id="PackageManagementOptions"
id="PackageManagement"
label="Package Management"
class="ICSharpCode.PackageManagement.PackageManagementOptionsView"
/>
insertafter="Debugging"
insertbefore="TextEditorOptions">
<OptionPanel
id="PackageManagementOptions"
label="General"/>
<OptionPanel
id="PackageSources"
label="Package Sources"
class="ICSharpCode.PackageManagement.RegisteredPackageSourcesView"/>
</OptionPanel>
</Path>
</AddIn>

13
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -45,6 +45,7 @@ @@ -45,6 +45,7 @@
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
@ -72,7 +73,7 @@ @@ -72,7 +73,7 @@
<Compile Include="Src\BooleanToFontWeightConverter.cs" />
<Compile Include="Src\DelegateCommand.cs" />
<Compile Include="Src\Design\DesignTimeLicenseAcceptanceViewModel.cs" />
<Compile Include="Src\Design\DesignTimePackageManagementOptionsViewModel.cs" />
<Compile Include="Src\Design\DesignTimeRegisteredPackageSourcesViewModel.cs" />
<Compile Include="Src\Design\DesignTimePackageManagementService.cs" />
<Compile Include="Src\Design\DesignTimePackagesViewModel.cs" />
<Compile Include="Src\Design\FakeFileSystem.cs" />
@ -84,7 +85,9 @@ @@ -84,7 +85,9 @@
<Compile Include="Src\Design\FakeProjectManager.cs" />
<Compile Include="Src\Design\FakeProjectSystem.cs" />
<Compile Include="Src\Design\WpfDesigner.cs" />
<Compile Include="Src\FolderBrowser.cs" />
<Compile Include="Src\ICompilerMessageView.cs" />
<Compile Include="Src\IFolderBrowser.cs" />
<Compile Include="Src\IMessageReporter.cs" />
<Compile Include="Src\IMessageViewCategory.cs" />
<Compile Include="Src\IPackageManagementOutputMessagesView.cs" />
@ -117,11 +120,11 @@ @@ -117,11 +120,11 @@
<Compile Include="Src\OpenHyperlinkCommand.cs" />
<Compile Include="Src\PackageManagementFileService.cs" />
<Compile Include="Src\PackageManagementOptions.cs" />
<Compile Include="Src\PackageManagementOptionsView.xaml.cs">
<DependentUpon>PackageManagementOptionsView.xaml</DependentUpon>
<Compile Include="Src\RegisteredPackageSourcesView.xaml.cs">
<DependentUpon>RegisteredPackageSourcesView.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\PackageManagementOptionsViewModel.cs" />
<Compile Include="Src\RegisteredPackageSourcesViewModel.cs" />
<Compile Include="Src\PackageManagementProjectService.cs" />
<Compile Include="Src\PackageManagementEnumerableExtensions.cs" />
<Compile Include="Src\PackageManagementService.cs" />
@ -167,7 +170,7 @@ @@ -167,7 +170,7 @@
<ItemGroup>
<Page Include="Src\AddPackageReferenceView.xaml" />
<Page Include="Src\LicenseAcceptanceView.xaml" />
<Page Include="Src\PackageManagementOptionsView.xaml" />
<Page Include="Src\RegisteredPackageSourcesView.xaml" />
<Page Include="Src\PackagesView.xaml" />
<Page Include="Src\PagedResultsView.xaml" />
</ItemGroup>

6
src/AddIns/Misc/PackageManagement/Project/Src/Design/DesignTimePackageManagementOptionsViewModel.cs → src/AddIns/Misc/PackageManagement/Project/Src/Design/DesignTimeRegisteredPackageSourcesViewModel.cs

@ -8,14 +8,14 @@ using NuGet; @@ -8,14 +8,14 @@ using NuGet;
namespace ICSharpCode.PackageManagement.Design
{
public class DesignTimePackageManagementOptionsViewModel : PackageManagementOptionsViewModel
public class DesignTimeRegisteredPackageSourcesViewModel : RegisteredPackageSourcesViewModel
{
public DesignTimePackageManagementOptionsViewModel()
public DesignTimeRegisteredPackageSourcesViewModel()
: this(new PackageManagementOptions(new Properties()))
{
}
public DesignTimePackageManagementOptionsViewModel(PackageManagementOptions options)
public DesignTimeRegisteredPackageSourcesViewModel(PackageManagementOptions options)
: base(options)
{
options.PackageSources.Add(new PackageSource("Source2", "http://sharpdevelop.codeplex.com"));

23
src/AddIns/Misc/PackageManagement/Project/Src/FolderBrowser.cs

@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
// 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.Windows.Forms;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.PackageManagement
{
public class FolderBrowser : IFolderBrowser
{
public string SelectFolder()
{
using (var dialog = new FolderBrowserDialog()) {
IWin32Window owner = WorkbenchSingleton.MainWin32Window;
if (dialog.ShowDialog(owner) == DialogResult.OK) {
return dialog.SelectedPath;
}
}
return null;
}
}
}

12
src/AddIns/Misc/PackageManagement/Project/Src/IFolderBrowser.cs

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
// 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;
namespace ICSharpCode.PackageManagement
{
public interface IFolderBrowser
{
string SelectFolder();
}
}

12
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml → src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
<gui:OptionPanel
x:Class="ICSharpCode.PackageManagement.PackageManagementOptionsView"
x:Class="ICSharpCode.PackageManagement.RegisteredPackageSourcesView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui;assembly=ICSharpCode.SharpDevelop"
xmlns:pm="clr-namespace:ICSharpCode.PackageManagement"
@ -50,7 +50,7 @@ @@ -50,7 +50,7 @@
</Grid.Resources>
<Grid.DataContext>
<Binding Source="{StaticResource ViewModelLocator}" Path="PackageManagementOptionsViewModel"/>
<Binding Source="{StaticResource ViewModelLocator}" Path="RegisteredPackageSourcesViewModel"/>
</Grid.DataContext>
<Grid.ColumnDefinitions>
@ -127,7 +127,13 @@ @@ -127,7 +127,13 @@
<Button
Content="Add"
Command="{Binding Path=AddPackageSourceCommand}"
Margin="4, 2"
Margin="4, 6, 4, 4"
Padding="7, 0"/>
<Button
Content="..."
Command="{Binding Path=BrowsePackageFolderCommand}"
HorizontalAlignment="Left"
Margin="4, 4"
Padding="7, 0"/>
</StackPanel>
</Grid>

12
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsView.xaml.cs → src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesView.xaml.cs

@ -6,20 +6,20 @@ using ICSharpCode.SharpDevelop.Gui; @@ -6,20 +6,20 @@ using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.PackageManagement
{
public partial class PackageManagementOptionsView : OptionPanel
public partial class RegisteredPackageSourcesView : OptionPanel
{
const string ViewModelResourceName = "PackageManagementOptionsViewModel";
PackageManagementOptionsViewModel viewModel;
const string ViewModelResourceName = "RegisteredPackageSourcesViewModel";
RegisteredPackageSourcesViewModel viewModel;
public PackageManagementOptionsView()
public RegisteredPackageSourcesView()
{
InitializeComponent();
}
PackageManagementOptionsViewModel ViewModel {
RegisteredPackageSourcesViewModel ViewModel {
get {
if (viewModel == null) {
viewModel = MainGrid.DataContext as PackageManagementOptionsViewModel;
viewModel = MainGrid.DataContext as RegisteredPackageSourcesViewModel;
}
return viewModel;
}

66
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptionsViewModel.cs → src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs

@ -3,29 +3,42 @@ @@ -3,29 +3,42 @@
using System;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Windows.Input;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageManagementOptionsViewModel : ViewModelBase<PackageManagementOptionsViewModel>
public class RegisteredPackageSourcesViewModel : ViewModelBase<RegisteredPackageSourcesViewModel>
{
ObservableCollection<PackageSourceViewModel> packageSourceViewModels =
new ObservableCollection<PackageSourceViewModel>();
PackageManagementOptions options;
IFolderBrowser folderBrowser;
DelegateCommand addPackageSourceCommmand;
DelegateCommand removePackageSourceCommand;
DelegateCommand movePackageSourceUpCommand;
DelegateCommand movePackageSourceDownCommand;
DelegateCommand browsePackageFolderCommand;
RegisteredPackageSource newPackageSource = new RegisteredPackageSource();
PackageSourceViewModel selectedPackageSourceViewModel;
public PackageManagementOptionsViewModel(PackageManagementOptions options)
public RegisteredPackageSourcesViewModel(
PackageManagementOptions options)
: this(options, new FolderBrowser())
{
}
public RegisteredPackageSourcesViewModel(
PackageManagementOptions options,
IFolderBrowser folderBrowser)
{
this.options = options;
this.folderBrowser = folderBrowser;
CreateCommands();
}
@ -46,6 +59,9 @@ namespace ICSharpCode.PackageManagement @@ -46,6 +59,9 @@ namespace ICSharpCode.PackageManagement
movePackageSourceDownCommand =
new DelegateCommand(param => MovePackageSourceDown(),
param => CanMovePackageSourceDown);
browsePackageFolderCommand =
new DelegateCommand(param => BrowsePackageFolder());
}
public ICommand AddPackageSourceCommand {
@ -64,6 +80,10 @@ namespace ICSharpCode.PackageManagement @@ -64,6 +80,10 @@ namespace ICSharpCode.PackageManagement
get { return movePackageSourceDownCommand; }
}
public ICommand BrowsePackageFolderCommand {
get { return browsePackageFolderCommand; }
}
public ObservableCollection<PackageSourceViewModel> PackageSourceViewModels {
get { return packageSourceViewModels; }
}
@ -92,12 +112,18 @@ namespace ICSharpCode.PackageManagement @@ -92,12 +112,18 @@ namespace ICSharpCode.PackageManagement
public string NewPackageSourceName {
get { return newPackageSource.Name; }
set { newPackageSource.Name = value; }
set {
newPackageSource.Name = value;
OnPropertyChanged(viewModel => viewModel.NewPackageSourceName);
}
}
public string NewPackageSourceUrl {
get { return newPackageSource.Source; }
set { newPackageSource.Source = value; }
set {
newPackageSource.Source = value;
OnPropertyChanged(viewModel => viewModel.NewPackageSourceUrl);
}
}
public PackageSourceViewModel SelectedPackageSourceViewModel {
@ -127,21 +153,15 @@ namespace ICSharpCode.PackageManagement @@ -127,21 +153,15 @@ namespace ICSharpCode.PackageManagement
}
public bool CanAddPackageSource {
get {
return NewPackageSourceHasUrl && NewPackageSourceHasName;
}
get { return NewPackageSourceHasUrl && NewPackageSourceHasName; }
}
bool NewPackageSourceHasUrl {
get {
return !String.IsNullOrEmpty(NewPackageSourceUrl);
}
get { return !String.IsNullOrEmpty(NewPackageSourceUrl); }
}
bool NewPackageSourceHasName {
get {
return !String.IsNullOrEmpty(NewPackageSourceName);
}
get { return !String.IsNullOrEmpty(NewPackageSourceName); }
}
public void RemovePackageSource()
@ -209,5 +229,25 @@ namespace ICSharpCode.PackageManagement @@ -209,5 +229,25 @@ namespace ICSharpCode.PackageManagement
{
return packageSourceViewModels.Last();
}
public void BrowsePackageFolder()
{
string folder = folderBrowser.SelectFolder();
if (folder != null) {
UpdateNewPackageSourceUsingSelectedFolder(folder);
}
}
void UpdateNewPackageSourceUsingSelectedFolder(string folder)
{
NewPackageSourceUrl = folder;
NewPackageSourceName = GetPackageSourceNameFromFolder(folder);
}
string GetPackageSourceNameFromFolder(string folder)
{
return Path.GetFileName(folder);
}
}
}

16
src/AddIns/Misc/PackageManagement/Project/Src/ViewModelLocator.cs

@ -9,7 +9,7 @@ namespace ICSharpCode.PackageManagement @@ -9,7 +9,7 @@ namespace ICSharpCode.PackageManagement
public class ViewModelLocator
{
AddPackageReferenceViewModel addPackageReferenceViewModel;
PackageManagementOptionsViewModel packageManagementOptionsViewModel;
RegisteredPackageSourcesViewModel registeredPackageSourcesViewModel;
IPackageManagementService packageManagementService;
public AddPackageReferenceViewModel AddPackageReferenceViewModel {
@ -42,22 +42,22 @@ namespace ICSharpCode.PackageManagement @@ -42,22 +42,22 @@ namespace ICSharpCode.PackageManagement
return WpfDesigner.IsInDesignMode();
}
public PackageManagementOptionsViewModel PackageManagementOptionsViewModel {
public RegisteredPackageSourcesViewModel RegisteredPackageSourcesViewModel {
get {
if (packageManagementOptionsViewModel == null) {
CreatePackageManagementOptionsViewModel();
if (registeredPackageSourcesViewModel == null) {
CreateRegisteredPackageSourcesViewModel();
}
return packageManagementOptionsViewModel;
return registeredPackageSourcesViewModel;
}
}
void CreatePackageManagementOptionsViewModel()
void CreateRegisteredPackageSourcesViewModel()
{
CreatePackageManagementService();
if (IsInDesignMode()) {
packageManagementOptionsViewModel = new DesignTimePackageManagementOptionsViewModel();
registeredPackageSourcesViewModel = new DesignTimeRegisteredPackageSourcesViewModel();
} else {
packageManagementOptionsViewModel = new PackageManagementOptionsViewModel(packageManagementService.Options);
registeredPackageSourcesViewModel = new RegisteredPackageSourcesViewModel(packageManagementService.Options);
}
}
}

3
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -72,6 +72,7 @@ @@ -72,6 +72,7 @@
<Compile Include="Src\Helpers\ExceptionThrowingPackageOperationResolver.cs" />
<Compile Include="Src\Helpers\FakeCompilerMessageView.cs" />
<Compile Include="Src\Helpers\FakeFileService.cs" />
<Compile Include="Src\Helpers\FakeFolderBrowser.cs" />
<Compile Include="Src\Helpers\FakeLicenseAcceptanceService.cs" />
<Compile Include="Src\Helpers\FakeMessageCategoryView.cs" />
<Compile Include="Src\Helpers\FakeMessageReporter.cs" />
@ -119,7 +120,7 @@ @@ -119,7 +120,7 @@
<Compile Include="Src\LicenseAcceptanceViewModelTests.cs" />
<Compile Include="Src\OpenHyperlinkCommandTests.cs" />
<Compile Include="Src\PackageManagementOptionsTests.cs" />
<Compile Include="Src\PackageManagementOptionsViewModelTests.cs" />
<Compile Include="Src\RegisteredPackageSourcesViewModelTests.cs" />
<Compile Include="Src\PackageManagementOutputMessagesViewTests.cs" />
<Compile Include="Src\PackageManagementServiceTests.cs" />
<Compile Include="Src\PackageRepositoryCacheTests.cs" />

18
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakeFolderBrowser.cs

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
// 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 ICSharpCode.PackageManagement;
namespace PackageManagement.Tests.Helpers
{
public class FakeFolderBrowser : IFolderBrowser
{
public string FolderToReturnFromSelectFolder;
public string SelectFolder()
{
return FolderToReturnFromSelectFolder;
}
}
}

107
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementOptionsViewModelTests.cs → src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs

@ -12,22 +12,25 @@ using PackageManagement.Tests.Helpers; @@ -12,22 +12,25 @@ using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class PackageManagementOptionsViewModelTests
public class RegisteredPackageSourcesViewModelTests
{
PackageManagementOptionsViewModel viewModel;
RegisteredPackageSourcesViewModel viewModel;
PackageManagementOptions options;
FakeFolderBrowser fakeFolderBrowser;
List<string> propertiesChanged;
void CreateViewModel()
{
options = new PackageManagementOptions(new Properties());
options.PackageSources.Clear();
viewModel = new PackageManagementOptionsViewModel(options);
fakeFolderBrowser = new FakeFolderBrowser();
viewModel = new RegisteredPackageSourcesViewModel(options, fakeFolderBrowser);
}
void CreateViewModelWithOnePackageSource()
{
CreateViewModel();
AddPackageSourceToOptions("Source 1", "http://url1");
AddPackageSourceToOptions("Source 1", "http://url1");
}
void CreateViewModelWithTwoPackageSources()
@ -43,6 +46,12 @@ namespace PackageManagement.Tests @@ -43,6 +46,12 @@ namespace PackageManagement.Tests
options.PackageSources.Add(source);
}
void RecordPropertyChanges()
{
propertiesChanged = new List<string>();
viewModel.PropertyChanged += (sender, e) => propertiesChanged.Add(e.PropertyName);
}
[Test]
public void Constructor_InstanceCreated_NoPackageSourceViewModels()
{
@ -464,5 +473,95 @@ namespace PackageManagement.Tests @@ -464,5 +473,95 @@ namespace PackageManagement.Tests
Assert.Contains("SelectedPackageSourceViewModel", propertyNames);
}
[Test]
public void BrowsePackageFolderCommand_UserSelectsFolder_NewPackageSourceUrlIsUpdatedWithSelectedFolder()
{
CreateViewModel();
viewModel.Load();
string expectedSourceUrl = @"d:\projects\packages";
fakeFolderBrowser.FolderToReturnFromSelectFolder = expectedSourceUrl;
viewModel.BrowsePackageFolderCommand.Execute(null);
string newSourceUrl = viewModel.NewPackageSourceUrl;
Assert.AreEqual(expectedSourceUrl, newSourceUrl);
}
[Test]
public void BrowsePackageFolder_UserSelectsFolder_NewPackageSourceNameIsUpdatedWithSelectedFolderName()
{
CreateViewModel();
viewModel.Load();
fakeFolderBrowser.FolderToReturnFromSelectFolder = @"d:\projects\NuGet Packages";
viewModel.BrowsePackageFolder();
string newName = viewModel.NewPackageSourceName;
Assert.AreEqual("NuGet Packages", newName);
}
[Test]
public void BrowsePackageFolder_UserDoesNotSelectFolder_NewPackageSourceUrlIsNotChanged()
{
CreateViewModel();
viewModel.Load();
string expectedSource = "http://sharpdevelop.com/packages";
viewModel.NewPackageSourceUrl = expectedSource;
fakeFolderBrowser.FolderToReturnFromSelectFolder = null;
viewModel.BrowsePackageFolder();
string newSource = viewModel.NewPackageSourceUrl;
Assert.AreEqual(expectedSource, newSource);
}
[Test]
public void BrowsePackageFolder_UserDoesNotSelectFolder_NewPackageSourceNameIsNotChanged()
{
CreateViewModel();
viewModel.Load();
viewModel.NewPackageSourceName = "Test";
fakeFolderBrowser.FolderToReturnFromSelectFolder = null;
viewModel.BrowsePackageFolder();
string name = viewModel.NewPackageSourceName;
Assert.AreEqual("Test", name);
}
[Test]
public void BrowsePackageFolder_UserSelectsFolder_PropertyChangedEventFiresForNewPackageSourceUrl()
{
CreateViewModel();
viewModel.Load();
fakeFolderBrowser.FolderToReturnFromSelectFolder = @"d:\projects\NuGet Packages";
RecordPropertyChanges();
viewModel.BrowsePackageFolder();
bool propertyEventFired = propertiesChanged.Contains("NewPackageSourceUrl");
Assert.IsTrue(propertyEventFired);
}
[Test]
public void BrowsePackageFolder_UserSelectsFolder_PropertyChangedEventFiresForNewPackageSourceName()
{
CreateViewModel();
viewModel.Load();
fakeFolderBrowser.FolderToReturnFromSelectFolder = @"d:\projects\NuGet Packages";
RecordPropertyChanges();
viewModel.BrowsePackageFolder();
bool propertyEventFired = propertiesChanged.Contains("NewPackageSourceName");
Assert.IsTrue(propertyEventFired);
}
}
}
Loading…
Cancel
Save