diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Templates/Document/FileSystem/WindowsFileSystem.uexml b/Content/UniversalEditor.Content.PlatformIndependent/Templates/Document/FileSystem/WindowsFileSystem.uexml
index b9d1c0b3..b49743ea 100644
--- a/Content/UniversalEditor.Content.PlatformIndependent/Templates/Document/FileSystem/WindowsFileSystem.uexml
+++ b/Content/UniversalEditor.Content.PlatformIndependent/Templates/Document/FileSystem/WindowsFileSystem.uexml
@@ -6,6 +6,10 @@
Windows filesystem
Creates a standard Windows NT file structure.
+
+ General
+ File system/archive
+
diff --git a/Libraries/UniversalEditor.Essential/DataFormats/UEPackage/UEPackageXMLDataFormat.cs b/Libraries/UniversalEditor.Essential/DataFormats/UEPackage/UEPackageXMLDataFormat.cs
index acfb15c4..1b232f83 100644
--- a/Libraries/UniversalEditor.Essential/DataFormats/UEPackage/UEPackageXMLDataFormat.cs
+++ b/Libraries/UniversalEditor.Essential/DataFormats/UEPackage/UEPackageXMLDataFormat.cs
@@ -655,6 +655,24 @@ namespace UniversalEditor.DataFormats.UEPackage
{
template.ObjectModelReference = new ObjectModelReference(tagContent.Attributes["ObjectModelType"].Value);
}
+
+ if (tagContent.Attributes["FileName"] != null)
+ {
+ // TODO: load the specified file as the given ObjectModel type
+ }
+ else
+ {
+ if (template.ObjectModelReference.Type != null)
+ {
+ System.Reflection.ParameterModifier pmodType = new System.Reflection.ParameterModifier();
+ System.Reflection.MethodInfo miFromMarkup = template.ObjectModelReference.Type.GetMethod("FromMarkup", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static, null, new Type[] { typeof(MarkupTagElement) }, new System.Reflection.ParameterModifier[] { pmodType });
+ if (miFromMarkup != null)
+ {
+ ObjectModel om = (miFromMarkup.Invoke(null, new object[] { tagContent }) as ObjectModel);
+ template.ObjectModel = om;
+ }
+ }
+ }
template.TemplateContent.Elements.Add(tagContent);
}
}
diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/Database/DatabaseObjectModel.cs b/Libraries/UniversalEditor.Essential/ObjectModels/Database/DatabaseObjectModel.cs
index 2b543f26..edab65e2 100644
--- a/Libraries/UniversalEditor.Essential/ObjectModels/Database/DatabaseObjectModel.cs
+++ b/Libraries/UniversalEditor.Essential/ObjectModels/Database/DatabaseObjectModel.cs
@@ -19,6 +19,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+using UniversalEditor.ObjectModels.Markup;
+
namespace UniversalEditor.ObjectModels.Database
{
///
@@ -37,6 +39,7 @@ namespace UniversalEditor.ObjectModels.Database
return _omr;
}
+ public string Name { get; set; } = null;
public DatabaseTable.DatabaseTableCollection Tables { get; } = new DatabaseTable.DatabaseTableCollection();
public override void Clear()
@@ -54,5 +57,32 @@ namespace UniversalEditor.ObjectModels.Database
clone.Tables.Add(Tables[i].Clone() as DatabaseTable);
}
}
+
+ public static DatabaseObjectModel FromMarkup(MarkupTagElement tag)
+ {
+ DatabaseObjectModel db = new DatabaseObjectModel();
+ for (int i = 0; i < tag.Elements.Count; i++)
+ {
+ MarkupTagElement tag2 = (tag.Elements[i] as MarkupTagElement);
+ if (tag2 == null) continue;
+ if (tag2.FullName == "Tables")
+ {
+ foreach (MarkupElement elTable in tag2.Elements )
+ {
+ MarkupTagElement tagTable = (elTable as MarkupTagElement);
+ if (tagTable == null) continue;
+ if (tagTable.FullName != "Table") continue;
+
+ MarkupAttribute attName = tag2.Attributes["Name"];
+ if (attName == null) continue;
+
+ DatabaseTable dt = new DatabaseTable();
+ dt.Name = attName.Value;
+ db.Tables.Add(dt);
+ }
+ }
+ }
+ return db;
+ }
}
}
diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSystemObjectModel.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSystemObjectModel.cs
index 45ba5429..9b534da8 100644
--- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSystemObjectModel.cs
+++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSystemObjectModel.cs
@@ -23,6 +23,7 @@ using System;
using System.Collections.Generic;
using MBS.Framework.Logic.Conditional;
using UniversalEditor.Accessors;
+using UniversalEditor.ObjectModels.Markup;
namespace UniversalEditor.ObjectModels.FileSystem
{
@@ -533,5 +534,55 @@ namespace UniversalEditor.ObjectModels.FileSystem
}
return _CriteriaObjects;
}
+
+ public static ObjectModel FromMarkup(MarkupTagElement tagContent)
+ {
+ FileSystemObjectModel fsom = new FileSystemObjectModel();
+ InitFileSystemFromMarkup(fsom, tagContent);
+ return fsom;
+ }
+
+ private static void InitFileSystemFromMarkup(IFileSystemContainer fsom, MarkupTagElement tagContent)
+ {
+ MarkupTagElement tagFolders = tagContent.Elements["Folders"] as MarkupTagElement;
+ MarkupTagElement tagFiles = tagContent.Elements["Files"] as MarkupTagElement;
+ if (tagFolders != null)
+ {
+ for (int i = 0; i < tagFolders.Elements.Count; i++)
+ {
+ MarkupTagElement tagFolder = (tagFolders.Elements[i] as MarkupTagElement);
+ if (tagFolder == null) continue;
+ if (tagFolder.FullName != "Folder") continue;
+
+ MarkupAttribute attName = tagFolder.Attributes["Name"];
+
+ Folder item = new Folder();
+ if (attName != null)
+ {
+ item.Name = attName.Value;
+ }
+ InitFileSystemFromMarkup(item, tagFolder);
+ fsom.Folders.Add(item);
+ }
+ }
+ if (tagFiles != null)
+ {
+ for (int i = 0; i < tagFiles.Elements.Count; i++)
+ {
+ MarkupTagElement tagFile = (tagFiles.Elements[i] as MarkupTagElement);
+ if (tagFile == null) continue;
+ if (tagFile.FullName != "File") continue;
+
+ MarkupAttribute attName = tagFile.Attributes["Name"];
+
+ File item = new File();
+ if (attName != null)
+ {
+ item.Name = attName.Value;
+ }
+ fsom.Files.Add(item);
+ }
+ }
+ }
}
}
diff --git a/Libraries/UniversalEditor.Essential/Template.cs b/Libraries/UniversalEditor.Essential/Template.cs
index 7f5c134a..ce407669 100644
--- a/Libraries/UniversalEditor.Essential/Template.cs
+++ b/Libraries/UniversalEditor.Essential/Template.cs
@@ -116,6 +116,7 @@ namespace UniversalEditor
if (mvarObjectModel == null) Create();
return mvarObjectModel;
}
+ set { mvarObjectModel = value; }
}
private ObjectModelReference mvarObjectModelReference = null;
diff --git a/Libraries/UniversalEditor.UserInterface/MainWindow.cs b/Libraries/UniversalEditor.UserInterface/MainWindow.cs
index f60c19c4..86dc3eb6 100644
--- a/Libraries/UniversalEditor.UserInterface/MainWindow.cs
+++ b/Libraries/UniversalEditor.UserInterface/MainWindow.cs
@@ -314,6 +314,10 @@ namespace UniversalEditor.UserInterface
return null;
}
+ if (template.ObjectModel != null)
+ {
+ template.ObjectModel.CopyTo(objm);
+ }
page.Document = new Document(objm, null, null);
page.Document.Title = String.Format(filename, iUntitledDocCount);