diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.Designer.cs b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.Designer.cs new file mode 100644 index 00000000..d27f18ea --- /dev/null +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.Designer.cs @@ -0,0 +1,114 @@ +namespace UniversalEditor.UserInterface.WindowsForms.Dialogs +{ + partial class DataFormatBrowserPopup + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txtSearch = new System.Windows.Forms.TextBox(); + this.lv = new System.Windows.Forms.ListView(); + this.chTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chFilters = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.cmdClear = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // txtSearch + // + this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtSearch.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtSearch.Location = new System.Drawing.Point(6, 7); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.Size = new System.Drawing.Size(277, 13); + this.txtSearch.TabIndex = 0; + this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged); + this.txtSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown); + // + // lv + // + this.lv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.lv.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chTitle, + this.chFilters}); + this.lv.FullRowSelect = true; + this.lv.GridLines = true; + this.lv.HideSelection = false; + this.lv.Location = new System.Drawing.Point(0, 26); + this.lv.MultiSelect = false; + this.lv.Name = "lv"; + this.lv.Size = new System.Drawing.Size(364, 183); + this.lv.TabIndex = 1; + this.lv.UseCompatibleStateImageBehavior = false; + this.lv.View = System.Windows.Forms.View.Details; + this.lv.ItemActivate += new System.EventHandler(this.lv_ItemActivate); + this.lv.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown); + // + // chTitle + // + this.chTitle.Text = "Title"; + // + // chFilters + // + this.chFilters.Text = "Filters"; + // + // cmdClear + // + this.cmdClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cmdClear.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.cmdClear.Location = new System.Drawing.Point(289, 2); + this.cmdClear.Name = "cmdClear"; + this.cmdClear.Size = new System.Drawing.Size(75, 23); + this.cmdClear.TabIndex = 5; + this.cmdClear.Text = "&Clear"; + this.cmdClear.UseVisualStyleBackColor = false; + this.cmdClear.Click += new System.EventHandler(this.cmdClear_Click); + // + // DataFormatBrowserPopup + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size(364, 213); + this.ControlBox = false; + this.Controls.Add(this.cmdClear); + this.Controls.Add(this.lv); + this.Controls.Add(this.txtSearch); + this.Name = "DataFormatBrowserPopup"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.ListView lv; + private System.Windows.Forms.ColumnHeader chTitle; + private System.Windows.Forms.ColumnHeader chFilters; + private System.Windows.Forms.Button cmdClear; + } +} \ No newline at end of file diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.cs b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.cs new file mode 100644 index 00000000..ee0aeaec --- /dev/null +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace UniversalEditor.UserInterface.WindowsForms.Dialogs +{ + public partial class DataFormatBrowserPopup : Form + { + public event EventHandler SelectionChanged; + + public DataFormatBrowserPopup() + { + InitializeComponent(); + Font = SystemFonts.MenuFont; + } + + protected override void OnDeactivate(EventArgs e) + { + base.OnDeactivate(e); + this.Close(); + } + + private System.Collections.ObjectModel.Collection mvarDataFormats = new System.Collections.ObjectModel.Collection(); + public System.Collections.ObjectModel.Collection DataFormats { get { return mvarDataFormats; } } + + private DataFormat mvarDataFormat = null; + public DataFormat DataFormat { get { return mvarDataFormat; } set { mvarDataFormat = value; } } + + private string DataFormatFilterCollectionToString(DataFormatFilter.DataFormatFilterCollection collection) + { + StringBuilder sb = new StringBuilder(); + foreach (DataFormatFilter filter in collection) + { + sb.Append(StringArrayToString(filter.FileNameFilters)); + if (collection.IndexOf(filter) < collection.Count - 1) + { + sb.Append("; "); + } + } + return sb.ToString(); + } + + private string StringArrayToString(System.Collections.Specialized.StringCollection collection) + { + StringBuilder sb = new StringBuilder(); + foreach (string s in collection) + { + sb.Append(s); + if (collection.IndexOf(s) < collection.Count - 1) + { + sb.Append(", "); + } + } + return sb.ToString(); + } + + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + UpdateSearch(); + } + + private void UpdateSearch() + { + lv.Items.Clear(); + foreach (DataFormat df in mvarDataFormats) + { + DataFormatReference dfr = df.MakeReference(); + if (txtSearch.Text == String.Empty) + { + AddDataFormatToList(dfr); + } + else + { + if (dfr.Title.ToLower().Contains(txtSearch.Text.ToLower())) + { + AddDataFormatToList(dfr); + } + else + { + bool nextDFR = false; + foreach (DataFormatFilter filter in dfr.Filters) + { + foreach (string s in filter.FileNameFilters) + { + if (s.ToLower().Contains(txtSearch.Text.ToLower())) + { + AddDataFormatToList(dfr); + nextDFR = true; + break; + } + } + if (nextDFR) break; + } + if (nextDFR) continue; + } + } + } + + if (lv.Items.Count == 1) + { + lv.Items[0].Selected = true; + } + lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); + } + + private void AddDataFormatToList(DataFormatReference dfr) + { + ListViewItem lvi = new ListViewItem(); + lvi.Text = dfr.Title; + lvi.Tag = dfr; + lvi.SubItems.Add(DataFormatFilterCollectionToString(dfr.Filters)); + lv.Items.Add(lvi); + } + + private void txtSearch_TextChanged(object sender, EventArgs e) + { + UpdateSearch(); + } + + private void lv_ItemActivate(object sender, EventArgs e) + { + if (lv.SelectedItems.Count != 1) return; + + mvarDataFormat = (lv.SelectedItems[0].Tag as DataFormatReference).Create(); + if (SelectionChanged != null) SelectionChanged(this, e); + + Close(); + } + + private void txtSearch_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + if (lv.SelectedItems.Count != 1) return; + + mvarDataFormat = (lv.SelectedItems[0].Tag as DataFormatReference).Create(); + if (SelectionChanged != null) SelectionChanged(this, e); + + Close(); + } + else if (e.KeyCode == Keys.Escape) + { + Close(); + } + } + + private void cmdClear_Click(object sender, EventArgs e) + { + mvarDataFormat = null; + if (SelectionChanged != null) SelectionChanged(this, e); + Close(); + } + } +} diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.resx b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DataFormatBrowserPopup.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.Designer.cs b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.Designer.cs index de7d788c..1ac6c1fb 100644 --- a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.Designer.cs +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.Designer.cs @@ -43,17 +43,7 @@ this.fTPServerToolStripMenuItem = new System.Windows.Forms.ToolStripSeparator(); this.hTTPServerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.fTPServerToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuObjectModel = new System.Windows.Forms.ContextMenuStrip(this.components); - this.mnuObjectModelSep1 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuObjectModelSelect = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuObjectModelClear = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDataFormat = new System.Windows.Forms.ContextMenuStrip(this.components); - this.mnuDataFormatSep1 = new System.Windows.Forms.ToolStripSeparator(); - this.mnuDataFormatSelect = new System.Windows.Forms.ToolStripMenuItem(); - this.mnuDataFormatClear = new System.Windows.Forms.ToolStripMenuItem(); this.mnuAccessor.SuspendLayout(); - this.mnuObjectModel.SuspendLayout(); - this.mnuDataFormat.SuspendLayout(); this.SuspendLayout(); // // txtObjectModel @@ -166,86 +156,32 @@ this.hTTPServerToolStripMenuItem, this.fTPServerToolStripMenuItem1}); this.mnuAccessor.Name = "mnuAccessor"; - this.mnuAccessor.Size = new System.Drawing.Size(153, 98); + this.mnuAccessor.Size = new System.Drawing.Size(135, 76); // // mnuAccessorLocalFile // this.mnuAccessorLocalFile.Name = "mnuAccessorLocalFile"; - this.mnuAccessorLocalFile.Size = new System.Drawing.Size(152, 22); + this.mnuAccessorLocalFile.Size = new System.Drawing.Size(134, 22); this.mnuAccessorLocalFile.Text = "&Local File"; this.mnuAccessorLocalFile.Click += new System.EventHandler(this.mnuAccessorLocalFile_Click); // // fTPServerToolStripMenuItem // this.fTPServerToolStripMenuItem.Name = "fTPServerToolStripMenuItem"; - this.fTPServerToolStripMenuItem.Size = new System.Drawing.Size(149, 6); + this.fTPServerToolStripMenuItem.Size = new System.Drawing.Size(131, 6); // // hTTPServerToolStripMenuItem // this.hTTPServerToolStripMenuItem.Name = "hTTPServerToolStripMenuItem"; - this.hTTPServerToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.hTTPServerToolStripMenuItem.Size = new System.Drawing.Size(134, 22); this.hTTPServerToolStripMenuItem.Text = "&HTTP Server"; // // fTPServerToolStripMenuItem1 // this.fTPServerToolStripMenuItem1.Name = "fTPServerToolStripMenuItem1"; - this.fTPServerToolStripMenuItem1.Size = new System.Drawing.Size(152, 22); + this.fTPServerToolStripMenuItem1.Size = new System.Drawing.Size(134, 22); this.fTPServerToolStripMenuItem1.Text = "&FTP Server"; // - // mnuObjectModel - // - this.mnuObjectModel.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.mnuObjectModelSep1, - this.mnuObjectModelSelect, - this.mnuObjectModelClear}); - this.mnuObjectModel.Name = "mnuObjectModel"; - this.mnuObjectModel.Size = new System.Drawing.Size(148, 54); - // - // mnuObjectModelSep1 - // - this.mnuObjectModelSep1.Name = "mnuObjectModelSep1"; - this.mnuObjectModelSep1.Size = new System.Drawing.Size(144, 6); - // - // mnuObjectModelSelect - // - this.mnuObjectModelSelect.Name = "mnuObjectModelSelect"; - this.mnuObjectModelSelect.Size = new System.Drawing.Size(147, 22); - this.mnuObjectModelSelect.Text = "&Select from List"; - this.mnuObjectModelSelect.Click += new System.EventHandler(this.mnuObjectModelSelect_Click); - // - // mnuObjectModelClear - // - this.mnuObjectModelClear.Name = "mnuObjectModelClear"; - this.mnuObjectModelClear.Size = new System.Drawing.Size(147, 22); - this.mnuObjectModelClear.Text = "&Clear Selection"; - this.mnuObjectModelClear.Click += new System.EventHandler(this.mnuObjectModelClear_Click); - // - // mnuDataFormat - // - this.mnuDataFormat.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.mnuDataFormatSep1, - this.mnuDataFormatSelect, - this.mnuDataFormatClear}); - this.mnuDataFormat.Name = "mnuDataFormat"; - this.mnuDataFormat.Size = new System.Drawing.Size(148, 54); - // - // mnuDataFormatSep1 - // - this.mnuDataFormatSep1.Name = "mnuDataFormatSep1"; - this.mnuDataFormatSep1.Size = new System.Drawing.Size(144, 6); - // - // mnuDataFormatSelect - // - this.mnuDataFormatSelect.Name = "mnuDataFormatSelect"; - this.mnuDataFormatSelect.Size = new System.Drawing.Size(147, 22); - this.mnuDataFormatSelect.Text = "&Select from List"; - // - // mnuDataFormatClear - // - this.mnuDataFormatClear.Name = "mnuDataFormatClear"; - this.mnuDataFormatClear.Size = new System.Drawing.Size(147, 22); - this.mnuDataFormatClear.Text = "&Clear Selection"; - // // DocumentPropertiesDialogBase // this.AcceptButton = this.cmdOK; @@ -266,8 +202,6 @@ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Document Properties"; this.mnuAccessor.ResumeLayout(false); - this.mnuObjectModel.ResumeLayout(false); - this.mnuDataFormat.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -289,14 +223,6 @@ private System.Windows.Forms.ToolStripSeparator fTPServerToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem hTTPServerToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem fTPServerToolStripMenuItem1; - private System.Windows.Forms.ContextMenuStrip mnuObjectModel; - private System.Windows.Forms.ToolStripSeparator mnuObjectModelSep1; - private System.Windows.Forms.ToolStripMenuItem mnuObjectModelSelect; - private System.Windows.Forms.ToolStripMenuItem mnuObjectModelClear; - private System.Windows.Forms.ContextMenuStrip mnuDataFormat; - private System.Windows.Forms.ToolStripSeparator mnuDataFormatSep1; - private System.Windows.Forms.ToolStripMenuItem mnuDataFormatSelect; - private System.Windows.Forms.ToolStripMenuItem mnuDataFormatClear; } } \ No newline at end of file diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.cs b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.cs index c2d3480e..ab23a092 100644 --- a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.cs +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.cs @@ -19,14 +19,26 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs private DocumentPropertiesDialogMode mvarMode = DocumentPropertiesDialogMode.Open; public DocumentPropertiesDialogMode Mode { get { return mvarMode; } set { mvarMode = value; } } + private ObjectModel mvarInitialObjectModel = null; + private ObjectModel mvarObjectModel = null; - public ObjectModel ObjectModel { get { return mvarObjectModel; } set { mvarObjectModel = value; } } + public ObjectModel ObjectModel { get { return mvarObjectModel; } set { mvarObjectModel = value; mvarInitialObjectModel = value; } } + + private DataFormat mvarInitialDataFormat = null; private DataFormat mvarDataFormat = null; - public DataFormat DataFormat { get { return mvarDataFormat; } set { mvarDataFormat = value; } } + public DataFormat DataFormat { get { return mvarDataFormat; } set { mvarDataFormat = value; mvarInitialDataFormat = value; } } + + private Accessor mvarInitialAccesor = null; private Accessor mvarAccessor = null; - public Accessor Accessor { get { return mvarAccessor; } set { mvarAccessor = value; } } + public Accessor Accessor { get { return mvarAccessor; } set { mvarAccessor = value; mvarInitialAccesor = value; } } + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + RefreshButtons(); + } private void cmdOK_Click(object sender, EventArgs e) { @@ -58,12 +70,86 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs private void cmdObjectModel_Click(object sender, EventArgs e) { - ShowContextMenuBelow(mnuObjectModel, cmdObjectModel); + ObjectModelBrowserPopup dlg = new ObjectModelBrowserPopup(); + dlg.ObjectModel = mvarObjectModel; + + Point loc = PointToScreen(cmdObjectModel.Location); + dlg.Location = new Point(loc.X, loc.Y + cmdObjectModel.Height); + dlg.Size = new Size(Width, 200); + + ObjectModelReference[] omrs = new ObjectModelReference[0]; + + if (mvarMode == DocumentPropertiesDialogMode.Save) + { + // show all dataformats for the current object model + omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(mvarDataFormat.MakeReference()); + } + else if (mvarMode == DocumentPropertiesDialogMode.Open) + { + if (mvarAccessor != null) + { + // show all dataformats for the current accessor + omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels((mvarAccessor as FileAccessor).FileName); + } + else + { + omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(); + } + } + foreach (ObjectModelReference dfr in omrs) + { + dlg.ObjectModels.Add(dfr.Create()); + } + dlg.SelectionChanged += dlgObjectModel_SelectionChanged; + dlg.Show(); } private void cmdDataFormat_Click(object sender, EventArgs e) { - ShowContextMenuBelow(mnuDataFormat, cmdDataFormat); + DataFormatBrowserPopup dlg = new DataFormatBrowserPopup(); + dlg.DataFormat = mvarDataFormat; + + Point loc = PointToScreen(cmdDataFormat.Location); + dlg.Location = new Point(loc.X, loc.Y + cmdDataFormat.Height); + dlg.Size = new Size(Width, 200); + + DataFormatReference[] dfrs = new DataFormatReference[0]; + if (mvarMode == DocumentPropertiesDialogMode.Save) + { + // show all dataformats for the current object model + dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(mvarObjectModel.MakeReference()); + } + else if (mvarMode == DocumentPropertiesDialogMode.Open) + { + if (mvarAccessor != null) + { + // show all dataformats for the current accessor + dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats((mvarAccessor as FileAccessor).FileName); + } + else + { + dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(); + } + } + foreach (DataFormatReference dfr in dfrs) + { + dlg.DataFormats.Add(dfr.Create()); + } + dlg.SelectionChanged += dlgDataFormat_SelectionChanged; + dlg.Show(); + } + + private void dlgObjectModel_SelectionChanged(object sender, EventArgs e) + { + ObjectModelBrowserPopup dlg = (sender as ObjectModelBrowserPopup); + mvarObjectModel = dlg.ObjectModel; + RefreshButtons(); + } + private void dlgDataFormat_SelectionChanged(object sender, EventArgs e) + { + DataFormatBrowserPopup dlg = (sender as DataFormatBrowserPopup); + mvarDataFormat = dlg.DataFormat; + RefreshButtons(); } private void cmdAccessor_Click(object sender, EventArgs e) @@ -91,57 +177,50 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs private void RefreshButtons() { - if (mvarAccessor is FileAccessor) + if (mvarMode == DocumentPropertiesDialogMode.Save) { string filename = (mvarAccessor as FileAccessor).FileName; - DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(filename); - - if (mvarDataFormat == null) + if (!System.IO.File.Exists(filename)) { - if (dfrs.Length > 0) - { - mvarDataFormat = dfrs[0].Create(); - } + filename = (mvarInitialAccesor as FileAccessor).FileName; } - - mnuDataFormat.Items.Clear(); - foreach (DataFormatReference dfr in dfrs) - { - ToolStripMenuItem tsmi = new ToolStripMenuItem(); - tsmi.Text = DataFormatReferenceToString(dfr); - tsmi.Tag = dfr; - tsmi.Click += tsmi_Click; - if (mvarDataFormat != null) - { - if (mvarDataFormat.GetType() == dfr.DataFormatType) - { - tsmi.Checked = true; - } - } - mnuDataFormat.Items.Add(tsmi); - } - - mnuDataFormat.Items.Add(mnuDataFormatSep1); - mnuDataFormat.Items.Add(mnuDataFormatSelect); - mnuDataFormat.Items.Add(mnuDataFormatClear); } - if (mvarObjectModel == null) + else if (mvarMode == DocumentPropertiesDialogMode.Open) { - if (mvarDataFormat != null) - { - ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(mvarDataFormat.MakeReference()); - if (omrs.Length > 0) - { - mvarObjectModel = omrs[0].Create(); - } - } - else if (mvarAccessor is FileAccessor) + if (mvarAccessor is FileAccessor) { string filename = (mvarAccessor as FileAccessor).FileName; - ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(filename); - if (omrs.Length == 1) + DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(filename); + + if (mvarDataFormat == null) { - mvarObjectModel = omrs[0].Create(); + if (dfrs.Length > 0) + { + mvarDataFormat = dfrs[0].Create(); + } + } + else + { + } + } + if (mvarObjectModel == null) + { + if (mvarDataFormat != null) + { + ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(mvarDataFormat.MakeReference()); + if (omrs.Length > 0) + { + mvarObjectModel = omrs[0].Create(); + } + } + else if (mvarAccessor is FileAccessor) + { + string filename = (mvarAccessor as FileAccessor).FileName; + ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels(filename); + if (omrs.Length == 1) + { + mvarObjectModel = omrs[0].Create(); + } } } } @@ -167,6 +246,13 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs cmdOK.Enabled = (mvarObjectModel != null && mvarDataFormat != null && mvarAccessor != null); } + void tsmiObjectModel_Click(object sender, EventArgs e) + { + ToolStripMenuItem tsmi = (sender as ToolStripMenuItem); + mvarObjectModel = (tsmi.Tag as ObjectModelReference).Create(); + RefreshButtons(); + } + private void tsmi_Click(object sender, EventArgs e) { ToolStripMenuItem tsmi = (sender as ToolStripMenuItem); diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.resx b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.resx index 1a30ba6d..273d71bd 100644 --- a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.resx +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/DocumentPropertiesDialog.resx @@ -120,10 +120,4 @@ 17, 17 - - 134, 17 - - - 269, 17 - \ No newline at end of file diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.Designer.cs b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.Designer.cs new file mode 100644 index 00000000..3e82d0e3 --- /dev/null +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.Designer.cs @@ -0,0 +1,115 @@ +namespace UniversalEditor.UserInterface.WindowsForms.Dialogs +{ + partial class ObjectModelBrowserPopup + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lv = new System.Windows.Forms.ListView(); + this.chTitle = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chDescription = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.txtSearch = new System.Windows.Forms.TextBox(); + this.cmdClear = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lv + // + this.lv.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.lv.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chTitle, + this.chDescription}); + this.lv.FullRowSelect = true; + this.lv.GridLines = true; + this.lv.HideSelection = false; + this.lv.Location = new System.Drawing.Point(0, 26); + this.lv.MultiSelect = false; + this.lv.Name = "lv"; + this.lv.Size = new System.Drawing.Size(364, 183); + this.lv.TabIndex = 3; + this.lv.UseCompatibleStateImageBehavior = false; + this.lv.View = System.Windows.Forms.View.Details; + this.lv.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown); + // + // chTitle + // + this.chTitle.Text = "Title"; + // + // chDescription + // + this.chDescription.Text = "Description"; + // + // txtSearch + // + this.txtSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtSearch.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.txtSearch.Location = new System.Drawing.Point(6, 7); + this.txtSearch.Name = "txtSearch"; + this.txtSearch.Size = new System.Drawing.Size(277, 13); + this.txtSearch.TabIndex = 2; + this.txtSearch.TextChanged += new System.EventHandler(this.txtSearch_TextChanged); + this.txtSearch.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSearch_KeyDown); + // + // cmdClear + // + this.cmdClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.cmdClear.FlatStyle = System.Windows.Forms.FlatStyle.System; + this.cmdClear.Location = new System.Drawing.Point(289, 2); + this.cmdClear.Name = "cmdClear"; + this.cmdClear.Size = new System.Drawing.Size(75, 23); + this.cmdClear.TabIndex = 4; + this.cmdClear.Text = "&Clear"; + this.cmdClear.UseVisualStyleBackColor = false; + this.cmdClear.Click += new System.EventHandler(this.cmdClear_Click); + // + // ObjectModelBrowserPopup + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.Window; + this.ClientSize = new System.Drawing.Size(364, 213); + this.ControlBox = false; + this.Controls.Add(this.cmdClear); + this.Controls.Add(this.lv); + this.Controls.Add(this.txtSearch); + this.Name = "ObjectModelBrowserPopup"; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView lv; + private System.Windows.Forms.ColumnHeader chTitle; + private System.Windows.Forms.ColumnHeader chDescription; + private System.Windows.Forms.TextBox txtSearch; + private System.Windows.Forms.Button cmdClear; + + + } +} \ No newline at end of file diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.cs b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.cs new file mode 100644 index 00000000..f7068561 --- /dev/null +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace UniversalEditor.UserInterface.WindowsForms.Dialogs +{ + public partial class ObjectModelBrowserPopup : Form + { + public event EventHandler SelectionChanged; + + public ObjectModelBrowserPopup() + { + InitializeComponent(); + Font = SystemFonts.MenuFont; + } + + protected override void OnDeactivate(EventArgs e) + { + base.OnDeactivate(e); + this.Close(); + } + + private System.Collections.ObjectModel.Collection mvarObjectModels = new System.Collections.ObjectModel.Collection(); + public System.Collections.ObjectModel.Collection ObjectModels { get { return mvarObjectModels; } } + + private ObjectModel mvarObjectModel = null; + public ObjectModel ObjectModel { get { return mvarObjectModel; } set { mvarObjectModel = value; } } + + /* + private void documentTypeSelector1_SelectionFinalized(object sender, EventArgs e) + { + if (documentTypeSelector1.SelectedObject == null) return; + + mvarObjectModel = (documentTypeSelector1.SelectedObject as ObjectModelReference).Create(); + Close(); + + if (SelectionChanged != null) SelectionChanged(this, e); + } + + private void documentTypeSelector1_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + mvarObjectModel = (documentTypeSelector1.SelectedObject as ObjectModel); + Close(); + + if (SelectionChanged != null) SelectionChanged(this, e); + } + else if (e.KeyCode == Keys.Escape) + { + Close(); + } + } + */ + + private string DataFormatFilterCollectionToString(DataFormatFilter.DataFormatFilterCollection collection) + { + StringBuilder sb = new StringBuilder(); + foreach (DataFormatFilter filter in collection) + { + sb.Append(StringArrayToString(filter.FileNameFilters)); + if (collection.IndexOf(filter) < collection.Count - 1) + { + sb.Append("; "); + } + } + return sb.ToString(); + } + + private string StringArrayToString(System.Collections.Specialized.StringCollection collection) + { + StringBuilder sb = new StringBuilder(); + foreach (string s in collection) + { + sb.Append(s); + if (collection.IndexOf(s) < collection.Count - 1) + { + sb.Append(", "); + } + } + return sb.ToString(); + } + + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + UpdateSearch(); + } + + private void UpdateSearch() + { + lv.Items.Clear(); + foreach (ObjectModel df in mvarObjectModels) + { + ObjectModelReference dfr = df.MakeReference(); + if (txtSearch.Text == String.Empty) + { + AddObjectModelToList(dfr); + } + else + { + if ((dfr.Title.ToLower().Contains(txtSearch.Text.ToLower())) + || (dfr.Description.ToLower().Contains(txtSearch.Text.ToLower()))) + { + AddObjectModelToList(dfr); + } + } + } + + if (lv.Items.Count == 1) + { + lv.Items[0].Selected = true; + } + lv.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent); + } + + private void AddObjectModelToList(ObjectModelReference dfr) + { + ListViewItem lvi = new ListViewItem(); + lvi.Text = dfr.Title; + lvi.SubItems.Add(dfr.Description); + lvi.Tag = dfr; + lv.Items.Add(lvi); + } + + private void txtSearch_TextChanged(object sender, EventArgs e) + { + UpdateSearch(); + } + + private void lv_ItemActivate(object sender, EventArgs e) + { + if (lv.SelectedItems.Count != 1) return; + + mvarObjectModel = (lv.SelectedItems[0].Tag as ObjectModelReference).Create(); + if (SelectionChanged != null) SelectionChanged(this, e); + + Close(); + } + + private void txtSearch_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + if (lv.SelectedItems.Count != 1) return; + + mvarObjectModel = (lv.SelectedItems[0].Tag as ObjectModelReference).Create(); + if (SelectionChanged != null) SelectionChanged(this, e); + + Close(); + } + else if (e.KeyCode == Keys.Escape) + { + Close(); + } + } + + private void cmdClear_Click(object sender, EventArgs e) + { + mvarObjectModel = null; + if (SelectionChanged != null) SelectionChanged(this, e); + Close(); + } + } +} diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.resx b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/Dialogs/ObjectModelBrowserPopup.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/MainWindow.cs b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/MainWindow.cs index 83ea5584..6cbddd78 100644 --- a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/MainWindow.cs +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/MainWindow.cs @@ -1012,9 +1012,21 @@ namespace UniversalEditor.UserInterface.WindowsForms if (FileName == null) { DocumentPropertiesDialog dlg = new DocumentPropertiesDialog(); + dlg.ObjectModel = doc.ObjectModel; + dlg.DataFormat = doc.DataFormat; + dlg.Accessor = doc.Accessor; + dlg.Mode = DocumentPropertiesDialogMode.Save; if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { dfr = dlg.DataFormat.MakeReference(); + + // TODO: Rewrite Save code to make everything use Accessor instead + // of FileName to support multiple types of accessors + FileName = (dlg.Accessor as FileAccessor).FileName; + } + else + { + return false; } /* diff --git a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/UniversalEditor.UserInterface.WindowsForms.DesktopApplication.csproj b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/UniversalEditor.UserInterface.WindowsForms.DesktopApplication.csproj index 77ef6748..24e6a86e 100644 --- a/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/UniversalEditor.UserInterface.WindowsForms.DesktopApplication.csproj +++ b/CSharp/Environments/WindowsForms/Engines/UniversalEditor.UserInterface.WindowsForms.DesktopApplication/UniversalEditor.UserInterface.WindowsForms.DesktopApplication.csproj @@ -53,6 +53,18 @@ OutputWindow.cs + + Form + + + ObjectModelBrowserPopup.cs + + + Form + + + DataFormatBrowserPopup.cs + Form @@ -210,9 +222,15 @@ AboutDialog.cs + + ObjectModelBrowserPopup.cs + DataFormatAboutDialog.cs + + DataFormatBrowserPopup.cs + DataFormatOptionsDialog.cs diff --git a/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.Designer.cs b/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.Designer.cs index 43a67ec3..18be31da 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.Designer.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.Designer.cs @@ -103,6 +103,7 @@ this.tvObjectModels.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.tvObjectModels_AfterCollapse); this.tvObjectModels.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.tvObjectModels_AfterExpand); this.tvObjectModels.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvObjectModels_AfterSelect); + this.tvObjectModels.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.tvObjectModels_MouseDoubleClick); // // DocumentTypeSelector // diff --git a/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.cs b/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.cs index 935cf08a..05863b6b 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface.WindowsForms/Controls/DocumentTypeSelector.cs @@ -10,6 +10,7 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls [DefaultEvent("SelectionChanged")] public partial class DocumentTypeSelector : UserControl { + public event EventHandler SelectionFinalized; public event EventHandler SelectionChanged; public DocumentTypeSelector() @@ -223,6 +224,12 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls } + protected void OnSelectionFinalized(EventArgs e) + { + OnSelectionChanged(e); + if (SelectionFinalized != null) SelectionFinalized(this, e); + } + private void txtSearch_TextChanged(object sender, EventArgs e) { RefreshList(); @@ -263,6 +270,14 @@ namespace UniversalEditor.UserInterface.WindowsForms.Controls e.Node.SelectedImageKey = "generic-folder-open"; } } + + private void tvObjectModels_MouseDoubleClick(object sender, MouseEventArgs e) + { + if (tvObjectModels.SelectedNode != null) + { + OnSelectionFinalized(e); + } + } } [Flags()]