From d80a8281cc03e18ca805921259200e113e8fea57 Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Mon, 2 Dec 2019 07:54:51 -0500 Subject: [PATCH] this fixes the popups, but GTK file dialogs are case-sensitive... which totally messes up our associations --- .../UniversalEditorFileBrowserControl.cs | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/Controls/UniversalEditorFileBrowserControl.cs b/CSharp/Libraries/UniversalEditor.UserInterface/Controls/UniversalEditorFileBrowserControl.cs index 588217a9..677a3528 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/Controls/UniversalEditorFileBrowserControl.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/Controls/UniversalEditorFileBrowserControl.cs @@ -24,6 +24,8 @@ using MBS.Framework.UserInterface.Layouts; using MBS.Framework.UserInterface.Controls.FileBrowser; using MBS.Framework.UserInterface.Controls; using System.Collections.Generic; +using MBS.Framework.UserInterface.Dialogs; +using System.Text; namespace UniversalEditor.UserInterface.Controls { @@ -51,9 +53,9 @@ namespace UniversalEditor.UserInterface.Controls this.Controls.Add (_Browser, new BoxLayout.Constraints (true, true)); cboObjectModel = new GenericBrowserButton (); - // cboObjectModel.SelectedObject = ObjectModel; - - cboObjectModel.Text = "Object _model: (not selected)"; + cboObjectModel.SelectedObject = ObjectModel; + cboObjectModel.SelectionChanged += cboObjectModel_SelectionChanged; + cboObjectModel.Label = "Object _model: "; ObjectModelReference[] omrs = new ObjectModelReference[0]; @@ -88,7 +90,8 @@ namespace UniversalEditor.UserInterface.Controls } cboDataFormat = new GenericBrowserButton (); - cboDataFormat.Text = "Data _format: (not selected)"; + cboDataFormat.SelectionChanged += cboDataFormat_SelectionChanged; + cboDataFormat.Label = "Data _format: "; DataFormatReference[] dfrs = new DataFormatReference[0]; if (Mode == FileBrowserMode.Save) @@ -149,6 +152,38 @@ namespace UniversalEditor.UserInterface.Controls this.Controls.Add (_Table, new BoxLayout.Constraints (false, false)); } + void cboDataFormat_SelectionChanged(object sender, EventArgs e) + { + _Browser.FileNameFilters.Clear(); + + Association[] assocs = Association.FromCriteria(new AssociationCriteria { ObjectModel = cboObjectModel.SelectedObject.MakeReference(), DataFormat = cboDataFormat.SelectedObject.MakeReference() }); + for (int i = 0; i < assocs.Length; i++) + { + for (int j = 0; j < assocs[i].Filters.Count; j++) + { + FileDialogFileNameFilter filter = new FileDialogFileNameFilter(); + filter.Title = assocs[i].Filters[j].Title; + + StringBuilder sb = new StringBuilder(); + for (int k = 0; k < assocs[i].Filters[j].FileNameFilters.Count; k++) + { + sb.Append(assocs[i].Filters[j].FileNameFilters[k]); + if (k < assocs[i].Filters[j].FileNameFilters.Count - 1) + sb.Append('|'); + } + + filter.Filter = sb.ToString(); + _Browser.FileNameFilters.Add(filter); + } + } + } + + void cboObjectModel_SelectionChanged(object sender, EventArgs e) + { + cboDataFormat.OpenDropDown(); + } + + public event EventHandler ItemActivated; protected virtual void OnItemActivated (EventArgs e) {