Rename FamilyTreeMaker plugin to the more-generic Genealogy plugin

This commit is contained in:
Michael Becker 2019-08-30 00:38:18 -04:00
parent 086e8e6088
commit b7bc270a4e
17 changed files with 414 additions and 56 deletions

View File

@ -4,10 +4,14 @@ using System.Text;
using UniversalEditor.Accessors;
using UniversalEditor.DataFormats.Markup.XML;
using UniversalEditor.DataFormats.Package.OpenPackagingConvention;
using UniversalEditor.DataFormats.Text.Formatted.DOC;
using UniversalEditor.Plugins.Genealogy.ObjectModels.FamilyTree;
using UniversalEditor.ObjectModels.FileSystem;
using UniversalEditor.ObjectModels.Markup;
using UniversalEditor.ObjectModels.Multimedia3D.Model;
using UniversalEditor.ObjectModels.Package;
using UniversalEditor.ObjectModels.Text.Formatted;
using UniversalEditor.Plugins.Genealogy.DataFormats.GEDCOM;
namespace UniversalEditor.TestProject
{
@ -251,6 +255,51 @@ namespace UniversalEditor.TestProject
}
return String.Empty;
}
}
private static void TestCDFDOC()
{
DOCDataFormat doc = new DOCDataFormat();
FormattedTextObjectModel ftom = new FormattedTextObjectModel();
Document.Load(ftom, doc, new FileAccessor("/home/beckermj/Documents/UE Tests/OLE Compound Document/test.doc"));
}
private static void TestCDFFTW()
{
GEDCOMDataFormat ged = new GEDCOMDataFormat();
FamilyTreeObjectModel ftom = new FamilyTreeObjectModel();
/*
FTWDataFormat cdf = new FTWDataFormat();
cdf.LogPath = "/tmp/test.ue/AAFT/AAFT0000";
Document.Load(ftom, cdf, new FileAccessor("/tmp/test.ue/AAFT/AAFT0000.FTW"));
cdf.LogPath = "/tmp/test.ue/AAFT/AAFT0001";
Document.Load(ftom, cdf, new FileAccessor("/tmp/test.ue/AAFT/AAFT0001.FTW"));
cdf.LogPath = "/tmp/test.ue/AAFT/AAFT0002";
Document.Load(ftom, cdf, new FileAccessor("/tmp/test.ue/AAFT/AAFT0002.FTW"));
// Document.Save(ftom, cdf, new FileAccessor("/home/beckermj/Documents/UE Tests/OLE Compound Document/Anthony Azcona Family Tree UE-TEST.ftw", true, true));
*/
Document.Load(ftom, ged, new FileAccessor("/tmp/test.ue/AAFT/AAFT.GED"));
}
private static void TestOPCModel()
{
DateTime start = DateTime.Now;
ModelObjectModel model = new ModelObjectModel();
UniversalEditor.DataFormats.Multimedia3D.Model.PolygonMovieMaker.PMDModelDataFormat pmd = new DataFormats.Multimedia3D.Model.PolygonMovieMaker.PMDModelDataFormat();
Document.Load(model, pmd, new FileAccessor("/home/beckermj/Documents/UE Tests/Open Packaging Convention/Concertroid Model Data OPC (.pmdx)/test.pmdx_source/model/kio_miku_20111121.pmd"));
Document.Save(model, new OPCModelDataFormat(), new FileAccessor("/home/beckermj/Documents/UE Tests/Open Packaging Convention/Concertroid Model Data OPC (.pmdx)/kio_miku.pmdx", true, true));
DateTime end = DateTime.Now;
Console.WriteLine("Took " + (end - start).ToString() + " with buffer size " + MemoryAccessor.DefaultBufferAllocationSize);
}
public static void Main (string [] args)
@ -264,16 +313,8 @@ namespace UniversalEditor.TestProject
Document.Save (om, df, new FileAccessor (fileName, true, true));
*/
DateTime start = DateTime.Now;
ModelObjectModel model = new ModelObjectModel();
UniversalEditor.DataFormats.Multimedia3D.Model.PolygonMovieMaker.PMDModelDataFormat pmd = new DataFormats.Multimedia3D.Model.PolygonMovieMaker.PMDModelDataFormat();
Document.Load(model, pmd, new FileAccessor("/home/beckermj/Documents/UE Tests/Open Packaging Convention/Concertroid Model Data OPC (.pmdx)/test.pmdx_source/model/kio_miku_20111121.pmd"));
Document.Save(model, new OPCModelDataFormat(), new FileAccessor("/home/beckermj/Documents/UE Tests/Open Packaging Convention/Concertroid Model Data OPC (.pmdx)/kio_miku.pmdx", true, true));
DateTime end = DateTime.Now;
Console.WriteLine("Took " + (end - start).ToString() + " with buffer size " + MemoryAccessor.DefaultBufferAllocationSize);
// TestCDFDOC();
TestCDFFTW();
}
}
}

View File

@ -59,6 +59,10 @@
<Project>{4FD9DB1D-76AA-48D1-8446-95376C4A2BC2}</Project>
<Name>UniversalEditor.Plugins.Multimedia3D</Name>
</ProjectReference>
<ProjectReference Include="..\..\Plugins\UniversalEditor.Plugins.Genealogy\UniversalEditor.Plugins.Genealogy.csproj">
<Project>{74A835FD-93B8-4268-B120-1ACAA128AC7B}</Project>
<Name>UniversalEditor.Plugins.Genealogy</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -1,5 +1,5 @@
using System;
using UniversalEditor.ObjectModels.FamilyTree;
using System;
using UniversalEditor.Plugins.Genealogy.ObjectModels.FamilyTree;
using UniversalEditor.UserInterface;
namespace UniversalEditor.Editors.FamilyTree
@ -19,22 +19,22 @@ namespace UniversalEditor.Editors.FamilyTree
public override void Paste ()
{
throw new System.NotImplementedException ();
}
private static EditorReference _er = null;
}
private static EditorReference _er = null;
public override EditorReference MakeReference ()
{
{
if (_er == null) {
_er = base.MakeReference ();
_er = base.MakeReference ();
_er.SupportedObjectModels.Add (typeof (FamilyTreeObjectModel));
}
}
return _er;
}
protected override void OnObjectModelChanged (EventArgs e)
{
base.OnObjectModelChanged (e);
base.OnObjectModelChanged (e);
FamilyTreeObjectModel ftom = (ObjectModel as FamilyTreeObjectModel);
}
}

View File

@ -46,10 +46,6 @@
<Project>{30467E5C-05BC-4856-AADC-13906EF4CADD}</Project>
<Name>UniversalEditor.Essential</Name>
</ProjectReference>
<ProjectReference Include="..\..\Plugins\UniversalEditor.Plugins.FamilyTreeMaker\UniversalEditor.Plugins.FamilyTreeMaker.csproj">
<Project>{74A835FD-93B8-4268-B120-1ACAA128AC7B}</Project>
<Name>UniversalEditor.Plugins.FamilyTreeMaker</Name>
</ProjectReference>
<ProjectReference Include="..\..\Plugins\UniversalEditor.Plugins.FileSystem\UniversalEditor.Plugins.FileSystem.csproj">
<Project>{76FD1306-9CA4-428F-993B-B7E4EEEACBF3}</Project>
<Name>UniversalEditor.Plugins.FileSystem</Name>
@ -62,6 +58,10 @@
<Project>{29E1C1BB-3EA5-4062-B62F-85EEC703FE07}</Project>
<Name>UniversalWidgetToolkit</Name>
</ProjectReference>
<ProjectReference Include="..\..\Plugins\UniversalEditor.Plugins.Genealogy\UniversalEditor.Plugins.Genealogy.csproj">
<Project>{74A835FD-93B8-4268-B120-1ACAA128AC7B}</Project>
<Name>UniversalEditor.Plugins.Genealogy</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>

View File

@ -1,27 +0,0 @@
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<ObjectModel> objectModels)
{
base.BeforeLoadInternal (objectModels);
objectModels.Push (new FileSystemObjectModel ());
}
protected override void AfterLoadInternal (Stack<ObjectModel> objectModels)
{
base.AfterLoadInternal (objectModels);
FileSystemObjectModel fsom = (objectModels.Pop () as FileSystemObjectModel);
FamilyTreeObjectModel ft = (objectModels.Pop () as FamilyTreeObjectModel);
}
protected override void BeforeSaveInternal (Stack<ObjectModel> objectModels)
{
base.BeforeSaveInternal (objectModels);
}
}
}

View File

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using UniversalEditor.DataFormats.FileSystem.Microsoft.CompoundDocument;
using UniversalEditor.Plugins.Genealogy.ObjectModels.FamilyTree;
using UniversalEditor.ObjectModels.FileSystem;
namespace UniversalEditor.Plugins.Genealogy.DataFormats.FamilyTreeMaker.Windows
{
public class FTWDataFormat : CompoundDocumentDataFormat
{
protected override void BeforeLoadInternal (Stack<ObjectModel> objectModels)
{
base.BeforeLoadInternal (objectModels);
objectModels.Push (new FileSystemObjectModel ());
}
protected override void AfterLoadInternal (Stack<ObjectModel> objectModels)
{
base.AfterLoadInternal (objectModels);
FileSystemObjectModel fsom = (objectModels.Pop () as FileSystemObjectModel);
File IND_DB = fsom.Files["IND.DB"];
File INDGROUPS = fsom.Files["QEDIT0.DB"];
INDDBObjectModel objm = IND_DB.GetObjectModel<INDDBObjectModel>(new INDDBDataFormat());
int maxNameLength = 0;
foreach (INDDBRecord item in objm.Items)
{
Console.WriteLine("{0} {1}", item.name.PadRight(40, ' '), item.testdt.ToString());
if (item.name.Length > maxNameLength) maxNameLength = item.name.Length;
}
Console.WriteLine();
INDGROUPSObjectModel objm1 = INDGROUPS.GetObjectModel<INDGROUPSObjectModel>(new INDGROUPSDataFormat());
foreach (INDGROUPSRecord rec in objm1.Items)
{
Console.WriteLine("{0}", rec.name);
}
FamilyTreeObjectModel ft = (objectModels.Pop () as FamilyTreeObjectModel);
}
protected override void BeforeSaveInternal (Stack<ObjectModel> objectModels)
{
FamilyTreeObjectModel ft = (objectModels.Pop() as FamilyTreeObjectModel);
FileSystemObjectModel fsom = new FileSystemObjectModel();
objectModels.Push(fsom);
base.BeforeSaveInternal (objectModels);
}
}
}

View File

@ -0,0 +1,87 @@
using System;
using UniversalEditor.IO;
namespace UniversalEditor.Plugins.Genealogy.DataFormats.FamilyTreeMaker.Windows
{
internal struct INDDBRecord
{
public string name;
public DateTime testdt;
public INDDBRecord(string name, DateTime testdt)
{
this.name = name;
this.testdt = testdt;
}
}
internal class INDDBObjectModel : ObjectModel
{
public System.Collections.Generic.List<INDDBRecord> Items { get; } = new System.Collections.Generic.List<INDDBRecord>();
public override void Clear()
{
}
public override void CopyTo(ObjectModel where)
{
}
}
internal class INDDBDataFormat : DataFormat
{
private static DataFormatReference _dfr = null;
protected override DataFormatReference MakeReferenceInternal()
{
if (_dfr == null)
{
_dfr = base.MakeReferenceInternal();
_dfr.Capabilities.Add(typeof(INDDBObjectModel), DataFormatCapabilities.All);
}
return _dfr;
}
protected override void LoadInternal(ref ObjectModel objectModel)
{
INDDBObjectModel objm = (objectModel as INDDBObjectModel);
Reader r = base.Accessor.Reader;
byte[] junk = r.ReadBytes(128); // is this short sector garbage?
long unk1 = r.ReadInt64(); // bluh
int test = r.ReadInt32();
byte[] xx = r.ReadBytes(64);
for (int i = 0; i < 133; i++)
{
// each record is 128 bytes long
long recordStart = r.Accessor.Position;
ushort u0 = r.ReadUInt16();
ushort u1 = r.ReadUInt16();
ushort u2 = r.ReadUInt16();
ushort u3 = r.ReadUInt16();
ushort u4 = r.ReadUInt16();
string name = r.ReadFixedLengthString(40, Encoding.UTF16LittleEndian); // r.ReadFixedLengthString(40, Encoding.UTF16LittleEndian);
name = name.TrimNull();
ushort unknown = r.ReadUInt16();
long dt = r.ReadInt64();
DateTime testdt = new DateTime(dt);
long recordEnd = r.Accessor.Position;
long posNext = recordEnd - recordStart;
r.Accessor.Seek(128 - posNext, SeekOrigin.Current);
// 132 names in file
objm.Items.Add(new INDDBRecord(name, testdt));
}
}
protected override void SaveInternal(ObjectModel objectModel)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using UniversalEditor.IO;
namespace UniversalEditor.Plugins.Genealogy.DataFormats.FamilyTreeMaker.Windows
{
internal struct INDGROUPSRecord
{
public string name;
public INDGROUPSRecord(string name)
{
this.name = name;
}
}
internal class INDGROUPSObjectModel : ObjectModel
{
public List<INDGROUPSRecord> Items { get; } = new List<INDGROUPSRecord>();
public override void Clear()
{
Items.Clear();
}
public override void CopyTo(ObjectModel where)
{
}
}
internal class INDGROUPSDataFormat : DataFormat
{
protected override void LoadInternal(ref ObjectModel objectModel)
{
INDGROUPSObjectModel om = (objectModel as INDGROUPSObjectModel);
Reader r = base.Accessor.Reader;
r.Seek(114, SeekOrigin.Begin);
int count = r.ReadInt32();
for (int i = 0; i < count; i++)
{
string v = r.ReadNullTerminatedString(Encoding.UTF16LittleEndian);
byte nul = r.ReadByte();
v = v.TrimNull();
if (String.IsNullOrEmpty(v))
break;
om.Items.Add(new INDGROUPSRecord(v));
}
}
protected override void SaveInternal(ObjectModel objectModel)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,64 @@
using System;
using UniversalEditor.IO;
using UniversalEditor.ObjectModels.Chunked;
using UniversalEditor.Plugins.Genealogy.ObjectModels.GEDCOM;
namespace UniversalEditor.Plugins.Genealogy.DataFormats.GEDCOM
{
public class GEDCOMChunkedDataFormat : DataFormat
{
protected override void LoadInternal(ref ObjectModel objectModel)
{
GEDCOMChunkedObjectModel chunked = (objectModel as GEDCOMChunkedObjectModel);
Reader r = base.Accessor.Reader;
int lineIndex = 0; // for debugging porpoises
int lastLineID = 0;
string lastLineName = null;
string lastLineParm = null;
GEDCOMChunk lastChunk = null;
while (!r.EndOfStream)
{
lineIndex++;
string line = r.ReadLine();
line = line.Trim();
string[] lineParts = line.Split(new char[] { ' ' }, 3);
int lineID = 0;
if (!Int32.TryParse(lineParts[0], out lineID))
{
throw new InvalidDataFormatException("line " + lineIndex + ", part '" + lineParts[0] + "' invalid ; must be integer");
}
if (lineParts.Length < 2)
throw new InvalidDataFormatException("line " + lineIndex + ", content '" + line + "' must have at least 2 parts");
if (lastLineID < lineID)
{
// create a group for the existing node
GEDCOMChunk chunk = new GEDCOMChunk();
chunk.Name = lastLineName;
// chunk
chunked.Chunks.Add(chunk);
lastChunk = chunk;
}
lastLineID = lineID;
lastLineName = lineParts[1];
if (lineParts.Length > 2)
lastLineParm = lineParts[2];
}
}
protected override void SaveInternal(ObjectModel objectModel)
{
throw new NotImplementedException();
}
}
}

View File

@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using UniversalEditor.IO;
using UniversalEditor.ObjectModels.Chunked;
using UniversalEditor.Plugins.Genealogy.ObjectModels.FamilyTree;
namespace UniversalEditor.Plugins.Genealogy.DataFormats.GEDCOM
{
public class GEDCOMDataFormat : GEDCOMChunkedDataFormat
{
private static DataFormatReference _dfr = null;
protected override DataFormatReference MakeReferenceInternal()
{
if (_dfr == null)
{
_dfr = base.MakeReferenceInternal();
_dfr.Capabilities.Add(typeof(FamilyTreeObjectModel), DataFormatCapabilities.All);
}
return _dfr;
}
protected override void BeforeLoadInternal(Stack<ObjectModel> objectModels)
{
base.BeforeLoadInternal(objectModels);
objectModels.Push(new ChunkedObjectModel());
}
protected override void AfterLoadInternal(Stack<ObjectModel> objectModels)
{
base.AfterLoadInternal(objectModels);
ChunkedObjectModel chunked = (objectModels.Pop() as ChunkedObjectModel);
FamilyTreeObjectModel ftom = (objectModels.Pop() as FamilyTreeObjectModel);
}
protected override void SaveInternal(ObjectModel objectModel)
{
FamilyTreeObjectModel ftom = (objectModel as FamilyTreeObjectModel);
}
}
}

View File

@ -1,15 +1,13 @@
namespace UniversalEditor.ObjectModels.FamilyTree
namespace UniversalEditor.Plugins.Genealogy.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;

View File

@ -0,0 +1,17 @@
using System;
namespace UniversalEditor.Plugins.Genealogy.ObjectModels.GEDCOM
{
public class GEDCOMChunk
{
public class GEDCOMChunkCollection
: System.Collections.ObjectModel.Collection<GEDCOMChunk>
{
}
public int Index { get; set; } = 0;
public string Name { get; set; } = null;
public string Value { get; set; } = null;
public GEDCOMChunk.GEDCOMChunkCollection Chunks { get; } = new GEDCOMChunk.GEDCOMChunkCollection();
}
}

View File

@ -0,0 +1,16 @@
using System;
namespace UniversalEditor.Plugins.Genealogy.ObjectModels.GEDCOM
{
public class GEDCOMChunkedObjectModel : ObjectModel
{
public GEDCOMChunk.GEDCOMChunkCollection Chunks { get; } = new GEDCOMChunk.GEDCOMChunkCollection();
public override void Clear()
{
}
public override void CopyTo(ObjectModel where)
{
}
}
}

View File

@ -33,6 +33,12 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DataFormats\FamilyTreeMaker\Windows\FTWDataFormat.cs" />
<Compile Include="ObjectModels\FamilyTree\FamilyTreeObjectModel.cs" />
<Compile Include="DataFormats\FamilyTreeMaker\Windows\INDDBDataFormat.cs" />
<Compile Include="DataFormats\FamilyTreeMaker\Windows\INDGROUPSDataFormat.cs" />
<Compile Include="DataFormats\GEDCOM\GEDCOMDataFormat.cs" />
<Compile Include="DataFormats\GEDCOM\GEDCOMChunkedDataFormat.cs" />
<Compile Include="ObjectModels\GEDCOM\GEDCOMChunkedObjectModel.cs" />
<Compile Include="ObjectModels\GEDCOM\GEDCOMChunk.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="DataFormats\" />
@ -40,6 +46,8 @@
<Folder Include="DataFormats\FamilyTreeMaker\Windows\" />
<Folder Include="ObjectModels\" />
<Folder Include="ObjectModels\FamilyTree\" />
<Folder Include="DataFormats\GEDCOM\" />
<Folder Include="ObjectModels\GEDCOM\" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Libraries\UniversalEditor.Core\UniversalEditor.Core.csproj">

View File

@ -129,9 +129,9 @@ 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}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Genealogy", "Plugins\UniversalEditor.Plugins.Genealogy\UniversalEditor.Plugins.Genealogy.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}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Plugins.Genealogy.UserInterface", "Plugins.UserInterface\UniversalEditor.Plugins.Genealogy.UserInterface\UniversalEditor.Plugins.Genealogy.UserInterface.csproj", "{E6C8A539-F219-4BD0-A2F4-E7064ABF6777}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.TestProject", "Applications\UniversalEditor.TestProject\UniversalEditor.TestProject.csproj", "{242A32D8-9A3A-4FE3-902B-AB9C3154723A}"
EndProject