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

Commit 91a697d

Browse files
committed
Merged WPF port of ResourceEditor addin for issue #539.
2 parents cd49d8c + 844a90b commit 91a697d

28 files changed

+2028
-371
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/ResourceEditor.csproj

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -40,49 +40,60 @@
4040
<OutputPath>..\..\..\..\..\AddIns\DisplayBindings\ResourceEditor\</OutputPath>
4141
</PropertyGroup>
4242
<ItemGroup>
43+
<Reference Include="PresentationCore">
44+
<RequiredTargetFramework>3.0</RequiredTargetFramework>
45+
</Reference>
46+
<Reference Include="PresentationFramework">
47+
<RequiredTargetFramework>3.0</RequiredTargetFramework>
48+
</Reference>
4349
<Reference Include="System" />
4450
<Reference Include="System.Drawing" />
4551
<Reference Include="System.Windows.Forms" />
4652
<Reference Include="System.Design" />
53+
<Reference Include="System.Xaml">
54+
<RequiredTargetFramework>4.0</RequiredTargetFramework>
55+
</Reference>
56+
<Reference Include="WindowsBase" />
4757
</ItemGroup>
4858
<ItemGroup>
4959
<Compile Include="Configuration\AssemblyInfo.cs" />
60+
<Compile Include="Src\BitmapExtensions.cs" />
5061
<Compile Include="Src\Commands\AddNewFileCommand.cs" />
5162
<Compile Include="Src\Commands\AddStringEntryCommand.cs" />
52-
<Compile Include="Src\Commands\ClipboardCommands.cs" />
5363
<Compile Include="Src\Commands\CopyResourceNameCommand.cs" />
5464
<Compile Include="Src\Commands\EditCommentCommand.cs" />
5565
<Compile Include="Src\Commands\RenameEntryCommand.cs" />
66+
<Compile Include="Src\Commands\ResourceItemCommand.cs" />
5667
<Compile Include="Src\Commands\SaveEntryAsCommand.cs" />
5768
<Compile Include="Src\ResourceEditorDisplayBinding.cs" />
58-
<Compile Include="Src\ResourceEdit\AbstractImageView.cs">
59-
<SubType>Component</SubType>
69+
<Compile Include="Src\ViewModels\ResourceEditorViewModel.cs" />
70+
<Compile Include="Src\ViewModels\ResourceItem.cs" />
71+
<Compile Include="Src\Views\BinaryView.xaml.cs">
72+
<DependentUpon>BinaryView.xaml</DependentUpon>
73+
<SubType>Code</SubType>
6074
</Compile>
61-
<Compile Include="Src\ResourceEdit\BinaryView.cs">
62-
<SubType>UserControl</SubType>
75+
<Compile Include="Src\Views\BooleanView.xaml.cs">
76+
<DependentUpon>BooleanView.xaml</DependentUpon>
77+
<SubType>Code</SubType>
6378
</Compile>
64-
<Compile Include="Src\ResourceEdit\BitmapView.cs">
65-
<SubType>Component</SubType>
79+
<Compile Include="Src\Views\ImageViewBase.xaml.cs">
80+
<DependentUpon>ImageViewBase.xaml</DependentUpon>
81+
<SubType>Code</SubType>
6682
</Compile>
67-
<Compile Include="Src\ResourceEdit\BooleanView.cs">
68-
<SubType>Component</SubType>
83+
<Compile Include="Src\Views\InPlaceEditLabel.xaml.cs">
84+
<DependentUpon>InPlaceEditLabel.xaml</DependentUpon>
85+
<SubType>Code</SubType>
6986
</Compile>
70-
<Compile Include="Src\ResourceEdit\CursorView.cs">
71-
<SubType>Component</SubType>
87+
<Compile Include="Src\Views\IResourceEditorView.cs" />
88+
<Compile Include="Src\Views\IResourceItemView.cs" />
89+
<Compile Include="Src\Views\ResourceEditorView.xaml.cs">
90+
<DependentUpon>ResourceEditorView.xaml</DependentUpon>
91+
<SubType>Code</SubType>
7292
</Compile>
73-
<Compile Include="Src\ResourceEdit\IconView.cs">
74-
<SubType>Component</SubType>
75-
</Compile>
76-
<Compile Include="Src\ResourceEdit\IResourceView.cs" />
77-
<Compile Include="Src\ResourceEdit\ResourceEditor.cs">
78-
<SubType>UserControl</SubType>
79-
</Compile>
80-
<Compile Include="Src\ResourceEdit\ResourceItem.cs" />
81-
<Compile Include="Src\ResourceEdit\ResourceList.cs">
82-
<SubType>Component</SubType>
83-
</Compile>
84-
<Compile Include="Src\ResourceEdit\TextView.cs">
85-
<SubType>Component</SubType>
93+
<Compile Include="Src\Views\ResourceItemIcons.cs" />
94+
<Compile Include="Src\Views\TextView.xaml.cs">
95+
<DependentUpon>TextView.xaml</DependentUpon>
96+
<SubType>Code</SubType>
8697
</Compile>
8798
<None Include="ResourceEditor.addin">
8899
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
@@ -108,6 +119,10 @@
108119
<Name>ICSharpCode.Core</Name>
109120
<Private>False</Private>
110121
</ProjectReference>
122+
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.Presentation\ICSharpCode.Core.Presentation.csproj">
123+
<Project>{7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}</Project>
124+
<Name>ICSharpCode.Core.Presentation</Name>
125+
</ProjectReference>
111126
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
112127
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
113128
<Name>ICSharpCode.Core.WinForms</Name>
@@ -119,5 +134,17 @@
119134
<Private>False</Private>
120135
</ProjectReference>
121136
</ItemGroup>
137+
<ItemGroup>
138+
<Folder Include="Src\ViewModels" />
139+
<Folder Include="Src\Views" />
140+
</ItemGroup>
141+
<ItemGroup>
142+
<Page Include="Src\Views\BinaryView.xaml" />
143+
<Page Include="Src\Views\BooleanView.xaml" />
144+
<Page Include="Src\Views\ImageViewBase.xaml" />
145+
<Page Include="Src\Views\InPlaceEditLabel.xaml" />
146+
<Page Include="Src\Views\ResourceEditorView.xaml" />
147+
<Page Include="Src\Views\TextView.xaml" />
148+
</ItemGroup>
122149
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
123150
</Project>
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright (c) 2014 AlphaSierraPapa for the SharpDevelop Team
2+
//
3+
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
4+
// software and associated documentation files (the "Software"), to deal in the Software
5+
// without restriction, including without limitation the rights to use, copy, modify, merge,
6+
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7+
// to whom the Software is furnished to do so, subject to the following conditions:
8+
//
9+
// The above copyright notice and this permission notice shall be included in all copies or
10+
// substantial portions of the Software.
11+
//
12+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13+
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14+
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15+
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16+
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17+
// DEALINGS IN THE SOFTWARE.
18+
19+
using System;
20+
using System.Runtime.InteropServices;
21+
using System.Windows;
22+
using System.Windows.Interop;
23+
using System.Windows.Media.Imaging;
24+
25+
namespace ResourceEditor
26+
{
27+
/// <summary>
28+
/// Bitmap conversion extensions for WinForms -> WPF
29+
/// </summary>
30+
public static class BitmapExtensions
31+
{
32+
[DllImport("gdi32.dll")]
33+
[return: MarshalAs(UnmanagedType.Bool)]
34+
public static extern bool DeleteObject(IntPtr hObject);
35+
36+
public static BitmapSource ToBitmapSource(this System.Drawing.Bitmap bitmap)
37+
{
38+
BitmapSource bs;
39+
IntPtr hBitmap = bitmap.GetHbitmap();
40+
try {
41+
bs = Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero,
42+
Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
43+
bs.Freeze();
44+
} finally {
45+
DeleteObject(hBitmap);
46+
}
47+
return bs;
48+
}
49+
}
50+
}

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

Lines changed: 48 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -17,107 +17,105 @@
1717
// DEALINGS IN THE SOFTWARE.
1818

1919
using System;
20-
using System.Drawing;
2120
using System.IO;
2221
using System.Runtime.Serialization.Formatters.Binary;
23-
using System.Windows.Forms;
2422

2523
using ICSharpCode.Core;
2624
using ICSharpCode.SharpDevelop;
2725
using ICSharpCode.SharpDevelop.Gui;
26+
using Microsoft.Win32;
27+
using ResourceEditor.ViewModels;
2828

29-
namespace ResourceEditor
29+
namespace ResourceEditor.Commands
3030
{
31-
class AddNewFileCommand : AbstractMenuCommand
31+
class AddNewFileCommand : ResourceItemCommand
3232
{
33-
public override void Run()
33+
public override void ExecuteWithResourceItems(System.Collections.Generic.IEnumerable<ResourceItem> resourceItems)
3434
{
35-
ResourceEditorControl editor = ((ResourceEditWrapper)SD.Workbench.ActiveViewContent).ResourceEditor;
35+
// if (editor.ResourceList.WriteProtected) {
36+
// return;
37+
// }
3638

37-
if(editor.ResourceList.WriteProtected) {
38-
return;
39-
}
40-
41-
using (OpenFileDialog fdiag = new OpenFileDialog()) {
42-
fdiag.AddExtension = true;
43-
fdiag.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.AllFiles}|*.*");
44-
fdiag.Multiselect = true;
45-
fdiag.CheckFileExists = true;
39+
var editor = ResourceEditor;
40+
OpenFileDialog fdiag = new OpenFileDialog();
41+
fdiag.AddExtension = true;
42+
fdiag.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.AllFiles}|*.*");
43+
fdiag.Multiselect = true;
44+
fdiag.CheckFileExists = true;
4645

47-
if (fdiag.ShowDialog(SD.WinForms.MainWin32Window) == DialogResult.OK) {
48-
foreach (string filename in fdiag.FileNames) {
49-
string oresname = Path.ChangeExtension(Path.GetFileName(filename), null);
50-
if (oresname == "") oresname = "new";
46+
if ((bool)fdiag.ShowDialog()) {
47+
foreach (string filename in fdiag.FileNames) {
48+
string oresname = Path.ChangeExtension(Path.GetFileName(filename), null);
49+
if (oresname == "")
50+
oresname = "new";
5151

52-
string resname = oresname;
52+
string resname = oresname;
5353

54-
int i = 0;
54+
int i = 0;
5555
TestName:
56-
if (editor.ResourceList.Resources.ContainsKey(resname)) {
57-
if (i == 10) {
58-
continue;
59-
}
60-
i++;
61-
resname = oresname + "_" + i.ToString();
62-
goto TestName;
63-
}
64-
65-
object tmp = loadResource(filename);
66-
if (tmp == null) {
56+
if (editor.ContainsResourceName(resname)) {
57+
if (i == 10) {
6758
continue;
6859
}
69-
editor.ResourceList.Resources.Add(resname, new ResourceItem(resname, tmp));
60+
i++;
61+
resname = oresname + "_" + i;
62+
goto TestName;
63+
}
7064

65+
object tmp = LoadResource(filename);
66+
if (tmp == null) {
67+
continue;
7168
}
72-
editor.ResourceList.InitializeListView();
69+
editor.ResourceItems.Add(new ResourceItem(editor, resname, tmp));
7370
}
7471
}
75-
editor.ResourceList.OnChanged();
7672
}
7773

78-
object loadResource(string name)
74+
object LoadResource(string name)
7975
{
8076
switch (Path.GetExtension(name).ToUpperInvariant()) {
8177
case ".CUR":
8278
try {
83-
return new Cursor(name);
79+
return new System.Windows.Forms.Cursor(name);
8480
} catch {
8581
return null;
8682
}
8783
case ".ICO":
8884
try {
89-
return new Icon(name);
85+
return new System.Drawing.Icon(name);
9086
} catch {
9187
return null;
9288
}
9389
default:
94-
// try to read a bitmap
90+
// Try to read a bitmap
9591
try {
96-
return new Bitmap(name);
97-
} catch {}
92+
return new System.Drawing.Bitmap(name);
93+
} catch {
94+
}
9895

99-
// try to read a serialized object
96+
// Try to read a serialized object
10097
try {
10198
Stream r = File.Open(name, FileMode.Open);
10299
try {
103100
BinaryFormatter c = new BinaryFormatter();
104101
object o = c.Deserialize(r);
105102
r.Close();
106103
return o;
107-
} catch { r.Close(); }
108-
} catch { }
104+
} catch {
105+
r.Close();
106+
}
107+
} catch {
108+
}
109109

110-
// try to read a byte array :)
110+
// Try to read a byte array
111111
try {
112112
FileStream s = new FileStream(name, FileMode.Open);
113113
BinaryReader r = new BinaryReader(s);
114-
Byte[] d = new Byte[(int) s.Length];
115-
d = r.ReadBytes((int) s.Length);
114+
Byte[] d = new Byte[(int)s.Length];
115+
d = r.ReadBytes((int)s.Length);
116116
s.Close();
117117
return d;
118-
} catch(Exception) {
119-
120-
118+
} catch (Exception) {
121119
string message = ResourceService.GetString("ResourceEditor.Messages.CantLoadResource");
122120
MessageService.ShowWarning(message + " " + name + ".");
123121
}

0 commit comments

Comments
 (0)