Browse Source

fix some CommandManager-related bugs in ResourceEditor - make it suitable for translation-related usage

pull/505/merge
Siegfried Pammer 11 years ago
parent
commit
4e4ee835ac
  1. 4
      src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs
  2. 2
      src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj
  3. 41
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs
  4. 52
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs
  5. 5
      src/Main/Base/Project/WinForms/IWinFormsService.cs
  6. 2
      src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs
  7. 6
      src/Main/SharpDevelop/WinForms/WinFormsService.cs

4
src/AddIns/DisplayBindings/HexEditor/Project/Src/View/HexEditView.cs

@ -136,12 +136,12 @@ namespace HexEditor.View
void DocumentChanged(object sender, EventArgs e) void DocumentChanged(object sender, EventArgs e)
{ {
if (PrimaryFile != null) PrimaryFile.MakeDirty(); if (PrimaryFile != null) PrimaryFile.MakeDirty();
CommandManager.InvalidateRequerySuggested(); SD.WinForms.InvalidateCommands();
} }
void SelectionChanged(object sender, System.EventArgs e) void SelectionChanged(object sender, System.EventArgs e)
{ {
CommandManager.InvalidateRequerySuggested(); SD.WinForms.InvalidateCommands();
} }
} }
} }

2
src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj

@ -54,7 +54,7 @@
<Compile Include="Src\Commands\EditCommentCommand.cs" /> <Compile Include="Src\Commands\EditCommentCommand.cs" />
<Compile Include="Src\Commands\RenameEntryCommand.cs" /> <Compile Include="Src\Commands\RenameEntryCommand.cs" />
<Compile Include="Src\Commands\SaveEntryAsCommand.cs" /> <Compile Include="Src\Commands\SaveEntryAsCommand.cs" />
<Compile Include="Src\DisplayDefinition.cs" /> <Compile Include="Src\ResourceEditorDisplayBinding.cs" />
<Compile Include="Src\ResourceEdit\AbstractImageView.cs"> <Compile Include="Src\ResourceEdit\AbstractImageView.cs">
<SubType>Component</SubType> <SubType>Component</SubType>
</Compile> </Compile>

41
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceEditor.cs

@ -21,6 +21,7 @@ using System.Drawing;
using System.Windows.Forms; using System.Windows.Forms;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.WinForms;
namespace ResourceEditor namespace ResourceEditor
{ {
@ -39,7 +40,7 @@ namespace ResourceEditor
protected ListViewViewState internalState = ListViewViewState.Nothing; protected ListViewViewState internalState = ListViewViewState.Nothing;
public System.Enum InternalState { public Enum InternalState {
get { get {
return internalState; return internalState;
} }
@ -55,14 +56,14 @@ namespace ResourceEditor
public ResourceEditorControl() public ResourceEditorControl()
{ {
InitializeComponent(); 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) { if(resourceList.SelectedItems.Count == 0) {
internalState = ListViewViewState.Nothing; internalState = ListViewViewState.Nothing;
showResource(null); ShowResource(null);
} else { } else {
internalState = ListViewViewState.ItemsSelected; internalState = ListViewViewState.ItemsSelected;
} }
@ -72,7 +73,7 @@ namespace ResourceEditor
} }
object key = resourceList.SelectedItems[0].Text; object key = resourceList.SelectedItems[0].Text;
ResourceItem item = (ResourceItem)resourceList.Resources[key.ToString()]; ResourceItem item = (ResourceItem)resourceList.Resources[key.ToString()];
showResource(item); ShowResource(item);
} }
void InitializeComponent() void InitializeComponent()
@ -92,17 +93,17 @@ namespace ResourceEditor
Controls.Add(splitter); Controls.Add(splitter);
Controls.Add(resourceList); 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); 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) { if(panel.Controls.Count == 1) {
Control control = panel.Controls[0]; Control control = panel.Controls[0];
panel.Controls.Remove(control); panel.Controls.Remove(control);
@ -114,41 +115,41 @@ namespace ResourceEditor
panel.Controls.Add(viewer); panel.Controls.Add(viewer);
currentView = (IResourceView)viewer; currentView = (IResourceView)viewer;
currentView.WriteProtected = resourceList.WriteProtected; 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); resourceList.SetResourceValue(e.ResourceName, e.ResourceValue);
} }
void showResource(ResourceItem item) void ShowResource(ResourceItem item)
{ {
if(item == null) { if(item == null) {
showView(null); ShowView(null);
return; return;
} }
if (item.ResourceValue is Icon) { if (item.ResourceValue is Icon) {
IconView iv = new IconView(item); IconView iv = new IconView(item);
showView(iv); ShowView(iv);
} else if(item.ResourceValue is Bitmap) { } else if(item.ResourceValue is Bitmap) {
BitmapView bv = new BitmapView(item); BitmapView bv = new BitmapView(item);
showView(bv); ShowView(bv);
} else if(item.ResourceValue is Cursor) { } else if(item.ResourceValue is Cursor) {
CursorView cv = new CursorView(item); CursorView cv = new CursorView(item);
showView(cv); ShowView(cv);
} else if(item.ResourceValue is string) { } else if(item.ResourceValue is string) {
TextView tv = new TextView(item); TextView tv = new TextView(item);
showView(tv); ShowView(tv);
} else if(item.ResourceValue is byte[]) { } else if(item.ResourceValue is byte[]) {
BinaryView bv = new BinaryView(item); BinaryView bv = new BinaryView(item);
showView(bv); ShowView(bv);
} else if(item.ResourceValue is bool) { } else if(item.ResourceValue is bool) {
BooleanView bv = new BooleanView(item); BooleanView bv = new BooleanView(item);
showView(bv); ShowView(bv);
} else { } else {
showView(null); ShowView(null);
} }
} }

52
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs → src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs

@ -32,7 +32,6 @@ namespace ResourceEditor
{ {
public class ResourceEditorDisplayBinding : IDisplayBinding public class ResourceEditorDisplayBinding : IDisplayBinding
{ {
// IDisplayBinding interface
public bool CanCreateContentForFile(FileName fileName) public bool CanCreateContentForFile(FileName fileName)
{ {
return true; // definition in .addin does extension-based filtering return true; // definition in .addin does extension-based filtering
@ -54,9 +53,6 @@ namespace ResourceEditor
} }
} }
/// <summary>
/// This class describes the main functionality of a language codon
/// </summary>
public class ResourceEditWrapper : AbstractViewContentHandlingLoadErrors, IClipboardHandler public class ResourceEditWrapper : AbstractViewContentHandlingLoadErrors, IClipboardHandler
{ {
ResourceEditorControl resourceEditor = new ResourceEditorControl(); ResourceEditorControl resourceEditor = new ResourceEditorControl();
@ -73,14 +69,16 @@ namespace ResourceEditor
void SetDirty(object sender, EventArgs e) void SetDirty(object sender, EventArgs e)
{ {
this.PrimaryFile.MakeDirty(); PrimaryFile.MakeDirty();
SD.WinForms.InvalidateCommands();
} }
public ResourceEditWrapper(OpenedFile file) public ResourceEditWrapper(OpenedFile file)
{ {
this.TabPageText = "Resource editor"; this.TabPageText = "Resource editor";
base.UserContent = resourceEditor; UserContent = resourceEditor;
resourceEditor.ResourceList.Changed += new EventHandler(SetDirty); resourceEditor.ResourceList.Changed += SetDirty;
resourceEditor.ResourceList.ItemSelectionChanged += (sender, e) => SD.WinForms.InvalidateCommands();
this.Files.Add(file); this.Files.Add(file);
} }
@ -104,7 +102,7 @@ namespace ResourceEditor
public bool EnableCut public bool EnableCut
{ {
get { get {
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { if (resourceEditor.ResourceList.IsEditing) {
return false; return false;
} }
return resourceEditor.ResourceList.SelectedItems.Count > 0; return resourceEditor.ResourceList.SelectedItems.Count > 0;
@ -114,7 +112,7 @@ namespace ResourceEditor
public bool EnableCopy public bool EnableCopy
{ {
get { get {
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { if (resourceEditor.ResourceList.IsEditing) {
return false; return false;
} }
return resourceEditor.ResourceList.SelectedItems.Count > 0; return resourceEditor.ResourceList.SelectedItems.Count > 0;
@ -124,7 +122,7 @@ namespace ResourceEditor
public bool EnablePaste public bool EnablePaste
{ {
get { get {
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { if (resourceEditor.ResourceList.IsEditing) {
return false; return false;
} }
return true; return true;
@ -134,7 +132,7 @@ namespace ResourceEditor
public bool EnableDelete public bool EnableDelete
{ {
get { get {
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { if (resourceEditor.ResourceList.IsEditing) {
return false; return false;
} }
return resourceEditor.ResourceList.SelectedItems.Count > 0; return resourceEditor.ResourceList.SelectedItems.Count > 0;
@ -144,7 +142,7 @@ namespace ResourceEditor
public bool EnableSelectAll public bool EnableSelectAll
{ {
get { get {
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) { if (resourceEditor.ResourceList.IsEditing) {
return false; return false;
} }
return true; return true;
@ -241,33 +239,17 @@ namespace ResourceEditor
public void Delete() public void Delete()
{ {
if (resourceEditor.ResourceList.WriteProtected) { var resourceList = resourceEditor.ResourceList;
if (resourceList.WriteProtected || resourceList.SelectedItems.Count == 0)
return; return;
} if (!SD.MessageService.AskQuestion("${res:ResourceEditor.DeleteEntry.Confirm}", "${res:ResourceEditor.DeleteEntry.Title}"))
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) {
return; return;
}
foreach (ListViewItem item in resourceEditor.ResourceList.SelectedItems) { foreach (ListViewItem item in resourceList.SelectedItems) {
//// not clear why this check is present here - seems to be extra resourceList.Resources.Remove(item.Text);
////if (item.Text != null) { resourceList.Items.Remove(item);
resourceEditor.ResourceList.Resources.Remove(item.Text);
resourceEditor.ResourceList.Items.Remove(item);
// and set dirty flag // and set dirty flag
resourceEditor.ResourceList.OnChanged(); resourceList.OnChanged();
} }
} }

5
src/Main/Base/Project/WinForms/IWinFormsService.cs

@ -142,5 +142,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
/// </param> /// </param>
/// <returns>SDWindowsFormsHost instance</returns> /// <returns>SDWindowsFormsHost instance</returns>
CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false); CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false);
/// <summary>
/// Provides access to <see cref="System.Windows.Input.CommandManager.RequerySuggested"/> from Windows Forms-based AddIns.
/// </summary>
void InvalidateCommands();
} }
} }

2
src/Main/Base/Project/Workbench/AbstractViewContentHandlingLoadErrors.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
/// </summary> /// </summary>
public abstract class AbstractViewContentHandlingLoadErrors : AbstractViewContent public abstract class AbstractViewContentHandlingLoadErrors : AbstractViewContent
{ {
ContentPresenter contentControl = new ContentPresenter(); readonly ContentPresenter contentControl = new ContentPresenter();
object userContent; object userContent;
protected AbstractViewContentHandlingLoadErrors() protected AbstractViewContentHandlingLoadErrors()

6
src/Main/SharpDevelop/WinForms/WinFormsService.cs

@ -22,7 +22,6 @@ using System.Drawing.Printing;
using System.Windows.Forms; using System.Windows.Forms;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Core.WinForms; using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Widgets; using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.SharpDevelop.Workbench; using ICSharpCode.SharpDevelop.Workbench;
@ -195,5 +194,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
DisposeChild = false DisposeChild = false
}; };
} }
public void InvalidateCommands()
{
System.Windows.Input.CommandManager.InvalidateRequerySuggested();
}
} }
} }

Loading…
Cancel
Save