From 4e4ee835acded24b923106d0f5e92a7a3cb6484c Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 15 Aug 2014 17:43:19 +0200 Subject: [PATCH] fix some CommandManager-related bugs in ResourceEditor - make it suitable for translation-related usage --- .../HexEditor/Project/Src/View/HexEditView.cs | 4 +- .../Project/ResourceEditor.csproj | 2 +- .../Src/ResourceEdit/ResourceEditor.cs | 41 ++++++++------- ...ion.cs => ResourceEditorDisplayBinding.cs} | 52 ++++++------------- .../Base/Project/WinForms/IWinFormsService.cs | 5 ++ .../AbstractViewContentHandlingLoadErrors.cs | 2 +- .../SharpDevelop/WinForms/WinFormsService.cs | 6 ++- 7 files changed, 52 insertions(+), 60 deletions(-) rename src/AddIns/DisplayBindings/ResourceEditor/Project/Src/{DisplayDefinition.cs => ResourceEditorDisplayBinding.cs} (79%) diff --git a/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs b/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs index bfe4d78981..cfeb86cb19 100644 --- a/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs +++ b/src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs @@ -136,12 +136,12 @@ namespace HexEditor.View void DocumentChanged(object sender, EventArgs e) { if (PrimaryFile != null) PrimaryFile.MakeDirty(); - CommandManager.InvalidateRequerySuggested(); + SD.WinForms.InvalidateCommands(); } void SelectionChanged(object sender, System.EventArgs e) { - CommandManager.InvalidateRequerySuggested(); + SD.WinForms.InvalidateCommands(); } } } diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj index 6b2f2acc10..58b4161739 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj @@ -54,7 +54,7 @@ - + Component diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs index ff5ceefb46..b81caa748d 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs @@ -21,6 +21,7 @@ using System.Drawing; using System.Windows.Forms; using ICSharpCode.Core; +using ICSharpCode.SharpDevelop.WinForms; namespace ResourceEditor { @@ -39,7 +40,7 @@ namespace ResourceEditor protected ListViewViewState internalState = ListViewViewState.Nothing; - public System.Enum InternalState { + public Enum InternalState { get { return internalState; } @@ -55,14 +56,14 @@ namespace ResourceEditor public ResourceEditorControl() { InitializeComponent(); - resourceList.SelectedIndexChanged += new EventHandler(resourceListSelectionChanged); + resourceList.SelectedIndexChanged += ResourceListSelectionChanged; } - void resourceListSelectionChanged(object sender, EventArgs e) + void ResourceListSelectionChanged(object sender, EventArgs e) { if(resourceList.SelectedItems.Count == 0) { internalState = ListViewViewState.Nothing; - showResource(null); + ShowResource(null); } else { internalState = ListViewViewState.ItemsSelected; } @@ -72,7 +73,7 @@ namespace ResourceEditor } object key = resourceList.SelectedItems[0].Text; ResourceItem item = (ResourceItem)resourceList.Resources[key.ToString()]; - showResource(item); + ShowResource(item); } void InitializeComponent() @@ -92,17 +93,17 @@ namespace ResourceEditor Controls.Add(splitter); Controls.Add(resourceList); - this.Resize += new EventHandler(initializeLayout); + this.Resize += InitializeLayout; } - void initializeLayout(object sender, EventArgs e) + void InitializeLayout(object sender, EventArgs e) { resourceList.Height = Convert.ToInt32(0.75 * Height); } - void showView(Control viewer) + void ShowView(Control viewer) { - // remvoe old view if there is one + // remove old view if there is one if(panel.Controls.Count == 1) { Control control = panel.Controls[0]; panel.Controls.Remove(control); @@ -114,41 +115,41 @@ namespace ResourceEditor panel.Controls.Add(viewer); currentView = (IResourceView)viewer; currentView.WriteProtected = resourceList.WriteProtected; - currentView.ResourceChanged += new ResourceChangedEventHandler(viewResourceChanged); + currentView.ResourceChanged += ViewResourceChanged; } } - void viewResourceChanged(object sender, ResourceEventArgs e) + void ViewResourceChanged(object sender, ResourceEventArgs e) { resourceList.SetResourceValue(e.ResourceName, e.ResourceValue); } - void showResource(ResourceItem item) + void ShowResource(ResourceItem item) { if(item == null) { - showView(null); + ShowView(null); return; } if (item.ResourceValue is Icon) { IconView iv = new IconView(item); - showView(iv); + ShowView(iv); } else if(item.ResourceValue is Bitmap) { BitmapView bv = new BitmapView(item); - showView(bv); + ShowView(bv); } else if(item.ResourceValue is Cursor) { CursorView cv = new CursorView(item); - showView(cv); + ShowView(cv); } else if(item.ResourceValue is string) { TextView tv = new TextView(item); - showView(tv); + ShowView(tv); } else if(item.ResourceValue is byte[]) { BinaryView bv = new BinaryView(item); - showView(bv); + ShowView(bv); } else if(item.ResourceValue is bool) { BooleanView bv = new BooleanView(item); - showView(bv); + ShowView(bv); } else { - showView(null); + ShowView(null); } } diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs similarity index 79% rename from src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs rename to src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs index 28ad9149da..6fc0f754c0 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs @@ -32,7 +32,6 @@ namespace ResourceEditor { public class ResourceEditorDisplayBinding : IDisplayBinding { - // IDisplayBinding interface public bool CanCreateContentForFile(FileName fileName) { return true; // definition in .addin does extension-based filtering @@ -54,9 +53,6 @@ namespace ResourceEditor } } - /// - /// This class describes the main functionality of a language codon - /// public class ResourceEditWrapper : AbstractViewContentHandlingLoadErrors, IClipboardHandler { ResourceEditorControl resourceEditor = new ResourceEditorControl(); @@ -73,14 +69,16 @@ namespace ResourceEditor void SetDirty(object sender, EventArgs e) { - this.PrimaryFile.MakeDirty(); + PrimaryFile.MakeDirty(); + SD.WinForms.InvalidateCommands(); } public ResourceEditWrapper(OpenedFile file) { this.TabPageText = "Resource editor"; - base.UserContent = resourceEditor; - resourceEditor.ResourceList.Changed += new EventHandler(SetDirty); + UserContent = resourceEditor; + resourceEditor.ResourceList.Changed += SetDirty; + resourceEditor.ResourceList.ItemSelectionChanged += (sender, e) => SD.WinForms.InvalidateCommands(); this.Files.Add(file); } @@ -104,7 +102,7 @@ namespace ResourceEditor public bool EnableCut { get { - if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { + if (resourceEditor.ResourceList.IsEditing) { return false; } return resourceEditor.ResourceList.SelectedItems.Count > 0; @@ -114,7 +112,7 @@ namespace ResourceEditor public bool EnableCopy { get { - if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { + if (resourceEditor.ResourceList.IsEditing) { return false; } return resourceEditor.ResourceList.SelectedItems.Count > 0; @@ -124,7 +122,7 @@ namespace ResourceEditor public bool EnablePaste { get { - if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { + if (resourceEditor.ResourceList.IsEditing) { return false; } return true; @@ -134,7 +132,7 @@ namespace ResourceEditor public bool EnableDelete { get { - if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { + if (resourceEditor.ResourceList.IsEditing) { return false; } return resourceEditor.ResourceList.SelectedItems.Count > 0; @@ -144,7 +142,7 @@ namespace ResourceEditor public bool EnableSelectAll { get { - if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { + if (resourceEditor.ResourceList.IsEditing) { return false; } return true; @@ -241,33 +239,17 @@ namespace ResourceEditor public void Delete() { - if (resourceEditor.ResourceList.WriteProtected) { + var resourceList = resourceEditor.ResourceList; + if (resourceList.WriteProtected || resourceList.SelectedItems.Count == 0) return; - } - - if (resourceEditor.ResourceList.SelectedItems.Count==0) return; // nothing to do - DialogResult rc; - - try { - - rc=MessageBox.Show(ResourceService.GetString("ResourceEditor.DeleteEntry.Confirm"),ResourceService.GetString("ResourceEditor.DeleteEntry.Title"),MessageBoxButtons.OKCancel); - } - catch { - // when something happens - like resource is missing - try to use default message - rc = MessageBox.Show("Do you really want to delete?","Delete-Warning!",MessageBoxButtons.OKCancel); - } - - if (rc != DialogResult.OK) { + if (!SD.MessageService.AskQuestion("${res:ResourceEditor.DeleteEntry.Confirm}", "${res:ResourceEditor.DeleteEntry.Title}")) return; - } - foreach (ListViewItem item in resourceEditor.ResourceList.SelectedItems) { - //// not clear why this check is present here - seems to be extra - ////if (item.Text != null) { - resourceEditor.ResourceList.Resources.Remove(item.Text); - resourceEditor.ResourceList.Items.Remove(item); + foreach (ListViewItem item in resourceList.SelectedItems) { + resourceList.Resources.Remove(item.Text); + resourceList.Items.Remove(item); // and set dirty flag - resourceEditor.ResourceList.OnChanged(); + resourceList.OnChanged(); } } diff --git a/src/Main/Base/Project/WinForms/IWinFormsService.cs b/src/Main/Base/Project/WinForms/IWinFormsService.cs index 4af46757f2..1eb510550c 100644 --- a/src/Main/Base/Project/WinForms/IWinFormsService.cs +++ b/src/Main/Base/Project/WinForms/IWinFormsService.cs @@ -142,5 +142,10 @@ namespace ICSharpCode.SharpDevelop.WinForms /// /// SDWindowsFormsHost instance CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false); + + /// + /// Provides access to from Windows Forms-based AddIns. + /// + void InvalidateCommands(); } } diff --git a/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs b/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs index 37e20e3b2e..582fe34d29 100644 --- a/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs +++ b/src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs @@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Workbench /// public abstract class AbstractViewContentHandlingLoadErrors : AbstractViewContent { - ContentPresenter contentControl = new ContentPresenter(); + readonly ContentPresenter contentControl = new ContentPresenter(); object userContent; protected AbstractViewContentHandlingLoadErrors() diff --git a/src/Main/SharpDevelop/WinForms/WinFormsService.cs b/src/Main/SharpDevelop/WinForms/WinFormsService.cs index 03be27db7c..5500fea972 100644 --- a/src/Main/SharpDevelop/WinForms/WinFormsService.cs +++ b/src/Main/SharpDevelop/WinForms/WinFormsService.cs @@ -22,7 +22,6 @@ using System.Drawing.Printing; using System.Windows.Forms; using ICSharpCode.Core; using ICSharpCode.Core.WinForms; -using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Widgets; using ICSharpCode.SharpDevelop.Workbench; @@ -195,5 +194,10 @@ namespace ICSharpCode.SharpDevelop.WinForms DisposeChild = false }; } + + public void InvalidateCommands() + { + System.Windows.Input.CommandManager.InvalidateRequerySuggested(); + } } }