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

Commit 30b7002

Browse files
committed
Porting ResourceEditor context menu commands.
1 parent 2184c84 commit 30b7002

File tree

12 files changed

+205
-121
lines changed

12 files changed

+205
-121
lines changed

src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.addin

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,30 +30,28 @@
3030
<Path name="/SharpDevelop/ResourceEditor/ResourceList/ContextMenu">
3131
<MenuItem id="AddStringEntry"
3232
label="${res:ResourceEditor.ResourceEdit.ContextMenu.AddStringEntry}"
33-
class="ResourceEditor.AddStringCommand"
33+
class="ResourceEditor.Commands.AddStringCommand"
3434
shortcut = "Insert" />
3535

3636
<MenuItem id="AddFile"
3737
label="${res:ResourceEditor.ResourceEdit.ContextMenu.AddFiles}"
38-
class="ResourceEditor.AddNewFileCommand" />
38+
class="ResourceEditor.Commands.AddNewFileCommand" />
3939

4040
<MenuItem id="Separator1"
4141
type = "Separator" />
42-
<Condition name = "Ownerstate" ownerstate="ItemsSelected" action="Disable">
43-
<MenuItem id="SaveAs"
44-
label="${res:XML.MainMenu.FileMenu.SaveAs}"
45-
class="ResourceEditor.SaveEntryAsCommand" />
46-
<MenuItem id="Rename"
47-
label="${res:ResourceEditor.ResourceEdit.ContextMenu.Rename}"
48-
class="ResourceEditor.RenameEntryCommand"
49-
shortcut="F2" />
50-
<MenuItem id="CopyResourceName"
51-
label="${res:ResourceEditor.ResourceEdit.ContextMenu.CopyResourceName}"
52-
class="ResourceEditor.CopyResourceNameCommand" />
53-
<MenuItem id="EditResourceComment"
54-
label="${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}"
55-
class="ResourceEditor.EditCommentCommand" />
56-
</Condition>
42+
<MenuItem id="SaveAs"
43+
label="${res:XML.MainMenu.FileMenu.SaveAs}"
44+
class="ResourceEditor.Commands.SaveEntryAsCommand" />
45+
<MenuItem id="Rename"
46+
label="${res:ResourceEditor.ResourceEdit.ContextMenu.Rename}"
47+
class="ResourceEditor.Commands.RenameEntryCommand"
48+
shortcut="F2" />
49+
<MenuItem id="CopyResourceName"
50+
label="${res:ResourceEditor.ResourceEdit.ContextMenu.CopyResourceName}"
51+
class="ResourceEditor.Commands.CopyResourceNameCommand" />
52+
<MenuItem id="EditResourceComment"
53+
label="${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}"
54+
class="ResourceEditor.Commands.EditCommentCommand" />
5755

5856
<Include id = "Delete" item = "/SharpDevelop/Workbench/MainMenu/Edit/Delete"/>
5957
<MenuItem id = "Separator2" type = "Separator"/>

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddNewFileCommand.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
using Microsoft.Win32;
2727
using ResourceEditor.ViewModels;
2828

29-
namespace ResourceEditor
29+
namespace ResourceEditor.Commands
3030
{
31-
class AddNewFileCommand : AbstractMenuCommand
31+
class AddNewFileCommand : SimpleCommand
3232
{
33-
public override void Run()
33+
public override void Execute(object parameter)
3434
{
3535
ResourceEditorViewModel editor = ((ResourceEditViewContent) SD.Workbench.ActiveViewContent).ResourceEditor;
3636

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddStringEntryCommand.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
using ICSharpCode.SharpDevelop;
2323
using ResourceEditor.ViewModels;
2424

25-
namespace ResourceEditor
25+
namespace ResourceEditor.Commands
2626
{
27-
class AddStringCommand : AbstractMenuCommand
27+
class AddStringCommand : SimpleCommand
2828
{
29-
public override void Run()
29+
public override void Execute(object parameter)
3030
{
3131
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
3232

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/CopyResourceNameCommand.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
using ICSharpCode.SharpDevelop.Gui;
2424
using ResourceEditor.ViewModels;
2525

26-
namespace ResourceEditor
26+
namespace ResourceEditor.Commands
2727
{
28-
class CopyResourceNameCommand : AbstractMenuCommand
28+
class CopyResourceNameCommand : SimpleCommand
2929
{
30-
public override void Run()
30+
public override void Execute(object parameter)
3131
{
3232
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
3333

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/EditCommentCommand.cs

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,28 @@
1717
// DEALINGS IN THE SOFTWARE.
1818

1919
using System;
20+
using System.Linq;
2021
using ICSharpCode.Core;
2122
using ICSharpCode.SharpDevelop;
2223
using ResourceEditor.ViewModels;
2324

24-
namespace ResourceEditor
25+
namespace ResourceEditor.Commands
2526
{
26-
class EditCommentCommand : AbstractMenuCommand
27+
class EditCommentCommand : SimpleCommand
2728
{
28-
public override void Run()
29+
public override void Execute(object parameter)
2930
{
30-
ResourceEditorViewModel editor = ((ResourceEditViewContent) SD.Workbench.ActiveViewContent).ResourceEditor;
31+
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
3132

32-
// TODO Reactivate this
33-
// if (editor.ResourceList.SelectedItems.Count != 0) {
34-
// var item = editor.ResourceList.SelectedItems[0].SubItems[3];
35-
// string resourceName = editor.ResourceList.SelectedItems[0].Text;
36-
// string newValue = SD.MessageService.ShowInputBox("${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}",
37-
// "${res:ResourceEditor.ResourceEdit.ContextMenu.EditCommentText}",
38-
// item.Text);
39-
// if (newValue != null && newValue != item.Text) {
40-
// editor.ResourceList.SetCommentValue(resourceName, newValue);
41-
// }
42-
// }
33+
if (editor.SelectedItems.Count != 0) {
34+
var selectedItem = editor.SelectedItems.OfType<ResourceEditor.ViewModels.ResourceItem>().FirstOrDefault();
35+
string newValue = SD.MessageService.ShowInputBox("${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}",
36+
"${res:ResourceEditor.ResourceEdit.ContextMenu.EditCommentText}",
37+
selectedItem.Comment);
38+
if (newValue != null && newValue != selectedItem.Comment) {
39+
selectedItem.Comment = newValue;
40+
}
41+
}
4342
}
4443
}
4544
}

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/RenameEntryCommand.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,14 @@
2121
using ICSharpCode.SharpDevelop;
2222
using ResourceEditor.ViewModels;
2323

24-
namespace ResourceEditor
24+
namespace ResourceEditor.Commands
2525
{
26-
class RenameEntryCommand : AbstractMenuCommand
26+
class RenameEntryCommand : SimpleCommand
2727
{
28-
public override void Run()
28+
public override void Execute(object parameter)
2929
{
3030
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
31-
32-
// TODO Reactivate this
33-
// if(editor.ResourceList.SelectedItems.Count != 0) {
34-
// editor.ResourceList.SelectedItems[0].BeginEdit();
35-
// }
31+
editor.StartEditing();
3632
}
3733
}
3834
}

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/SaveEntryAsCommand.cs

Lines changed: 55 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -19,77 +19,72 @@
1919
using System;
2020
using System.Drawing;
2121
using System.IO;
22-
using System.Windows.Forms;
2322

2423
using ICSharpCode.Core;
2524
using ICSharpCode.SharpDevelop;
2625
using ICSharpCode.SharpDevelop.Gui;
26+
using Microsoft.Win32;
2727
using ResourceEditor.ViewModels;
2828

29-
namespace ResourceEditor
29+
namespace ResourceEditor.Commands
3030
{
31-
class SaveEntryAsCommand : AbstractMenuCommand
31+
class SaveEntryAsCommand : SimpleCommand
3232
{
33-
public override void Run()
33+
public override void Execute(object parameter)
3434
{
3535
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
3636

37-
// TODO Reactivate this
38-
// ResourceList list = editor.ResourceList;
39-
//
40-
// if(list.SelectedItems.Count != 1) {
41-
// return;
42-
// }
43-
//
44-
// string key = list.SelectedItems[0].Text;
45-
// if(! list.Resources.ContainsKey(key)) {
46-
// return;
47-
// }
48-
//
49-
// ResourceItem item = list.Resources[key];
50-
// SaveFileDialog sdialog = new SaveFileDialog();
51-
// sdialog.AddExtension = true;
52-
// sdialog.FileName = key;
53-
//
54-
// if (item.ResourceValue is Bitmap) {
55-
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.ImageFiles} (*.png)|*.png");
56-
// sdialog.DefaultExt = ".png";
57-
// } else if (item.ResourceValue is Icon) {
58-
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.Icons}|*.ico");
59-
// sdialog.DefaultExt = ".ico";
60-
// } else if (item.ResourceValue is Cursor) {
61-
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.CursorFiles} (*.cur)|*.cur");
62-
// sdialog.DefaultExt = ".cur";
63-
// } else if (item.ResourceValue is byte[]){
64-
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.BinaryFiles} (*.*)|*.*");
65-
// sdialog.DefaultExt = ".bin";
66-
// } else {
67-
// return;
68-
// }
69-
//
70-
// DialogResult dr = sdialog.ShowDialog(SD.WinForms.MainWin32Window);
71-
// sdialog.Dispose();
72-
// if (dr != DialogResult.OK) {
73-
// return;
74-
// }
75-
//
76-
// try {
77-
// if (item.ResourceValue is Icon) {
78-
// FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
79-
// ((Icon)item.ResourceValue).Save(fstr);
80-
// fstr.Close();
81-
// } else if(item.ResourceValue is Image) {
82-
// Image img = (Image)item.ResourceValue;
83-
// img.Save(sdialog.FileName);
84-
// } else {
85-
// FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
86-
// BinaryWriter wr = new BinaryWriter(fstr);
87-
// wr.Write((byte[])item.ResourceValue);
88-
// fstr.Close();
89-
// }
90-
// } catch(Exception ex) {
91-
// MessageBox.Show(ex.Message, "Can't save resource to " + sdialog.FileName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
92-
// }
37+
if (editor.SelectedItems.Count != 1) {
38+
return;
39+
}
40+
41+
ResourceItem firstSelectedItem = (editor.SelectedItems[0] as ResourceItem);
42+
if (firstSelectedItem == null) {
43+
return;
44+
}
45+
46+
var sdialog = new Microsoft.Win32.SaveFileDialog();
47+
sdialog.AddExtension = true;
48+
sdialog.FileName = firstSelectedItem.Name;
49+
50+
if (firstSelectedItem.ResourceValue is System.Drawing.Bitmap) {
51+
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.ImageFiles} (*.png)|*.png");
52+
sdialog.DefaultExt = ".png";
53+
} else if (firstSelectedItem.ResourceValue is System.Drawing.Icon) {
54+
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.Icons}|*.ico");
55+
sdialog.DefaultExt = ".ico";
56+
} else if (firstSelectedItem.ResourceValue is System.Windows.Forms.Cursor) {
57+
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.CursorFiles} (*.cur)|*.cur");
58+
sdialog.DefaultExt = ".cur";
59+
} else if (firstSelectedItem.ResourceValue is byte[]) {
60+
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.BinaryFiles} (*.*)|*.*");
61+
sdialog.DefaultExt = ".bin";
62+
} else {
63+
return;
64+
}
65+
66+
bool? dr = sdialog.ShowDialog();
67+
if (dr.HasValue && dr.Value) {
68+
return;
69+
}
70+
71+
try {
72+
if (firstSelectedItem.ResourceValue is Icon) {
73+
FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
74+
((Icon)firstSelectedItem.ResourceValue).Save(fstr);
75+
fstr.Close();
76+
} else if (firstSelectedItem.ResourceValue is Image) {
77+
Image img = (Image)firstSelectedItem.ResourceValue;
78+
img.Save(sdialog.FileName);
79+
} else {
80+
FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
81+
BinaryWriter wr = new BinaryWriter(fstr);
82+
wr.Write((byte[])firstSelectedItem.ResourceValue);
83+
fstr.Close();
84+
}
85+
} catch (Exception ex) {
86+
SD.MessageService.ShowWarning("Can't save resource to " + sdialog.FileName + ": " + ex.Message);
87+
}
9388
}
9489
}
9590
}

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ViewModels/ResourceEditorViewModel.cs

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public class ResourceEditorViewModel : DependencyObject
6060
readonly ObservableCollection<ResourceItem> metadataItems;
6161
readonly Dictionary<ResourceItemEditorType, IResourceItemView> itemViews;
6262
bool longUpdateRunning;
63+
ResourceItem editedResourceItem;
64+
string originalNameOfEditedItem;
6365

6466
IResourceEditorView view;
6567

@@ -109,7 +111,9 @@ public IResourceEditorView View {
109111
}
110112
set {
111113
if (view != null) {
112-
view.SelectionChanged += View_SelectionChanged;
114+
view.SelectionChanged -= View_SelectionChanged;
115+
view.EditingFinished -= View_EditingFinished;
116+
view.EditingCancelled -= View_EditingCancelled;
113117
ResourceItems.CollectionChanged -= ResourceItems_CollectionChanged;
114118
}
115119

@@ -129,6 +133,8 @@ public IResourceEditorView View {
129133
return true;
130134
};
131135
view.SelectionChanged += View_SelectionChanged;
136+
view.EditingFinished += View_EditingFinished;
137+
view.EditingCancelled += View_EditingCancelled;
132138
ResourceItems.CollectionChanged += ResourceItems_CollectionChanged;
133139
}
134140
}
@@ -190,6 +196,43 @@ public void MakeDirty()
190196
OnChangedDirtyState(true);
191197
}
192198

199+
public void StartEditing()
200+
{
201+
if (editedResourceItem != null) {
202+
editedResourceItem.IsEditing = false;
203+
editedResourceItem = null;
204+
originalNameOfEditedItem = null;
205+
}
206+
207+
// Start editing currently selected item
208+
var firstSelectedItem = SelectedItems.OfType<ResourceItem>().FirstOrDefault();
209+
if (firstSelectedItem != null) {
210+
editedResourceItem = firstSelectedItem;
211+
originalNameOfEditedItem = editedResourceItem.Name;
212+
firstSelectedItem.IsEditing = true;
213+
}
214+
}
215+
216+
void View_EditingFinished(object sender, EventArgs e)
217+
{
218+
if (editedResourceItem != null) {
219+
editedResourceItem.IsEditing = false;
220+
editedResourceItem = null;
221+
originalNameOfEditedItem = null;
222+
MakeDirty();
223+
}
224+
}
225+
226+
void View_EditingCancelled(object sender, EventArgs e)
227+
{
228+
if (editedResourceItem != null) {
229+
editedResourceItem.IsEditing = false;
230+
editedResourceItem.Name = originalNameOfEditedItem;
231+
editedResourceItem = null;
232+
originalNameOfEditedItem = null;
233+
}
234+
}
235+
193236
void StartUpdate()
194237
{
195238
// When loading many items at once, temporarily unbind view from model

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ViewModels/ResourceItem.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public class ResourceItem : INotifyPropertyChanged
4646
string comment;
4747
ResourceItemEditorType resourceType;
4848
ResourceEditorViewModel resourceEditor;
49+
bool isEditing;
4950

5051
public ResourceItem(ResourceEditorViewModel resourceEditor, string name, object resourceValue)
5152
{
@@ -112,6 +113,16 @@ public ResourceItemEditorType ResourceType {
112113
}
113114
}
114115

116+
public bool IsEditing {
117+
get {
118+
return isEditing;
119+
}
120+
set {
121+
isEditing = value;
122+
OnPropertyChanged("IsEditing");
123+
}
124+
}
125+
115126
ResourceItemEditorType GetResourceTypeFromValue(object val)
116127
{
117128
if (this.ResourceValue == null) {
@@ -148,6 +159,7 @@ public string Comment {
148159
set {
149160
comment = value;
150161
OnPropertyChanged("Comment");
162+
resourceEditor.MakeDirty();
151163
}
152164
}
153165

0 commit comments

Comments
 (0)