Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 4e4ee83

Browse files
fix some CommandManager-related bugs in ResourceEditor - make it suitable for translation-related usage
1 parent 4db8797 commit 4e4ee83

7 files changed

Lines changed: 52 additions & 60 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,12 @@ public void Redo()
136136
void DocumentChanged(object sender, EventArgs e)
137137
{
138138
if (PrimaryFile != null) PrimaryFile.MakeDirty();
139-
CommandManager.InvalidateRequerySuggested();
139+
SD.WinForms.InvalidateCommands();
140140
}
141141

142142
void SelectionChanged(object sender, System.EventArgs e)
143143
{
144-
CommandManager.InvalidateRequerySuggested();
144+
SD.WinForms.InvalidateCommands();
145145
}
146146
}
147147
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
<Compile Include="Src\Commands\EditCommentCommand.cs" />
5555
<Compile Include="Src\Commands\RenameEntryCommand.cs" />
5656
<Compile Include="Src\Commands\SaveEntryAsCommand.cs" />
57-
<Compile Include="Src\DisplayDefinition.cs" />
57+
<Compile Include="Src\ResourceEditorDisplayBinding.cs" />
5858
<Compile Include="Src\ResourceEdit\AbstractImageView.cs">
5959
<SubType>Component</SubType>
6060
</Compile>

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

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using System.Windows.Forms;
2222

2323
using ICSharpCode.Core;
24+
using ICSharpCode.SharpDevelop.WinForms;
2425

2526
namespace ResourceEditor
2627
{
@@ -39,7 +40,7 @@ public enum ListViewViewState {
3940

4041
protected ListViewViewState internalState = ListViewViewState.Nothing;
4142

42-
public System.Enum InternalState {
43+
public Enum InternalState {
4344
get {
4445
return internalState;
4546
}
@@ -55,14 +56,14 @@ public ResourceList ResourceList
5556
public ResourceEditorControl()
5657
{
5758
InitializeComponent();
58-
resourceList.SelectedIndexChanged += new EventHandler(resourceListSelectionChanged);
59+
resourceList.SelectedIndexChanged += ResourceListSelectionChanged;
5960
}
6061

61-
void resourceListSelectionChanged(object sender, EventArgs e)
62+
void ResourceListSelectionChanged(object sender, EventArgs e)
6263
{
6364
if(resourceList.SelectedItems.Count == 0) {
6465
internalState = ListViewViewState.Nothing;
65-
showResource(null);
66+
ShowResource(null);
6667
} else {
6768
internalState = ListViewViewState.ItemsSelected;
6869
}
@@ -72,7 +73,7 @@ void resourceListSelectionChanged(object sender, EventArgs e)
7273
}
7374
object key = resourceList.SelectedItems[0].Text;
7475
ResourceItem item = (ResourceItem)resourceList.Resources[key.ToString()];
75-
showResource(item);
76+
ShowResource(item);
7677
}
7778

7879
void InitializeComponent()
@@ -92,17 +93,17 @@ void InitializeComponent()
9293
Controls.Add(splitter);
9394
Controls.Add(resourceList);
9495

95-
this.Resize += new EventHandler(initializeLayout);
96+
this.Resize += InitializeLayout;
9697
}
9798

98-
void initializeLayout(object sender, EventArgs e)
99+
void InitializeLayout(object sender, EventArgs e)
99100
{
100101
resourceList.Height = Convert.ToInt32(0.75 * Height);
101102
}
102103

103-
void showView(Control viewer)
104+
void ShowView(Control viewer)
104105
{
105-
// remvoe old view if there is one
106+
// remove old view if there is one
106107
if(panel.Controls.Count == 1) {
107108
Control control = panel.Controls[0];
108109
panel.Controls.Remove(control);
@@ -114,41 +115,41 @@ void showView(Control viewer)
114115
panel.Controls.Add(viewer);
115116
currentView = (IResourceView)viewer;
116117
currentView.WriteProtected = resourceList.WriteProtected;
117-
currentView.ResourceChanged += new ResourceChangedEventHandler(viewResourceChanged);
118+
currentView.ResourceChanged += ViewResourceChanged;
118119
}
119120
}
120121

121-
void viewResourceChanged(object sender, ResourceEventArgs e)
122+
void ViewResourceChanged(object sender, ResourceEventArgs e)
122123
{
123124
resourceList.SetResourceValue(e.ResourceName, e.ResourceValue);
124125
}
125126

126-
void showResource(ResourceItem item)
127+
void ShowResource(ResourceItem item)
127128
{
128129
if(item == null) {
129-
showView(null);
130+
ShowView(null);
130131
return;
131132
}
132133
if (item.ResourceValue is Icon) {
133134
IconView iv = new IconView(item);
134-
showView(iv);
135+
ShowView(iv);
135136
} else if(item.ResourceValue is Bitmap) {
136137
BitmapView bv = new BitmapView(item);
137-
showView(bv);
138+
ShowView(bv);
138139
} else if(item.ResourceValue is Cursor) {
139140
CursorView cv = new CursorView(item);
140-
showView(cv);
141+
ShowView(cv);
141142
} else if(item.ResourceValue is string) {
142143
TextView tv = new TextView(item);
143-
showView(tv);
144+
ShowView(tv);
144145
} else if(item.ResourceValue is byte[]) {
145146
BinaryView bv = new BinaryView(item);
146-
showView(bv);
147+
ShowView(bv);
147148
} else if(item.ResourceValue is bool) {
148149
BooleanView bv = new BooleanView(item);
149-
showView(bv);
150+
ShowView(bv);
150151
} else {
151-
showView(null);
152+
ShowView(null);
152153
}
153154
}
154155

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs renamed to src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEditorDisplayBinding.cs

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ namespace ResourceEditor
3232
{
3333
public class ResourceEditorDisplayBinding : IDisplayBinding
3434
{
35-
// IDisplayBinding interface
3635
public bool CanCreateContentForFile(FileName fileName)
3736
{
3837
return true; // definition in .addin does extension-based filtering
@@ -54,9 +53,6 @@ public double AutoDetectFileContent(FileName fileName, Stream fileContent, strin
5453
}
5554
}
5655

57-
/// <summary>
58-
/// This class describes the main functionality of a language codon
59-
/// </summary>
6056
public class ResourceEditWrapper : AbstractViewContentHandlingLoadErrors, IClipboardHandler
6157
{
6258
ResourceEditorControl resourceEditor = new ResourceEditorControl();
@@ -73,14 +69,16 @@ public override bool IsReadOnly {
7369

7470
void SetDirty(object sender, EventArgs e)
7571
{
76-
this.PrimaryFile.MakeDirty();
72+
PrimaryFile.MakeDirty();
73+
SD.WinForms.InvalidateCommands();
7774
}
7875

7976
public ResourceEditWrapper(OpenedFile file)
8077
{
8178
this.TabPageText = "Resource editor";
82-
base.UserContent = resourceEditor;
83-
resourceEditor.ResourceList.Changed += new EventHandler(SetDirty);
79+
UserContent = resourceEditor;
80+
resourceEditor.ResourceList.Changed += SetDirty;
81+
resourceEditor.ResourceList.ItemSelectionChanged += (sender, e) => SD.WinForms.InvalidateCommands();
8482
this.Files.Add(file);
8583
}
8684

@@ -104,7 +102,7 @@ protected override void SaveInternal(OpenedFile file, Stream stream)
104102
public bool EnableCut
105103
{
106104
get {
107-
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
105+
if (resourceEditor.ResourceList.IsEditing) {
108106
return false;
109107
}
110108
return resourceEditor.ResourceList.SelectedItems.Count > 0;
@@ -114,7 +112,7 @@ public bool EnableCut
114112
public bool EnableCopy
115113
{
116114
get {
117-
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
115+
if (resourceEditor.ResourceList.IsEditing) {
118116
return false;
119117
}
120118
return resourceEditor.ResourceList.SelectedItems.Count > 0;
@@ -124,7 +122,7 @@ public bool EnableCopy
124122
public bool EnablePaste
125123
{
126124
get {
127-
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
125+
if (resourceEditor.ResourceList.IsEditing) {
128126
return false;
129127
}
130128
return true;
@@ -134,7 +132,7 @@ public bool EnablePaste
134132
public bool EnableDelete
135133
{
136134
get {
137-
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
135+
if (resourceEditor.ResourceList.IsEditing) {
138136
return false;
139137
}
140138
return resourceEditor.ResourceList.SelectedItems.Count > 0;
@@ -144,7 +142,7 @@ public bool EnableDelete
144142
public bool EnableSelectAll
145143
{
146144
get {
147-
if (resourceEditor.ResourceList.IsEditing || !resourceEditor.ResourceList.Focused) {
145+
if (resourceEditor.ResourceList.IsEditing) {
148146
return false;
149147
}
150148
return true;
@@ -241,33 +239,17 @@ object GetClonedResource(object resource)
241239

242240
public void Delete()
243241
{
244-
if (resourceEditor.ResourceList.WriteProtected) {
242+
var resourceList = resourceEditor.ResourceList;
243+
if (resourceList.WriteProtected || resourceList.SelectedItems.Count == 0)
245244
return;
246-
}
247-
248-
if (resourceEditor.ResourceList.SelectedItems.Count==0) return; // nothing to do
249-
DialogResult rc;
250-
251-
try {
252-
253-
rc=MessageBox.Show(ResourceService.GetString("ResourceEditor.DeleteEntry.Confirm"),ResourceService.GetString("ResourceEditor.DeleteEntry.Title"),MessageBoxButtons.OKCancel);
254-
}
255-
catch {
256-
// when something happens - like resource is missing - try to use default message
257-
rc = MessageBox.Show("Do you really want to delete?","Delete-Warning!",MessageBoxButtons.OKCancel);
258-
}
259-
260-
if (rc != DialogResult.OK) {
245+
if (!SD.MessageService.AskQuestion("${res:ResourceEditor.DeleteEntry.Confirm}", "${res:ResourceEditor.DeleteEntry.Title}"))
261246
return;
262-
}
263247

264-
foreach (ListViewItem item in resourceEditor.ResourceList.SelectedItems) {
265-
//// not clear why this check is present here - seems to be extra
266-
////if (item.Text != null) {
267-
resourceEditor.ResourceList.Resources.Remove(item.Text);
268-
resourceEditor.ResourceList.Items.Remove(item);
248+
foreach (ListViewItem item in resourceList.SelectedItems) {
249+
resourceList.Resources.Remove(item.Text);
250+
resourceList.Items.Remove(item);
269251
// and set dirty flag
270-
resourceEditor.ResourceList.OnChanged();
252+
resourceList.OnChanged();
271253
}
272254
}
273255

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,10 @@ public interface IWinFormsService
142142
/// </param>
143143
/// <returns>SDWindowsFormsHost instance</returns>
144144
CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false);
145+
146+
/// <summary>
147+
/// Provides access to <see cref="System.Windows.Input.CommandManager.RequerySuggested"/> from Windows Forms-based AddIns.
148+
/// </summary>
149+
void InvalidateCommands();
145150
}
146151
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
4040
/// </summary>
4141
public abstract class AbstractViewContentHandlingLoadErrors : AbstractViewContent
4242
{
43-
ContentPresenter contentControl = new ContentPresenter();
43+
readonly ContentPresenter contentControl = new ContentPresenter();
4444
object userContent;
4545

4646
protected AbstractViewContentHandlingLoadErrors()

src/Main/SharpDevelop/WinForms/WinFormsService.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
using System.Windows.Forms;
2323
using ICSharpCode.Core;
2424
using ICSharpCode.Core.WinForms;
25-
using ICSharpCode.SharpDevelop.Gui;
2625
using ICSharpCode.SharpDevelop.Widgets;
2726
using ICSharpCode.SharpDevelop.Workbench;
2827

@@ -195,5 +194,10 @@ public CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider servicePro
195194
DisposeChild = false
196195
};
197196
}
197+
198+
public void InvalidateCommands()
199+
{
200+
System.Windows.Input.CommandManager.InvalidateRequerySuggested();
201+
}
198202
}
199203
}

0 commit comments

Comments
 (0)