From 7c4044c62ccc89f74c74e5d10bdc54876bac7a1e Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Fri, 16 Aug 2019 00:01:33 -0400 Subject: [PATCH] Start to look into parsing Family Tree Maker for Windows (FTW) file format --- .../FamilyTreeMaker/Associations/FTW.uexml | 25 +++++++ ...lEditor.Content.PlatformIndependent.csproj | 3 + .../Editors/FamilyTree/FamilyTreeEditor.cs | 41 ++++++++++++ .../Properties/AssemblyInfo.cs | 26 +++++++ ...ugins.FamilyTreeMaker.UserInterface.csproj | 67 +++++++++++++++++++ .../FamilyTreeMaker/Windows/FTWDataFormat.cs | 27 ++++++++ .../FamilyTree/FamilyTreeObjectModel.cs | 25 +++++++ .../Properties/AssemblyInfo.cs | 26 +++++++ ...ersalEditor.Plugins.FamilyTreeMaker.csproj | 67 +++++++++++++++++++ CSharp/UniversalEditor.sln | 14 ++++ 10 files changed, 321 insertions(+) create mode 100644 CSharp/Content/UniversalEditor.Content.PlatformIndependent/Extensions/FamilyTreeMaker/Associations/FTW.uexml create mode 100644 CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Editors/FamilyTree/FamilyTreeEditor.cs create mode 100644 CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/Properties/AssemblyInfo.cs create mode 100644 CSharp/Plugins.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface/UniversalEditor.Plugins.FamilyTreeMaker.UserInterface.csproj create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/DataFormats/FamilyTreeMaker/Windows/FTWDataFormat.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/ObjectModels/FamilyTree/FamilyTreeObjectModel.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/Properties/AssemblyInfo.cs create mode 100644 CSharp/Plugins/UniversalEditor.Plugins.FamilyTreeMaker/UniversalEditor.Plugins.FamilyTreeMaker.csproj 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