Index: src/Plugins/Wti/Wti.Forms/Extensions/ContextMenuStripExtensions.cs
===================================================================
diff -u
--- src/Plugins/Wti/Wti.Forms/Extensions/ContextMenuStripExtensions.cs (revision 0)
+++ src/Plugins/Wti/Wti.Forms/Extensions/ContextMenuStripExtensions.cs (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -0,0 +1,32 @@
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace Wti.Forms.Extensions
+{
+ ///
+ /// Extension methods for .
+ ///
+ public static class ContextMenuStripExtensions
+ {
+ ///
+ /// Adds a new with all standard parameters.
+ ///
+ /// The parent menu to which the new item is added.
+ /// Value for .
+ /// Value for .
+ /// Value for .
+ /// Method to handle the user clicking on the item..
+ public static void AddMenuItem(this ContextMenuStrip parentMenu, string text, string tooltip, Image icon, EventHandler clickHandler)
+ {
+ var newItem = new ToolStripMenuItem(text)
+ {
+ ToolTipText = tooltip,
+ Image = icon
+ };
+ newItem.Click += clickHandler;
+
+ parentMenu.Items.Add(newItem);
+ }
+ }
+}
\ No newline at end of file
Index: src/Plugins/Wti/Wti.Forms/NodePresenters/PipingSurfaceLineCollectionNodePresenter.cs
===================================================================
diff -u -r2cc167229383dbc03827939d66d50db5b651dba5 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.Forms/NodePresenters/PipingSurfaceLineCollectionNodePresenter.cs (.../PipingSurfaceLineCollectionNodePresenter.cs) (revision 2cc167229383dbc03827939d66d50db5b651dba5)
+++ src/Plugins/Wti/Wti.Forms/NodePresenters/PipingSurfaceLineCollectionNodePresenter.cs (.../PipingSurfaceLineCollectionNodePresenter.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -3,11 +3,14 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
+using System.Windows.Forms;
using DelftTools.Controls;
+using DelftTools.Controls.Swf;
using DelftTools.Utils.Collections;
using Wti.Data;
+using Wti.Forms.Extensions;
using Wti.Forms.Properties;
namespace Wti.Forms.NodePresenters
@@ -18,6 +21,12 @@
///
public class PipingSurfaceLineCollectionNodePresenter : ITreeNodePresenter
{
+ ///
+ /// Injects the action to be performed when importing
+ /// instances to .
+ ///
+ public Action ImportSurfaceLinesAction { private get; set; }
+
public ITreeView TreeView { get; set; }
public Type NodeTagType
@@ -91,6 +100,10 @@
public IMenuItem GetContextMenu(ITreeNode sender, object nodeData)
{
+ if (ImportSurfaceLinesAction != null)
+ {
+ return new MenuItemContextMenuStripAdapter(CreateContextMenu());
+ }
return null;
}
@@ -113,5 +126,23 @@
{
throw new InvalidOperationException(String.Format("Cannot delete node of type {0}.", GetType().Name));
}
+
+ private ContextMenuStrip CreateContextMenu()
+ {
+ var rootMenu = new ContextMenuStrip();
+
+ if (ImportSurfaceLinesAction != null)
+ {
+ rootMenu.AddMenuItem(Resources.ImportSurfaceLines, Resources.ImportSurfaceLinesDescription,
+ Resources.ImportIcon, ImportItemOnClick);
+ }
+
+ return rootMenu;
+ }
+
+ private void ImportItemOnClick(object sender, EventArgs eventArgs)
+ {
+ ImportSurfaceLinesAction();
+ }
}
}
\ No newline at end of file
Index: src/Plugins/Wti/Wti.Forms/Properties/Resources.Designer.cs
===================================================================
diff -u -r82e08784e174b6b2799fc19cc04e7d7aeb7b84e9 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision 82e08784e174b6b2799fc19cc04e7d7aeb7b84e9)
+++ src/Plugins/Wti/Wti.Forms/Properties/Resources.Designer.cs (.../Resources.Designer.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -98,6 +98,34 @@
}
///
+ /// Looks up a localized resource of type System.Drawing.Bitmap.
+ ///
+ public static System.Drawing.Bitmap ImportIcon {
+ get {
+ object obj = ResourceManager.GetObject("ImportIcon", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Importeer dwarsdoorsnedes.
+ ///
+ public static string ImportSurfaceLines {
+ get {
+ return ResourceManager.GetString("ImportSurfaceLines", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Importeer nieuwe dwarsdoorsnedes van een *.csv bestand..
+ ///
+ public static string ImportSurfaceLinesDescription {
+ get {
+ return ResourceManager.GetString("ImportSurfaceLinesDescription", resourceCulture);
+ }
+ }
+
+ ///
/// Looks up a localized string similar to Peil dat gebruikt moet worden in de toetsing..
///
public static string PipingDataAssessmentLevelDescription {
Index: src/Plugins/Wti/Wti.Forms/Properties/Resources.resx
===================================================================
diff -u -r82e08784e174b6b2799fc19cc04e7d7aeb7b84e9 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.Forms/Properties/Resources.resx (.../Resources.resx) (revision 82e08784e174b6b2799fc19cc04e7d7aeb7b84e9)
+++ src/Plugins/Wti/Wti.Forms/Properties/Resources.resx (.../Resources.resx) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -337,4 +337,13 @@
Piping berekening niet gelukt: {0}
+
+ ..\Resources\table-import.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ Importeer dwarsdoorsnedes
+
+
+ Importeer nieuwe dwarsdoorsnedes van een *.csv bestand.
+
\ No newline at end of file
Index: src/Plugins/Wti/Wti.Forms/Resources/table-import.png
===================================================================
diff -u
Binary files differ
Index: src/Plugins/Wti/Wti.Forms/Wti.Forms.csproj
===================================================================
diff -u -r82e08784e174b6b2799fc19cc04e7d7aeb7b84e9 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.Forms/Wti.Forms.csproj (.../Wti.Forms.csproj) (revision 82e08784e174b6b2799fc19cc04e7d7aeb7b84e9)
+++ src/Plugins/Wti/Wti.Forms/Wti.Forms.csproj (.../Wti.Forms.csproj) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -48,6 +48,7 @@
Properties\GlobalAssembly.cs
+
Component
@@ -107,6 +108,9 @@
+
+ PipingContextMenuStrip.cs
+
PublicResXFileCodeGenerator
Resources.Designer.cs
@@ -125,6 +129,9 @@
+
+
+
Index: src/Plugins/Wti/Wti.IO/PipingSurfaceLinesCsvReader.cs
===================================================================
diff -u
--- src/Plugins/Wti/Wti.IO/PipingSurfaceLinesCsvReader.cs (revision 0)
+++ src/Plugins/Wti/Wti.IO/PipingSurfaceLinesCsvReader.cs (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -0,0 +1,17 @@
+using System;
+
+namespace Wti.IO
+{
+ ///
+ /// File reader for a plain text file in comma-separated values format (*.csv), containing
+ /// data specifying surfacelines.
+ /// Expects data to be specified in the following format:
+ /// {ID};X1;Y1;Z1...;(Xn;Yn;Zn)
+ /// Where {ID} has to be a particular accepted text, and n triplets of doubles form the
+ /// 3D coordinates defining the geometric shape of the surfaceline..
+ ///
+ public class PipingSurfaceLinesCsvReader
+ {
+ private readonly string[] acceptableIdNames = { "Profielnaam, LocationID" };
+ }
+}
\ No newline at end of file
Index: src/Plugins/Wti/Wti.IO/Wti.IO.csproj
===================================================================
diff -u -r6dbce7d02bbc8849c767bf7963df7127a98c2897 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.IO/Wti.IO.csproj (.../Wti.IO.csproj) (revision 6dbce7d02bbc8849c767bf7963df7127a98c2897)
+++ src/Plugins/Wti/Wti.IO/Wti.IO.csproj (.../Wti.IO.csproj) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -42,6 +42,7 @@
Properties\GlobalAssembly.cs
+
Index: src/Plugins/Wti/Wti.Plugin/FileImporter/PipingSurfaceLinesCsvImporter.cs
===================================================================
diff -u -r2cc167229383dbc03827939d66d50db5b651dba5 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.Plugin/FileImporter/PipingSurfaceLinesCsvImporter.cs (.../PipingSurfaceLinesCsvImporter.cs) (revision 2cc167229383dbc03827939d66d50db5b651dba5)
+++ src/Plugins/Wti/Wti.Plugin/FileImporter/PipingSurfaceLinesCsvImporter.cs (.../PipingSurfaceLinesCsvImporter.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -65,7 +65,7 @@
{
get
{
- return String.Format("{0} {1}(*.csv)|*.csv",
+ return String.Format("{0} {1} (*.csv)|*.csv",
WtiFormsResources.PipingSurfaceLinesCollectionName, ApplicationResources.CsvFileName);
}
}
@@ -84,12 +84,24 @@
public bool CanImportOn(object targetObject)
{
- throw new NotImplementedException();
+ return targetObject is ICollection;
}
public object ImportItem(string path, object target = null)
{
- throw new NotImplementedException();
+ // TODO: Open file at 'path' with PipingSurfaceLinesCsvReader
+ // TODO: Determine line count (for progress)
+ // TODO: For each line...
+ // TODO: Check ShouldCancel for early abort
+ // TODO: Read line
+ // TODO: Parse line
+ // TODO: Create PipingSurfaceLine
+ // TODO: Set data on PipingSurfaceLine
+ // TODO: Add all PipingSurfaceLines to 'target' if no errors occur.
+
+ // TODO: Notifying observer?
+
+ return target;
}
}
}
\ No newline at end of file
Index: src/Plugins/Wti/Wti.Plugin/WtiApplicationPlugin.cs
===================================================================
diff -u -rd6424435444e760d052fe6d8c8786e01bddf9d2b -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.Plugin/WtiApplicationPlugin.cs (.../WtiApplicationPlugin.cs) (revision d6424435444e760d052fe6d8c8786e01bddf9d2b)
+++ src/Plugins/Wti/Wti.Plugin/WtiApplicationPlugin.cs (.../WtiApplicationPlugin.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -2,6 +2,8 @@
using DelftTools.Shell.Core;
using Mono.Addins;
using Wti.Data;
+using Wti.Plugin.FileImporter;
+
using WtiFormsResources = Wti.Forms.Properties.Resources;
using ApplicationResources = Wti.Plugin.Properties.Resources;
@@ -52,5 +54,10 @@
CreateData = owner => new WtiProject()
};
}
+
+ public override IEnumerable GetFileImporters()
+ {
+ yield return new PipingSurfaceLinesCsvImporter();
+ }
}
}
\ No newline at end of file
Index: src/Plugins/Wti/Wti.Plugin/WtiGuiPlugin.cs
===================================================================
diff -u -r325410362b50750d3c291d19c1526799c9b1c583 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- src/Plugins/Wti/Wti.Plugin/WtiGuiPlugin.cs (.../WtiGuiPlugin.cs) (revision 325410362b50750d3c291d19c1526799c9b1c583)
+++ src/Plugins/Wti/Wti.Plugin/WtiGuiPlugin.cs (.../WtiGuiPlugin.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -74,7 +74,10 @@
yield return new WtiProjectNodePresenter();
yield return new PipingDataNodePresenter();
yield return new PipingFailureMechanismNodePresenter();
- yield return new PipingSurfaceLineCollectionNodePresenter();
+ yield return new PipingSurfaceLineCollectionNodePresenter
+ {
+ ImportSurfaceLinesAction = Gui.CommandHandler.ImportToGuiSelection
+ };
yield return new PipingOutputNodePresenter();
}
}
Index: test/Plugins/Wti/Wti.Forms.Test/Extensions/ContextMenuStripExtensionsTest.cs
===================================================================
diff -u
--- test/Plugins/Wti/Wti.Forms.Test/Extensions/ContextMenuStripExtensionsTest.cs (revision 0)
+++ test/Plugins/Wti/Wti.Forms.Test/Extensions/ContextMenuStripExtensionsTest.cs (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -0,0 +1,37 @@
+using System.Windows.Forms;
+
+using NUnit.Framework;
+
+using Wti.Forms.Extensions;
+using FormsResources = Wti.Forms.Properties.Resources;
+
+namespace Wti.Forms.Test.Extensions
+{
+ [TestFixture]
+ public class ContextMenuStripExtensionsTest
+ {
+ [Test]
+ public void AddMenuItem_AllDataProvided_AddFullyInitializedMenuItem()
+ {
+ // Setup
+ var menu = new ContextMenuStrip();
+ int callCount = 0;
+
+ const string menuItemsText = "";
+ const string menuItemsTooltip = "";
+
+ // Call
+ menu.AddMenuItem(menuItemsText, menuItemsTooltip, FormsResources.ImportIcon, (sender, args) => callCount++);
+
+ // Assert
+ Assert.AreEqual(1, menu.Items.Count);
+ var addedMenuItem = menu.Items[0];
+ Assert.AreEqual(menuItemsText, addedMenuItem.Text);
+ Assert.AreEqual(menuItemsTooltip, addedMenuItem.ToolTipText);
+ Assert.IsNotNull(addedMenuItem.Image);
+
+ addedMenuItem.PerformClick();
+ Assert.AreEqual(1, callCount);
+ }
+ }
+}
\ No newline at end of file
Index: test/Plugins/Wti/Wti.Forms.Test/NodePresenters/PipingSurfaceLineCollectionNodePresenterTest.cs
===================================================================
diff -u -rb08cd825acc24d8d7b0f5e802bf65efece7ee4be -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- test/Plugins/Wti/Wti.Forms.Test/NodePresenters/PipingSurfaceLineCollectionNodePresenterTest.cs (.../PipingSurfaceLineCollectionNodePresenterTest.cs) (revision b08cd825acc24d8d7b0f5e802bf65efece7ee4be)
+++ test/Plugins/Wti/Wti.Forms.Test/NodePresenters/PipingSurfaceLineCollectionNodePresenterTest.cs (.../PipingSurfaceLineCollectionNodePresenterTest.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -5,6 +5,7 @@
using System.Linq;
using DelftTools.Controls;
+using DelftTools.Controls.Swf;
using DelftTools.Utils.Collections;
using NUnit.Framework;
@@ -247,15 +248,18 @@
}
[Test]
- public void GetContextMenu_Always_ReturnNull()
+ public void GetContextMenu_DefaultScenario_ReturnNull()
{
// Setup
var mocks = new MockRepository();
var nodeMock = mocks.StrictMock();
var dataMock = mocks.StrictMock
+
Index: test/Plugins/Wti/Wti.IO.Test/PipingSurfaceLinesCsvReaderTest.cs
===================================================================
diff -u
--- test/Plugins/Wti/Wti.IO.Test/PipingSurfaceLinesCsvReaderTest.cs (revision 0)
+++ test/Plugins/Wti/Wti.IO.Test/PipingSurfaceLinesCsvReaderTest.cs (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -0,0 +1,10 @@
+using NUnit.Framework;
+
+namespace Wti.IO.Test
+{
+ [TestFixture]
+ public class PipingSurfaceLinesCsvReaderTest
+ {
+
+ }
+}
\ No newline at end of file
Index: test/Plugins/Wti/Wti.IO.Test/Wti.IO.Test.csproj
===================================================================
diff -u -rb9fb2479ca915755aa087e7898b9a78eb1e4f0c0 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- test/Plugins/Wti/Wti.IO.Test/Wti.IO.Test.csproj (.../Wti.IO.Test.csproj) (revision b9fb2479ca915755aa087e7898b9a78eb1e4f0c0)
+++ test/Plugins/Wti/Wti.IO.Test/Wti.IO.Test.csproj (.../Wti.IO.Test.csproj) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -38,6 +38,7 @@
+
Index: test/Plugins/Wti/Wti.Plugin.Test/FileImporter/PipingSurfaceLineCsvImporterTest.cs
===================================================================
diff -u -r2cc167229383dbc03827939d66d50db5b651dba5 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- test/Plugins/Wti/Wti.Plugin.Test/FileImporter/PipingSurfaceLineCsvImporterTest.cs (.../PipingSurfaceLineCsvImporterTest.cs) (revision 2cc167229383dbc03827939d66d50db5b651dba5)
+++ test/Plugins/Wti/Wti.Plugin.Test/FileImporter/PipingSurfaceLineCsvImporterTest.cs (.../PipingSurfaceLineCsvImporterTest.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -5,6 +5,8 @@
using NUnit.Framework;
+using Rhino.Mocks;
+
using Wti.Data;
using Wti.Plugin.FileImporter;
using WtiFormsResources = Wti.Forms.Properties.Resources;
@@ -18,24 +20,81 @@
[Test]
public void DefaultConstructor_ExpectedValues()
{
- // call
+ // Call
var importer = new PipingSurfaceLinesCsvImporter();
- // assert
+ // Assert
Assert.IsInstanceOf(importer);
Assert.AreEqual(WtiFormsResources.PipingSurfaceLinesCollectionName, importer.Name);
Assert.AreEqual(ApplicationResources.WtiApplicationName, importer.Category);
Assert.AreEqual(16, importer.Image.Width);
Assert.AreEqual(16, importer.Image.Height);
CollectionAssert.AreEqual(new[]{typeof(IEnumerable)}, importer.SupportedItemTypes);
Assert.IsFalse(importer.CanImportOnRootLevel);
- var expectedFileFilter = String.Format("{0} {1}(*.csv)|*.csv",
+ var expectedFileFilter = String.Format("{0} {1} (*.csv)|*.csv",
WtiFormsResources.PipingSurfaceLinesCollectionName, ApplicationResources.CsvFileName);
Assert.AreEqual(expectedFileFilter, importer.FileFilter);
Assert.IsNull(importer.TargetDataDirectory);
Assert.IsFalse(importer.ShouldCancel);
Assert.IsNull(importer.ProgressChanged);
Assert.IsFalse(importer.OpenViewAfterImport);
}
+
+ [Test]
+ public void CanImportOn_TargetIsCollectionOfPipingSurfaceLines_ReturnTrue()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var validTarget = mocks.StrictMock>();
+ mocks.ReplayAll();
+
+ var importer = new PipingSurfaceLinesCsvImporter();
+
+ // Call
+ var importAllowed = importer.CanImportOn(validTarget);
+
+ // Assert
+ Assert.IsTrue(importAllowed);
+ mocks.VerifyAll(); // Expect no calls on mocks.
+ }
+
+ [Test]
+ public void CanImportOn_InvalidTarget_ReturnFalse()
+ {
+ // Setup
+ var mocks = new MockRepository();
+ var invalidTarget = mocks.StrictMock>();
+ mocks.ReplayAll();
+
+ var importer = new PipingSurfaceLinesCsvImporter();
+
+ // Call
+ var importAllowed = importer.CanImportOn(invalidTarget);
+
+ // Assert
+ Assert.IsFalse(importAllowed);
+ mocks.VerifyAll(); // Expect no calls on mocks.
+ }
+
+ [Test]
+ public void ImportItem_ImportingToValidTargetWithValidFile_ImportSurfaceLinesToCollection()
+ {
+ // Setup
+ const string validFilePath = "";
+ var piping = new PipingFailureMechanism();
+
+ var importer = new PipingSurfaceLinesCsvImporter();
+
+ var importTarget = piping.SurfaceLines;
+
+ // Precondition
+ Assert.IsTrue(importer.CanImportOn(importTarget));
+
+ // Call
+ var importedItem = importer.ImportItem(validFilePath, importTarget);
+
+ // Assert
+ Assert.AreSame(importTarget, importedItem);
+ }
}
}
\ No newline at end of file
Index: test/Plugins/Wti/Wti.Plugin.Test/Wti.Plugin.Test.csproj
===================================================================
diff -u -r2cc167229383dbc03827939d66d50db5b651dba5 -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- test/Plugins/Wti/Wti.Plugin.Test/Wti.Plugin.Test.csproj (.../Wti.Plugin.Test.csproj) (revision 2cc167229383dbc03827939d66d50db5b651dba5)
+++ test/Plugins/Wti/Wti.Plugin.Test/Wti.Plugin.Test.csproj (.../Wti.Plugin.Test.csproj) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -38,6 +38,9 @@
..\..\..\..\lib\nunit.framework.dll
+
+ ..\..\..\..\lib\Rhino.Mocks.dll
+
Index: test/Plugins/Wti/Wti.Plugin.Test/WtiApplicationPluginTest.cs
===================================================================
diff -u -rd6424435444e760d052fe6d8c8786e01bddf9d2b -rbb61ed227cf79e994b84019096e4297b2fbd4527
--- test/Plugins/Wti/Wti.Plugin.Test/WtiApplicationPluginTest.cs (.../WtiApplicationPluginTest.cs) (revision d6424435444e760d052fe6d8c8786e01bddf9d2b)
+++ test/Plugins/Wti/Wti.Plugin.Test/WtiApplicationPluginTest.cs (.../WtiApplicationPluginTest.cs) (revision bb61ed227cf79e994b84019096e4297b2fbd4527)
@@ -4,6 +4,8 @@
using Mono.Addins;
using NUnit.Framework;
using Wti.Data;
+using Wti.Plugin.FileImporter;
+
using PluginResources = Wti.Plugin.Properties.Resources;
using FormsResources = Wti.Forms.Properties.Resources;
@@ -59,5 +61,19 @@
Assert.IsInstanceOf(projectDataItemDefinition.CreateData(null));
Assert.IsNull(projectDataItemDefinition.AddExampleData);
}
+
+ [Test]
+ public void GetFileImporters_Always_ReturnExpectedFileImporters()
+ {
+ // Setup
+ var plugin = new WtiApplicationPlugin();
+
+ // Call
+ var importers = plugin.GetFileImporters().ToArray();
+
+ // Assert
+ Assert.AreEqual(1, importers.Length);
+ Assert.IsInstanceOf(importers[0]);
+ }
}
}
\ No newline at end of file