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