Browse Source

Added an Add Files menu item to the selected directory node in the WiX files editor. This menu item will add multiple files, each with its own parent component, to an existing directory tree node in one step.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3218 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 18 years ago
parent
commit
46e71bc93d
  1. 21
      src/AddIns/BackendBindings/WixBinding/Project/Src/Commands/AddFilesToDirectoryCommand.cs
  2. 2
      src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PackageFilesView.cs
  3. 25
      src/AddIns/BackendBindings/WixBinding/Project/Src/WixPackageFilesEditor.cs
  4. 3
      src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin
  5. 1
      src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
  6. 154
      src/AddIns/BackendBindings/WixBinding/Test/PackageFiles/AddFilesToDirectoryTestFixture.cs
  7. 1
      src/AddIns/BackendBindings/WixBinding/Test/WixBinding.Tests.csproj

21
src/AddIns/BackendBindings/WixBinding/Project/Src/Commands/AddFilesToDirectoryCommand.cs

@ -0,0 +1,21 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using ICSharpCode.Core;
namespace ICSharpCode.WixBinding
{
public class AddFilesToDirectoryCommand : AbstractMenuCommand
{
public override void Run()
{
PackageFilesView.ActiveView.AddFiles();
}
}
}

2
src/AddIns/BackendBindings/WixBinding/Project/Src/Gui/PackageFilesView.cs

@ -136,7 +136,7 @@ namespace ICSharpCode.WixBinding
} }
/// <summary> /// <summary>
/// Adds files to the selected Component element tree node. /// Adds files to the selected Component element or Directory element tree node.
/// </summary> /// </summary>
public void AddFiles() public void AddFiles()
{ {

25
src/AddIns/BackendBindings/WixBinding/Project/Src/WixPackageFilesEditor.cs

@ -251,10 +251,15 @@ namespace ICSharpCode.WixBinding
void AddFile(string fileName) void AddFile(string fileName)
{ {
WixComponentElement componentElement = view.SelectedElement as WixComponentElement; WixComponentElement componentElement = view.SelectedElement as WixComponentElement;
WixDirectoryElement directoryElement = view.SelectedElement as WixDirectoryElement;
if (componentElement != null) { if (componentElement != null) {
WixFileElement fileElement = AddFile(componentElement, fileName); WixFileElement fileElement = AddFile(componentElement, fileName);
view.AddElement(fileElement); view.AddElement(fileElement);
view.IsDirty = true; view.IsDirty = true;
} else if (directoryElement != null) {
componentElement = AddFileWithParentComponent(directoryElement, fileName);
view.AddElement(componentElement);
view.IsDirty = true;
} }
} }
@ -415,17 +420,25 @@ namespace ICSharpCode.WixBinding
foreach (string fileName in DirectoryReader.GetFiles(directory)) { foreach (string fileName in DirectoryReader.GetFiles(directory)) {
if (!excludedNames.IsExcluded(fileName)) { if (!excludedNames.IsExcluded(fileName)) {
string path = Path.Combine(directory, fileName); string path = Path.Combine(directory, fileName);
string id = WixComponentElement.GenerateIdFromFileName(document, path); AddFileWithParentComponent(directoryElement, path);
WixComponentElement component = AddComponent(directoryElement, id);
AddFile(component, path);
} }
} }
} }
/// <summary>
/// Adds a new Wix Component to the directory element. The file will then be added to this
/// component.
/// </summary>
WixComponentElement AddFileWithParentComponent(WixDirectoryElement directoryElement, string fileName)
{
string id = WixComponentElement.GenerateIdFromFileName(document, fileName);
WixComponentElement component = AddComponent(directoryElement, id);
AddFile(component, fileName);
return component;
}
IDirectoryReader DirectoryReader { IDirectoryReader DirectoryReader {
get { get { return directoryReader; }
return directoryReader;
}
} }
/// <summary> /// <summary>

3
src/AddIns/BackendBindings/WixBinding/Project/WixBinding.addin

@ -213,6 +213,9 @@
<MenuItem id = "AddDirectory" <MenuItem id = "AddDirectory"
label = "${res:ICSharpCode.WixBinding.PackagesFilesView.ContextMenu.AddDirectory}" label = "${res:ICSharpCode.WixBinding.PackagesFilesView.ContextMenu.AddDirectory}"
class = "ICSharpCode.WixBinding.AddDirectoryCommand"/> class = "ICSharpCode.WixBinding.AddDirectoryCommand"/>
<MenuItem id = "AddFilesToDirectory"
label = "${res:ICSharpCode.WixBinding.PackagesFilesView.ContextMenu.AddFiles}"
class = "ICSharpCode.WixBinding.AddFilesToDirectoryCommand"/>
<MenuItem id = "Diff" <MenuItem id = "Diff"
label = "Diff" label = "Diff"
class = "ICSharpCode.WixBinding.ShowDiffCommand"/> class = "ICSharpCode.WixBinding.ShowDiffCommand"/>

1
src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj

@ -45,6 +45,7 @@
<Reference Include="Microsoft.Build.Engine" /> <Reference Include="Microsoft.Build.Engine" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Src\Commands\AddFilesToDirectoryCommand.cs" />
<Compile Include="Src\Commands\AddWixExtensionToProject.cs" /> <Compile Include="Src\Commands\AddWixExtensionToProject.cs" />
<Compile Include="Src\Commands\AddWixItemToProjectBaseCommand.cs" /> <Compile Include="Src\Commands\AddWixItemToProjectBaseCommand.cs" />
<Compile Include="Src\Project\WixExtensionFolderNode.cs" /> <Compile Include="Src\Project\WixExtensionFolderNode.cs" />

154
src/AddIns/BackendBindings/WixBinding/Test/PackageFiles/AddFilesToDirectoryTestFixture.cs

@ -0,0 +1,154 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.WixBinding;
using NUnit.Framework;
using System;
using System.Collections.Specialized;
using System.IO;
using System.Xml;
using WixBinding.Tests.Utils;
namespace WixBinding.Tests.PackageFiles
{
/// <summary>
/// Tests that files can be added when a directory element is selected in the PackageFilesEditor.
/// </summary>
[TestFixture]
public class AddFilesToDirectoryTestFixture : PackageFilesTestFixtureBase
{
XmlElement exeFileElement;
XmlElement installDirElement;
XmlElement readmeFileElement;
XmlElement exeFileComponentElement;
XmlElement readmeFileComponentElement;
string[] fileNames;
string exeFileName;
string readmeFileName;
[SetUp]
public void Init()
{
base.InitFixture();
installDirElement = (XmlElement)editor.Document.RootDirectory.ChildNodes[0].ChildNodes[0];
view.SelectedElement = installDirElement;
editor.SelectedElementChanged();
exeFileName = Path.Combine(project.Directory, @"bin\TestApplication.exe");
readmeFileName = Path.Combine(project.Directory, @"docs\readme.rtf");
fileNames = new string[] {exeFileName, readmeFileName};
editor.AddFiles(fileNames);
if (installDirElement.ChildNodes.Count > 1) {
exeFileComponentElement = (XmlElement)installDirElement.ChildNodes[0];
if (exeFileComponentElement.HasChildNodes) {
exeFileElement = (XmlElement)exeFileComponentElement.ChildNodes[0];
}
readmeFileComponentElement = (XmlElement)installDirElement.ChildNodes[1];
if (readmeFileComponentElement.HasChildNodes) {
readmeFileElement = (XmlElement)readmeFileComponentElement.ChildNodes[0];
}
}
}
[Test]
public void IsDirty()
{
Assert.IsTrue(view.IsDirty);
}
/// <summary>
/// The two parent component elements are added to the view. The child elements
/// are not added directly to the view since they are child nodes of the component elements.
/// </summary>
[Test]
public void TwoElementsAddedToView()
{
Assert.AreEqual(2, view.ElementsAdded.Length);
}
[Test]
public void SanityCheckInstallDirectoryElement()
{
Assert.AreEqual("INSTALLDIR", installDirElement.GetAttribute("Id"));
}
[Test]
public void InstallDirectoryElementHasTwoChildNodes()
{
Assert.AreEqual(2, installDirElement.ChildNodes.Count);
}
[Test]
public void ExeFileComponentElementExists()
{
Assert.IsNotNull(exeFileComponentElement);
}
[Test]
public void ReadmeFileComponentElementExists()
{
Assert.IsNotNull(readmeFileComponentElement);
}
[Test]
public void ExeFileComponentId()
{
string expectedId = WixComponentElement.GenerateIdFromFileName("TestApplication.exe");
Assert.AreEqual(expectedId, exeFileComponentElement.GetAttribute("Id"));
}
[Test]
public void ReadmeFileComponentId()
{
string expectedId = WixComponentElement.GenerateIdFromFileName("readme.rtf");
Assert.AreEqual(expectedId, readmeFileComponentElement.GetAttribute("Id"));
}
[Test]
public void ExeFileId()
{
Assert.AreEqual("TestApplication.exe", exeFileElement.GetAttribute("Id"));
}
[Test]
public void ReadmeFileId()
{
Assert.AreEqual("readme.rtf", readmeFileElement.GetAttribute("Id"));
}
[Test]
public void ExeFileElementExists()
{
Assert.IsNotNull(exeFileElement);
}
[Test]
public void ReadmeFileElementExists()
{
Assert.IsNotNull(readmeFileElement);
}
protected override string GetWixXml()
{
return "<Wix xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\r\n" +
"\t<Product Name=\"MySetup\" \r\n" +
"\t Manufacturer=\"\" \r\n" +
"\t Id=\"F4A71A3A-C271-4BE8-B72C-F47CC956B3AA\" \r\n" +
"\t Language=\"1033\" \r\n" +
"\t Version=\"1.0.0.0\">\r\n" +
"\t\t<Package Id=\"6B8BE64F-3768-49CA-8BC2-86A76424DFE9\"/>\r\n" +
"\t\t<Directory Id=\"TARGETDIR\" SourceName=\"SourceDir\">\r\n" +
"\t\t\t<Directory Id=\"ProgramFilesFolder\" Name=\"PFiles\">\r\n" +
"\t\t\t\t<Directory Id=\"INSTALLDIR\" Name=\"MyApp\">\r\n" +
"\t\t\t\t</Directory>\r\n" +
"\t\t\t</Directory>\r\n" +
"\t\t</Directory>\r\n" +
"\t</Product>\r\n" +
"</Wix>";
}
}
}

1
src/AddIns/BackendBindings/WixBinding/Test/WixBinding.Tests.csproj

@ -54,6 +54,7 @@
<Compile Include="Gui\DeleteWixExtensionNodeTestFixture.cs" /> <Compile Include="Gui\DeleteWixExtensionNodeTestFixture.cs" />
<Compile Include="Gui\WixFileTreeNodeTestFixture.cs" /> <Compile Include="Gui\WixFileTreeNodeTestFixture.cs" />
<Compile Include="Gui\WixProjectWithWixExtensionItemsTestFixture.cs" /> <Compile Include="Gui\WixProjectWithWixExtensionItemsTestFixture.cs" />
<Compile Include="PackageFiles\AddFilesToDirectoryTestFixture.cs" />
<Compile Include="Project\AddWixExtensionTestFixture.cs" /> <Compile Include="Project\AddWixExtensionTestFixture.cs" />
<Compile Include="Project\AddWixLibraryTestFixture.cs" /> <Compile Include="Project\AddWixLibraryTestFixture.cs" />
<Compile Include="Gui\AddWixProjectNodeTestFixture.cs" /> <Compile Include="Gui\AddWixProjectNodeTestFixture.cs" />

Loading…
Cancel
Save