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 @@ -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();
}
}
}

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

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

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

@ -21,6 +21,7 @@ using System.Drawing; @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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);
}
}

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

@ -32,7 +32,6 @@ namespace ResourceEditor @@ -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 @@ -54,9 +53,6 @@ namespace ResourceEditor
}
}
/// <summary>
/// This class describes the main functionality of a language codon
/// </summary>
public class ResourceEditWrapper : AbstractViewContentHandlingLoadErrors, IClipboardHandler
{
ResourceEditorControl resourceEditor = new ResourceEditorControl();
@ -73,14 +69,16 @@ namespace ResourceEditor @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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();
}
}

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

@ -142,5 +142,10 @@ namespace ICSharpCode.SharpDevelop.WinForms @@ -142,5 +142,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
/// </param>
/// <returns>SDWindowsFormsHost instance</returns>
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 @@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
/// </summary>
public abstract class AbstractViewContentHandlingLoadErrors : AbstractViewContent
{
ContentPresenter contentControl = new ContentPresenter();
readonly ContentPresenter contentControl = new ContentPresenter();
object userContent;
protected AbstractViewContentHandlingLoadErrors()

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

@ -22,7 +22,6 @@ using System.Drawing.Printing; @@ -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 @@ -195,5 +194,10 @@ namespace ICSharpCode.SharpDevelop.WinForms
DisposeChild = false
};
}
public void InvalidateCommands()
{
System.Windows.Input.CommandManager.InvalidateRequerySuggested();
}
}
}

Loading…
Cancel
Save