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

Commit ec3c9d9

Browse files
committed
- Fix #551: Resource Editor: Content column doesn't update properly.
- Re-added view for icon files in resources.
1 parent e97402b commit ec3c9d9

File tree

8 files changed

+50
-14
lines changed

8 files changed

+50
-14
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
// DEALINGS IN THE SOFTWARE.
1818

1919
using System;
20+
using System.Drawing;
2021
using System.Runtime.InteropServices;
2122
using System.Windows;
2223
using System.Windows.Interop;
24+
using System.Windows.Media;
2325
using System.Windows.Media.Imaging;
2426

2527
namespace ResourceEditor
@@ -46,5 +48,15 @@ public static BitmapSource ToBitmapSource(this System.Drawing.Bitmap bitmap)
4648
}
4749
return bs;
4850
}
51+
52+
public static ImageSource ToImageSource(this Icon icon)
53+
{
54+
ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
55+
icon.Handle,
56+
Int32Rect.Empty,
57+
BitmapSizeOptions.FromEmptyOptions());
58+
59+
return imageSource;
60+
}
4961
}
5062
}

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ public override void ExecuteWithResourceItems(System.Collections.Generic.IEnumer
4242
fdiag.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.AllFiles}|*.*");
4343
fdiag.Multiselect = true;
4444
fdiag.CheckFileExists = true;
45-
45+
4646
if ((bool)fdiag.ShowDialog()) {
4747
foreach (string filename in fdiag.FileNames) {
4848
string oresname = Path.ChangeExtension(Path.GetFileName(filename), null);
4949
if (oresname == "")
5050
oresname = "new";
51-
51+
5252
string resname = oresname;
53-
53+
5454
int i = 0;
5555
TestName:
5656
if (editor.ContainsResourceName(resname)) {
@@ -61,12 +61,15 @@ public override void ExecuteWithResourceItems(System.Collections.Generic.IEnumer
6161
resname = oresname + "_" + i;
6262
goto TestName;
6363
}
64-
64+
6565
object tmp = LoadResource(filename);
6666
if (tmp == null) {
6767
continue;
6868
}
69-
editor.ResourceItems.Add(new ResourceItem(editor, resname, tmp));
69+
var newResourceItem = new ResourceItem(editor, resname, tmp);
70+
editor.ResourceItems.Add(newResourceItem);
71+
editor.SelectedItems.Clear();
72+
editor.SelectedItems.Add(newResourceItem);
7073
}
7174
}
7275
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public ResourceEditViewContent(OpenedFile file)
6868
// Register different resource item viewers
6969
resourceEditor.AddItemView(ResourceItemEditorType.String, new TextView());
7070
resourceEditor.AddItemView(ResourceItemEditorType.Bitmap, new ImageViewBase());
71+
resourceEditor.AddItemView(ResourceItemEditorType.Icon, new ImageViewBase());
7172
resourceEditor.DirtyStateChanged += (sender, e) => {
7273
if (e.IsDirty)
7374
SetDirty(sender, new EventArgs());

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,6 @@ public IResourceEditorView View {
123123
if (view != null) {
124124
view.SelectionChanged -= View_SelectionChanged;
125125
view.EditingStarted -= View_EditingStarted;
126-
view.EditingFinished -= View_EditingFinished;
127-
view.EditingCancelled -= View_EditingCancelled;
128126
ResourceItems.CollectionChanged -= ResourceItems_CollectionChanged;
129127
}
130128

@@ -145,8 +143,6 @@ public IResourceEditorView View {
145143
};
146144
view.SelectionChanged += View_SelectionChanged;
147145
view.EditingStarted += View_EditingStarted;
148-
view.EditingFinished += View_EditingFinished;
149-
view.EditingCancelled += View_EditingCancelled;
150146
ResourceItems.CollectionChanged += ResourceItems_CollectionChanged;
151147
}
152148
}
@@ -192,6 +188,8 @@ void View_SelectionChanged(object sender, EventArgs e)
192188
var itemView = itemViews[selectedItem.ResourceType];
193189
itemView.ResourceItem = selectedItem;
194190
view.SetItemView(itemView);
191+
} else {
192+
view.SetItemView(null);
195193
}
196194
}
197195
}

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public enum ResourceItemEditorType
4040
Binary
4141
}
4242

43-
public class ResourceItem : DependencyObject
43+
public class ResourceItem : DependencyObject, INotifyPropertyChanged
4444
{
4545
ResourceItemEditorType resourceType;
4646
ResourceEditorViewModel resourceEditor;
@@ -50,6 +50,7 @@ public ResourceItem(ResourceEditorViewModel resourceEditor, string name, object
5050
{
5151
this.resourceEditor = resourceEditor;
5252
this.Name = name;
53+
this.SortingCriteria = name;
5354
this.ResourceValue = resourceValue;
5455
this.resourceType = GetResourceTypeFromValue(resourceValue);
5556
}
@@ -58,11 +59,25 @@ public ResourceItem(ResourceEditorViewModel resourceEditor, string name, object
5859
{
5960
this.resourceEditor = resourceEditor;
6061
this.Name = name;
62+
this.SortingCriteria = name;
6163
this.ResourceValue = resourceValue;
6264
this.resourceType = GetResourceTypeFromValue(resourceValue);
6365
this.Comment = comment;
6466
}
6567

68+
#region INotifyPropertyChanged implementation
69+
70+
public event PropertyChangedEventHandler PropertyChanged;
71+
72+
void RaisePropertyChanged(string name)
73+
{
74+
if (PropertyChanged != null) {
75+
PropertyChanged(this, new PropertyChangedEventArgs(name));
76+
}
77+
}
78+
79+
#endregion
80+
6681
public static readonly DependencyProperty NameProperty =
6782
DependencyProperty.Register("Name", typeof(string), typeof(ResourceItem),
6883
new FrameworkPropertyMetadata());
@@ -120,6 +135,10 @@ protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
120135
{
121136
base.OnPropertyChanged(e);
122137

138+
if (e.Property.Name == ResourceValueProperty.Name) {
139+
// Update content property as well
140+
RaisePropertyChanged("Content");
141+
}
123142
if (e.Property.Name == IsEditingProperty.Name) {
124143
bool previouslyEditing = (bool)e.OldValue;
125144
bool isEditing = (bool)e.NewValue;

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/IResourceEditorView.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ IList SelectedItems {
4040
}
4141

4242
event EventHandler EditingStarted;
43-
event EventHandler EditingFinished;
44-
event EventHandler EditingCancelled;
4543

4644
void SetItemView(IResourceItemView view);
4745

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ImageViewBase.xaml.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,13 @@ public ResourceItem ResourceItem {
7777
UpdateLinkText = SD.ResourceService.GetString("ResourceEditor.BitmapView.UpdateBitmap");
7878
}
7979
break;
80+
case ResourceItemEditorType.Icon:
81+
var gdiIcon = resourceItem.ResourceValue as System.Drawing.Icon;
82+
if (gdiIcon != null) {
83+
DisplayedImage = gdiIcon.ToImageSource();
84+
UpdateLinkText = SD.ResourceService.GetString("ResourceEditor.BitmapView.UpdateBitmap");
85+
}
86+
break;
8087
}
8188
}
8289
}

src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ResourceEditorView.xaml.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ public partial class ResourceEditorView : UserControl, IResourceEditorView
3737

3838
public event EventHandler SelectionChanged;
3939
public event EventHandler EditingStarted;
40-
public event EventHandler EditingFinished;
41-
public event EventHandler EditingCancelled;
4240

4341
public ResourceEditorView()
4442
{

0 commit comments

Comments
 (0)