From fbf0b6d419ead72f00e6c70bbdee7833c84758be Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Mon, 30 Jul 2012 19:00:22 +0200 Subject: [PATCH] The IconEditor AddIn now can edit icons. --- SharpDevelop.Tests.sln | 705 +++++++++++++++++- SharpDevelop.sln | 37 +- .../AlphaTransparentBitmap.cs | 38 +- .../Configuration/AssemblyInfo.cs | 2 +- .../{IconEditor => }/EditorPanel.Designer.cs | 51 +- .../{IconEditor => }/EditorPanel.cs | 73 +- .../Src => }/IconDisplayBinding.cs | 2 +- ...IconEditorAddIn.addin => IconEditor.addin} | 10 +- ...onEditorAddIn.csproj => IconEditor.csproj} | 51 +- .../IconEditor/IconEditor/AssemblyInfo.cs | 16 - .../IconEditor/IconEditor/EditorPanel.resx | 120 --- .../IconEditor/IconEditor/IconEditor.csproj | 78 -- .../IconEditor/IconEditor/IconEditor.sln | 16 - .../IconEditor/IconPanel.Designer.cs | 53 -- .../IconEditor/IconEditor/IconPanel.resx | 120 --- .../IconEditor/MainForm.Designer.cs | 130 ---- .../IconEditor/IconEditor/MainForm.cs | 108 --- .../IconEditor/IconEditor/MainForm.resx | 187 ----- .../IconEditorAddIn/IconEditorAddIn.sln | 6 - .../IconEditorAddIn/Src/IconViewContent.cs | 37 - .../IconEditor/{IconEditor => }/IconEntry.cs | 298 ++++++-- .../IconEditor/{IconEditor => }/IconFile.cs | 71 +- .../IconEditor/IconPanel.Designer.cs | 153 ++++ .../IconEditor/{IconEditor => }/IconPanel.cs | 169 ++++- .../IconEditor/IconViewContent.cs | 55 ++ .../{IconEditor => }/InvalidIconException.cs | 2 +- .../IconEditor/PickFormatDialog.Designer.cs | 187 +++++ .../IconEditor/PickFormatDialog.cs | 45 ++ src/Setup/Files.wxs | 9 +- src/Setup/Setup.wxs | 3 +- 30 files changed, 1707 insertions(+), 1125 deletions(-) rename src/AddIns/DisplayBindings/IconEditor/{IconEditor => }/AlphaTransparentBitmap.cs (70%) rename src/AddIns/DisplayBindings/IconEditor/{IconEditorAddIn => }/Configuration/AssemblyInfo.cs (92%) rename src/AddIns/DisplayBindings/IconEditor/{IconEditor => }/EditorPanel.Designer.cs (71%) rename src/AddIns/DisplayBindings/IconEditor/{IconEditor => }/EditorPanel.cs (55%) rename src/AddIns/DisplayBindings/IconEditor/{IconEditorAddIn/Src => }/IconDisplayBinding.cs (95%) rename src/AddIns/DisplayBindings/IconEditor/{IconEditorAddIn/IconEditorAddIn.addin => IconEditor.addin} (71%) rename src/AddIns/DisplayBindings/IconEditor/{IconEditorAddIn/IconEditorAddIn.csproj => IconEditor.csproj} (61%) delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/AssemblyInfo.cs delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.resx delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.csproj delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.sln delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.Designer.cs delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.resx delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.Designer.cs delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.cs delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.resx delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.sln delete mode 100644 src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconViewContent.cs rename src/AddIns/DisplayBindings/IconEditor/{IconEditor => }/IconEntry.cs (65%) rename src/AddIns/DisplayBindings/IconEditor/{IconEditor => }/IconFile.cs (77%) create mode 100644 src/AddIns/DisplayBindings/IconEditor/IconPanel.Designer.cs rename src/AddIns/DisplayBindings/IconEditor/{IconEditor => }/IconPanel.cs (51%) create mode 100644 src/AddIns/DisplayBindings/IconEditor/IconViewContent.cs rename src/AddIns/DisplayBindings/IconEditor/{IconEditor => }/InvalidIconException.cs (95%) create mode 100644 src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs create mode 100644 src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.cs diff --git a/SharpDevelop.Tests.sln b/SharpDevelop.Tests.sln index 82e2c8b543..77ab0851de 100644 --- a/SharpDevelop.Tests.sln +++ b/SharpDevelop.Tests.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -# SharpDevelop 4.2.0.8564-beta +# SharpDevelop 4.3 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}" ProjectSection(SolutionItems) = postProject EndProjectSection @@ -554,20 +554,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "src\AddIns\Dis {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0773ED53-08E2-4495-A3BE-CA0B5D413C15}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "src\AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "src\AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}" ProjectSection(ProjectDependencies) = postProject {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} @@ -602,6 +588,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.XamlDom", "src\Ad {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}" ProjectSection(SolutionItems) = postProject EndProjectSection @@ -807,10 +798,6 @@ Global {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Any CPU.Build.0 = Debug|Any CPU {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.ActiveCfg = Release|Any CPU {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.Build.0 = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Any CPU.Build.0 = Release|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Any CPU.Build.0 = Debug|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -1435,6 +1422,682 @@ Global {3C532D80-32B4-40E5-B5FE-BC6BAE1A00E7}.Release|Win32.ActiveCfg = Release|x86 {3C532D80-32B4-40E5-B5FE-BC6BAE1A00E7}.Release|x86.Build.0 = Release|x86 {3C532D80-32B4-40E5-B5FE-BC6BAE1A00E7}.Release|x86.ActiveCfg = Release|x86 + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|Win32.Build.0 = Debug|Any CPU + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|Win32.ActiveCfg = Debug|Any CPU + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|x86.Build.0 = Debug|Any CPU + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|x86.ActiveCfg = Debug|Any CPU + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Win32.Build.0 = Release|Any CPU + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Win32.ActiveCfg = Release|Any CPU + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.Build.0 = Release|Any CPU + {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.ActiveCfg = Release|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|Win32.Build.0 = Debug|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|Win32.ActiveCfg = Debug|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|x86.Build.0 = Debug|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Debug|x86.ActiveCfg = Debug|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|Win32.Build.0 = Release|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|Win32.ActiveCfg = Release|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|x86.Build.0 = Release|Any CPU + {44A8DE09-CAB9-49D8-9CFC-5EB0A552F181}.Release|x86.ActiveCfg = Release|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Debug|Win32.Build.0 = Debug|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Debug|Win32.ActiveCfg = Debug|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Debug|x86.Build.0 = Debug|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Debug|x86.ActiveCfg = Debug|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Release|Win32.Build.0 = Release|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Release|Win32.ActiveCfg = Release|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Release|x86.Build.0 = Release|Any CPU + {CE498514-D12D-4B6E-AE0E-FEC29BD43748}.Release|x86.ActiveCfg = Release|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Debug|Win32.Build.0 = Debug|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Debug|Win32.ActiveCfg = Debug|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Debug|x86.Build.0 = Debug|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Debug|x86.ActiveCfg = Debug|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Release|Win32.Build.0 = Release|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Release|Win32.ActiveCfg = Release|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Release|x86.Build.0 = Release|Any CPU + {08CE9972-283B-44F4-82FA-966F7DFA6B7A}.Release|x86.ActiveCfg = Release|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Debug|Win32.Build.0 = Debug|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Debug|x86.Build.0 = Debug|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Debug|x86.ActiveCfg = Debug|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Release|Win32.Build.0 = Release|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Release|Win32.ActiveCfg = Release|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Release|x86.Build.0 = Release|Any CPU + {3EAA45A9-735C-4AC7-A799-947B93EA449D}.Release|x86.ActiveCfg = Release|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Win32.Build.0 = Debug|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|Win32.ActiveCfg = Debug|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|x86.Build.0 = Debug|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Debug|x86.ActiveCfg = Debug|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Win32.Build.0 = Release|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|Win32.ActiveCfg = Release|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|x86.Build.0 = Release|Any CPU + {1F261725-6318-4434-A1B1-6C70CE4CD324}.Release|x86.ActiveCfg = Release|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Debug|Win32.Build.0 = Debug|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Debug|x86.Build.0 = Debug|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Debug|x86.ActiveCfg = Debug|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Release|Win32.Build.0 = Release|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Release|Win32.ActiveCfg = Release|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Release|x86.Build.0 = Release|Any CPU + {A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}.Release|x86.ActiveCfg = Release|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Debug|Win32.Build.0 = Debug|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Debug|Win32.ActiveCfg = Debug|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Debug|x86.Build.0 = Debug|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Debug|x86.ActiveCfg = Debug|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Release|Win32.Build.0 = Release|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Release|Win32.ActiveCfg = Release|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Release|x86.Build.0 = Release|Any CPU + {88DA149F-21B2-48AB-82C4-28FB6BDFD783}.Release|x86.ActiveCfg = Release|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Debug|Win32.Build.0 = Debug|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Debug|x86.Build.0 = Debug|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Debug|x86.ActiveCfg = Debug|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Release|Win32.Build.0 = Release|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Release|Win32.ActiveCfg = Release|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Release|x86.Build.0 = Release|Any CPU + {943DBBB3-E84E-4CF4-917C-C05AFA8743C1}.Release|x86.ActiveCfg = Release|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Debug|Win32.Build.0 = Debug|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Debug|x86.Build.0 = Debug|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Debug|x86.ActiveCfg = Debug|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Release|Win32.Build.0 = Release|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Release|Win32.ActiveCfg = Release|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Release|x86.Build.0 = Release|Any CPU + {78CC29AC-CC79-4355-B1F2-97936DF198AC}.Release|x86.ActiveCfg = Release|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Debug|Win32.Build.0 = Debug|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Debug|x86.Build.0 = Debug|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Debug|x86.ActiveCfg = Debug|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Release|Win32.Build.0 = Release|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Release|Win32.ActiveCfg = Release|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Release|x86.Build.0 = Release|Any CPU + {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865}.Release|x86.ActiveCfg = Release|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Debug|Win32.Build.0 = Debug|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Debug|Win32.ActiveCfg = Debug|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Debug|x86.Build.0 = Debug|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Debug|x86.ActiveCfg = Debug|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Release|Win32.Build.0 = Release|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Release|Win32.ActiveCfg = Release|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Release|x86.Build.0 = Release|Any CPU + {66A378A1-E9F4-4AD5-8946-D0EC06C2902F}.Release|x86.ActiveCfg = Release|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Debug|Win32.Build.0 = Debug|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Debug|Win32.ActiveCfg = Debug|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Debug|x86.Build.0 = Debug|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Debug|x86.ActiveCfg = Debug|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Release|Win32.Build.0 = Release|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Release|Win32.ActiveCfg = Release|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Release|x86.Build.0 = Release|Any CPU + {FC0FE702-A87D-4D70-A9B6-1ECCD611125F}.Release|x86.ActiveCfg = Release|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Win32.Build.0 = Debug|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Win32.ActiveCfg = Debug|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|x86.Build.0 = Debug|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|x86.ActiveCfg = Debug|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|Win32.Build.0 = Release|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|Win32.ActiveCfg = Release|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|x86.Build.0 = Release|Any CPU + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|x86.ActiveCfg = Release|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Win32.Build.0 = Debug|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|x86.Build.0 = Debug|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|x86.ActiveCfg = Debug|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Win32.Build.0 = Release|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Win32.ActiveCfg = Release|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|x86.Build.0 = Release|Any CPU + {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|x86.ActiveCfg = Release|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|Win32.Build.0 = Debug|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|x86.Build.0 = Debug|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Debug|x86.ActiveCfg = Debug|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|Win32.Build.0 = Release|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|Win32.ActiveCfg = Release|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|x86.Build.0 = Release|Any CPU + {CBC6C247-747B-4908-B09A-4D2E0F640B6B}.Release|x86.ActiveCfg = Release|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Win32.Build.0 = Debug|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|x86.Build.0 = Debug|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Debug|x86.ActiveCfg = Debug|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Release|Win32.Build.0 = Release|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Release|Win32.ActiveCfg = Release|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Release|x86.Build.0 = Release|Any CPU + {0162E499-42D0-409B-AA25-EED21F75336B}.Release|x86.ActiveCfg = Release|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|Win32.Build.0 = Debug|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|Win32.ActiveCfg = Debug|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|x86.Build.0 = Debug|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Debug|x86.ActiveCfg = Debug|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|Win32.Build.0 = Release|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|Win32.ActiveCfg = Release|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|x86.Build.0 = Release|Any CPU + {DCA2703D-250A-463E-A68A-07ED105AE6BD}.Release|x86.ActiveCfg = Release|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|Win32.Build.0 = Debug|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|x86.Build.0 = Debug|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|Win32.Build.0 = Release|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|Win32.ActiveCfg = Release|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|x86.Build.0 = Release|Any CPU + {7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}.Release|x86.ActiveCfg = Release|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Debug|Win32.Build.0 = Debug|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Debug|Win32.ActiveCfg = Debug|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Debug|x86.Build.0 = Debug|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Debug|x86.ActiveCfg = Debug|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Release|Win32.Build.0 = Release|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Release|Win32.ActiveCfg = Release|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Release|x86.Build.0 = Release|Any CPU + {08F772A1-F0BE-433E-8B37-F6522953DB05}.Release|x86.ActiveCfg = Release|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Debug|Win32.Build.0 = Debug|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Debug|Win32.ActiveCfg = Debug|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Debug|x86.Build.0 = Debug|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Debug|x86.ActiveCfg = Debug|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Release|Win32.Build.0 = Release|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Release|Win32.ActiveCfg = Release|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Release|x86.Build.0 = Release|Any CPU + {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13}.Release|x86.ActiveCfg = Release|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Debug|Win32.Build.0 = Debug|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Debug|Win32.ActiveCfg = Debug|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Debug|x86.Build.0 = Debug|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Debug|x86.ActiveCfg = Debug|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Release|Win32.Build.0 = Release|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Release|Win32.ActiveCfg = Release|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Release|x86.Build.0 = Release|Any CPU + {0991423A-DBF6-4C89-B365-A1DF1EB32E42}.Release|x86.ActiveCfg = Release|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Debug|Win32.Build.0 = Debug|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Debug|x86.Build.0 = Debug|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Debug|x86.ActiveCfg = Debug|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Release|Win32.Build.0 = Release|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Release|Win32.ActiveCfg = Release|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Release|x86.Build.0 = Release|Any CPU + {A9F12710-24E4-46D4-832C-6ECB395B9EAD}.Release|x86.ActiveCfg = Release|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Debug|Win32.Build.0 = Debug|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Debug|x86.Build.0 = Debug|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Debug|x86.ActiveCfg = Debug|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Release|Win32.Build.0 = Release|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Release|Win32.ActiveCfg = Release|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Release|x86.Build.0 = Release|Any CPU + {B7823AE9-4B43-4859-8796-2EBDC116FBB8}.Release|x86.ActiveCfg = Release|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Debug|Win32.Build.0 = Debug|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Debug|x86.Build.0 = Debug|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Debug|x86.ActiveCfg = Debug|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Release|Win32.Build.0 = Release|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Release|Win32.ActiveCfg = Release|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Release|x86.Build.0 = Release|Any CPU + {BAD94D6E-4159-4CB6-B991-486F412D9BB6}.Release|x86.ActiveCfg = Release|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Debug|Win32.Build.0 = Debug|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Debug|x86.Build.0 = Debug|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Debug|x86.ActiveCfg = Debug|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Release|Win32.Build.0 = Release|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Release|Win32.ActiveCfg = Release|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Release|x86.Build.0 = Release|Any CPU + {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1}.Release|x86.ActiveCfg = Release|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Debug|Win32.Build.0 = Debug|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Debug|x86.Build.0 = Debug|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Debug|x86.ActiveCfg = Debug|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Release|Win32.Build.0 = Release|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Release|Win32.ActiveCfg = Release|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Release|x86.Build.0 = Release|Any CPU + {EEF5E054-4192-4A57-8FBF-E860D808A51D}.Release|x86.ActiveCfg = Release|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Debug|Win32.Build.0 = Debug|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Debug|x86.Build.0 = Debug|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Debug|x86.ActiveCfg = Debug|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Release|Win32.Build.0 = Release|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Release|Win32.ActiveCfg = Release|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Release|x86.Build.0 = Release|Any CPU + {AFE34868-AFA1-4E1C-9450-47AB4BE329D5}.Release|x86.ActiveCfg = Release|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|Win32.Build.0 = Debug|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|x86.Build.0 = Debug|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Debug|x86.ActiveCfg = Debug|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|Win32.Build.0 = Release|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|Win32.ActiveCfg = Release|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|x86.Build.0 = Release|Any CPU + {0008FCE9-9EB4-4E2E-979B-553278E5BBA6}.Release|x86.ActiveCfg = Release|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|Win32.Build.0 = Debug|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|x86.Build.0 = Debug|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Debug|x86.ActiveCfg = Debug|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|Win32.Build.0 = Release|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|Win32.ActiveCfg = Release|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|x86.Build.0 = Release|Any CPU + {6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}.Release|x86.ActiveCfg = Release|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Debug|Win32.Build.0 = Debug|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Debug|x86.Build.0 = Debug|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Debug|x86.ActiveCfg = Debug|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Release|Win32.Build.0 = Release|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Release|Win32.ActiveCfg = Release|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Release|x86.Build.0 = Release|Any CPU + {A569DCC1-C608-45FD-B770-4F79335EF154}.Release|x86.ActiveCfg = Release|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Debug|Win32.Build.0 = Debug|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Debug|Win32.ActiveCfg = Debug|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Debug|x86.Build.0 = Debug|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Debug|x86.ActiveCfg = Debug|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Release|Win32.Build.0 = Release|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Release|Win32.ActiveCfg = Release|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Release|x86.Build.0 = Release|Any CPU + {DD9AE6A5-2B9D-443A-BC71-38BE578C36BD}.Release|x86.ActiveCfg = Release|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Debug|Win32.Build.0 = Debug|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Debug|Win32.ActiveCfg = Debug|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Debug|x86.Build.0 = Debug|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Debug|x86.ActiveCfg = Debug|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Release|Win32.Build.0 = Release|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Release|Win32.ActiveCfg = Release|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Release|x86.Build.0 = Release|Any CPU + {461606BD-E824-4D0A-8CBA-01810B1F5E02}.Release|x86.ActiveCfg = Release|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Win32.Build.0 = Debug|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|Win32.ActiveCfg = Debug|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|x86.Build.0 = Debug|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Debug|x86.ActiveCfg = Debug|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|Win32.Build.0 = Release|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|Win32.ActiveCfg = Release|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|x86.Build.0 = Release|Any CPU + {64A3E5E6-90BF-47F6-94DF-68C94B62C817}.Release|x86.ActiveCfg = Release|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Debug|Win32.Build.0 = Debug|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Debug|Win32.ActiveCfg = Debug|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Debug|x86.Build.0 = Debug|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Debug|x86.ActiveCfg = Debug|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Release|Win32.Build.0 = Release|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Release|Win32.ActiveCfg = Release|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Release|x86.Build.0 = Release|Any CPU + {5EEB99CF-EA2B-4733-80A6-CE9192D68170}.Release|x86.ActiveCfg = Release|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|Win32.Build.0 = Debug|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|x86.Build.0 = Debug|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Debug|x86.ActiveCfg = Debug|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|Win32.Build.0 = Release|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|Win32.ActiveCfg = Release|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|x86.Build.0 = Release|Any CPU + {D022A6CE-7438-41E8-AC64-F2DE18EC54C6}.Release|x86.ActiveCfg = Release|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|Win32.Build.0 = Debug|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|x86.Build.0 = Debug|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Release|Win32.Build.0 = Release|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Release|Win32.ActiveCfg = Release|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Release|x86.Build.0 = Release|Any CPU + {4B8F0F98-8BE1-402B-AA8B-C8D548577B38}.Release|x86.ActiveCfg = Release|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Win32.Build.0 = Debug|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|x86.Build.0 = Debug|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Debug|x86.ActiveCfg = Debug|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Win32.Build.0 = Release|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|Win32.ActiveCfg = Release|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|x86.Build.0 = Release|Any CPU + {F93E52FD-DA66-4CE5-A0CB-BCD902811122}.Release|x86.ActiveCfg = Release|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Debug|Win32.Build.0 = Debug|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Debug|x86.Build.0 = Debug|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Debug|x86.ActiveCfg = Debug|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|Win32.Build.0 = Release|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|Win32.ActiveCfg = Release|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|x86.Build.0 = Release|Any CPU + {7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51}.Release|x86.ActiveCfg = Release|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|Win32.Build.0 = Debug|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|x86.Build.0 = Debug|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|x86.ActiveCfg = Debug|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|Win32.Build.0 = Release|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|Win32.ActiveCfg = Release|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|x86.Build.0 = Release|Any CPU + {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|x86.ActiveCfg = Release|Any CPU + {3CA90546-3B4C-4663-9445-C4E9371750A7}.Debug|x86.Build.0 = Debug|Any CPU + {3CA90546-3B4C-4663-9445-C4E9371750A7}.Debug|x86.ActiveCfg = Debug|Any CPU + {3CA90546-3B4C-4663-9445-C4E9371750A7}.Release|x86.Build.0 = Release|Any CPU + {3CA90546-3B4C-4663-9445-C4E9371750A7}.Release|x86.ActiveCfg = Release|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Debug|Win32.Build.0 = Debug|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Debug|Win32.ActiveCfg = Debug|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Debug|x86.Build.0 = Debug|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Debug|x86.ActiveCfg = Debug|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Release|Win32.Build.0 = Release|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Release|Win32.ActiveCfg = Release|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Release|x86.Build.0 = Release|Any CPU + {EC06F96A-AEEC-49D6-B03D-AB87C6EB674C}.Release|x86.ActiveCfg = Release|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|Win32.Build.0 = Debug|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|x86.Build.0 = Debug|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Debug|x86.ActiveCfg = Debug|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Release|Win32.Build.0 = Release|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Release|Win32.ActiveCfg = Release|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Release|x86.Build.0 = Release|Any CPU + {1D18D788-F7EE-4585-A23B-34DC8EC63CB8}.Release|x86.ActiveCfg = Release|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Debug|Win32.Build.0 = Debug|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Debug|x86.Build.0 = Debug|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Debug|x86.ActiveCfg = Debug|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Release|Win32.Build.0 = Release|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Release|Win32.ActiveCfg = Release|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Release|x86.Build.0 = Release|Any CPU + {A4C858C8-51B6-4265-A695-A20FCEBA1D19}.Release|x86.ActiveCfg = Release|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Debug|Win32.Build.0 = Debug|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Debug|Win32.ActiveCfg = Debug|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Debug|x86.Build.0 = Debug|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Debug|x86.ActiveCfg = Debug|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Release|Win32.Build.0 = Release|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Release|Win32.ActiveCfg = Release|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Release|x86.Build.0 = Release|Any CPU + {388E7B64-0393-4EB4-A3E3-5C474F141853}.Release|x86.ActiveCfg = Release|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Debug|Win32.Build.0 = Debug|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Debug|x86.Build.0 = Debug|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Debug|x86.ActiveCfg = Debug|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Release|Win32.Build.0 = Release|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Release|Win32.ActiveCfg = Release|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Release|x86.Build.0 = Release|Any CPU + {F390DA70-1FE1-4715-81A0-389AB010C130}.Release|x86.ActiveCfg = Release|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Win32.Build.0 = Debug|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|x86.Build.0 = Debug|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Debug|x86.ActiveCfg = Debug|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Win32.Build.0 = Release|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|Win32.ActiveCfg = Release|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|x86.Build.0 = Release|Any CPU + {7C96B65D-28A5-4F28-A35B-8D83CE831EE8}.Release|x86.ActiveCfg = Release|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Debug|Win32.Build.0 = Debug|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Debug|Win32.ActiveCfg = Debug|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Debug|x86.Build.0 = Debug|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Debug|x86.ActiveCfg = Debug|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Release|Win32.Build.0 = Release|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Release|Win32.ActiveCfg = Release|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Release|x86.Build.0 = Release|Any CPU + {BF38FB72-B380-4196-AF8C-95749D726C61}.Release|x86.ActiveCfg = Release|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Debug|Win32.Build.0 = Debug|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Debug|Win32.ActiveCfg = Debug|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Debug|x86.Build.0 = Debug|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Debug|x86.ActiveCfg = Debug|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Release|Win32.Build.0 = Release|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Release|Win32.ActiveCfg = Release|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Release|x86.Build.0 = Release|Any CPU + {1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}.Release|x86.ActiveCfg = Release|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Debug|Win32.Build.0 = Debug|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Debug|x86.Build.0 = Debug|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Debug|x86.ActiveCfg = Debug|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Release|Win32.Build.0 = Release|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Release|Win32.ActiveCfg = Release|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Release|x86.Build.0 = Release|Any CPU + {E1B288A2-08EE-4318-8BBB-8AB72C69E33E}.Release|x86.ActiveCfg = Release|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|Win32.Build.0 = Debug|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|x86.Build.0 = Debug|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Debug|x86.ActiveCfg = Debug|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|Win32.Build.0 = Release|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|Win32.ActiveCfg = Release|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|x86.Build.0 = Release|Any CPU + {8D732610-8FC6-43BA-94C9-7126FD7FE361}.Release|x86.ActiveCfg = Release|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|Win32.Build.0 = Debug|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|x86.Build.0 = Debug|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Debug|x86.ActiveCfg = Debug|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|Win32.Build.0 = Release|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|Win32.ActiveCfg = Release|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|x86.Build.0 = Release|Any CPU + {D332F2D1-2CF1-43B7-903C-844BD5211A7E}.Release|x86.ActiveCfg = Release|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|Win32.Build.0 = Debug|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|Win32.ActiveCfg = Debug|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|x86.Build.0 = Debug|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Debug|x86.ActiveCfg = Debug|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|Win32.Build.0 = Release|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|Win32.ActiveCfg = Release|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|x86.Build.0 = Release|Any CPU + {833904AB-3CD4-4071-9B48-5770E44685AA}.Release|x86.ActiveCfg = Release|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|Win32.Build.0 = Debug|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|Win32.ActiveCfg = Debug|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|x86.Build.0 = Debug|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Debug|x86.ActiveCfg = Debug|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|Win32.Build.0 = Release|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|Win32.ActiveCfg = Release|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|x86.Build.0 = Release|Any CPU + {23B517C9-1ECC-4419-A13F-0B7136D085CB}.Release|x86.ActiveCfg = Release|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Debug|Win32.Build.0 = Debug|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Debug|Win32.ActiveCfg = Debug|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Debug|x86.Build.0 = Debug|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Debug|x86.ActiveCfg = Debug|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Release|Win32.Build.0 = Release|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Release|Win32.ActiveCfg = Release|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Release|x86.Build.0 = Release|Any CPU + {C9DE556D-325C-4544-B29F-16A9EB7C9830}.Release|x86.ActiveCfg = Release|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Debug|Win32.Build.0 = Debug|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Debug|Win32.ActiveCfg = Debug|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Debug|x86.Build.0 = Debug|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Debug|x86.ActiveCfg = Debug|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|Win32.Build.0 = Release|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|Win32.ActiveCfg = Release|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|x86.Build.0 = Release|Any CPU + {DBCF20A1-BA13-4582-BFA9-74DE4D987B73}.Release|x86.ActiveCfg = Release|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Debug|Win32.Build.0 = Debug|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Debug|x86.Build.0 = Debug|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Debug|x86.ActiveCfg = Debug|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Release|Win32.Build.0 = Release|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Release|Win32.ActiveCfg = Release|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Release|x86.Build.0 = Release|Any CPU + {4AC2D5F1-F671-480C-A075-6BF62B3721B2}.Release|x86.ActiveCfg = Release|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Debug|Win32.Build.0 = Debug|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Debug|x86.Build.0 = Debug|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Debug|x86.ActiveCfg = Debug|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Release|Win32.Build.0 = Release|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Release|Win32.ActiveCfg = Release|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Release|x86.Build.0 = Release|Any CPU + {6FA16499-896F-4C02-BB43-1AF5C6C7C713}.Release|x86.ActiveCfg = Release|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Debug|Win32.Build.0 = Debug|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Debug|x86.Build.0 = Debug|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Debug|x86.ActiveCfg = Debug|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Release|Win32.Build.0 = Release|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Release|Win32.ActiveCfg = Release|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Release|x86.Build.0 = Release|Any CPU + {50A89267-A28B-4DF3-8E62-912E005143B8}.Release|x86.ActiveCfg = Release|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|Win32.Build.0 = Debug|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|Win32.ActiveCfg = Debug|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|x86.Build.0 = Debug|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Debug|x86.ActiveCfg = Debug|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Win32.Build.0 = Release|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|Win32.ActiveCfg = Release|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|x86.Build.0 = Release|Any CPU + {52006F3F-3156-45DE-89D8-C4813694FBA4}.Release|x86.ActiveCfg = Release|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Debug|Win32.Build.0 = Debug|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Debug|Win32.ActiveCfg = Debug|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Debug|x86.Build.0 = Debug|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Debug|x86.ActiveCfg = Debug|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Release|Win32.Build.0 = Release|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Release|Win32.ActiveCfg = Release|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Release|x86.Build.0 = Release|Any CPU + {70966F84-74C9-4067-A379-0C674A929233}.Release|x86.ActiveCfg = Release|Any CPU + {068F9531-5D29-49E0-980E-59982A3A0469}.Debug|Win32.Build.0 = Debug|Win32 + {068F9531-5D29-49E0-980E-59982A3A0469}.Debug|Win32.ActiveCfg = Debug|Win32 + {068F9531-5D29-49E0-980E-59982A3A0469}.Debug|x86.Build.0 = Debug|Any CPU + {068F9531-5D29-49E0-980E-59982A3A0469}.Debug|x86.ActiveCfg = Debug|Any CPU + {068F9531-5D29-49E0-980E-59982A3A0469}.Release|Win32.Build.0 = Release|Win32 + {068F9531-5D29-49E0-980E-59982A3A0469}.Release|Win32.ActiveCfg = Release|Win32 + {068F9531-5D29-49E0-980E-59982A3A0469}.Release|x86.Build.0 = Release|Any CPU + {068F9531-5D29-49E0-980E-59982A3A0469}.Release|x86.ActiveCfg = Release|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Debug|Win32.Build.0 = Debug|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Debug|x86.Build.0 = Debug|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Debug|x86.ActiveCfg = Debug|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Release|Win32.Build.0 = Release|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Release|Win32.ActiveCfg = Release|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Release|x86.Build.0 = Release|Any CPU + {FE88FE17-D9FB-4FCC-9A35-6BFFB6B26CC6}.Release|x86.ActiveCfg = Release|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Debug|Win32.Build.0 = Debug|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Debug|Win32.ActiveCfg = Debug|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Debug|x86.Build.0 = Debug|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Debug|x86.ActiveCfg = Debug|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Release|Win32.Build.0 = Release|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Release|Win32.ActiveCfg = Release|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Release|x86.Build.0 = Release|Any CPU + {72FFB35A-C9E2-4A31-B4FA-E3E3E28DED5F}.Release|x86.ActiveCfg = Release|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Debug|Win32.Build.0 = Debug|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Debug|x86.Build.0 = Debug|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Debug|x86.ActiveCfg = Debug|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Release|Win32.Build.0 = Release|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Release|Win32.ActiveCfg = Release|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Release|x86.Build.0 = Release|Any CPU + {BDA49550-5ED1-4C6B-B648-657B2CACD8E0}.Release|x86.ActiveCfg = Release|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Debug|Win32.Build.0 = Debug|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Debug|x86.Build.0 = Debug|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Debug|x86.ActiveCfg = Debug|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Release|Win32.Build.0 = Release|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Release|Win32.ActiveCfg = Release|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Release|x86.Build.0 = Release|Any CPU + {D294A12D-4B38-4F25-9AA6-3D4A6CE26E7B}.Release|x86.ActiveCfg = Release|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Win32.Build.0 = Debug|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.Build.0 = Debug|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Debug|x86.ActiveCfg = Debug|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Win32.Build.0 = Release|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|Win32.ActiveCfg = Release|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.Build.0 = Release|Any CPU + {DDE2A481-8271-4EAC-A330-8FA6A38D13D1}.Release|x86.ActiveCfg = Release|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Debug|Win32.Build.0 = Debug|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Debug|x86.Build.0 = Debug|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Debug|x86.ActiveCfg = Debug|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Release|Win32.Build.0 = Release|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Release|Win32.ActiveCfg = Release|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Release|x86.Build.0 = Release|Any CPU + {4139CCF6-FB49-4A9D-B2CF-331E9EA3198D}.Release|x86.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Win32.Build.0 = Debug|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.Build.0 = Debug|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|x86.ActiveCfg = Debug|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Win32.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Win32.ActiveCfg = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.Build.0 = Release|Any CPU + {6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|x86.ActiveCfg = Release|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|Win32.Build.0 = Debug|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|x86.Build.0 = Debug|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Debug|x86.ActiveCfg = Debug|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|Win32.Build.0 = Release|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|Win32.ActiveCfg = Release|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|x86.Build.0 = Release|Any CPU + {2FF700C2-A38A-48BD-A637-8CAFD4FE6237}.Release|x86.ActiveCfg = Release|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Win32.Build.0 = Debug|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|Win32.ActiveCfg = Debug|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|x86.Build.0 = Debug|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Debug|x86.ActiveCfg = Debug|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|Win32.Build.0 = Release|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|Win32.ActiveCfg = Release|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|x86.Build.0 = Release|Any CPU + {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}.Release|x86.ActiveCfg = Release|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Debug|Win32.Build.0 = Debug|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Debug|x86.Build.0 = Debug|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Debug|x86.ActiveCfg = Debug|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Release|Win32.Build.0 = Release|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Release|Win32.ActiveCfg = Release|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Release|x86.Build.0 = Release|Any CPU + {B22522AA-B5BF-4A58-AC6D-D4B45805521F}.Release|x86.ActiveCfg = Release|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Debug|Win32.Build.0 = Debug|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Debug|Win32.ActiveCfg = Debug|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Debug|x86.Build.0 = Debug|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Debug|x86.ActiveCfg = Debug|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Release|Win32.Build.0 = Release|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Release|Win32.ActiveCfg = Release|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Release|x86.Build.0 = Release|Any CPU + {870115DD-960A-4406-A6B9-600BCDC36A03}.Release|x86.ActiveCfg = Release|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Debug|Win32.Build.0 = Debug|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Debug|x86.Build.0 = Debug|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Debug|x86.ActiveCfg = Debug|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Release|Win32.Build.0 = Release|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Release|Win32.ActiveCfg = Release|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Release|x86.Build.0 = Release|Any CPU + {6222A3A1-83CE-47A3-A4E4-A018F82D44D8}.Release|x86.ActiveCfg = Release|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|Win32.Build.0 = Debug|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|x86.Build.0 = Debug|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Debug|x86.ActiveCfg = Debug|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Release|Win32.Build.0 = Release|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Release|Win32.ActiveCfg = Release|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Release|x86.Build.0 = Release|Any CPU + {1152B71B-3C05-4598-B20D-823B5D40559E}.Release|x86.ActiveCfg = Release|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|Win32.Build.0 = Debug|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.Build.0 = Debug|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Debug|x86.ActiveCfg = Debug|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|Win32.Build.0 = Release|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|Win32.ActiveCfg = Release|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.Build.0 = Release|Any CPU + {8035765F-D51F-4A0C-A746-2FD100E19419}.Release|x86.ActiveCfg = Release|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|Win32.Build.0 = Debug|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|x86.Build.0 = Debug|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Debug|x86.ActiveCfg = Debug|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|Win32.Build.0 = Release|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|Win32.ActiveCfg = Release|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.Build.0 = Release|Any CPU + {2748AD25-9C63-4E12-877B-4DCE96FBED54}.Release|x86.ActiveCfg = Release|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Debug|Win32.Build.0 = Debug|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Debug|Win32.ActiveCfg = Debug|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Debug|x86.Build.0 = Debug|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Debug|x86.ActiveCfg = Debug|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Release|Win32.Build.0 = Release|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Release|Win32.ActiveCfg = Release|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Release|x86.Build.0 = Release|Any CPU + {80318B5F-A25D-45AB-8A95-EF31D2370A4C}.Release|x86.ActiveCfg = Release|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Win32.Build.0 = Debug|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|x86.Build.0 = Debug|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Debug|x86.ActiveCfg = Debug|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Win32.Build.0 = Release|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|Win32.ActiveCfg = Release|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|x86.Build.0 = Release|Any CPU + {924EE450-603D-49C1-A8E5-4AFAA31CE6F3}.Release|x86.ActiveCfg = Release|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Win32.Build.0 = Debug|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|Win32.ActiveCfg = Debug|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.Build.0 = Debug|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Debug|x86.ActiveCfg = Debug|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Win32.Build.0 = Release|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|Win32.ActiveCfg = Release|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.Build.0 = Release|Any CPU + {857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}.Release|x86.ActiveCfg = Release|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|Win32.Build.0 = Debug|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|x86.Build.0 = Debug|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|Win32.Build.0 = Release|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|Win32.ActiveCfg = Release|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|x86.Build.0 = Release|Any CPU + {7E4A7172-7FF5-48D0-B719-7CD959DD1AC9}.Release|x86.ActiveCfg = Release|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Win32.Build.0 = Debug|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|Win32.ActiveCfg = Debug|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|x86.Build.0 = Debug|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Debug|x86.ActiveCfg = Debug|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Win32.Build.0 = Release|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|Win32.ActiveCfg = Release|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|x86.Build.0 = Release|Any CPU + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}.Release|x86.ActiveCfg = Release|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Debug|Win32.Build.0 = Debug|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Debug|x86.Build.0 = Debug|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Debug|x86.ActiveCfg = Debug|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Release|Win32.Build.0 = Debug|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Release|Win32.ActiveCfg = Debug|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Release|x86.Build.0 = Debug|Any CPU + {AD6FAA08-D6F5-4DBA-AF85-F4DA9F40C3B5}.Release|x86.ActiveCfg = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Debug|Win32.Build.0 = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Debug|x86.Build.0 = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Debug|x86.ActiveCfg = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Release|Win32.Build.0 = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Release|Win32.ActiveCfg = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Release|x86.Build.0 = Debug|Any CPU + {4980B743-B32F-4aba-AABD-45E2CAD3568D}.Release|x86.ActiveCfg = Debug|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Debug|Win32.Build.0 = Debug|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Debug|x86.Build.0 = Debug|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Debug|x86.ActiveCfg = Debug|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Release|Win32.Build.0 = Release|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Release|Win32.ActiveCfg = Release|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Release|x86.Build.0 = Release|Any CPU + {7DB80259-24D4-46C3-A024-53FF1987733D}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1548,9 +2211,9 @@ Global {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {0773ED53-08E2-4495-A3BE-CA0B5D413C15} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {6022AC51-B658-4C54-97EF-79187AC65B47} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {53DCA265-3C3C-42F9-B647-F72BA678122B} = {AD8272AC-5C9E-4061-90FB-CEF15A9A3F41} {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} = {AD8272AC-5C9E-4061-90FB-CEF15A9A3F41} {984CC812-9470-4A13-AFF9-CC44068D666C} = {AD8272AC-5C9E-4061-90FB-CEF15A9A3F41} @@ -1564,8 +2227,6 @@ Global {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} {08F772A1-F0BE-433E-8B37-F6522953DB05} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} - {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} {66A378A1-E9F4-4AD5-8946-D0EC06C2902F} = {6022AC51-B658-4C54-97EF-79187AC65B47} {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {6022AC51-B658-4C54-97EF-79187AC65B47} {78CC29AC-CC79-4355-B1F2-97936DF198AC} = {6022AC51-B658-4C54-97EF-79187AC65B47} diff --git a/SharpDevelop.sln b/SharpDevelop.sln index b539ecb077..4d832edd34 100644 --- a/SharpDevelop.sln +++ b/SharpDevelop.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 11.00 # Visual Studio 2010 -# SharpDevelop 4.2.0.8783 +# SharpDevelop 4.3 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}" ProjectSection(SolutionItems) = postProject EndProjectSection @@ -430,20 +430,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HexEditor", "src\AddIns\Dis {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "IconEditor", "IconEditor", "{0773ED53-08E2-4495-A3BE-CA0B5D413C15}" - ProjectSection(SolutionItems) = postProject - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor\IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "src\AddIns\DisplayBindings\IconEditor\IconEditorAddIn\IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" - ProjectSection(ProjectDependencies) = postProject - {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} - EndProjectSection -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WpfDesign", "WpfDesign", "{6022AC51-B658-4C54-97EF-79187AC65B47}" ProjectSection(SolutionItems) = postProject EndProjectSection @@ -483,6 +469,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILSpyAddIn", "src\AddIns\Di EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.NRefactory.CSharp", "src\Libraries\NewNRefactory\ICSharpCode.NRefactory.CSharp\ICSharpCode.NRefactory.CSharp.csproj", "{53DCA265-3C3C-42F9-B647-F72BA678122B}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "src\AddIns\DisplayBindings\IconEditor\IconEditor.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" + ProjectSection(ProjectDependencies) = postProject + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} + EndProjectSection +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}" ProjectSection(SolutionItems) = postProject EndProjectSection @@ -675,10 +666,6 @@ Global {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Any CPU.Build.0 = Debug|Any CPU {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.ActiveCfg = Release|Any CPU {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.Build.0 = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Any CPU.Build.0 = Release|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Any CPU.Build.0 = Debug|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -1179,14 +1166,6 @@ Global {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|Win32.ActiveCfg = Release|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|x86.Build.0 = Release|Any CPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|x86.ActiveCfg = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Win32.Build.0 = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Win32.ActiveCfg = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|x86.Build.0 = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|x86.ActiveCfg = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Win32.Build.0 = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Win32.ActiveCfg = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|x86.Build.0 = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|x86.ActiveCfg = Release|Any CPU {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Win32.Build.0 = Debug|Any CPU {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Win32.ActiveCfg = Debug|Any CPU {E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|x86.Build.0 = Debug|Any CPU @@ -1727,9 +1706,9 @@ Global {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} - {0773ED53-08E2-4495-A3BE-CA0B5D413C15} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {6022AC51-B658-4C54-97EF-79187AC65B47} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {814DFF39-5324-40BE-90EA-F62F758660B3} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} + {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {AFE34868-AFA1-4E1C-9450-47AB4BE329D5} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} {EEF5E054-4192-4A57-8FBF-E860D808A51D} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} {5C70D6AB-0A33-43F9-B8B5-54558C35BBB1} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04} @@ -1739,8 +1718,6 @@ Global {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} {5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} {08F772A1-F0BE-433E-8B37-F6522953DB05} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668} - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} - {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} = {0773ED53-08E2-4495-A3BE-CA0B5D413C15} {66A378A1-E9F4-4AD5-8946-D0EC06C2902F} = {6022AC51-B658-4C54-97EF-79187AC65B47} {9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {6022AC51-B658-4C54-97EF-79187AC65B47} {78CC29AC-CC79-4355-B1F2-97936DF198AC} = {6022AC51-B658-4C54-97EF-79187AC65B47} diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/AlphaTransparentBitmap.cs b/src/AddIns/DisplayBindings/IconEditor/AlphaTransparentBitmap.cs similarity index 70% rename from src/AddIns/DisplayBindings/IconEditor/IconEditor/AlphaTransparentBitmap.cs rename to src/AddIns/DisplayBindings/IconEditor/AlphaTransparentBitmap.cs index df4475349c..be587de37c 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/AlphaTransparentBitmap.cs +++ b/src/AddIns/DisplayBindings/IconEditor/AlphaTransparentBitmap.cs @@ -6,7 +6,7 @@ using System.Drawing; using System.Drawing.Imaging; using System.IO; -namespace IconEditor +namespace ICSharpCode.IconEditor { /// /// .NET does not support alpha-transparent .bmp files. @@ -76,5 +76,41 @@ namespace IconEditor return bmp; } } + + public unsafe static Bitmap ConvertToAlphaTransparentBitmap(Bitmap andMask, Bitmap xorMask) + { + if (andMask == null || xorMask == null) + return null; + int width = xorMask.Width; + int height = xorMask.Height; + if (andMask.Width != width || andMask.Height != height) + throw new ArgumentException(); + Bitmap bmp = new Bitmap(xorMask, width, height); + BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); + try { + if (bmpData.Stride != width * 4) + throw new InvalidOperationException("expected 32bit bitmapdata"); + BitmapData maskData = andMask.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, PixelFormat.Format1bppIndexed); + try { + uint* bmpPtr = (uint*)bmpData.Scan0.ToPointer(); + byte* maskPtr = (byte*)maskData.Scan0.ToPointer(); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + if (((maskPtr[x >> 3] << (x & 7)) & 0x80) != 0) { + // white in the mask -> survives AND -> transparent + bmpPtr[x] = 0; + } + } + bmpPtr += width; + maskPtr += maskData.Stride; + } + } finally { + andMask.UnlockBits(maskData); + } + } finally { + bmp.UnlockBits(bmpData); + } + return bmp; + } } } diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Configuration/AssemblyInfo.cs b/src/AddIns/DisplayBindings/IconEditor/Configuration/AssemblyInfo.cs similarity index 92% rename from src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Configuration/AssemblyInfo.cs rename to src/AddIns/DisplayBindings/IconEditor/Configuration/AssemblyInfo.cs index bb7c02719b..fd5b9b2828 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Configuration/AssemblyInfo.cs +++ b/src/AddIns/DisplayBindings/IconEditor/Configuration/AssemblyInfo.cs @@ -9,7 +9,7 @@ using System.Reflection; // change them to the information which is associated with the assembly // you compile. -[assembly: AssemblyTitle("IconEditorAddIn")] +[assembly: AssemblyTitle("IconEditor")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyTrademark("")] diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.Designer.cs b/src/AddIns/DisplayBindings/IconEditor/EditorPanel.Designer.cs similarity index 71% rename from src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.Designer.cs rename to src/AddIns/DisplayBindings/IconEditor/EditorPanel.Designer.cs index d7931cc1c5..68c8653d10 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.Designer.cs +++ b/src/AddIns/DisplayBindings/IconEditor/EditorPanel.Designer.cs @@ -1,7 +1,7 @@ // Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) -namespace IconEditor +namespace ICSharpCode.IconEditor { partial class EditorPanel : System.Windows.Forms.UserControl { @@ -32,25 +32,49 @@ namespace IconEditor private void InitializeComponent() { this.panel2 = new System.Windows.Forms.Panel(); + this.label2 = new System.Windows.Forms.Label(); + this.addFormatButton = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.colorComboBox = new System.Windows.Forms.ComboBox(); this.table = new System.Windows.Forms.TableLayoutPanel(); this.tableLabel = new System.Windows.Forms.Label(); - this.panel1 = new System.Windows.Forms.Panel(); this.panel2.SuspendLayout(); this.table.SuspendLayout(); this.SuspendLayout(); // // panel2 // + this.panel2.Controls.Add(this.label2); + this.panel2.Controls.Add(this.addFormatButton); this.panel2.Controls.Add(this.label1); this.panel2.Controls.Add(this.colorComboBox); this.panel2.Dock = System.Windows.Forms.DockStyle.Top; this.panel2.Location = new System.Drawing.Point(0, 0); this.panel2.Name = "panel2"; - this.panel2.Size = new System.Drawing.Size(297, 30); + this.panel2.Size = new System.Drawing.Size(422, 50); this.panel2.TabIndex = 4; // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.label2.Location = new System.Drawing.Point(3, 29); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(416, 18); + this.label2.TabIndex = 3; + this.label2.Text = "Right-click on the individual images to see more options."; + // + // addFormatButton + // + this.addFormatButton.Location = new System.Drawing.Point(171, 3); + this.addFormatButton.Name = "addFormatButton"; + this.addFormatButton.Size = new System.Drawing.Size(131, 23); + this.addFormatButton.TabIndex = 2; + this.addFormatButton.Text = "Add Custom Format..."; + this.addFormatButton.UseVisualStyleBackColor = true; + this.addFormatButton.Click += new System.EventHandler(this.AddFormatButtonClick); + // // label1 // this.label1.Location = new System.Drawing.Point(3, 3); @@ -67,7 +91,7 @@ namespace IconEditor this.colorComboBox.FormattingEnabled = true; this.colorComboBox.Location = new System.Drawing.Point(108, 3); this.colorComboBox.Name = "colorComboBox"; - this.colorComboBox.Size = new System.Drawing.Size(46, 24); + this.colorComboBox.Size = new System.Drawing.Size(46, 21); this.colorComboBox.TabIndex = 0; this.colorComboBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.ColorComboBoxDrawItem); this.colorComboBox.SelectedIndexChanged += new System.EventHandler(this.ColorComboBoxSelectedIndexChanged); @@ -80,11 +104,11 @@ namespace IconEditor this.table.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); this.table.Controls.Add(this.tableLabel, 0, 0); this.table.Dock = System.Windows.Forms.DockStyle.Fill; - this.table.Location = new System.Drawing.Point(0, 30); + this.table.Location = new System.Drawing.Point(0, 50); this.table.Name = "table"; this.table.RowCount = 1; this.table.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.table.Size = new System.Drawing.Size(297, 200); + this.table.Size = new System.Drawing.Size(422, 212); this.table.TabIndex = 5; // // tableLabel @@ -96,28 +120,19 @@ namespace IconEditor this.tableLabel.Text = "Icon Editor"; this.tableLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // - // panel1 - // - this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.panel1.Location = new System.Drawing.Point(0, 230); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(297, 32); - this.panel1.TabIndex = 6; - this.panel1.Visible = false; - // // EditorPanel // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.Controls.Add(this.table); - this.Controls.Add(this.panel1); this.Controls.Add(this.panel2); this.Name = "EditorPanel"; - this.Size = new System.Drawing.Size(297, 262); + this.Size = new System.Drawing.Size(422, 262); this.panel2.ResumeLayout(false); this.table.ResumeLayout(false); this.ResumeLayout(false); } - private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button addFormatButton; private System.Windows.Forms.Label tableLabel; private System.Windows.Forms.TableLayoutPanel table; private System.Windows.Forms.ComboBox colorComboBox; diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.cs b/src/AddIns/DisplayBindings/IconEditor/EditorPanel.cs similarity index 55% rename from src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.cs rename to src/AddIns/DisplayBindings/IconEditor/EditorPanel.cs index e564c6b5b9..99ca442d8d 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.cs +++ b/src/AddIns/DisplayBindings/IconEditor/EditorPanel.cs @@ -4,9 +4,14 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.IO; +using System.Linq; using System.Windows.Forms; -namespace IconEditor +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; + +namespace ICSharpCode.IconEditor { /// /// Description of EditorPanel. @@ -39,6 +44,11 @@ namespace IconEditor activeIconFile.Save(fileName); } + public void SaveIcon(Stream stream) + { + activeIconFile.Save(stream); + } + public void ShowFile(IconFile f) { this.activeIconFile = f; @@ -53,7 +63,7 @@ namespace IconEditor table.ColumnCount = 1; table.RowCount = 1; table.Controls.Add(tableLabel, 0, 0); - availableSizes = f.AvailableSizes; + availableSizes = f.AvailableSizes.ToList(); foreach (Size size in availableSizes) { table.RowCount += 1; table.RowStyles.Add(new RowStyle(SizeType.AutoSize)); @@ -63,13 +73,13 @@ namespace IconEditor lbl.Anchor = AnchorStyles.Right; table.Controls.Add(lbl, 0, table.RowCount - 1); } - availableColorDepths = f.AvailableColorDepths; + availableColorDepths = f.AvailableColorDepths.ToList(); foreach (int colorDepth in availableColorDepths) { table.ColumnCount += 1; table.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); Label lbl = new Label(); lbl.TextAlign = ContentAlignment.MiddleRight; - lbl.Text = colorDepth + "bit"; + lbl.Text = colorDepth + " bit"; lbl.Anchor = AnchorStyles.Bottom; lbl.AutoSize = true; table.Controls.Add(lbl, table.ColumnCount - 1, 0); @@ -81,6 +91,7 @@ namespace IconEditor for (int row = 1; row < table.RowCount - 1; row++) { iconPanels[column-1,row-1] = new IconPanel(availableSizes[row-1], availableColorDepths[column-1]); iconPanels[column-1,row-1].Anchor = AnchorStyles.None; + iconPanels[column-1,row-1].BackColor = backgroundColors[colorComboBox.SelectedIndex]; table.Controls.Add(iconPanels[column-1,row-1], column, row); } } @@ -88,7 +99,11 @@ namespace IconEditor int row = availableSizes.IndexOf(e.Size); int column = availableColorDepths.IndexOf(e.ColorDepth); iconPanels[column, row].Entry = e; - iconPanels[column, row].BackColor = backgroundColors[colorComboBox.SelectedIndex]; + } + for (int column = 1; column < table.ColumnCount - 1; column++) { + for (int row = 1; row < table.RowCount - 1; row++) { + iconPanels[column-1, row-1].EntryChanged += EditorPanel_EntryChanged; + } } // Work around Windows.Forms bug (scrollbars don't update correctly): table.Size = new Size(3000, 3000); @@ -96,7 +111,23 @@ namespace IconEditor table.Visible = true; } - Color[] backgroundColors = {SystemColors.Control, SystemColors.Window, SystemColors.Desktop, SystemColors.ControlText}; + void EditorPanel_EntryChanged(object sender, EventArgs e) + { + var panel = (IconPanel)sender; + if (panel.Entry == null) { + activeIconFile.RemoveEntry(panel.IconSize.Width, panel.IconSize.Height, panel.ColorDepth); + // recreate UI in case we removed the last icon of a format + ShowFile(activeIconFile); + } else { + activeIconFile.AddEntry(panel.Entry); + } + if (IconWasEdited != null) + IconWasEdited(this, e); + } + + public event EventHandler IconWasEdited; + + Color[] backgroundColors = { SystemColors.Control, Color.Black, Color.White, Color.Teal, Color.DeepSkyBlue, Color.Red, Color.Magenta }; void ColorComboBoxDrawItem(object sender, DrawItemEventArgs e) { @@ -115,5 +146,35 @@ namespace IconEditor } } } + + void AddFormatButtonClick(object sender, EventArgs e) + { + if (activeIconFile == null) + return; + using (PickFormatDialog dlg = new PickFormatDialog()) { + if (dlg.ShowDialog() == DialogResult.OK) { + int width = dlg.IconWidth; + int height = dlg.IconHeight; + int colorDepth = dlg.ColorDepth; + var sameSizeEntries = activeIconFile.Icons.Where(entry => entry.Width == width && entry.Height == height); + if (sameSizeEntries.Any(entry => entry.ColorDepth == colorDepth)) { + MessageService.ShowMessage("This icon already contains an image with the specified format.", "Icon Editor"); + return; + } + IconEntry sourceEntry = sameSizeEntries.OrderByDescending(entry => entry.ColorDepth).FirstOrDefault(); + if (sourceEntry == null) { + sourceEntry = (from entry in activeIconFile.Icons + orderby entry.Width descending, entry.Height descending, entry.ColorDepth descending + select entry).FirstOrDefault(); + } + // sourceEntry can still be null if the icon is completely empty + Bitmap sourceBitmap = sourceEntry != null ? sourceEntry.ExportArgbBitmap() : new Bitmap(width, height); + activeIconFile.AddEntry(new IconEntry(width, height, colorDepth, sourceBitmap)); + if (IconWasEdited != null) + IconWasEdited(this, e); + ShowFile(activeIconFile); + } + } + } } } diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs b/src/AddIns/DisplayBindings/IconEditor/IconDisplayBinding.cs similarity index 95% rename from src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs rename to src/AddIns/DisplayBindings/IconEditor/IconDisplayBinding.cs index ce51562ac0..2c1708b6ff 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs +++ b/src/AddIns/DisplayBindings/IconEditor/IconDisplayBinding.cs @@ -5,7 +5,7 @@ using System; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; -namespace ICSharpCode.IconEditorAddIn +namespace ICSharpCode.IconEditor { public class IconDisplayBinding : IDisplayBinding { diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin b/src/AddIns/DisplayBindings/IconEditor/IconEditor.addin similarity index 71% rename from src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin rename to src/AddIns/DisplayBindings/IconEditor/IconEditor.addin index 53b87ffade..8a40af1c84 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin +++ b/src/AddIns/DisplayBindings/IconEditor/IconEditor.addin @@ -1,7 +1,7 @@ - @@ -9,7 +9,7 @@ - + @@ -21,9 +21,9 @@ diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.csproj b/src/AddIns/DisplayBindings/IconEditor/IconEditor.csproj similarity index 61% rename from src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.csproj rename to src/AddIns/DisplayBindings/IconEditor/IconEditor.csproj index fff2fd2f0a..228290eb46 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.csproj +++ b/src/AddIns/DisplayBindings/IconEditor/IconEditor.csproj @@ -2,13 +2,13 @@ Library - ICSharpCode.IconEditorAddIn - ICSharpCode.IconEditorAddIn + ICSharpCode.IconEditor + ICSharpCode.IconEditor Debug AnyCPU {DFB936AD-90EE-4B4F-941E-4F4A636F0D92} - ..\..\..\..\..\AddIns\DisplayBindings\IconEditor\ - False + ..\..\..\..\AddIns\DisplayBindings\IconEditor\ + True False False Auto @@ -18,8 +18,6 @@ 4 false v4.0 - - obj\Debug\ @@ -30,43 +28,56 @@ True - obj\ obj\Release\ True TRACE - False - None + false + PdbOnly False - + + 3.5 + - + + + + + IconPanel.cs + + + + + PickFormatDialog.cs + + + + EditorPanel.cs + + + Always - + Configuration\GlobalAssemblyInfo.cs - - + + - - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} - IconEditor - - + {2748AD25-9C63-4E12-877B-4DCE96FBED54} ICSharpCode.SharpDevelop False - + {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} ICSharpCode.Core False diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/AssemblyInfo.cs b/src/AddIns/DisplayBindings/IconEditor/IconEditor/AssemblyInfo.cs deleted file mode 100644 index fdb0c68c6a..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/AssemblyInfo.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System.Reflection; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("IconEditor")] -[assembly: AssemblyDescription("IconEditor with support for Windows Vista icons")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.resx b/src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.resx deleted file mode 100644 index 7080a7d118..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.csproj b/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.csproj deleted file mode 100644 index 2deb223ad5..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.csproj +++ /dev/null @@ -1,78 +0,0 @@ - - - - WinExe - IconEditor - IconEditor - Debug - AnyCPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD} - True - False - False - Auto - 134742016 - AnyCPU - 4096 - 4 - false - Always - ..\..\..\..\..\AddIns\DisplayBindings\IconEditor\ - v4.0 - Client - - - obj\Debug\ - False - DEBUG;TRACE - true - Full - True - - - obj\ - obj\Release\ - True - TRACE - False - None - False - - - - - - - - - - MainForm.cs - - - - - - - MainForm.cs - - - IconPanel.cs - - - - IconPanel.cs - - - - EditorPanel.cs - - - - EditorPanel.cs - - - GlobalAssemblyInfo.cs - - - - \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.sln b/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.sln deleted file mode 100644 index af591b9d4d..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.sln +++ /dev/null @@ -1,16 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# SharpDevelop 2.1.0.1626 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditor", "IconEditor.csproj", "{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Any CPU.Build.0 = Release|Any CPU - {DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.Designer.cs b/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.Designer.cs deleted file mode 100644 index 5e7ab514bb..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.Designer.cs +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -namespace IconEditor -{ - partial class IconPanel : System.Windows.Forms.UserControl - { - /// - /// Designer variable used to keep track of non-visual components. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Disposes resources used by the control. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) { - if (components != null) { - components.Dispose(); - this.Entry = null; // dispose temp. bitmaps - } - } - base.Dispose(disposing); - } - - /// - /// This method is required for Windows Forms designer support. - /// Do not change the method contents inside the source code editor. The Forms designer might - /// not be able to load this method if it was changed manually. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // IconPanel - // - this.AllowDrop = true; - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; - this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.Name = "IconPanel"; - this.Size = new System.Drawing.Size(173, 171); - this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.IconPanelMouseDown); - this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.IconPanelMouseMove); - this.DragDrop += new System.Windows.Forms.DragEventHandler(this.IconPanelDragDrop); - this.DragEnter += new System.Windows.Forms.DragEventHandler(this.IconPanelDragEnter); - this.Paint += new System.Windows.Forms.PaintEventHandler(this.IconPanelPaint); - this.ResumeLayout(false); - } - } -} diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.resx b/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.resx deleted file mode 100644 index 7080a7d118..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.Designer.cs b/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.Designer.cs deleted file mode 100644 index 979785691d..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.Designer.cs +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -namespace IconEditor -{ - partial class MainForm : System.Windows.Forms.Form - { - /// - /// Designer variable used to keep track of non-visual components. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Disposes resources used by the form. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) { - if (components != null) { - components.Dispose(); - } - } - base.Dispose(disposing); - } - - /// - /// This method is required for Windows Forms designer support. - /// Do not change the method contents inside the source code editor. The Forms designer might - /// not be able to load this method if it was changed manually. - /// - private void InitializeComponent() - { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.toolStrip1 = new System.Windows.Forms.ToolStrip(); - this.newToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.saveToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); - this.helpToolStripButton = new System.Windows.Forms.ToolStripButton(); - this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); - this.toolStrip1.SuspendLayout(); - this.SuspendLayout(); - // - // toolStrip1 - // - this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.newToolStripButton, - this.openToolStripButton, - this.saveToolStripButton, - this.toolStripSeparator, - this.helpToolStripButton}); - this.toolStrip1.Location = new System.Drawing.Point(0, 0); - this.toolStrip1.Name = "toolStrip1"; - this.toolStrip1.Size = new System.Drawing.Size(331, 25); - this.toolStrip1.TabIndex = 1; - this.toolStrip1.Text = "toolStrip1"; - // - // newToolStripButton - // - this.newToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image"))); - this.newToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.newToolStripButton.Name = "newToolStripButton"; - this.newToolStripButton.Size = new System.Drawing.Size(23, 22); - this.newToolStripButton.Text = "&New"; - this.newToolStripButton.Click += new System.EventHandler(this.NewToolStripButtonClick); - // - // openToolStripButton - // - this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image"))); - this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.openToolStripButton.Name = "openToolStripButton"; - this.openToolStripButton.Size = new System.Drawing.Size(23, 22); - this.openToolStripButton.Text = "&Open"; - this.openToolStripButton.Click += new System.EventHandler(this.OpenToolStripButtonClick); - // - // saveToolStripButton - // - this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.saveToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripButton.Image"))); - this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.saveToolStripButton.Name = "saveToolStripButton"; - this.saveToolStripButton.Size = new System.Drawing.Size(23, 22); - this.saveToolStripButton.Text = "&Save"; - this.saveToolStripButton.Click += new System.EventHandler(this.SaveToolStripButtonClick); - // - // toolStripSeparator - // - this.toolStripSeparator.Name = "toolStripSeparator"; - this.toolStripSeparator.Size = new System.Drawing.Size(6, 25); - // - // helpToolStripButton - // - this.helpToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - this.helpToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("helpToolStripButton.Image"))); - this.helpToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; - this.helpToolStripButton.Name = "helpToolStripButton"; - this.helpToolStripButton.Size = new System.Drawing.Size(23, 22); - this.helpToolStripButton.Text = "He&lp"; - this.helpToolStripButton.Click += new System.EventHandler(this.HelpToolStripButtonClick); - // - // openFileDialog - // - this.openFileDialog.FileName = "openFileDialog1"; - this.openFileDialog.Filter = "Icon files|*.ico|Cursor files|*.cur|All files|*.*"; - // - // MainForm - // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(331, 305); - this.Controls.Add(this.toolStrip1); - this.Name = "MainForm"; - this.Text = "IconEditor"; - this.toolStrip1.ResumeLayout(false); - this.toolStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - } - private System.Windows.Forms.OpenFileDialog openFileDialog; - private System.Windows.Forms.ToolStripButton helpToolStripButton; - private System.Windows.Forms.ToolStripSeparator toolStripSeparator; - private System.Windows.Forms.ToolStripButton saveToolStripButton; - private System.Windows.Forms.ToolStripButton openToolStripButton; - private System.Windows.Forms.ToolStripButton newToolStripButton; - private System.Windows.Forms.ToolStrip toolStrip1; - } -} diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.cs b/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.cs deleted file mode 100644 index 277781d935..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.cs +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.Diagnostics; -using System.IO; -using System.Windows.Forms; - -namespace IconEditor -{ - public partial class MainForm - { - [STAThread] - public static void Main(string[] args) - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - //ScanIcons(new DirectoryInfo(@"d:\net\icons")); - Application.Run(new MainForm()); - } - - // scan for invalid or special icons - static void ScanIcons(DirectoryInfo dir) - { - foreach (DirectoryInfo subdir in dir.GetDirectories()) { - ScanIcons(subdir); - } - foreach (FileInfo file in dir.GetFiles("*.ico")) { - try { - IconFile f = new IconFile(file.OpenRead()); - if (f.AvailableColorDepths.Contains(24)) { - Debug.WriteLine(file.FullName + " - 24"); - } - } catch (InvalidIconException ex) { - Debug.WriteLine(file.FullName + " - " + ex.Message); - } - } - } - - static void Save(string fileName, Stream data) - { - using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)) { - byte[] buffer = new byte[4096]; - int c; - do { - c = data.Read(buffer, 0, buffer.Length); - if (c != 0) - fs.Write(buffer, 0, c); - } while (c != 0); - } - } - - EditorPanel pnl = new EditorPanel(); - - public MainForm() - { - // - // The InitializeComponent() call is required for Windows Forms designer support. - // - InitializeComponent(); - - pnl.Dock = DockStyle.Fill; - Controls.Add(pnl); - Controls.SetChildIndex(pnl, 0); - - //IconFile f = new IconFile(@"D:\net\icons\WinXP\Internet.ico"); - //IconFile f = new IconFile(@"c:\temp\example-vista-icon-2.ico"); - //IconFile f = new IconFile(@"D:\NET\Icons\exit.ico"); - //pnl.ShowFile(f); - } - - void HelpToolStripButtonClick(object sender, System.EventArgs e) - { - MessageBox.Show(@"SharpDevelop IconEditor: -(C) Daniel Grunwald, 2006 - -Contact me: daniel@danielgrunwald.de", "IconEditor"); - } - - string fileName; - - void NewToolStripButtonClick(object sender, System.EventArgs e) - { - fileName = null; - pnl.ShowFile(new IconFile()); - } - - void OpenToolStripButtonClick(object sender, System.EventArgs e) - { - if (openFileDialog.ShowDialog() == DialogResult.OK) { - try { - pnl.ShowFile(new IconFile(openFileDialog.FileName)); - fileName = openFileDialog.FileName; - } catch (InvalidIconException ex) { - MessageBox.Show("Invalid icon file: " + ex.Message); - } catch (IOException ex) { - MessageBox.Show("Error opening icon file: " + ex.Message); - } - } - } - - void SaveToolStripButtonClick(object sender, EventArgs e) - { - MessageBox.Show("not implemented"); - //pnl.SaveIcon(@"c:\temp\save.ico"); - } - } -} diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.resx b/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.resx deleted file mode 100644 index a8b1f83577..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.resx +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq - wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm - u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l - 8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT - PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy - KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I - k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC - TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p - AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0 - BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr - UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG - CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5 - F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS - rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt - NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp - 59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAixJREFUOE+tk91L - k3EUx/cvdN9N0EW3NTWGa7EaPOUcyqphWBG9PZEv5dJlmqhYmUYtXyBb4dJJy+kknFT4BqZIjaFMJUsz - V7TEoabYRDD49ju/6Pm1Mi+iH5zLz+c855zvo1L9j/fsaRRUvvZltHmX8Ni9gMaGCO47ZlBb8wn22yHc - KJ9CackECgteIy93FBfOB6H0JrC3B6ipXsVGb2V1Dca0XhxOe8JLEXhbF7mgsuLLX3mCIwsr2G1+DrVa - huWQRwjcj+a5oLTk87qCn/D78CLiTD4UXJ7GAXOTEDjrZ7ngku3dH4Jf4ZHJCLZJXlhzxpGa4hSCurth - LsjOGo0R/A4PBsPYrHdDlgMwmRxCUF31kQvkMwFFsB7c4/+ATYkNOHL0BZKSaoXgZuU0urvATgkcP/kK - lmMDfNu0MJqZPps6/4D7cNDSCUmyC8HVskl0+MAyADS5vrG7f0X59Tm+VFoYzZyZEVTg5NR2GAwVQnCl - cByeZuChc40FJwpjek5MmU/YkH6uiHdOTmHwfg/0+jIhsOWNMRiouhPlnUnAQoI4rYSht7MYm5qDnHsN - e41tHNbucUGnKxICiqXjHpTPJgHBZ/Nv4U1oHqGZJVwstiNe72JwI+J3PYA2MV8IMjOG2dzLfOatBg+2 - 7JDQ0tEPX9cguvv8GHg5hH0mC9S6eiQweLumDhqNVQgo06dP9fN4UsIoJHRnOhVtmxZGM1NXKoJ3JmTH - Cv71r/4OTrQ4xWMwWlcAAAAASUVORK5CYII= - - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAhhJREFUOE+1U09r - E0EU70fIR9iPUBQ8eMrR46IN5JhCDz2oBA8SBHEpCMFgG5GiwdJdq2Ijqe6ldo3Wrmhri0gXazW2YbMt - UdNmm45ulf7R/HwzU1hLIzn54LFvhvn9eW9nOjr+R0wvBLhTXEf6bgV9w0sYLJQx/uoz2mq9c7eRn2pA - L67Bq+/i29YeWLBL9Q6u5ktI6w6Kr1dbE3HwA3sT/o8mbAfQRgE1LZPXtsPgbjZxaXAG4y/Kh0m48sbP - JgwbiKYAwwLYNkR4DEje5HsMFSI5l3l2kGD6/RYezzeEMgfzwzzMWSCRlV9OFk0xqhl06wNy+Tchyb2n - dXxhv4TVaFLazppAJ9VKL0MySxYoVI0hkXaw5AbovjAWEmTur4qBqZoEdfbKVCgTBObqdolBUW0ocRs1 - P8Cx2PWQ4PJtl6a9J+xLIB1OMHIilU2b1gSMqCZ9TdTq33FEHQgJcg8rWPF3qHcJVOKeyOyoJIioDqUk - UFM2SuUqus4YIcHEzFdYji8GxIGROAc41JJHc6E1B58wRRqWhzFrEVduTR78E5mRBSz7v0l1H0AgXgsH - +2DNcPBp3cep0/rhezA5V0Vfbg5ug+4CqaiaI/rmyWu+t1zdQIysDxdmW9/GiZcVnO+fgvHkI+YXV7BG - 067VA9Ezt91Fyvq/wH8/lKHCW/RcfITj8Rs4evIaYmdHkBl63v4xtX1tLQ78AZ3a8qxOv4hDAAAAAElF - TkSuQmCC - - - - 116, 17 - - \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.sln b/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.sln deleted file mode 100644 index a6aa5b0837..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.sln +++ /dev/null @@ -1,6 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 9.00 -# SharpDevelop 2.1.0.1634 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IconEditorAddIn", "IconEditorAddIn.csproj", "{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}" -EndProject -Global -EndGlobal diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconViewContent.cs b/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconViewContent.cs deleted file mode 100644 index 5dbe0b8326..0000000000 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconViewContent.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; -using System.IO; -using System.Windows.Forms; - -using IconEditor; -using ICSharpCode.SharpDevelop; -using ICSharpCode.SharpDevelop.Gui; - -namespace ICSharpCode.IconEditorAddIn -{ - public class IconViewContent : AbstractViewContent - { - EditorPanel editor = new EditorPanel(); - - public override object Control { - get { - return editor; - } - } - - public override bool IsViewOnly { - get { return true; } - } - - public IconViewContent(OpenedFile file) : base(file) - { - } - - public override void Load(OpenedFile file, Stream stream) - { - editor.ShowFile(new IconFile(stream)); - } - } -} diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEntry.cs b/src/AddIns/DisplayBindings/IconEditor/IconEntry.cs similarity index 65% rename from src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEntry.cs rename to src/AddIns/DisplayBindings/IconEditor/IconEntry.cs index d601b8a5ef..a20ccc8bbe 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEntry.cs +++ b/src/AddIns/DisplayBindings/IconEditor/IconEntry.cs @@ -2,11 +2,14 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; +using System.Linq; +using System.Runtime.InteropServices; -namespace IconEditor +namespace ICSharpCode.IconEditor { /// /// Describes the type of an icon entry. @@ -85,6 +88,29 @@ namespace IconEditor } } + /// + /// Gets/Sets the hotspot (cursors only). + /// + public Point Hotspot { get; set; } + + public static PixelFormat GetPixelFormat(int colorDepth) + { + switch (colorDepth) { + case 1: + return PixelFormat.Format1bppIndexed; + case 4: + return PixelFormat.Format4bppIndexed; + case 8: + return PixelFormat.Format8bppIndexed; + case 24: + return PixelFormat.Format24bppRgb; + case 32: + return PixelFormat.Format32bppArgb; + default: + throw new NotSupportedException(); + } + } + public IconEntryType Type { get { if (isCompressed) @@ -113,6 +139,9 @@ namespace IconEditor /// public Stream GetImageData() { + const int bmpFileHeaderLength = 14; + const int positionOfHeightInHeader = 8; + Stream stream = GetEntryData(); if (isCompressed) return stream; @@ -126,7 +155,7 @@ namespace IconEditor w.Write(0); // 4 reserved bytes w.Write(0); // data start offset, we'll fill it in later w.Write(entryData, 0, headerSize); // write header - output.Position = 14 + 8; // position of biHeight in header + output.Position = bmpFileHeaderLength + positionOfHeightInHeader; w.Write(height); // write correct height into header output.Position = output.Length; if (biBitCount <= 8) { @@ -178,10 +207,10 @@ namespace IconEditor w.Write((short)1); // 1 plane w.Write((short)1); // monochrome w.Write(0); // no compression - w.Write(0); // biSizeImage, should be zero + w.Write(GetBitmapSize(width, height, 1)); // biSizeImage w.Write(0); // biXPelsPerMeter, should be zero w.Write(0); // biYPelsPerMeter, should be zero - w.Write(0); // biClrUsed - calculate color count using bitCount + w.Write(0); // biClrUsed - should be 0 for monochrome bitmaps w.Write(0); // no special "important" colors // write color table: @@ -216,20 +245,23 @@ namespace IconEditor } } + static int GetStride(int width, int bitsPerPixel) + { + const int pack = 4; // 4 byte packing + const int bitPack = pack*8; + int lineBits = width * bitsPerPixel; + // divide by bitPack and round up: + int packUnits = (lineBits + (bitPack - 1)) / bitPack; + return packUnits * pack; + } + /// /// Gets the size of the data section of a DIB bitmap with the /// specified parameters /// static int GetBitmapSize(int width, int height, int bitsPerPixel) { - const int bitPack = 4*8; // 4 byte packing - int lineBits = width * bitsPerPixel; - // expand size to multiple of 4 bytes - int rem = lineBits % bitPack; - if (rem != 0) { - lineBits += (bitPack - rem); - } - return lineBits / 8 * height; + return GetStride(width, bitsPerPixel) * height; } /// @@ -261,7 +293,12 @@ namespace IconEditor /// an InvalidOperationException is thrown if you call GetImageMask on a compressed icon. public Bitmap GetMaskImage() { - return new Bitmap(GetMaskImageData()); + var stream = GetMaskImageData(); + try { + return new Bitmap(stream); + } catch (ArgumentException) { + return null; + } } /// @@ -273,7 +310,7 @@ namespace IconEditor throw new ArgumentNullException("imageData"); this.entryData = entryData; isCompressed = false; - if (sizeInBytes > 8) { + if (entryData.Length > 8) { // PNG Specification, section 5.2: // The first eight bytes of a PNG datastream always contain the following (decimal) values: // 137 80 78 71 13 10 26 10 @@ -294,11 +331,11 @@ namespace IconEditor int CheckBitmapHeader(BinaryReader b, out int biBitCount) { - const int knownHeaderSize = 4*3 + 2*2 + 4; + const int knownHeaderSize = 4*3 + 2*2 + 6*4; const int BI_RGB = 0; int biSize = b.ReadInt32(); - if (biSize <= knownHeaderSize) + if (biSize < knownHeaderSize) throw new InvalidIconException("biSize invalid: " + biSize); if (b.ReadInt32() != width) throw new InvalidIconException("biWidth invalid"); @@ -312,12 +349,19 @@ namespace IconEditor // Do not test biBitCount: there are icons where the colorDepth is saved // incorrectly; biBitCount is the real value to use in those cases - //if (biBitCount != colorDepth) - // throw new InvalidIconException("biBitCount invalid: " + biBitCount); - int compression = b.ReadInt32(); - if (compression != BI_RGB) + int biCompression = b.ReadInt32(); + if (biCompression != BI_RGB) throw new InvalidIconException("biCompression invalid"); + b.ReadInt32(); // biSizeImage + b.ReadInt32(); // biXPelsPerMeter + b.ReadInt32(); // biYPelsPerMeter + int biClrUsed = b.ReadInt32(); + if (biClrUsed != 0 && biClrUsed != (1 << biBitCount)) + throw new InvalidIconException("biClrUsed invalid"); + + b.ReadInt32(); // biClrImportant + // skip rest of header: b.ReadBytes(biSize - knownHeaderSize); return biSize; @@ -348,6 +392,16 @@ namespace IconEditor SetEntryData(imageData); } + public IconEntry(int width, int height, int colorDepth, Bitmap bitmap, bool? storeCompressed = null) + { + this.width = width; + this.height = height; + this.colorDepth = colorDepth; + CheckSize(); + CheckColorDepth(); + SetImage(bitmap, storeCompressed); + } + void CheckSize() { if (width <= 0 || height <= 0 || width > 256 || height > 256) { @@ -370,7 +424,7 @@ namespace IconEditor } } - internal void ReadHeader(BinaryReader r, ref bool wellFormed) + internal void ReadHeader(BinaryReader r, bool isCursor, ref bool wellFormed) { width = r.ReadByte(); height = r.ReadByte(); @@ -382,28 +436,37 @@ namespace IconEditor if (colorCount != 0 && colorCount != 2 && colorCount != 16) { throw new InvalidIconException("Invalid color count: " + colorCount); } - if (r.ReadByte() != 0) { + byte reserved = r.ReadByte(); + if (reserved != 0 && reserved != 255) { + // should be 0, but .NET Icon.Save() uses 255 throw new InvalidIconException("Invalid value for reserved"); } - uint planeCount = r.ReadUInt16(); - // placeCount should always be 1, but there are some icons with planeCount = 0 - if (planeCount == 0) { - wellFormed = false; - } - if (planeCount > 1) { - throw new InvalidIconException("Invalid number of planes: " + planeCount); - } - colorDepth = r.ReadUInt16(); - if (colorDepth == 0) { - if (colorCount == 2) - colorDepth = 1; - else if (colorCount == 16) - colorDepth = 4; - else if (colorCount == 0) - colorDepth = 8; + if (isCursor) { + colorDepth = -1; + this.Hotspot = new Point(r.ReadUInt16(), r.ReadUInt16()); + if (this.Hotspot.X >= width || this.Hotspot.Y >= height) + throw new InvalidIconException("Hotspot is outside image"); + } else { + uint planeCount = r.ReadUInt16(); + // planeCount should always be 1, but there are some icons with planeCount = 0 + if (planeCount == 0) { + wellFormed = false; + } + if (planeCount > 1) { + throw new InvalidIconException("Invalid number of planes: " + planeCount); + } + colorDepth = r.ReadUInt16(); + if (colorDepth == 0) { + if (colorCount == 2) + colorDepth = 1; + else if (colorCount == 16) + colorDepth = 4; + else if (colorCount == 0) + colorDepth = 8; + } + CheckColorDepth(); } - CheckColorDepth(); sizeInBytes = r.ReadInt32(); if (sizeInBytes <= 0) { @@ -420,14 +483,19 @@ namespace IconEditor uint saveOffsetToHeaderPosition; - internal void WriteHeader(Stream stream, BinaryWriter w) + internal void WriteHeader(Stream stream, bool isCursor, BinaryWriter w) { w.Write((byte)(width == 256 ? 0 : width)); w.Write((byte)(height == 256 ? 0 : height)); w.Write((byte)(colorDepth == 4 ? 16 : 0)); w.Write((byte)0); - w.Write((ushort)1); - w.Write((ushort)colorDepth); + if (isCursor) { + w.Write((ushort)Hotspot.X); + w.Write((ushort)Hotspot.Y); + } else { + w.Write((ushort)1); + w.Write((ushort)colorDepth); + } w.Write((int)entryData.Length); saveOffsetToHeaderPosition = (uint)stream.Position; w.Write((uint)0); @@ -445,11 +513,18 @@ namespace IconEditor pos += c; } SetEntryData(imageData); - if (isCompressed == false) { + if (isCompressed) { + if (colorDepth == -1) + colorDepth = 32; // assume 32-bit colors for .pngs + } else { using (BinaryReader r = new BinaryReader(new MemoryStream(imageData, false))) { int biBitCount; CheckBitmapHeader(r, out biBitCount); - if (biBitCount != colorDepth) { + if (colorDepth == -1) { + // missing color depth (cursors) + colorDepth = biBitCount; + CheckColorDepth(); + } else if (biBitCount != colorDepth) { // inconsistency in header information, fix icon header wellFormed = false; colorDepth = biBitCount; @@ -472,53 +547,124 @@ namespace IconEditor /// Stores the specified bitmap. The bitmap will be resized and /// changed to the correct pixel format. /// - public void SetImage(Bitmap bitmap, bool storeCompressed) + public unsafe void SetImage(Bitmap bitmap, bool? storeCompressed) { - if (this.Type == IconEntryType.Classic) - throw new InvalidOperationException("Cannot use SetImage on classic entries"); if (bitmap.Width != width || bitmap.Height != height) { bitmap = new Bitmap(bitmap, width, height); } - PixelFormat expected; - switch (colorDepth) { - case 1: - expected = PixelFormat.Format1bppIndexed; - break; - case 4: - expected = PixelFormat.Format4bppIndexed; - break; - case 8: - expected = PixelFormat.Format8bppIndexed; - break; - case 24: - expected = PixelFormat.Format24bppRgb; - break; - case 32: - expected = PixelFormat.Format32bppArgb; - break; - default: - throw new NotSupportedException(); - } - if (bitmap.PixelFormat != expected) { - if (expected == PixelFormat.Format32bppArgb) { - bitmap = new Bitmap(bitmap, width, height); - } else { - throw new NotImplementedException(); - } - } - if (storeCompressed) { + PixelFormat format = GetPixelFormat(colorDepth); + if (storeCompressed ?? (colorDepth == 32 && (width > 48 || height > 48))) { + bitmap = Convert(bitmap, format); using (MemoryStream ms = new MemoryStream()) { bitmap.Save(ms, ImageFormat.Png); SetEntryData(ms.ToArray()); } } else { - throw new NotImplementedException(); + // Make clone of bitmap because we're going to modify it + bitmap = bitmap.Clone(new Rectangle(0, 0, width, height), PixelFormat.Format32bppArgb); + // Calculate AND mask and set transparent parts to black + int maskStride = GetStride(width, 1); + byte[] andMask = new byte[GetBitmapSize(width, height, 1)]; + BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb); + try { + uint* bmpPtr = (uint*)bmpData.Scan0.ToPointer(); + int bmpStride = bmpData.Stride / sizeof(uint); + for (int y = 0; y < height; y++) { + uint* linePtr = bmpPtr + (height - 1 - y) * bmpStride; + for (int x = 0; x < width; x++) { + if ((linePtr[x] & 0xff000000) < 0x80000000u) { + // pixel is more than 50% transparent + // set AND mask to white + andMask[y * maskStride + (x >> 3)] |= (byte)(0x80 >> (x & 7)); + if (colorDepth < 32) { + linePtr[x] = 0xff000000; // set to black if target format doesn't support transparency + } + } + } + } + } finally { + bitmap.UnlockBits(bmpData); + } + // Convert bitmap + bitmap = Convert(bitmap, format); + MemoryStream ms = new MemoryStream(); + BinaryWriter w = new BinaryWriter(ms); + w.Write(40); // Header Size + w.Write((int)width); + w.Write((int)height * 2); + w.Write((ushort)1); // biPlanes + w.Write((ushort)colorDepth); // biBitCount + w.Write(0); // biCompression + w.Write(0); // biSizeImage + w.Write(0); // biXPelsPerMeter + w.Write(0); // biYPelsPerMeter + w.Write(0); // biClrUsed + w.Write(0); // biClrImportant + + // Color palette: + if (colorDepth <= 8) { + Color[] palette = bitmap.Palette.Entries; + if (palette.Length > (1 << colorDepth)) + throw new InvalidOperationException("Palette has wrong size"); + foreach (Color c in palette) { + w.Write(c.B); + w.Write(c.G); + w.Write(c.R); + w.Write((byte)0); + } + for (int i = palette.Length; i < (1 << colorDepth); i++) { + w.Write(0); + } + } + // image data + bmpData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadOnly, format); + try { + if (bmpData.Stride != GetStride(width, colorDepth)) + throw new InvalidOperationException(); + byte[] lineBuffer = new byte[bmpData.Stride]; + for (int y = height - 1; y >= 0; y--) { + Marshal.Copy(bmpData.Scan0 + y * bmpData.Stride, lineBuffer, 0, bmpData.Stride); + w.Write(lineBuffer); + } + } finally { + bitmap.UnlockBits(bmpData); + } + w.Write(andMask); + SetEntryData(ms.ToArray()); } } + static Bitmap Convert(Bitmap bitmap, PixelFormat targetFormat) + { + if (bitmap.PixelFormat == targetFormat) + return bitmap; + else + return bitmap.Clone(new Rectangle(0, 0, bitmap.Width, bitmap.Height), targetFormat); + } + public override string ToString() { return string.Format("[IconEntry {0}x{1}x{2}]", this.width, this.height, this.colorDepth); } + + /// + /// Exports the image as ARGB bitmap. + /// Note: if the bitmap is using the classic style (AND/XOR maps), any pixel + /// where the AND map isn't 0 is set to fully transparent. + /// + public Bitmap ExportArgbBitmap() + { + if (colorDepth == 32) { + return GetImage(); + } else if (isCompressed) { + using (Bitmap image = GetImage()) { + return image.Clone(new Rectangle(0, 0, width, height), PixelFormat.Format32bppArgb); + } + } else { + using (Bitmap mask = GetMaskImage(), image = GetImage()) { + return AlphaTransparentBitmap.ConvertToAlphaTransparentBitmap(mask, image); + } + } + } } } diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconFile.cs b/src/AddIns/DisplayBindings/IconEditor/IconFile.cs similarity index 77% rename from src/AddIns/DisplayBindings/IconEditor/IconEditor/IconFile.cs rename to src/AddIns/DisplayBindings/IconEditor/IconFile.cs index b4b223eb4c..ebb1c05e0d 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconFile.cs +++ b/src/AddIns/DisplayBindings/IconEditor/IconFile.cs @@ -6,8 +6,9 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; using System.IO; +using System.Linq; -namespace IconEditor +namespace ICSharpCode.IconEditor { /// /// Icon class supporting XP and Vista icons. @@ -89,25 +90,24 @@ namespace IconEditor { BinaryReader r = new BinaryReader(stream); if (r.ReadUInt16() != 0) - throw new InvalidIconException("reserved word must be 0"); + throw new InvalidIconException("This is not a valid .ico file."); ushort type = r.ReadUInt16(); if (type == 1) isCursor = false; else if (type == 2) isCursor = true; else - throw new InvalidIconException("invalid icon type " + type); - if (isCursor) - throw new InvalidIconException("cursors are currently not supported"); + throw new InvalidIconException("This is not a valid .ico file."); IconEntry[] icons = new IconEntry[r.ReadUInt16()]; for (int i = 0; i < icons.Length; i++) { icons[i] = new IconEntry(); - icons[i].ReadHeader(r, ref wellFormed); + icons[i].ReadHeader(r, isCursor, ref wellFormed); } for (int i = 0; i < icons.Length; i++) { icons[i].ReadData(stream, ref wellFormed); } - this.icons = new Collection(icons); + // need to use List so that the collection can be resized + this.icons = new Collection(new List(icons)); } /// @@ -138,7 +138,7 @@ namespace IconEditor w.Write((ushort)(isCursor ? 2 : 1)); w.Write((ushort)icons.Count); foreach (IconEntry e in icons) { - e.WriteHeader(stream, w); + e.WriteHeader(stream, isCursor, w); } foreach (IconEntry e in icons) { e.WriteData(stream); @@ -170,41 +170,48 @@ namespace IconEditor return best; } + /// + /// Adds the specified entry + /// + public void AddEntry(IconEntry entry) + { + if (entry == null) + throw new ArgumentNullException("entry"); + // replace matching existing entry: + for (int i = 0; i < icons.Count; i++) { + if (icons[i].Width == entry.Width && icons[i].Height == entry.Height && icons[i].ColorDepth == entry.ColorDepth) { + icons[i] = entry; + return; + } + } + icons.Add(entry); + } + + public void RemoveEntry(int width, int height, int colorDepth) + { + for (int i = 0; i < icons.Count; i++) { + if (icons[i].Width == width && icons[i].Height == height && icons[i].ColorDepth == colorDepth) { + icons.RemoveAt(i); + break; + } + } + } + /// /// Gets a sorted list of all icon sizes available in this file. /// - public IList AvailableSizes { + public IEnumerable AvailableSizes { get { - List r = new List(); - foreach (IconEntry e in this.Icons) { - if (r.Contains(e.Size) == false) - r.Add(e.Size); - } - r.Sort(delegate(Size a, Size b) { - int res = a.Width.CompareTo(b.Width); - if (res == 0) - return a.Height.CompareTo(b.Height); - else - return res; - }); - return r; + return this.Icons.Select(e => e.Size).Distinct().OrderBy(s => s.Width).ThenBy(s => s.Height); } } /// /// Gets a sorted list of all color depths available in this file. /// - public IList AvailableColorDepths { + public IEnumerable AvailableColorDepths { get { - bool[] depths = new bool[33]; - foreach (IconEntry e in this.Icons) { - depths[e.ColorDepth] = true; - } - List r = new List(); - for (int i = 0; i < depths.Length; i++) { - if (depths[i]) r.Add(i); - } - return r; + return this.Icons.Select(e => e.ColorDepth).Distinct().OrderBy(v => v); } } } diff --git a/src/AddIns/DisplayBindings/IconEditor/IconPanel.Designer.cs b/src/AddIns/DisplayBindings/IconEditor/IconPanel.Designer.cs new file mode 100644 index 0000000000..cf17493ef5 --- /dev/null +++ b/src/AddIns/DisplayBindings/IconEditor/IconPanel.Designer.cs @@ -0,0 +1,153 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +namespace ICSharpCode.IconEditor +{ + partial class IconPanel : System.Windows.Forms.UserControl + { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the control. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + this.Entry = null; // dispose temp. bitmaps + } + } + base.Dispose(disposing); + } + + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.replaceWithImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.compressedToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportANDMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportXORMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.emptyContextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuStrip.SuspendLayout(); + this.emptyContextMenuStrip.SuspendLayout(); + this.SuspendLayout(); + // + // contextMenuStrip + // + this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.replaceWithImageToolStripMenuItem, + this.deleteToolStripMenuItem, + this.compressedToolStripMenuItem, + this.toolStripMenuItem1, + this.exportToolStripMenuItem, + this.exportANDMaskToolStripMenuItem, + this.exportXORMaskToolStripMenuItem}); + this.contextMenuStrip.Name = "contextMenuStrip"; + this.contextMenuStrip.Size = new System.Drawing.Size(181, 164); + // + // replaceWithImageToolStripMenuItem + // + this.replaceWithImageToolStripMenuItem.Name = "replaceWithImageToolStripMenuItem"; + this.replaceWithImageToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.replaceWithImageToolStripMenuItem.Text = "&Replace Image..."; + this.replaceWithImageToolStripMenuItem.Click += new System.EventHandler(this.ReplaceWithImageToolStripMenuItemClick); + // + // deleteToolStripMenuItem + // + this.deleteToolStripMenuItem.Name = "deleteToolStripMenuItem"; + this.deleteToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.deleteToolStripMenuItem.Text = "&Delete"; + this.deleteToolStripMenuItem.Click += new System.EventHandler(this.DeleteToolStripMenuItemClick); + // + // compressedToolStripMenuItem + // + this.compressedToolStripMenuItem.Name = "compressedToolStripMenuItem"; + this.compressedToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.compressedToolStripMenuItem.Text = "Use embedded &PNG"; + this.compressedToolStripMenuItem.Click += new System.EventHandler(this.CompressedToolStripMenuItemClick); + // + // toolStripMenuItem1 + // + this.toolStripMenuItem1.Name = "toolStripMenuItem1"; + this.toolStripMenuItem1.Size = new System.Drawing.Size(177, 6); + // + // exportToolStripMenuItem + // + this.exportToolStripMenuItem.Name = "exportToolStripMenuItem"; + this.exportToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.exportToolStripMenuItem.Text = "&Export..."; + this.exportToolStripMenuItem.Click += new System.EventHandler(this.ExportToolStripMenuItemClick); + // + // exportANDMaskToolStripMenuItem + // + this.exportANDMaskToolStripMenuItem.Name = "exportANDMaskToolStripMenuItem"; + this.exportANDMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.exportANDMaskToolStripMenuItem.Text = "Export &AND mask..."; + this.exportANDMaskToolStripMenuItem.Click += new System.EventHandler(this.ExportANDMaskToolStripMenuItemClick); + // + // exportXORMaskToolStripMenuItem + // + this.exportXORMaskToolStripMenuItem.Name = "exportXORMaskToolStripMenuItem"; + this.exportXORMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.exportXORMaskToolStripMenuItem.Text = "Export &XOR image..."; + this.exportXORMaskToolStripMenuItem.Click += new System.EventHandler(this.ExportXORMaskToolStripMenuItemClick); + // + // emptyContextMenuStrip + // + this.emptyContextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addImageToolStripMenuItem}); + this.emptyContextMenuStrip.Name = "contextMenuStrip"; + this.emptyContextMenuStrip.Size = new System.Drawing.Size(142, 26); + // + // addImageToolStripMenuItem + // + this.addImageToolStripMenuItem.Name = "addImageToolStripMenuItem"; + this.addImageToolStripMenuItem.Size = new System.Drawing.Size(141, 22); + this.addImageToolStripMenuItem.Text = "&Add Image..."; + this.addImageToolStripMenuItem.Click += new System.EventHandler(this.ReplaceWithImageToolStripMenuItemClick); + // + // IconPanel + // + this.AllowDrop = true; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; + this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.ContextMenuStrip = this.emptyContextMenuStrip; + this.Name = "IconPanel"; + this.Size = new System.Drawing.Size(173, 171); + this.DragDrop += new System.Windows.Forms.DragEventHandler(this.IconPanelDragDrop); + this.DragEnter += new System.Windows.Forms.DragEventHandler(this.IconPanelDragEnter); + this.Paint += new System.Windows.Forms.PaintEventHandler(this.IconPanelPaint); + this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.IconPanelMouseDown); + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.IconPanelMouseMove); + this.contextMenuStrip.ResumeLayout(false); + this.emptyContextMenuStrip.ResumeLayout(false); + this.ResumeLayout(false); + } + private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem compressedToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportXORMaskToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportANDMaskToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addImageToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip emptyContextMenuStrip; + private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem replaceWithImageToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip; + } +} diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.cs b/src/AddIns/DisplayBindings/IconEditor/IconPanel.cs similarity index 51% rename from src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.cs rename to src/AddIns/DisplayBindings/IconEditor/IconPanel.cs index 5268fa5df0..ea975ec607 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.cs +++ b/src/AddIns/DisplayBindings/IconEditor/IconPanel.cs @@ -4,19 +4,31 @@ using System; using System.Drawing; using System.Drawing.Imaging; +using System.IO; using System.Runtime.InteropServices; using System.Windows.Forms; -namespace IconEditor +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; + +namespace ICSharpCode.IconEditor { public partial class IconPanel { - Size size; + Size iconSize; int colorDepth; IconEntry entry; Bitmap maskBitmap; Bitmap bitmap; + public Size IconSize { + get { return iconSize; } + } + + public int ColorDepth { + get { return colorDepth; } + } + public IconEntry Entry { get { return entry; @@ -31,22 +43,30 @@ namespace IconEditor bitmap = null; } entry = value; - this.ContextMenuStrip = null; if (entry != null) { bitmap = entry.GetImage(); if (entry.Type == IconEntryType.Classic) { maskBitmap = FixBitmap(entry.GetMaskImage()); bitmap = FixBitmap(bitmap); - } else { - //this.ContextMenuStrip = trueColorContextMenu; } + + exportANDMaskToolStripMenuItem.Visible = entry.Type == IconEntryType.Classic; + exportXORMaskToolStripMenuItem.Visible = entry.Type == IconEntryType.Classic; + compressedToolStripMenuItem.Checked = entry.IsCompressed; + compressedToolStripMenuItem.Enabled = entry.IsCompressed || entry.ColorDepth == 32; } + this.ContextMenuStrip = (entry != null) ? contextMenuStrip : emptyContextMenuStrip; + UpdateSize(); Invalidate(); } } + public event EventHandler EntryChanged = delegate {}; + Bitmap FixBitmap(Bitmap src) { + if (src == null) + return src; Bitmap dest = new Bitmap(src.Width, src.Height); using (Graphics g = Graphics.FromImage(dest)) { g.DrawImageUnscaled(src, 0, 0); @@ -57,7 +77,7 @@ namespace IconEditor public IconPanel(Size size, int colorDepth) { - this.size = size; + this.iconSize = size; this.colorDepth = colorDepth; // @@ -65,7 +85,22 @@ namespace IconEditor // InitializeComponent(); - this.ClientSize = new Size(size.Width + 2, size.Height + 2); + UpdateSize(); + } + + void UpdateSize() + { + Size newClientSize = new Size(LimitSizeIfNoEntry(iconSize.Width) + 2, LimitSizeIfNoEntry(iconSize.Height) + 2); + if (this.ClientSize != newClientSize) + this.ClientSize = newClientSize; + } + + int LimitSizeIfNoEntry(int size) + { + if (entry != null) + return size; + else + return Math.Min(size, 32); } void IconPanelPaint(object sender, PaintEventArgs e) @@ -77,8 +112,9 @@ namespace IconEditor IntPtr memDC = Gdi32.CreateCompatibleDC(destDC); IntPtr srcHBitmap = maskBitmap.GetHbitmap(); IntPtr oldHBitmap = Gdi32.SelectObject(memDC, srcHBitmap); - Gdi32.BitBlt(destDC, drawOffset, drawOffset, size.Width, size.Height, memDC, 0, 0, Gdi32.SRCAND); + Gdi32.BitBlt(destDC, drawOffset, drawOffset, iconSize.Width, iconSize.Height, memDC, 0, 0, Gdi32.SRCAND); + // TODO: review if the objects get destroyed correctly Gdi32.SelectObject(memDC, oldHBitmap); Gdi32.DeleteObject(srcHBitmap); Gdi32.DeleteDC(memDC); @@ -88,7 +124,7 @@ namespace IconEditor IntPtr memDC = Gdi32.CreateCompatibleDC(destDC); IntPtr srcHBitmap = bitmap.GetHbitmap(); IntPtr oldHBitmap = Gdi32.SelectObject(memDC, srcHBitmap); - Gdi32.BitBlt(destDC, drawOffset, drawOffset, size.Width, size.Height, memDC, 0, 0, Gdi32.SRCINVERT); + Gdi32.BitBlt(destDC, drawOffset, drawOffset, iconSize.Width, iconSize.Height, memDC, 0, 0, Gdi32.SRCINVERT); Gdi32.SelectObject(memDC, oldHBitmap); Gdi32.DeleteObject(srcHBitmap); @@ -136,30 +172,82 @@ namespace IconEditor dlg.DefaultExt = "png"; dlg.Filter = "PNG images|*.png|All files|*.*"; if (dlg.ShowDialog() == DialogResult.OK) { - bitmap.Save(dlg.FileName, ImageFormat.Png); + entry.ExportArgbBitmap().Save(dlg.FileName, ImageFormat.Png); + } + } + } + + void ExportANDMaskToolStripMenuItemClick(object sender, EventArgs e) + { + using (SaveFileDialog dlg = new SaveFileDialog()) { + dlg.DefaultExt = "bmp"; + dlg.Filter = "BMP images|*.bmp|All files|*.*"; + if (dlg.ShowDialog() == DialogResult.OK) { + using (var stream = dlg.OpenFile()) { + entry.GetMaskImageData().CopyTo(stream); + } + } + } + } + + void ExportXORMaskToolStripMenuItemClick(object sender, EventArgs e) + { + using (SaveFileDialog dlg = new SaveFileDialog()) { + dlg.DefaultExt = "bmp"; + dlg.Filter = "BMP images|*.bmp|All files|*.*"; + if (dlg.ShowDialog() == DialogResult.OK) { + using (var stream = dlg.OpenFile()) { + entry.GetImageData().CopyTo(stream); + } } } } + void DeleteToolStripMenuItemClick(object sender, EventArgs e) + { + this.Entry = null; + EntryChanged(this, e); + } + void ReplaceWithImageToolStripMenuItemClick(object sender, EventArgs e) { using (OpenFileDialog dlg = new OpenFileDialog()) { dlg.Filter = "Images|*.png;*.bmp;*.gif;*.jpg|All files|*.*"; if (dlg.ShowDialog() == DialogResult.OK) { - Bitmap newBitmap = new Bitmap(dlg.FileName); - // scale to correct size and make it ARGB - string oldFormat = entry.Width + "x" + entry.Height + "x" + entry.ColorDepth; - string newFormat = newBitmap.Width + "x" + newBitmap.Height + "x"; - if (newBitmap.Width != entry.Width || newBitmap.Height != entry.Height) { - MessageBox.Show("The loaded bitmap has the"); + try { + Bitmap newBitmap = new Bitmap(dlg.FileName); + SetImage(newBitmap); + } catch (Exception ex) { + MessageService.ShowHandledException(ex); } - //entry.SetTrueColorImage(newBitmap, entry.IsCompressed); - newBitmap.Dispose(); - this.Entry = entry; // re-display bitmap } } } + void CompressedToolStripMenuItemClick(object sender, EventArgs e) + { + // Toggle compression + this.Entry = new IconEntry(iconSize.Width, iconSize.Height, colorDepth, entry.ExportArgbBitmap(), !entry.IsCompressed); + EntryChanged(this, EventArgs.Empty); + } + + void SetImage(Bitmap newBitmap) + { + // scale to correct size and make it ARGB + if (iconSize != newBitmap.Size) { + int r = MessageService.ShowCustomDialog( + "Import Image", + string.Format("The image has size {0}x{1}, but size {2}x{3} is expected.", newBitmap.Width, newBitmap.Height, iconSize.Width, iconSize.Height), + 0, 1, "Convert", "Cancel"); + if (r != 0) { + return; + } + } + bool? compress = entry != null ? entry.IsCompressed : (bool?)null; + this.Entry = new IconEntry(iconSize.Width, iconSize.Height, colorDepth, newBitmap, compress); + EntryChanged(this, EventArgs.Empty); + } + Point mouseDownLocation; void IconPanelMouseDown(object sender, MouseEventArgs e) @@ -172,41 +260,56 @@ namespace IconEditor void IconPanelMouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { - /* - if (mouseDownLocation.IsEmpty == false) { + if (mouseDownLocation.IsEmpty == false && entry != null) { int dx = Math.Abs(e.X - mouseDownLocation.X); int dy = Math.Abs(e.Y - mouseDownLocation.Y); if (dx > SystemInformation.DragSize.Width || dy > SystemInformation.DragSize.Height) { mouseDownLocation = Point.Empty; - this.DoDragDrop(bitmap, DragDropEffects.Copy); + this.DoDragDrop(entry.ExportArgbBitmap(), DragDropEffects.Copy); } } - */ } } void IconPanelDragEnter(object sender, DragEventArgs e) { - /* - if (e.Data.GetDataPresent(typeof(Bitmap))) + if (e.Data.GetDataPresent(DataFormats.Bitmap)) { e.Effect = DragDropEffects.Copy; - else + } else if (e.Data.GetDataPresent(DataFormats.FileDrop)) { + e.Effect = DragDropEffects.None; + string[] files = e.Data.GetData(DataFormats.FileDrop) as string[]; + if (files != null && files.Length == 1) { + string ext = Path.GetExtension(files[0]); + if (ext.Equals(".png", StringComparison.OrdinalIgnoreCase) || ext.Equals(".bmp", StringComparison.OrdinalIgnoreCase) + || ext.Equals(".gif", StringComparison.OrdinalIgnoreCase) || ext.Equals(".jpg", StringComparison.OrdinalIgnoreCase)) + { + e.Effect = DragDropEffects.Copy; + } + } + } else { e.Effect = DragDropEffects.None; - */ + } } void IconPanelDragDrop(object sender, DragEventArgs e) { - /*try { - Bitmap bmp = (Bitmap)e.Data.GetData(typeof(Bitmap)); + try { + Bitmap bmp = null; + if (e.Data.GetDataPresent(DataFormats.Bitmap)) { + bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap); + } else if (e.Data.GetDataPresent(DataFormats.FileDrop)) { + string[] files = e.Data.GetData(DataFormats.FileDrop) as string[]; + if (files != null && files.Length == 1) { + bmp = new Bitmap(files[0]); + } + } if (bmp != null) { - entry.SetImage(bmp, entry.IsCompressed); - this.Entry = entry; // re-display entry + SetImage(bmp); } } catch (Exception ex) { - MessageBox.Show(ex.ToString()); - }*/ + MessageService.ShowHandledException(ex); + } } } } diff --git a/src/AddIns/DisplayBindings/IconEditor/IconViewContent.cs b/src/AddIns/DisplayBindings/IconEditor/IconViewContent.cs new file mode 100644 index 0000000000..4868f5f6f9 --- /dev/null +++ b/src/AddIns/DisplayBindings/IconEditor/IconViewContent.cs @@ -0,0 +1,55 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.IO; +using System.Windows.Forms; + +using ICSharpCode.Core; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Gui; + +namespace ICSharpCode.IconEditor +{ + public class IconViewContent : AbstractViewContent + { + EditorPanel editor = new EditorPanel(); + + public override object Control { + get { + return editor; + } + } + + public IconViewContent(OpenedFile file) : base(file) + { + editor.IconWasEdited += editor_IconWasEdited; + } + + void editor_IconWasEdited(object sender, EventArgs e) + { + PrimaryFile.MakeDirty(); + } + + public override void Load(OpenedFile file, Stream stream) + { + try { + editor.ShowFile(new IconFile(stream)); + } catch (InvalidIconException ex) { + // call with a delay to work around a re-entrancy bug + // when closing a workbench window while it is getting activated + WorkbenchSingleton.SafeThreadAsyncCall( + delegate { + MessageService.ShowHandledException(ex); + if (WorkbenchWindow != null) + WorkbenchWindow.CloseWindow(true); + }); + } + } + + public override void Save(OpenedFile file, Stream stream) + { + editor.SaveIcon(stream); + } + } +} diff --git a/src/AddIns/DisplayBindings/IconEditor/IconEditor/InvalidIconException.cs b/src/AddIns/DisplayBindings/IconEditor/InvalidIconException.cs similarity index 95% rename from src/AddIns/DisplayBindings/IconEditor/IconEditor/InvalidIconException.cs rename to src/AddIns/DisplayBindings/IconEditor/InvalidIconException.cs index af5b566fdf..7b2a33da19 100644 --- a/src/AddIns/DisplayBindings/IconEditor/IconEditor/InvalidIconException.cs +++ b/src/AddIns/DisplayBindings/IconEditor/InvalidIconException.cs @@ -4,7 +4,7 @@ using System; using System.Runtime.Serialization; -namespace IconEditor +namespace ICSharpCode.IconEditor { [Serializable] public class InvalidIconException : Exception diff --git a/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs b/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs new file mode 100644 index 0000000000..5aa9bd1fa7 --- /dev/null +++ b/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs @@ -0,0 +1,187 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +namespace ICSharpCode.IconEditor +{ + partial class PickFormatDialog + { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the form. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.widthUpDown = new System.Windows.Forms.NumericUpDown(); + this.heightUpDown = new System.Windows.Forms.NumericUpDown(); + this.label3 = new System.Windows.Forms.Label(); + this.colorDepthComboBox = new System.Windows.Forms.ComboBox(); + this.okButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.widthUpDown)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.heightUpDown)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.Location = new System.Drawing.Point(26, 20); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(61, 23); + this.label1.TabIndex = 0; + this.label1.Text = "&Width:"; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(26, 48); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(61, 23); + this.label2.TabIndex = 1; + this.label2.Text = "&Height:"; + // + // widthUpDown + // + this.widthUpDown.Location = new System.Drawing.Point(93, 18); + this.widthUpDown.Maximum = new decimal(new int[] { + 256, + 0, + 0, + 0}); + this.widthUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.widthUpDown.Name = "widthUpDown"; + this.widthUpDown.Size = new System.Drawing.Size(78, 20); + this.widthUpDown.TabIndex = 2; + this.widthUpDown.Value = new decimal(new int[] { + 32, + 0, + 0, + 0}); + // + // heightUpDown + // + this.heightUpDown.Location = new System.Drawing.Point(93, 46); + this.heightUpDown.Maximum = new decimal(new int[] { + 256, + 0, + 0, + 0}); + this.heightUpDown.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.heightUpDown.Name = "heightUpDown"; + this.heightUpDown.Size = new System.Drawing.Size(78, 20); + this.heightUpDown.TabIndex = 3; + this.heightUpDown.Value = new decimal(new int[] { + 32, + 0, + 0, + 0}); + // + // label3 + // + this.label3.Location = new System.Drawing.Point(26, 76); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(61, 23); + this.label3.TabIndex = 4; + this.label3.Text = "&Colors:"; + // + // colorDepthComboBox + // + this.colorDepthComboBox.FormattingEnabled = true; + this.colorDepthComboBox.Items.AddRange(new object[] { + "Monochrome", + "4 bit", + "8 bit", + "16 bit", + "24 bit", + "32 bit"}); + this.colorDepthComboBox.Location = new System.Drawing.Point(93, 73); + this.colorDepthComboBox.Name = "colorDepthComboBox"; + this.colorDepthComboBox.Size = new System.Drawing.Size(78, 21); + this.colorDepthComboBox.TabIndex = 5; + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.okButton.Location = new System.Drawing.Point(28, 114); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 23); + this.okButton.TabIndex = 6; + this.okButton.Text = "OK"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.OkButtonClick); + // + // cancelButton + // + this.cancelButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.Location = new System.Drawing.Point(109, 114); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 7; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.CancelButtonClick); + // + // PickFormatDialog + // + this.AcceptButton = this.okButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(196, 149); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.okButton); + this.Controls.Add(this.colorDepthComboBox); + this.Controls.Add(this.label3); + this.Controls.Add(this.heightUpDown); + this.Controls.Add(this.widthUpDown); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "PickFormatDialog"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Image Format"; + ((System.ComponentModel.ISupportInitialize)(this.widthUpDown)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.heightUpDown)).EndInit(); + this.ResumeLayout(false); + } + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.ComboBox colorDepthComboBox; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.NumericUpDown heightUpDown; + private System.Windows.Forms.NumericUpDown widthUpDown; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + } +} diff --git a/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.cs b/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.cs new file mode 100644 index 0000000000..dd755e4b7c --- /dev/null +++ b/src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.cs @@ -0,0 +1,45 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace ICSharpCode.IconEditor +{ + public partial class PickFormatDialog : Form + { + public PickFormatDialog() + { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + colorDepthComboBox.SelectedIndex = Array.IndexOf(colorDepths, 32); // 32-bit is default + } + + public int IconWidth { + get { return (int)widthUpDown.Value; } + } + + public int IconHeight { + get { return (int)heightUpDown.Value; } + } + + int[] colorDepths = { 1, 4, 8, 24, 32 }; + + public int ColorDepth { + get { return colorDepths[colorDepthComboBox.SelectedIndex]; } + } + + void OkButtonClick(object sender, EventArgs e) + { + Close(); + } + + void CancelButtonClick(object sender, EventArgs e) + { + Close(); + } + } +} diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs index 725fe22771..bcd612e981 100644 --- a/src/Setup/Files.wxs +++ b/src/Setup/Files.wxs @@ -1534,12 +1534,9 @@ - - - - - - + + + diff --git a/src/Setup/Setup.wxs b/src/Setup/Setup.wxs index 11f07b23c8..a8231f42d1 100644 --- a/src/Setup/Setup.wxs +++ b/src/Setup/Setup.wxs @@ -365,8 +365,7 @@ - - +