diff --git a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.Designer.cs b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.Designer.cs
index 4b00e376..3b9df3e7 100644
--- a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.Designer.cs
+++ b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.Designer.cs
@@ -62,6 +62,7 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripSeparator();
this.mnuContextProperties = new System.Windows.Forms.ToolStripMenuItem();
this.imlSmallIcons = new System.Windows.Forms.ImageList(this.components);
+ this.mnuContextAddSep2 = new System.Windows.Forms.ToolStripSeparator();
this.cbToolBar1.SuspendLayout();
this.mnuContext.SuspendLayout();
this.SuspendLayout();
@@ -272,7 +273,8 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
this.toolStripMenuItem3,
this.mnuContextProperties});
this.mnuContext.Name = "cbContextMenu1";
- this.mnuContext.Size = new System.Drawing.Size(194, 148);
+ this.mnuContext.Size = new System.Drawing.Size(194, 170);
+ this.mnuContext.Opening += new System.ComponentModel.CancelEventHandler(this.mnuContext_Opening);
//
// mnuContextAdd
//
@@ -280,6 +282,7 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
this.mnuContextAddNewItem,
this.mnuContextAddExistingItem,
this.mnuContextAddSep1,
+ this.mnuContextAddSep2,
this.mnuContextAddNewFolder});
this.mnuContextAdd.Name = "mnuContextAdd";
this.mnuContextAdd.Size = new System.Drawing.Size(193, 22);
@@ -288,24 +291,24 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
// mnuContextAddNewItem
//
this.mnuContextAddNewItem.Name = "mnuContextAddNewItem";
- this.mnuContextAddNewItem.Size = new System.Drawing.Size(150, 22);
+ this.mnuContextAddNewItem.Size = new System.Drawing.Size(152, 22);
this.mnuContextAddNewItem.Text = "Ne&w Item...";
//
// mnuContextAddExistingItem
//
this.mnuContextAddExistingItem.Name = "mnuContextAddExistingItem";
- this.mnuContextAddExistingItem.Size = new System.Drawing.Size(150, 22);
+ this.mnuContextAddExistingItem.Size = new System.Drawing.Size(152, 22);
this.mnuContextAddExistingItem.Text = "Existin&g Item...";
//
// mnuContextAddSep1
//
this.mnuContextAddSep1.Name = "mnuContextAddSep1";
- this.mnuContextAddSep1.Size = new System.Drawing.Size(147, 6);
+ this.mnuContextAddSep1.Size = new System.Drawing.Size(149, 6);
//
// mnuContextAddNewFolder
//
this.mnuContextAddNewFolder.Name = "mnuContextAddNewFolder";
- this.mnuContextAddNewFolder.Size = new System.Drawing.Size(150, 22);
+ this.mnuContextAddNewFolder.Size = new System.Drawing.Size(152, 22);
this.mnuContextAddNewFolder.Text = "New Fol&der";
//
// mnuContextSep1
@@ -359,6 +362,11 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
this.imlSmallIcons.ImageSize = new System.Drawing.Size(16, 16);
this.imlSmallIcons.TransparentColor = System.Drawing.Color.Transparent;
//
+ // mnuContextAddSep2
+ //
+ this.mnuContextAddSep2.Name = "mnuContextAddSep2";
+ this.mnuContextAddSep2.Size = new System.Drawing.Size(149, 6);
+ //
// SolutionExplorer
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -409,5 +417,6 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
private System.Windows.Forms.ToolStripSeparator toolStripMenuItem3;
private System.Windows.Forms.ToolStripMenuItem mnuContextProperties;
private System.Windows.Forms.ImageList imlSmallIcons;
+ private System.Windows.Forms.ToolStripSeparator mnuContextAddSep2;
}
}
diff --git a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.cs b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.cs
index e5e1aaaf..860c0a30 100644
--- a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.cs
+++ b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.cs
@@ -177,23 +177,25 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
private void tv_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
{
- if (e.Label == null) return;
+ string label = e.Label;
+ if (label == null) label = e.Node.Text;
+
if (e.Node.Tag is SolutionObjectModel)
{
SolutionObjectModel sol = (e.Node.Tag as SolutionObjectModel);
- sol.Title = e.Label;
+ sol.Title = label;
e.CancelEdit = true;
- e.Node.Text = "Solution '" + e.Label + "' (" + sol.Projects.Count.ToString() + " project" + (sol.Projects.Count == 1 ? "" : "s") + ")";
+ e.Node.Text = "Solution '" + label + "' (" + sol.Projects.Count.ToString() + " project" + (sol.Projects.Count == 1 ? "" : "s") + ")";
}
else if (e.Node.Tag is Project)
{
Project proj = (e.Node.Tag as Project);
- proj.Title = e.Label;
- e.Node.Text = e.Label;
+ proj.Title = label;
+ e.Node.Text = label;
}
else if (e.Node.Tag is ProjectFile)
{
- if (IsFileNameInvalid(e.Label))
+ if (IsFileNameInvalid(label))
{
MessageBox.Show("Item and file names cannot:\r\n- contain any of the following characters: / ? : & \\ * \" < > | # %\r\n- contain Unicode control characters\r\n- contain surrogate characters\r\n- be system reserved names, including 'CON', 'AUX', 'PRN', 'COM1' or 'LPT2'\r\n- be '.' or '..'\r\n\r\nPlease enter a valid name.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
e.CancelEdit = true;
@@ -201,7 +203,7 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
}
ProjectFile file = (e.Node.Tag as ProjectFile);
- file.DestinationFileName = e.Label;
+ file.DestinationFileName = label;
}
}
@@ -213,5 +215,51 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls
if (tvhti.Node != null) tv.SelectedNode = tvhti.Node;
}
}
+
+ private void mnuContext_Opening(object sender, CancelEventArgs e)
+ {
+ mnuContextAdd.DropDownItems.Clear();
+ mnuContextAdd.DropDownItems.Add(mnuContextAddNewItem);
+ mnuContextAdd.DropDownItems.Add(mnuContextAddExistingItem);
+ mnuContextAdd.DropDownItems.Add(mnuContextAddSep1);
+ mnuContextAdd.DropDownItems.Add(mnuContextAddNewFolder);
+ if (tv.SelectedNode.Tag is SolutionObjectModel)
+ {
+ mnuContextAddNewItem.Text = "Ne&w Project...";
+ mnuContextAddExistingItem.Text = "Existin&g Project...";
+ }
+ else
+ {
+ mnuContextAddNewItem.Text = "Ne&w Item...";
+ mnuContextAddExistingItem.Text = "Existin&g Item...";
+ }
+
+ if (tv.SelectedNode.Tag is Project)
+ {
+ Project proj = (tv.SelectedNode.Tag as Project);
+ if (proj.ProjectType != null)
+ {
+ if (proj.ProjectType.ItemShortcuts.Count > 0)
+ {
+ mnuContextAdd.DropDownItems.Add(mnuContextAddSep2);
+ foreach (ProjectTypeItemShortcut its in proj.ProjectType.ItemShortcuts)
+ {
+ ToolStripMenuItem tsmi = new ToolStripMenuItem();
+ tsmi.Text = its.Title;
+ tsmi.Click += tsmiItemShortcut_Click;
+ tsmi.Tag = its;
+ mnuContextAdd.DropDownItems.Add(tsmi);
+ }
+ }
+ }
+ }
+ }
+ private void tsmiItemShortcut_Click(object sender, EventArgs e)
+ {
+ ToolStripMenuItem tsmi = (sender as ToolStripMenuItem);
+ ProjectTypeItemShortcut its = (tsmi.Tag as ProjectTypeItemShortcut);
+
+ Program.LastWindow.NewFile();
+ }
}
}
diff --git a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.resx b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.resx
index 2d1630ca..ea231746 100644
--- a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.resx
+++ b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Controls/SolutionExplorer.resx
@@ -124,151 +124,151 @@
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
- YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG
- YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9
- 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw
- bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc
- VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9
- c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32
- Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo
- mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
- kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
- TgDQASA1MVpwzwAAAABJRU5ErkJggg==
+ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI
+ ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9
+ HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN
+ rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K
+ TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx
+ oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8
+ 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI
+ xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX
+ LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd
+ KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC
diff --git a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/NewDialog.cs b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/NewDialog.cs
index aff1b60a..614222ec 100644
--- a/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/NewDialog.cs
+++ b/CSharp/Applications/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/NewDialog.cs
@@ -127,7 +127,10 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs
foreach (DocumentTemplate dt in templates)
{
AwesomeControls.ListView.ListViewItem lvi = new AwesomeControls.ListView.ListViewItem();
- lvi.Image = Image.FromFile(dt.LargeIconImageFileName);
+ if (System.IO.File.Exists(dt.LargeIconImageFileName))
+ {
+ lvi.Image = Image.FromFile(dt.LargeIconImageFileName);
+ }
lvi.Text = dt.Title;
lvi.Details.Add(dt.Description);
lvi.Data = dt;
@@ -187,7 +190,14 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs
if (tn == tvProject.SelectedNode)
{
AwesomeControls.ListView.ListViewItem lvi = new AwesomeControls.ListView.ListViewItem();
- lvi.Image = Image.FromFile(dt.LargeIconImageFileName);
+ if (!String.IsNullOrEmpty(dt.LargeIconImageFileName))
+ {
+ lvi.Image = Image.FromFile(dt.LargeIconImageFileName);
+ }
+ else
+ {
+ Console.Error.WriteLine("Large icon image not specified for template \"" + dt.Title + "\"");
+ }
lvi.Text = dt.Title;
lvi.Details.Add(dt.Description);
lvi.Data = dt;
@@ -197,7 +207,14 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs
else
{
AwesomeControls.ListView.ListViewItem lvi = new AwesomeControls.ListView.ListViewItem();
- lvi.Image = Image.FromFile(dt.LargeIconImageFileName);
+ if (!String.IsNullOrEmpty(dt.LargeIconImageFileName))
+ {
+ lvi.Image = Image.FromFile(dt.LargeIconImageFileName);
+ }
+ else
+ {
+ Console.Error.WriteLine("Large icon image not specified for template \"" + dt.Title + "\"");
+ }
lvi.Text = dt.Title;
lvi.Details.Add(dt.Description);
lvi.Data = dt;
diff --git a/CSharp/Libraries/UniversalEditor.Core/ObjectModel.cs b/CSharp/Libraries/UniversalEditor.Core/ObjectModel.cs
index a68f738f..26de504b 100644
--- a/CSharp/Libraries/UniversalEditor.Core/ObjectModel.cs
+++ b/CSharp/Libraries/UniversalEditor.Core/ObjectModel.cs
@@ -214,7 +214,11 @@ namespace UniversalEditor
{
mvarObjectModelType = Type.GetType(mvarObjectModelTypeName);
}
- return (mvarObjectModelType.Assembly.CreateInstance(mvarObjectModelType.FullName) as ObjectModel);
+ if (mvarObjectModelType != null)
+ {
+ return (mvarObjectModelType.Assembly.CreateInstance(mvarObjectModelType.FullName) as ObjectModel);
+ }
+ return null;
}
private string mvarDescription = String.Empty;
diff --git a/CSharp/Plugins/UniversalEditor.Essential/Common/Reflection.cs b/CSharp/Plugins/UniversalEditor.Essential/Common/Reflection.cs
index db512c62..e729263f 100644
--- a/CSharp/Plugins/UniversalEditor.Essential/Common/Reflection.cs
+++ b/CSharp/Plugins/UniversalEditor.Essential/Common/Reflection.cs
@@ -7,6 +7,8 @@ using UniversalEditor.ObjectModels.Markup;
using UniversalEditor.DataFormats.Markup.XML;
using UniversalEditor.ObjectModels.Solution;
using UniversalEditor.Accessors;
+using UniversalEditor.ObjectModels.PropertyList;
+using UniversalEditor.DataFormats.PropertyList.XML;
namespace UniversalEditor.Common
{
@@ -117,16 +119,16 @@ namespace UniversalEditor.Common
listDataFormats.Sort(new Comparison(_DataFormatReferenceComparer));
#endregion
- InitializeFromXML(ref listObjectModels, ref listDataFormats, ref listProjectTypes);
+ InitializeFromXML(ref listObjectModels, ref listDataFormats);
mvarInitialized = true;
-
if (mvarAvailableObjectModels == null) mvarAvailableObjectModels = listObjectModels.ToArray();
if (mvarAvailableDataFormats == null) mvarAvailableDataFormats = listDataFormats.ToArray();
if (mvarAvailableProjectTypes == null) mvarAvailableProjectTypes = listProjectTypes.ToArray();
if (mvarAvailableConverters == null) mvarAvailableConverters = listConverters.ToArray();
- InitializeTemplatesFromXML(ref listDocumentTemplates, ref listProjectTemplates);
+ InitializeProjectTypesFromXML(ref listProjectTypes);
+ InitializeTemplatesFromXML(ref listDocumentTemplates, ref listProjectTemplates, ref listProjectTypes);
if (mvarAvailableDocumentTemplates == null) mvarAvailableDocumentTemplates = listDocumentTemplates.ToArray();
if (mvarAvailableProjectTemplates == null) mvarAvailableProjectTemplates = listProjectTemplates.ToArray();
@@ -145,7 +147,7 @@ namespace UniversalEditor.Common
return dfr2.Priority.CompareTo(dfr1.Priority);
}
- private static void InitializeFromXML(ref List listObjectModels, ref List listDataFormats, ref List listProjectTypes)
+ private static void InitializeFromXML(ref List listObjectModels, ref List listDataFormats)
{
System.Collections.Specialized.StringCollection paths = new System.Collections.Specialized.StringCollection();
paths.Add(System.Environment.CurrentDirectory);
@@ -432,58 +434,6 @@ namespace UniversalEditor.Common
}
}
#endregion
- #region Project Types
- {
- MarkupTagElement tagProjectTypes = (tagUniversalEditor.Elements["ProjectTypes"] as MarkupTagElement);
- if (tagProjectTypes != null)
- {
- foreach (MarkupElement elProjectType in tagProjectTypes.Elements)
- {
- MarkupTagElement tagProjectType = (elProjectType as MarkupTagElement);
- if (tagProjectType == null) continue;
- if (tagProjectType.FullName != "ProjectType") continue;
-
- MarkupAttribute attID = tagProjectType.Attributes["ID"];
- if (attID == null) continue;
-
- ProjectType projtype = new ProjectType();
- projtype.ID = new Guid(attID.Value);
-
- MarkupTagElement tagInformation = (tagProjectType.Elements["Information"] as MarkupTagElement);
- if (tagInformation != null)
- {
- MarkupTagElement tagTitle = (tagInformation.Elements["Title"] as MarkupTagElement);
- if (tagTitle != null) projtype.Title = tagTitle.Value;
- MarkupTagElement tagIconPath = (tagInformation.Elements["IconPath"] as MarkupTagElement);
- if (tagIconPath != null)
- {
- MarkupAttribute attFileName = tagIconPath.Attributes["FileName"];
- if (attFileName != null)
- {
- string FileName = attFileName.Value;
- if (System.IO.File.Exists(FileName)) projtype.LargeIconImageFileName = FileName;
- if (System.IO.File.Exists(FileName)) projtype.SmallIconImageFileName = FileName;
- }
- MarkupAttribute attLargeFileName = tagIconPath.Attributes["LargeFileName"];
- if (attLargeFileName != null)
- {
- string FileName = attLargeFileName.Value;
- if (System.IO.File.Exists(FileName)) projtype.LargeIconImageFileName = FileName;
- }
- MarkupAttribute attSmallFileName = tagIconPath.Attributes["SmallFileName"];
- if (attSmallFileName != null)
- {
- string FileName = attSmallFileName.Value;
- if (System.IO.File.Exists(FileName)) projtype.SmallIconImageFileName = FileName;
- }
- }
- }
-
- listProjectTypes.Add(projtype);
- }
- }
- }
- #endregion
}
}
catch
@@ -491,8 +441,123 @@ namespace UniversalEditor.Common
}
}
}
- #region Template Initialization
- private static void InitializeTemplatesFromXML(ref List listDocumentTemplates, ref List listProjectTemplates)
+
+
+ #region Project Type Initialization
+ private static void InitializeProjectTypesFromXML(ref List listProjectTypes)
+ {
+ System.Collections.Specialized.StringCollection paths = new System.Collections.Specialized.StringCollection();
+ paths.Add(System.Environment.CurrentDirectory);
+
+ foreach (string path in paths)
+ {
+ string[] XMLFileNames = null;
+ try
+ {
+ XMLFileNames = System.IO.Directory.GetFiles(path, "*.xml", System.IO.SearchOption.AllDirectories);
+ foreach (string fileName in XMLFileNames)
+ {
+ string basePath = System.IO.Path.GetDirectoryName(fileName);
+
+ MarkupObjectModel mom = new MarkupObjectModel();
+ XMLDataFormat xdf = new XMLDataFormat();
+ ObjectModel om = mom;
+
+ Document.Load(om, xdf, new FileAccessor(fileName, false, false, false), true);
+
+ MarkupTagElement tagUniversalEditor = (mom.Elements["UniversalEditor"] as MarkupTagElement);
+ if (tagUniversalEditor == null) continue;
+
+ #region Templates
+ {
+ #region Project Types
+ {
+ MarkupTagElement tagProjectTypes = (tagUniversalEditor.Elements["ProjectTypes"] as MarkupTagElement);
+ if (tagProjectTypes != null)
+ {
+ foreach (MarkupElement elProjectType in tagProjectTypes.Elements)
+ {
+ MarkupTagElement tagProjectType = (elProjectType as MarkupTagElement);
+ if (tagProjectType == null) continue;
+ if (tagProjectType.FullName != "ProjectType") continue;
+
+ MarkupAttribute attID = tagProjectType.Attributes["ID"];
+ if (attID == null) continue;
+
+ ProjectType projtype = new ProjectType();
+ projtype.ID = new Guid(attID.Value);
+
+ MarkupTagElement tagInformation = (tagProjectType.Elements["Information"] as MarkupTagElement);
+ if (tagInformation != null)
+ {
+ MarkupTagElement tagTitle = (tagInformation.Elements["Title"] as MarkupTagElement);
+ if (tagTitle != null) projtype.Title = tagTitle.Value;
+ MarkupTagElement tagIconPath = (tagInformation.Elements["IconPath"] as MarkupTagElement);
+ if (tagIconPath != null)
+ {
+ MarkupAttribute attFileName = tagIconPath.Attributes["FileName"];
+ if (attFileName != null)
+ {
+ string FileName = attFileName.Value;
+ if (System.IO.File.Exists(FileName)) projtype.LargeIconImageFileName = FileName;
+ if (System.IO.File.Exists(FileName)) projtype.SmallIconImageFileName = FileName;
+ }
+ MarkupAttribute attLargeFileName = tagIconPath.Attributes["LargeFileName"];
+ if (attLargeFileName != null)
+ {
+ string FileName = attLargeFileName.Value;
+ if (System.IO.File.Exists(FileName)) projtype.LargeIconImageFileName = FileName;
+ }
+ MarkupAttribute attSmallFileName = tagIconPath.Attributes["SmallFileName"];
+ if (attSmallFileName != null)
+ {
+ string FileName = attSmallFileName.Value;
+ if (System.IO.File.Exists(FileName)) projtype.SmallIconImageFileName = FileName;
+ }
+ }
+ }
+ #region ItemShortcuts
+ {
+ MarkupTagElement tagItemShortcuts = (tagProjectType.Elements["ItemShortcuts"] as MarkupTagElement);
+ if (tagItemShortcuts != null)
+ {
+ foreach (MarkupElement el in tagItemShortcuts.Elements)
+ {
+ MarkupTagElement tag = (el as MarkupTagElement);
+ if (tag == null) continue;
+ if (tag.FullName != "ItemShortcut") continue;
+
+ ProjectTypeItemShortcut z = new ProjectTypeItemShortcut();
+ z.Title = tag.Attributes["Title"].Value;
+
+ string objectModelTypeName = tag.Attributes["ObjectModelTypeName"].Value;
+ z.ObjectModelReference = GetObjectModelByTypeName(objectModelTypeName);
+
+ projtype.ItemShortcuts.Add(z);
+ }
+ }
+ }
+ #endregion
+
+ listProjectTypes.Add(projtype);
+ }
+ }
+ #endregion
+ }
+ #endregion
+ }
+ }
+ }
+ catch
+ {
+ }
+ }
+ mvarAvailableProjectTypes = listProjectTypes.ToArray();
+ }
+ #endregion
+
+ #region Template Initialization
+ private static void InitializeTemplatesFromXML(ref List listDocumentTemplates, ref List listProjectTemplates, ref List listProjectTypes)
{
System.Collections.Specialized.StringCollection paths = new System.Collections.Specialized.StringCollection();
paths.Add(System.Environment.CurrentDirectory);
@@ -517,7 +582,7 @@ namespace UniversalEditor.Common
if (tagUniversalEditor == null) continue;
#region Templates
- {
+ {
#region Document Templates
{
MarkupTagElement tagTemplates = (tagUniversalEditor.Elements["DocumentTemplates"] as MarkupTagElement);
@@ -678,116 +743,129 @@ namespace UniversalEditor.Common
if (tagTemplates != null)
{
foreach (MarkupElement elTemplate in tagTemplates.Elements)
- {
- MarkupTagElement tagTemplate = (elTemplate as MarkupTagElement);
- if (tagTemplate == null) continue;
+ {
+ MarkupTagElement tagTemplate = (elTemplate as MarkupTagElement);
+ if (tagTemplate == null) continue;
- if (tagTemplate.FullName != "ProjectTemplate") continue;
+ if (tagTemplate.FullName != "ProjectTemplate") continue;
- ProjectTemplate template = new ProjectTemplate();
+ ProjectTemplate template = new ProjectTemplate();
- MarkupAttribute attTypeID = tagTemplate.Attributes["TypeID"];
- if (attTypeID != null)
- {
- try
- {
- template.ProjectType = GetProjectTypeByTypeID(new Guid(attTypeID.Value));
- }
- catch
- {
- }
- }
+ MarkupAttribute attTypeID = tagTemplate.Attributes["TypeID"];
+ if (attTypeID != null)
+ {
+ try
+ {
+ template.ProjectType = GetProjectTypeByTypeID(new Guid(attTypeID.Value));
+ }
+ catch
+ {
+ }
+ }
- #region Information
- MarkupTagElement tagInformation = (tagTemplate.Elements["Information"] as MarkupTagElement);
- if (tagInformation != null)
- {
- MarkupTagElement tagTitle = (tagInformation.Elements["Title"] as MarkupTagElement);
- if (tagTitle != null) template.Title = tagTitle.Value;
+ #region Information
+ MarkupTagElement tagInformation = (tagTemplate.Elements["Information"] as MarkupTagElement);
+ if (tagInformation != null)
+ {
+ MarkupTagElement tagTitle = (tagInformation.Elements["Title"] as MarkupTagElement);
+ if (tagTitle != null) template.Title = tagTitle.Value;
- MarkupTagElement tagDescription = (tagInformation.Elements["Description"] as MarkupTagElement);
- if (tagDescription != null) template.Description = tagDescription.Value;
+ MarkupTagElement tagDescription = (tagInformation.Elements["Description"] as MarkupTagElement);
+ if (tagDescription != null) template.Description = tagDescription.Value;
- if (tagInformation.Elements["ProjectNamePrefix"] != null)
- {
- template.ProjectNamePrefix = tagInformation.Elements["ProjectNamePrefix"].Value;
- }
+ if (tagInformation.Elements["ProjectNamePrefix"] != null)
+ {
+ template.ProjectNamePrefix = tagInformation.Elements["ProjectNamePrefix"].Value;
+ }
- MarkupTagElement tagPath = (tagInformation.Elements["Path"] as MarkupTagElement);
- if (tagPath != null)
- {
- List pathParts = new List();
- foreach (MarkupElement elPart in tagPath.Elements)
- {
- MarkupTagElement tagPart = (elPart as MarkupTagElement);
- if (tagPart == null) continue;
- if (tagPart.FullName != "Part") continue;
- pathParts.Add(tagPart.Value);
- }
- template.Path = pathParts.ToArray();
- }
+ MarkupTagElement tagPath = (tagInformation.Elements["Path"] as MarkupTagElement);
+ if (tagPath != null)
+ {
+ List pathParts = new List();
+ foreach (MarkupElement elPart in tagPath.Elements)
+ {
+ MarkupTagElement tagPart = (elPart as MarkupTagElement);
+ if (tagPart == null) continue;
+ if (tagPart.FullName != "Part") continue;
+ pathParts.Add(tagPart.Value);
+ }
+ template.Path = pathParts.ToArray();
+ }
- MarkupTagElement tagIconPath = (tagInformation.Elements["IconPath"] as MarkupTagElement);
- if (tagIconPath != null)
- {
- #region All Icons
- {
- MarkupAttribute attFileName = tagIconPath.Attributes["FileName"];
- if (attFileName != null)
- {
- string FileName = attFileName.Value;
- if (System.IO.File.Exists(FileName)) template.LargeIconImageFileName = FileName;
- if (System.IO.File.Exists(FileName)) template.SmallIconImageFileName = FileName;
- }
- }
- #endregion
- #region Large Icon
- {
- MarkupAttribute attLargeFileName = tagIconPath.Attributes["LargeFileName"];
- if (attLargeFileName != null)
- {
- string FileName = attLargeFileName.Value;
- if (System.IO.File.Exists(FileName)) template.LargeIconImageFileName = FileName;
- }
- }
- #endregion
- #region Small Icon
- {
- MarkupAttribute attSmallFileName = tagIconPath.Attributes["SmallFileName"];
- if (attSmallFileName != null)
- {
- string FileName = attSmallFileName.Value;
- if (System.IO.File.Exists(FileName)) template.SmallIconImageFileName = FileName;
- }
- }
- #endregion
- }
- }
- #endregion
- #region FileSystem
- MarkupTagElement tagFileSystem = (tagTemplate.Elements["FileSystem"] as MarkupTagElement);
- if (tagFileSystem != null)
- {
- MarkupTagElement tagFiles = (tagFileSystem.Elements["Files"] as MarkupTagElement);
- if (tagFiles != null)
- {
- foreach (MarkupElement elFile in tagFiles.Elements)
- {
- MarkupTagElement tagFile = (elFile as MarkupTagElement);
- if (tagFile == null) continue;
- if (tagFile.FullName != "File") continue;
+ MarkupTagElement tagIconPath = (tagInformation.Elements["IconPath"] as MarkupTagElement);
+ if (tagIconPath != null)
+ {
+ #region All Icons
+ {
+ MarkupAttribute attFileName = tagIconPath.Attributes["FileName"];
+ if (attFileName != null)
+ {
+ string FileName = attFileName.Value;
+ if (System.IO.File.Exists(FileName)) template.LargeIconImageFileName = FileName;
+ if (System.IO.File.Exists(FileName)) template.SmallIconImageFileName = FileName;
+ }
+ }
+ #endregion
+ #region Large Icon
+ {
+ MarkupAttribute attLargeFileName = tagIconPath.Attributes["LargeFileName"];
+ if (attLargeFileName != null)
+ {
+ string FileName = attLargeFileName.Value;
+ if (System.IO.File.Exists(FileName)) template.LargeIconImageFileName = FileName;
+ }
+ }
+ #endregion
+ #region Small Icon
+ {
+ MarkupAttribute attSmallFileName = tagIconPath.Attributes["SmallFileName"];
+ if (attSmallFileName != null)
+ {
+ string FileName = attSmallFileName.Value;
+ if (System.IO.File.Exists(FileName)) template.SmallIconImageFileName = FileName;
+ }
+ }
+ #endregion
+ }
+ }
+ #endregion
+ #region FileSystem
+ {
+ MarkupTagElement tagFileSystem = (tagTemplate.Elements["FileSystem"] as MarkupTagElement);
+ if (tagFileSystem != null)
+ {
+ MarkupTagElement tagFiles = (tagFileSystem.Elements["Files"] as MarkupTagElement);
+ if (tagFiles != null)
+ {
+ foreach (MarkupElement elFile in tagFiles.Elements)
+ {
+ MarkupTagElement tagFile = (elFile as MarkupTagElement);
+ if (tagFile == null) continue;
+ if (tagFile.FullName != "File") continue;
- LoadProjectFile(tagFile, template.FileSystem.Files);
- }
- }
- }
- #endregion
+ LoadProjectFile(tagFile, template.FileSystem.Files);
+ }
+ }
+ }
+ }
+ #endregion
+ #region Configuration
+ {
+ MarkupTagElement tagConfiguration = (tagTemplate.Elements["Configuration"] as MarkupTagElement);
+ if (tagConfiguration != null)
+ {
+ PropertyListObjectModel plom = template.Configuration;
+ XMLPropertyListDataFormat xmlplist = new XMLPropertyListDataFormat();
+ XMLPropertyListDataFormat.LoadMarkup(tagConfiguration, ref plom);
+ }
+ }
+ #endregion
- listProjectTemplates.Add(template);
- }
+ listProjectTemplates.Add(template);
+ }
}
}
- #endregion
+ #endregion
}
#endregion
}
diff --git a/CSharp/Plugins/UniversalEditor.Essential/ProjectType.cs b/CSharp/Plugins/UniversalEditor.Essential/ProjectType.cs
index 5e2cd9ea..fa7c8be5 100644
--- a/CSharp/Plugins/UniversalEditor.Essential/ProjectType.cs
+++ b/CSharp/Plugins/UniversalEditor.Essential/ProjectType.cs
@@ -18,5 +18,36 @@ namespace UniversalEditor
private string mvarSmallIconImageFileName = null;
public string SmallIconImageFileName { get { return mvarSmallIconImageFileName; } set { mvarSmallIconImageFileName = value; } }
+
+ private ProjectTypeItemShortcut.ProjectTypeItemShortcutCollection mvarItemShortcuts = new ProjectTypeItemShortcut.ProjectTypeItemShortcutCollection();
+ public ProjectTypeItemShortcut.ProjectTypeItemShortcutCollection ItemShortcuts { get { return mvarItemShortcuts; } }
+ }
+ ///
+ /// A shortcut placed in the "Add New Item" menu when the project is selected. When
+ /// activated, these shortcuts create a new Document with the ObjectModel specified in the
+ /// ObjectModelReference and add the resulting Document to the selected project. The
+ /// Document may optionally be preloaded with content from the DocumentTemplate, if
+ /// specified.
+ ///
+ public class ProjectTypeItemShortcut
+ {
+ public class ProjectTypeItemShortcutCollection
+ : System.Collections.ObjectModel.Collection
+ {
+
+ }
+
+ private string mvarTitle = String.Empty;
+ public string Title { get { return mvarTitle; } set { mvarTitle = value; } }
+
+ private ObjectModelReference mvarObjectModelReference = null;
+ public ObjectModelReference ObjectModelReference { get { return mvarObjectModelReference; } set { mvarObjectModelReference = value; } }
+
+ private DocumentTemplate mvarDocumentTemplate = null;
+ ///
+ /// The from which to load the document content for the
+ /// shortcut.
+ ///
+ public DocumentTemplate DocumentTemplate { get { return mvarDocumentTemplate; } set { mvarDocumentTemplate = value; } }
}
}
diff --git a/CSharp/UniversalEditor.sln b/CSharp/UniversalEditor.sln
index d15dd7b8..48341a28 100644
--- a/CSharp/UniversalEditor.sln
+++ b/CSharp/UniversalEditor.sln
@@ -10,6 +10,9 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.ConsoleApplication", "Applications\UniversalEditor.ConsoleApplication\UniversalEditor.ConsoleApplication.csproj", "{BAC9FDFD-C39E-4A90-B9F8-CF75B551BE10}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{71CFF024-26F7-4626-A526-B435FDF8D64E}"
+ ProjectSection(SolutionItems) = preProject
+ TextFile1.txt = TextFile1.txt
+ EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UniversalEditor.Essential", "Plugins\UniversalEditor.Essential\UniversalEditor.Essential.csproj", "{30467E5C-05BC-4856-AADC-13906EF4CADD}"
EndProject