diff --git a/Content/UniversalEditor.Content.PlatformIndependent/Dialogs/NewDialog.glade b/Content/UniversalEditor.Content.PlatformIndependent/Dialogs/NewDialog.glade index bd90f054..3502574e 100644 --- a/Content/UniversalEditor.Content.PlatformIndependent/Dialogs/NewDialog.glade +++ b/Content/UniversalEditor.Content.PlatformIndependent/Dialogs/NewDialog.glade @@ -24,8 +24,26 @@ along with Universal Editor. If not, see . + + + + + + + + + + + + + + + + False + 600 + 400 dialog @@ -40,7 +58,7 @@ along with Universal Editor. If not, see . False end - + gtk-new True True @@ -54,7 +72,7 @@ along with Universal Editor. If not, see . - + gtk-cancel True True @@ -75,7 +93,7 @@ along with Universal Editor. If not, see . - + True True edit-find-symbolic @@ -92,33 +110,84 @@ along with Universal Editor. If not, see . True True - 92 + 250 + True + True - + True - True - False - - - + False + vertical - - Name + + True + True + tmObjectModel + False + + + + + + True + Name + True + True + + + + 0 + + + + + + True + True + 0 + - True + False True - + True - True - 6 + False + vertical - + + True + True + tmTemplate + False + + + + + + True + Template + True + True + + + + 0 + + + + + + + True + True + 0 + diff --git a/Libraries/UniversalEditor.UserInterface/Dialogs/NewDialog.Designer.cs b/Libraries/UniversalEditor.UserInterface/Dialogs/NewDialog.Designer.cs deleted file mode 100644 index a75bd446..00000000 --- a/Libraries/UniversalEditor.UserInterface/Dialogs/NewDialog.Designer.cs +++ /dev/null @@ -1,128 +0,0 @@ -// -// NewDialog.Designer.cs -// -// Author: -// Michael Becker -// -// Copyright (c) 2019 -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . -using System; - -using MBS.Framework.UserInterface; -using MBS.Framework.UserInterface.Controls; -using MBS.Framework.UserInterface.Dialogs; -using MBS.Framework.UserInterface.Layouts; - -namespace UniversalEditor.UserInterface.Dialogs -{ - partial class NewDialog - { - private TextBox txtFileName = null; - private TextBox txtFilePath = null; - - private CheckBox chkAddToSolution = null; - private TextBox txtSolutionName = null; - - private ListView tvObjectModel = new ListView(); - private DefaultTreeModel tmObjectModel = null; - - private ListView tvTemplate = new ListView(); - private DefaultTreeModel tmTemplate = null; - private TextBox txtSearch = null; - - private Label lblName = null; - private Label lblLocation = null; - private Label lblProjectName = null; - - private void InitializeComponent() - { - this.Layout = new BoxLayout(Orientation.Vertical); - - this.txtSearch = new TextBox(); - txtSearch.Changed += txtSearch_Changed; - this.Controls.Add(txtSearch, new BoxLayout.Constraints(false, true)); - - tmObjectModel = new DefaultTreeModel(new Type[] { typeof(string), typeof(string) }); - tmTemplate = new DefaultTreeModel(new Type[] { typeof(string), typeof(string) }); - - tvObjectModel.Model = tmObjectModel; - tvObjectModel.SelectionChanged += tvObjectModel_SelectionChanged; - tvTemplate.Model = tmTemplate; - // tvTemplate.Mode = ListViewMode.LargeIcon; - - tvObjectModel.Columns.Add(new ListViewColumnText(tmObjectModel.Columns[0], "Name")); - tvObjectModel.Columns.Add(new ListViewColumnText(tmObjectModel.Columns[1], "Description")); - tvObjectModel.HeaderStyle = ColumnHeaderStyle.None; - - tvTemplate.Columns.Add(new ListViewColumnText(tmTemplate.Columns[0], "Name")); - tvTemplate.Columns.Add(new ListViewColumnText(tmTemplate.Columns[1], "Description")); - tvTemplate.HeaderStyle = ColumnHeaderStyle.None; - tvTemplate.SelectionChanged += tvTemplate_SelectionChanged; - - SplitContainer boxTreeViewAndListView = new SplitContainer(); - boxTreeViewAndListView.Orientation = Orientation.Vertical; - boxTreeViewAndListView.Panel1.Layout = new BoxLayout(Orientation.Horizontal); - boxTreeViewAndListView.Panel2.Layout = new BoxLayout(Orientation.Horizontal); - - boxTreeViewAndListView.Panel1.Controls.Add(tvObjectModel, new BoxLayout.Constraints(true, true, 16)); - boxTreeViewAndListView.Panel2.Controls.Add(tvTemplate, new BoxLayout.Constraints(true, true, 16, BoxLayout.PackType.End)); - - this.Controls.Add(boxTreeViewAndListView, new BoxLayout.Constraints(true, true, 16)); - - this.txtFileName = new TextBox(); - this.txtFilePath = new TextBox(); - this.txtSolutionName = new TextBox(); - - this.lblName = new Label ("_Name:"); - this.lblName.HorizontalAlignment = HorizontalAlignment.Left; - this.lblLocation = new Label ("_Location:"); - this.lblLocation.HorizontalAlignment = HorizontalAlignment.Left; - - this.lblProjectName = new Label ((Mode == NewDialogMode.File ? "Project" : "Solution") + " na_me:"); - this.lblProjectName.HorizontalAlignment = HorizontalAlignment.Left; - - this.txtFileName.Changed += txtFileName_Changed; - - Container tableParams = new Container(); - tableParams.Layout = new GridLayout(); - tableParams.Controls.Add(lblName, new GridLayout.Constraints(0, 0)); - tableParams.Controls.Add(txtFileName, new GridLayout.Constraints(0, 1, 1, 1, ExpandMode.Horizontal)); - tableParams.Controls.Add(lblLocation, new GridLayout.Constraints(1, 0)); - tableParams.Controls.Add(txtFilePath, new GridLayout.Constraints(1, 1, 1, 1, ExpandMode.Horizontal)); - - this.chkAddToSolution = new CheckBox(); - this.chkAddToSolution.Text = "Add to " + (Mode == NewDialogMode.File ? "project" : "solution"); - tableParams.Controls.Add(chkAddToSolution, new GridLayout.Constraints(2, 0, 1, 2, ExpandMode.Horizontal)); - - tableParams.Controls.Add(this.lblProjectName, new GridLayout.Constraints(3, 0)); - tableParams.Controls.Add(txtSolutionName, new GridLayout.Constraints(3, 1, 1, 1, ExpandMode.Horizontal)); - - this.Controls.Add(tableParams, new BoxLayout.Constraints(false, false, 16, BoxLayout.PackType.End)); - - - this.Buttons.Add(new Button(StockType.New, DialogResult.None)); - this.Buttons.Add(new Button(StockType.Cancel, DialogResult.Cancel)); - - this.Buttons[0].StockType = StockType.New; - DefaultButton = this.Buttons[0]; - this.Buttons[0].Click += cmdOK_Click; - - this.Text = "New File"; - this.MinimumSize = new MBS.Framework.Drawing.Dimension2D (500, 400); - this.Size = new MBS.Framework.Drawing.Dimension2D (600, 500); - } - - } -} diff --git a/Libraries/UniversalEditor.UserInterface/Dialogs/NewDialog.cs b/Libraries/UniversalEditor.UserInterface/Dialogs/NewDialog.cs index edc725bd..fb4b9bf0 100644 --- a/Libraries/UniversalEditor.UserInterface/Dialogs/NewDialog.cs +++ b/Libraries/UniversalEditor.UserInterface/Dialogs/NewDialog.cs @@ -1,10 +1,10 @@ // -// NewFileDialog.cs +// NewDialog.cs - provides a UWT ContainerLayout-based CustomDialog for creating a new Document or Project in Universal Editor // // Author: // Michael Becker // -// Copyright (c) 2019 +// Copyright (c) 2019-2020 Mike Becker's Software // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -18,12 +18,12 @@ // // You should have received a copy of the GNU General Public License // along with this program. If not, see . + using System; using System.Collections.Generic; using MBS.Framework.UserInterface; using MBS.Framework.UserInterface.Controls; using MBS.Framework.UserInterface.Dialogs; -using MBS.Framework.UserInterface.Layouts; namespace UniversalEditor.UserInterface.Dialogs { @@ -33,414 +33,33 @@ namespace UniversalEditor.UserInterface.Dialogs Project } + /// + /// Provides a UWT -based for creating a new Document or Project in Universal Editor. + /// [ContainerLayout("~/Dialogs/NewDialog.glade", "GtkDialog")] - public class NewDialog2 : Dialog + public class NewDialog : Dialog { - private TextBox txtFileName = null; - private TextBox txtFilePath = null; + private TextBox txtFileName; + private TextBox txtFilePath; - private CheckBox chkAddToSolution = null; - private TextBox txtSolutionName = null; + private CheckBox chkAddToSolution; + private TextBox txtSolutionName; - private ListView tvObjectModel = new ListView(); - private DefaultTreeModel tmObjectModel = null; + private ListView tvObjectModel; + private DefaultTreeModel tmObjectModel; - private ListView tvTemplate = new ListView(); - private DefaultTreeModel tmTemplate = null; - private TextBox txtSearch = null; + private ListView tvTemplate; + private DefaultTreeModel tmTemplate; + private TextBox txtSearch; - public NewDialog2() + protected override void OnCreated(EventArgs e) { - tmObjectModel = new DefaultTreeModel(new Type[] { typeof(string) }); - tmTemplate = new DefaultTreeModel(new Type[] { typeof(string) }); + base.OnCreated(e); - tvObjectModel.Model = tmObjectModel; - tvTemplate.Model = tmTemplate; + this.InitializeTreeView(); - tvObjectModel.Columns.Add(new ListViewColumnText(tmObjectModel.Columns[0], "Name")); - tvObjectModel.HeaderStyle = ColumnHeaderStyle.None; - - tvTemplate.Columns.Add(new ListViewColumnText(tmTemplate.Columns[0], "Name")); - tvTemplate.HeaderStyle = ColumnHeaderStyle.None; - - this.InitializeObjectModelTreeView(); Buttons[0].Enabled = false; } - - public NewDialogMode Mode { get; set; } - public Template SelectedItem { get; set; } - public bool CombineObjects { get; set; } = false; - - public string SolutionTitle { get; set; } - public string ProjectTitle { get; set; } - - private void InitializeObjectModelTreeView() - { - ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(); - foreach (ObjectModelReference omr in omrs) - { - if (omr.Path == null) continue; - } - } - private void InitializeObjectModelTreeViewRow(DefaultTreeModel tm, TreeModelRow rp, string[] path, int index) - { - if (index > path.Length - 1) return; - - TreeModelRow row = null; - if (rp == null) - { - if (tm.Rows.Contains(path[index])) - { - row = tm.Rows[path[index]]; - } - else - { - row = new TreeModelRow(new TreeModelRowColumn[] - { - new TreeModelRowColumn(tmObjectModel.Columns[0], path[index]) - }); - row.Name = path[index]; - tm.Rows.Add(row); - } - } - else - { - if (rp.Rows.Contains(path[index])) - { - row = rp.Rows[path[index]]; - } - else - { - row = new TreeModelRow(new TreeModelRowColumn[] - { - new TreeModelRowColumn(tmObjectModel.Columns[0], path[index]) - }); - row.Name = path[index]; - rp.Rows.Add(row); - } - } - - InitializeObjectModelTreeViewRow(tm, row, path, index + 1); - } - - [EventHandler("cmdOK", "Click")] - private void cmdOK_Click(object sender, EventArgs e) - { - // holy crapola this actually works!... - if (String.IsNullOrEmpty(this.txtFileName.Text)) - { - MessageDialog.ShowDialog("Please enter a file name", "Error", MessageDialogButtons.OK, MessageDialogIcon.Error); - - // ... but without DialogResult, something gets - // corrupted, and with DialogResult, there is no - // way to cancel the dialog close event... what do? - return; - } - this.Destroy(); - } - } - - public partial class NewDialog : CustomDialog - { - public NewDialog() - { - this.InitializeComponent(); - } - - public NewDialogMode Mode { get; set; } - public Template SelectedItem { get; set; } - public bool CombineObjects { get; set; } = false; - - public string SolutionTitle { get; set; } - public string ProjectTitle { get; set; } - - - private void txtFileName_Changed(object sender, EventArgs e) - { - if (!txtSolutionName.IsChangedByUser) - { - txtSolutionName.Text = txtFileName.Text; - } - } - - protected override void OnCreating(EventArgs e) - { - base.OnCreating(e); - - switch (Mode) - { - case NewDialogMode.File: - { - this.Text = "New File"; - this.lblProjectName.Text = "Project na_me:"; - this.chkAddToSolution.Visible = true; - break; - } - case NewDialogMode.Project: - { - this.Text = "New Project"; - this.lblProjectName.Text = "Solution na_me:"; - this.chkAddToSolution.Visible = false; - break; - } - } - - tvTemplate.RowActivated += tvTemplate_RowActivated; - - InitializeTreeView(); - } - - private void tvTemplate_RowActivated (object sender, ListViewRowActivatedEventArgs e) - { - cmdOK_Click (sender, e); - } - - - private void InitializeTreeView() - { - switch (this.Mode) - { - case NewDialogMode.File: - { - InitializeDocumentTemplateTreeView(); - break; - } - case NewDialogMode.Project: - { - InitializeProjectTemplateTreeView(); - break; - } - } - - if (tmObjectModel.Rows.Count == 1) - { - TreeModelRow row = ExpandSingleChildRows(tmObjectModel.Rows[0]); - if (row != null) - { - tvObjectModel.SelectedRows.Clear(); - tvObjectModel.SelectedRows.Add(row); - tvObjectModel_SelectionChanged(null, EventArgs.Empty); - } - } - - if (tvTemplate.SelectedRows.Count == 1) - { - Buttons[0].Enabled = true; - } - else - { - Buttons[0].Enabled = false; - } - } - - /// - /// Recursively detects with a single child row and expands it. If the has zero child rows, returns that . Otherwise, if no such row is found, returns null. - /// - /// A which has zero child rows, or null if no such exists. - /// Row. - private TreeModelRow ExpandSingleChildRows(TreeModelRow row) - { - if (row.Rows.Count == 1) - { - row.Expanded = true; - return ExpandSingleChildRows(row.Rows[0]); - } - else if (row.Rows.Count == 0) - { - return row; - } - return null; - } - - private void InitializeProjectTemplateTreeView() - { - tmObjectModel.Rows.Clear(); - - ProjectTemplate[] templates = UniversalEditor.Common.Reflection.GetAvailableProjectTemplates(); - foreach (ProjectTemplate dt in templates) - { - TreeModelRow tn = null; - if (dt.Path != null) - { - string strPath = String.Join("/", dt.Path); - if (!(String.IsNullOrEmpty(txtSearch.Text) || strPath.ToLower().Contains(txtSearch.Text.ToLower()))) continue; - for (int i = 0; i < dt.Path.Length; i++) - { - if (tn == null) - { - if (tmObjectModel.Rows.Contains(dt.Path[i])) - { - tn = tmObjectModel.Rows[dt.Path[i]]; - } - else - { - tn = new TreeModelRow(new TreeModelRowColumn[] - { - new TreeModelRowColumn(tmObjectModel.Columns[0], dt.Path[i]) - }); - tn.Name = dt.Path[i]; - tmObjectModel.Rows.Add(tn); - } - } - else - { - if (tn.Rows.Contains(dt.Path[i])) - { - tn = tn.Rows[dt.Path[i]]; - } - else - { - TreeModelRow tn1 = new TreeModelRow(new TreeModelRowColumn[] - { - new TreeModelRowColumn(tmObjectModel.Columns[0], dt.Path[i]) - }); - tn1.Name = dt.Path[i]; - tn.Rows.Add(tn1); - tn = tn1; - } - } - if (i == dt.Path.Length - 1 && tn != null) - { - // last one, let's add all the templates - List dts = (List)tn.GetExtraData>("dts", null); - if (dts == null) - { - Console.WriteLine("ue: templates debug: creating a new project template list for " + String.Join("/", dt.Path)); - dts = new List(); - tn.SetExtraData>("dts", dts); - } - dts.Add(dt); - } - } - } - - if (tn == null || tvObjectModel.SelectedRows.Contains(tn)) - { - TreeModelRow lvi = new TreeModelRow(new TreeModelRowColumn[] - { - new TreeModelRowColumn(tmTemplate.Columns[0], dt.Title), - new TreeModelRowColumn(tmTemplate.Columns[1], dt.Description) - }); - if (!String.IsNullOrEmpty(dt.LargeIconImageFileName)) - { - // lvi.Image = MBS.Framework.UserInterface.Drawing.Image.FromFile(dt.LargeIconImageFileName); - } - else - { - Console.Error.WriteLine("Large icon image not specified for template \"" + dt.Title + "\""); - } - lvi.SetExtraData("dt", dt); - tmTemplate.Rows.Add(lvi); - } - } - } - - private void tvTemplate_SelectionChanged(object sender, EventArgs e) - { - Buttons[0].Enabled = (tvTemplate.SelectedRows.Count > 0); - if (tvTemplate.SelectedRows.Count != 1) return; - - if (Mode == NewDialogMode.Project) - { - ProjectTemplate pt = (tvTemplate.SelectedRows[0].GetExtraData("dt")); - if (pt == null) return; - - if (!txtFileName.IsChangedByUser) - { - string projectNamePrefix = pt.ProjectNamePrefix; - if (String.IsNullOrEmpty(projectNamePrefix)) - { - projectNamePrefix = pt.Title.Replace(" ", String.Empty); - // projectNamePrefix = "Project"; - } - txtFileName.Text = projectNamePrefix + "1"; - } - } - else if (Mode == NewDialogMode.File) - { - DocumentTemplate pt = (tvTemplate.SelectedRows[0].GetExtraData("dt")); - if (pt == null) return; - - if (!txtFileName.IsChangedByUser) - { - // txtFileName.Text = projectNamePrefix + "1"; - } - } - } - - private void InitializeObjectModelTreeView() - { - ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(); - foreach (ObjectModelReference omr in omrs) - { - if (omr.Path == null) continue; - - string strPath = String.Join("/", omr.Path); - if (String.IsNullOrEmpty(txtSearch.Text) || strPath.ToLower().Contains(txtSearch.Text.ToLower())) - { - InitializeObjectModelTreeViewRow(tmObjectModel, null, omr, 0); - } - } - } - private void InitializeObjectModelTreeViewRow(DefaultTreeModel tm, TreeModelRow rp, ObjectModelReference omr, int index) - { - string[] path = omr.Path; - if (index > path.Length - 1) return; - - TreeModelRow row = null; - if (rp == null) - { - if (tm.Rows.Contains(path[index])) - { - row = tm.Rows[path[index]]; - } - else - { - row = new TreeModelRow(new TreeModelRowColumn[] - { - new TreeModelRowColumn(tmObjectModel.Columns[0], path[index]) - }); - row.Name = path[index]; - tm.Rows.Add(row); - } - } - else - { - if (rp.Rows.Contains(path[index])) - { - row = rp.Rows[path[index]]; - } - else - { - row = new TreeModelRow(new TreeModelRowColumn[] - { - new TreeModelRowColumn(tmObjectModel.Columns[0], path[index]) - }); - row.Name = path[index]; - rp.Rows.Add(row); - } - } - - if (index == path.Length - 1 && row != null) - { - // last one, let's add all the templates - List dts = (List)row.GetExtraData>("dts", null); - if (dts == null) - { - Console.WriteLine("ue: templates debug: creating a new document template list for " + String.Join("/", path)); - dts = new List(); - row.SetExtraData>("dts", dts); - } - - DocumentTemplate dtEmpty = new DocumentTemplate(); - dtEmpty.ObjectModelReference = omr; - dtEmpty.Title = String.Format("Blank {0} Document", path[path.Length - 1]); - dts.Add(dtEmpty); - } - - InitializeObjectModelTreeViewRow(tm, row, omr, index + 1); - } - private void InitializeDocumentTemplateTreeView() { tmObjectModel.Rows.Clear(); @@ -526,8 +145,88 @@ namespace UniversalEditor.UserInterface.Dialogs InitializeObjectModelTreeView(); } - + public NewDialogMode Mode { get; set; } + public Template SelectedItem { get; set; } + public bool CombineObjects { get; set; } = false; + + public string SolutionTitle { get; set; } + public string ProjectTitle { get; set; } + + private void InitializeObjectModelTreeView() + { + ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(); + foreach (ObjectModelReference omr in omrs) + { + if (omr.Path == null) continue; + + string strPath = String.Join("/", omr.Path); + if (String.IsNullOrEmpty(txtSearch.Text) || strPath.ToLower().Contains(txtSearch.Text.ToLower())) + { + InitializeObjectModelTreeViewRow(tmObjectModel, null, omr, 0); + } + } + } + private void InitializeObjectModelTreeViewRow(DefaultTreeModel tm, TreeModelRow rp, ObjectModelReference omr, int index) + { + string[] path = omr.Path; + if (index > path.Length - 1) return; + + TreeModelRow row = null; + if (rp == null) + { + if (tm.Rows.Contains(path[index])) + { + row = tm.Rows[path[index]]; + } + else + { + row = new TreeModelRow(new TreeModelRowColumn[] + { + new TreeModelRowColumn(tmObjectModel.Columns[0], path[index]) + }); + row.Name = path[index]; + tm.Rows.Add(row); + } + } + else + { + if (rp.Rows.Contains(path[index])) + { + row = rp.Rows[path[index]]; + } + else + { + row = new TreeModelRow(new TreeModelRowColumn[] + { + new TreeModelRowColumn(tmObjectModel.Columns[0], path[index]) + }); + row.Name = path[index]; + rp.Rows.Add(row); + } + } + + if (index == path.Length - 1 && row != null) + { + // last one, let's add all the templates + List dts = (List)row.GetExtraData>("dts", null); + if (dts == null) + { + Console.WriteLine("ue: templates debug: creating a new document template list for " + String.Join("/", path)); + dts = new List(); + row.SetExtraData>("dts", dts); + } + + DocumentTemplate dtEmpty = new DocumentTemplate(); + dtEmpty.ObjectModelReference = omr; + dtEmpty.Title = String.Format("Blank {0} Document", path[path.Length - 1]); + dts.Add(dtEmpty); + } + + InitializeObjectModelTreeViewRow(tm, row, omr, index + 1); + } + + [EventHandler("cmdOK", "Click")] private void cmdOK_Click(object sender, EventArgs e) { SolutionTitle = txtSolutionName.Text; @@ -566,7 +265,7 @@ namespace UniversalEditor.UserInterface.Dialogs } case NewDialogMode.Project: { - ProjectTemplate template = tvTemplate.SelectedRows[0].GetExtraData("dt"); + ProjectTemplate template = tvTemplate.SelectedRows[0].GetExtraData("dt"); if (template.ProjectType != null) { if (template.ProjectType.Variables.Count > 0) @@ -641,6 +340,211 @@ namespace UniversalEditor.UserInterface.Dialogs this.DialogResult = DialogResult.OK; this.Close(); } + /// + /// Recursively detects with a single child row and expands it. If the has zero child rows, returns that . Otherwise, if no such row is found, returns null. + /// + /// A which has zero child rows, or null if no such exists. + /// Row. + private TreeModelRow ExpandSingleChildRows(TreeModelRow row) + { + if (row.Rows.Count == 1) + { + row.Expanded = true; + return ExpandSingleChildRows(row.Rows[0]); + } + else if (row.Rows.Count == 0) + { + return row; + } + return null; + } + + [EventHandler("txtSearch", "Changed")] + private void txtSearch_Changed(object sender, EventArgs e) + { + InitializeTreeView(); + } + + private void InitializeTreeView() + { + switch (this.Mode) + { + case NewDialogMode.File: + { + InitializeDocumentTemplateTreeView(); + break; + } + case NewDialogMode.Project: + { + InitializeProjectTemplateTreeView(); + break; + } + } + + if (tmObjectModel.Rows.Count == 1) + { + TreeModelRow row = ExpandSingleChildRows(tmObjectModel.Rows[0]); + if (row != null) + { + tvObjectModel.SelectedRows.Clear(); + tvObjectModel.SelectedRows.Add(row); + tvObjectModel_SelectionChanged(null, EventArgs.Empty); + } + } + + if (tvTemplate.SelectedRows.Count == 1) + { + Buttons[0].Enabled = true; + } + else + { + Buttons[0].Enabled = false; + } + } + private void InitializeProjectTemplateTreeView() + { + tmObjectModel.Rows.Clear(); + + ProjectTemplate[] templates = UniversalEditor.Common.Reflection.GetAvailableProjectTemplates(); + foreach (ProjectTemplate dt in templates) + { + TreeModelRow tn = null; + if (dt.Path != null) + { + string strPath = String.Join("/", dt.Path); + if (!(String.IsNullOrEmpty(txtSearch.Text) || strPath.ToLower().Contains(txtSearch.Text.ToLower()))) continue; + for (int i = 0; i < dt.Path.Length; i++) + { + if (tn == null) + { + if (tmObjectModel.Rows.Contains(dt.Path[i])) + { + tn = tmObjectModel.Rows[dt.Path[i]]; + } + else + { + tn = new TreeModelRow(new TreeModelRowColumn[] + { + new TreeModelRowColumn(tmObjectModel.Columns[0], dt.Path[i]) + }); + tn.Name = dt.Path[i]; + tmObjectModel.Rows.Add(tn); + } + } + else + { + if (tn.Rows.Contains(dt.Path[i])) + { + tn = tn.Rows[dt.Path[i]]; + } + else + { + TreeModelRow tn1 = new TreeModelRow(new TreeModelRowColumn[] + { + new TreeModelRowColumn(tmObjectModel.Columns[0], dt.Path[i]) + }); + tn1.Name = dt.Path[i]; + tn.Rows.Add(tn1); + tn = tn1; + } + } + if (i == dt.Path.Length - 1 && tn != null) + { + // last one, let's add all the templates + List dts = (List)tn.GetExtraData>("dts", null); + if (dts == null) + { + Console.WriteLine("ue: templates debug: creating a new project template list for " + String.Join("/", dt.Path)); + dts = new List(); + tn.SetExtraData>("dts", dts); + } + dts.Add(dt); + } + } + } + + if (tn == null || tvObjectModel.SelectedRows.Contains(tn)) + { + TreeModelRow lvi = new TreeModelRow(new TreeModelRowColumn[] + { + new TreeModelRowColumn(tmTemplate.Columns[0], dt.Title), + new TreeModelRowColumn(tmTemplate.Columns[1], dt.Description) + }); + if (!String.IsNullOrEmpty(dt.LargeIconImageFileName)) + { + // lvi.Image = MBS.Framework.UserInterface.Drawing.Image.FromFile(dt.LargeIconImageFileName); + } + else + { + Console.Error.WriteLine("Large icon image not specified for template \"" + dt.Title + "\""); + } + lvi.SetExtraData("dt", dt); + tmTemplate.Rows.Add(lvi); + } + } + } + + [EventHandler("tvObjectModel", "SelectionChanged")] + private void tvObjectModel_SelectionChanged(object sender, EventArgs e) + { + if (tvObjectModel.SelectedRows.Count < 1) return; + + tmTemplate.Rows.Clear(); + tvTemplate.SelectedRows.Clear(); + + if (Mode == NewDialogMode.File) + { + RefreshDocumentTemplates(tvObjectModel.SelectedRows[0]); + } + else if (Mode == NewDialogMode.Project) + { + RefreshProjectTemplates(tvObjectModel.SelectedRows[0]); + } + + if (tmTemplate.Rows.Count == 1) + { + tvTemplate.SelectedRows.Add(tmTemplate.Rows[0]); + } + } + + [EventHandler("tvTemplate", "SelectionChanged")] + private void tvTemplate_SelectionChanged(object sender, EventArgs e) + { + Buttons[0].Enabled = (tvTemplate.SelectedRows.Count > 0); + if (tvTemplate.SelectedRows.Count != 1) return; + + if (Mode == NewDialogMode.Project) + { + ProjectTemplate pt = (tvTemplate.SelectedRows[0].GetExtraData("dt")); + if (pt == null) return; + + if (!txtFileName.IsChangedByUser) + { + string projectNamePrefix = pt.ProjectNamePrefix; + if (String.IsNullOrEmpty(projectNamePrefix)) + { + projectNamePrefix = pt.Title.Replace(" ", String.Empty); + // projectNamePrefix = "Project"; + } + txtFileName.Text = projectNamePrefix + "1"; + } + } + else if (Mode == NewDialogMode.File) + { + DocumentTemplate pt = (tvTemplate.SelectedRows[0].GetExtraData("dt")); + if (pt == null) return; + if (!txtFileName.IsChangedByUser) + { + // txtFileName.Text = projectNamePrefix + "1"; + } + } + } + [EventHandler("tvTemplate", "RowActivated")] + private void tvTemplate_RowActivated(object sender, ListViewRowActivatedEventArgs e) + { + cmdOK_Click(sender, e); + } + private void RefreshProjectTemplates(TreeModelRow row) { @@ -679,7 +583,7 @@ namespace UniversalEditor.UserInterface.Dialogs foreach (DocumentTemplate dt in list) { if (dt == null) continue; - + TreeModelRow lvi = new TreeModelRow(new TreeModelRowColumn[] { new TreeModelRowColumn(tmTemplate.Columns[0], dt.Title), @@ -698,32 +602,5 @@ namespace UniversalEditor.UserInterface.Dialogs } } } - - private void txtSearch_Changed(object sender, EventArgs e) - { - InitializeTreeView(); - } - - private void tvObjectModel_SelectionChanged(object sender, EventArgs e) - { - if (tvObjectModel.SelectedRows.Count < 1) return; - - tmTemplate.Rows.Clear(); - tvTemplate.SelectedRows.Clear(); - - if (Mode == NewDialogMode.File) - { - RefreshDocumentTemplates(tvObjectModel.SelectedRows[0]); - } - else if (Mode == NewDialogMode.Project) - { - RefreshProjectTemplates(tvObjectModel.SelectedRows[0]); - } - - if (tmTemplate.Rows.Count == 1) - { - tvTemplate.SelectedRows.Add(tmTemplate.Rows[0]); - } - } } } diff --git a/Libraries/UniversalEditor.UserInterface/UniversalEditor.UserInterface.csproj b/Libraries/UniversalEditor.UserInterface/UniversalEditor.UserInterface.csproj index d0a62be4..0b78ad7b 100644 --- a/Libraries/UniversalEditor.UserInterface/UniversalEditor.UserInterface.csproj +++ b/Libraries/UniversalEditor.UserInterface/UniversalEditor.UserInterface.csproj @@ -92,7 +92,6 @@ -