diff --git a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Extensions/FamilyTreeMaker/Associations/FTW.uexml b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Extensions/FamilyTreeMaker/Associations/FTW.uexml
new file mode 100644
index 00000000..09651be9
--- /dev/null
+++ b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/Extensions/FamilyTreeMaker/Associations/FTW.uexml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+ *.ftw
+
+
+
+ D0CF11E0A1B11AE1
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj
index 2ea374f2..af9eaa9a 100644
--- a/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj
+++ b/CSharp/Content/UniversalEditor.Content.PlatformIndependent/UniversalEditor.Content.PlatformIndependent.csproj
@@ -636,6 +636,7 @@
+
@@ -646,6 +647,8 @@
+
+
diff --git a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Editors/FamilyTree/FamilyTreeEditor.cs b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Editors/FamilyTree/FamilyTreeEditor.cs
new file mode 100644
index 00000000..bfb88937
--- /dev/null
+++ b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Editors/FamilyTree/FamilyTreeEditor.cs
@@ -0,0 +1,41 @@
+using System;
+using UniversalEditor.ObjectModels.FamilyTree;
+using UniversalEditor.UserInterface;
+
+namespace UniversalEditor.Editors.FamilyTree
+{
+ public class FamilyTreeEditor : Editor
+ {
+ public override void Copy ()
+ {
+ throw new System.NotImplementedException ();
+ }
+
+ public override void Delete ()
+ {
+ throw new System.NotImplementedException ();
+ }
+
+ public override void Paste ()
+ {
+ throw new System.NotImplementedException ();
+ }
+
+ private static EditorReference _er = null;
+ public override EditorReference MakeReference ()
+ {
+ if (_er == null) {
+ _er = base.MakeReference ();
+ _er.SupportedObjectModels.Add (typeof (FamilyTreeObjectModel));
+ }
+ return _er;
+ }
+
+ protected override void OnObjectModelChanged (EventArgs e)
+ {
+ base.OnObjectModelChanged (e);
+
+ FamilyTreeObjectModel ftom = (ObjectModel as FamilyTreeObjectModel);
+ }
+ }
+}
diff --git a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Properties/AssemblyInfo.cs b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..7ac95eb6
--- /dev/null
+++ b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Properties/AssemblyInfo.cs
@@ -0,0 +1,26 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle ("UniversalEditor.Plugins.FamilyTreeMaker.UserInterface")]
+[assembly: AssemblyDescription ("")]
+[assembly: AssemblyConfiguration ("")]
+[assembly: AssemblyCompany ("")]
+[assembly: AssemblyProduct ("")]
+[assembly: AssemblyCopyright ("Mike Becker")]
+[assembly: AssemblyTrademark ("")]
+[assembly: AssemblyCulture ("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion ("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
diff --git a/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface.csproj b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface.csproj
new file mode 100644
index 00000000..78c4b127
--- /dev/null
+++ b/CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface.csproj
@@ -0,0 +1,67 @@
+
+
+
+ Debug
+ AnyCPU
+ {E6C8A539-F219-4BD0-A2F4-E7064ABF6777}
+ Library
+ UniversalEditor.Plugins.FamilyTreeMaker.UserInterface
+ UniversalEditor.Plugins.FamilyTreeMaker.UserInterface
+ v4.7
+
+
+ true
+ full
+ false
+ ..\..\Output\Debug\Plugins
+ DEBUG;
+ prompt
+ 4
+ false
+
+
+ true
+ ..\..\Output\Release\Plugins
+ prompt
+ 4
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {2D4737E6-6D95-408A-90DB-8DFF38147E85}
+ UniversalEditor.Core
+
+
+ {30467E5C-05BC-4856-AADC-13906EF4CADD}
+ UniversalEditor.Essential
+
+
+ {74A835FD-93B8-4268-B120-1ACAA128AC7B}
+ UniversalEditor.Plugins.FamilyTreeMaker
+
+
+ {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}
+ UniversalEditor.Plugins.FileSystem
+
+
+ {8622EBC4-8E20-476E-B284-33D472081F5C}
+ UniversalEditor.UserInterface
+
+
+ {29E1C1BB-3EA5-4062-B62F-85EEC703FE07}
+ UniversalWidgetToolkit
+
+
+
+
\ No newline at end of file
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/DataFormats/FamilyTreeMaker/Windows/FTWDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/DataFormats/FamilyTreeMaker/Windows/FTWDataFormat.cs
new file mode 100644
index 00000000..9de0310b
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/DataFormats/FamilyTreeMaker/Windows/FTWDataFormat.cs
@@ -0,0 +1,27 @@
+using System.Collections.Generic;
+using UniversalEditor.DataFormats.FileSystem.Microsoft.CompoundDocument;
+using UniversalEditor.ObjectModels.FamilyTree;
+using UniversalEditor.ObjectModels.FileSystem;
+
+namespace UniversalEditor.DataFormats.FamilyTreeMaker.Windows
+{
+ public class FTWDataFormat : CompoundDocumentDataFormat
+ {
+ protected override void BeforeLoadInternal (Stack objectModels)
+ {
+ base.BeforeLoadInternal (objectModels);
+ objectModels.Push (new FileSystemObjectModel ());
+ }
+ protected override void AfterLoadInternal (Stack objectModels)
+ {
+ base.AfterLoadInternal (objectModels);
+
+ FileSystemObjectModel fsom = (objectModels.Pop () as FileSystemObjectModel);
+ FamilyTreeObjectModel ft = (objectModels.Pop () as FamilyTreeObjectModel);
+ }
+ protected override void BeforeSaveInternal (Stack objectModels)
+ {
+ base.BeforeSaveInternal (objectModels);
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/ObjectModels/FamilyTree/FamilyTreeObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/ObjectModels/FamilyTree/FamilyTreeObjectModel.cs
new file mode 100644
index 00000000..8a829190
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/ObjectModels/FamilyTree/FamilyTreeObjectModel.cs
@@ -0,0 +1,25 @@
+namespace UniversalEditor.ObjectModels.FamilyTree
+{
+ public class FamilyTreeObjectModel : ObjectModel
+ {
+ public override void Clear ()
+ {
+ throw new System.NotImplementedException ();
+ }
+
+ public override void CopyTo (ObjectModel where)
+ {
+ throw new System.NotImplementedException ();
+ }
+
+ private static ObjectModelReference _omr = null;
+ protected override ObjectModelReference MakeReferenceInternal ()
+ {
+ if (_omr == null) {
+ _omr = base.MakeReferenceInternal ();
+ _omr.Title = "Family Tree";
+ }
+ return _omr;
+ }
+ }
+}
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/Properties/AssemblyInfo.cs b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..b20f655b
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/Properties/AssemblyInfo.cs
@@ -0,0 +1,26 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle ("UniversalEditor.Plugins.FamilyTreeMaker")]
+[assembly: AssemblyDescription ("")]
+[assembly: AssemblyConfiguration ("")]
+[assembly: AssemblyCompany ("")]
+[assembly: AssemblyProduct ("")]
+[assembly: AssemblyCopyright ("Mike Becker")]
+[assembly: AssemblyTrademark ("")]
+[assembly: AssemblyCulture ("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion ("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
diff --git a/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/UniversalEditor.Plugins.FamilyTreeMaker.csproj b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/UniversalEditor.Plugins.FamilyTreeMaker.csproj
new file mode 100644
index 00000000..4aed4d84
--- /dev/null
+++ b/CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/UniversalEditor.Plugins.FamilyTreeMaker.csproj
@@ -0,0 +1,67 @@
+
+
+
+ Debug
+ AnyCPU
+ {74A835FD-93B8-4268-B120-1ACAA128AC7B}
+ Library
+ UniversalEditor.Plugins.FamilyTreeMaker
+ UniversalEditor.Plugins.FamilyTreeMaker
+ v4.7
+
+
+ true
+ full
+ false
+ ..\..\Output\Debug\Plugins
+ DEBUG;
+ prompt
+ 4
+ false
+
+
+ true
+ ..\..\Output\Release\Plugins
+ prompt
+ 4
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {2D4737E6-6D95-408A-90DB-8DFF38147E85}
+ UniversalEditor.Core
+
+
+ {30467E5C-05BC-4856-AADC-13906EF4CADD}
+ UniversalEditor.Essential
+
+
+ {4698BC3F-EC29-42EB-9AED-3D8F9983A108}
+ UniversalEditor.Plugins.Microsoft
+
+
+ {3F664673-7E22-4486-9AD0-FC81861D0B78}
+ UniversalEditor.Compression
+
+
+ {76FD1306-9CA4-428F-993B-B7E4EEEACBF3}
+ UniversalEditor.Plugins.FileSystem
+
+
+
+
\ No newline at end of file
diff --git a/CSharp/UniversalEditor.sln b/CSharp/UniversalEditor.sln
index 84dac4e4..4931b3f0 100644
--- a/CSharp/UniversalEditor.sln
+++ b/CSharp/UniversalEditor.sln
@@ -129,6 +129,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Add
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalWidgetToolkit.Engines.WindowsForms", "..\..\UniversalWidgetToolkit\Engines\WindowsForms\UniversalWidgetToolkit.Engines.WindowsForms\UniversalWidgetToolkit.Engines.WindowsForms.csproj", "{B8573BB1-A0CD-41F4-A775-E0CB79555C59}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.FamilyTreeMaker", "Plugins\UniversalEditor.Plugins.FamilyTreeMaker\UniversalEditor.Plugins.FamilyTreeMaker.csproj", "{74A835FD-93B8-4268-B120-1ACAA128AC7B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.FamilyTreeMaker.UserInterface", "Plugins.UserInterface\UniversalEditor.Plugins.FamilyTreeMaker.UserInterface\UniversalEditor.Plugins.FamilyTreeMaker.UserInterface.csproj", "{E6C8A539-F219-4BD0-A2F4-E7064ABF6777}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -373,6 +377,14 @@ Global
{B8573BB1-A0CD-41F4-A775-E0CB79555C59}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8573BB1-A0CD-41F4-A775-E0CB79555C59}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B8573BB1-A0CD-41F4-A775-E0CB79555C59}.Release|Any CPU.Build.0 = Release|Any CPU
+ {74A835FD-93B8-4268-B120-1ACAA128AC7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {74A835FD-93B8-4268-B120-1ACAA128AC7B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {74A835FD-93B8-4268-B120-1ACAA128AC7B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {74A835FD-93B8-4268-B120-1ACAA128AC7B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E6C8A539-F219-4BD0-A2F4-E7064ABF6777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E6C8A539-F219-4BD0-A2F4-E7064ABF6777}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E6C8A539-F219-4BD0-A2F4-E7064ABF6777}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E6C8A539-F219-4BD0-A2F4-E7064ABF6777}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{6F0AB1AF-E1A1-4D19-B19C-05BBB15C94B2} = {05D15661-E684-4EC9-8FBD-C014BA433CC5}
@@ -433,6 +445,8 @@ Global
{5CC1FF25-44BF-4CD1-BD36-11E29EB21D19} = {7B535D74-5496-4802-B809-89ED88274A91}
{E94B6C34-660F-4280-AEEC-D28AC6A3F528} = {7B535D74-5496-4802-B809-89ED88274A91}
{B8573BB1-A0CD-41F4-A775-E0CB79555C59} = {20F315E0-52AE-479F-AF43-3402482C1FC8}
+ {74A835FD-93B8-4268-B120-1ACAA128AC7B} = {2ED32D16-6C06-4450-909A-40D32DA67FB4}
+ {E6C8A539-F219-4BD0-A2F4-E7064ABF6777} = {2ED32D16-6C06-4450-909A-40D32DA67FB4}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0