Browse Source

The IconEditor AddIn now can edit icons.

pull/27/merge
Daniel Grunwald 14 years ago
parent
commit
fbf0b6d419
  1. 705
      SharpDevelop.Tests.sln
  2. 37
      SharpDevelop.sln
  3. 38
      src/AddIns/DisplayBindings/IconEditor/AlphaTransparentBitmap.cs
  4. 2
      src/AddIns/DisplayBindings/IconEditor/Configuration/AssemblyInfo.cs
  5. 51
      src/AddIns/DisplayBindings/IconEditor/EditorPanel.Designer.cs
  6. 73
      src/AddIns/DisplayBindings/IconEditor/EditorPanel.cs
  7. 2
      src/AddIns/DisplayBindings/IconEditor/IconDisplayBinding.cs
  8. 10
      src/AddIns/DisplayBindings/IconEditor/IconEditor.addin
  9. 51
      src/AddIns/DisplayBindings/IconEditor/IconEditor.csproj
  10. 16
      src/AddIns/DisplayBindings/IconEditor/IconEditor/AssemblyInfo.cs
  11. 120
      src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.resx
  12. 78
      src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.csproj
  13. 16
      src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.sln
  14. 53
      src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.Designer.cs
  15. 120
      src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.resx
  16. 130
      src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.Designer.cs
  17. 108
      src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.cs
  18. 187
      src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.resx
  19. 6
      src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.sln
  20. 37
      src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconViewContent.cs
  21. 298
      src/AddIns/DisplayBindings/IconEditor/IconEntry.cs
  22. 71
      src/AddIns/DisplayBindings/IconEditor/IconFile.cs
  23. 153
      src/AddIns/DisplayBindings/IconEditor/IconPanel.Designer.cs
  24. 169
      src/AddIns/DisplayBindings/IconEditor/IconPanel.cs
  25. 55
      src/AddIns/DisplayBindings/IconEditor/IconViewContent.cs
  26. 2
      src/AddIns/DisplayBindings/IconEditor/InvalidIconException.cs
  27. 187
      src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs
  28. 45
      src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.cs
  29. 9
      src/Setup/Files.wxs
  30. 3
      src/Setup/Setup.wxs

705
SharpDevelop.Tests.sln

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 11.00 Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010 # 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}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection 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} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection EndProjectSection
EndProject 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}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlEditor.Tests", "src\AddIns\DisplayBindings\XmlEditor\Test\XmlEditor.Tests.csproj", "{FC0FE702-A87D-4D70-A9B6-1ECCD611125F}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} {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} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection EndProjectSection
EndProject 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}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
@ -807,10 +798,6 @@ Global
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Any CPU.Build.0 = Debug|Any CPU {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.ActiveCfg = Release|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.Build.0 = 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.ActiveCfg = Debug|Any CPU
{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Any CPU.Build.0 = 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 {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|Win32.ActiveCfg = Release|x86
{3C532D80-32B4-40E5-B5FE-BC6BAE1A00E7}.Release|x86.Build.0 = Release|x86 {3C532D80-32B4-40E5-B5FE-BC6BAE1A00E7}.Release|x86.Build.0 = Release|x86
{3C532D80-32B4-40E5-B5FE-BC6BAE1A00E7}.Release|x86.ActiveCfg = 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 EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -1548,9 +2211,9 @@ Global
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {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} {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} {FC0FE702-A87D-4D70-A9B6-1ECCD611125F} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{6022AC51-B658-4C54-97EF-79187AC65B47} = {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} {53DCA265-3C3C-42F9-B647-F72BA678122B} = {AD8272AC-5C9E-4061-90FB-CEF15A9A3F41}
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371} = {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} {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} {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668}
{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {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} {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} {66A378A1-E9F4-4AD5-8946-D0EC06C2902F} = {6022AC51-B658-4C54-97EF-79187AC65B47}
{9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {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} {78CC29AC-CC79-4355-B1F2-97936DF198AC} = {6022AC51-B658-4C54-97EF-79187AC65B47}

37
SharpDevelop.sln

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 11.00 Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010 # Visual Studio 2010
# SharpDevelop 4.2.0.8783 # SharpDevelop 4.3
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection 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} {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C} = {35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}
EndProjectSection EndProjectSection
EndProject 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}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WpfDesign", "WpfDesign", "{6022AC51-B658-4C54-97EF-79187AC65B47}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
@ -483,6 +469,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ILSpyAddIn", "src\AddIns\Di
EndProject 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}" 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 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}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{F355E45F-F54F-4B42-8916-9A633A392789}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
@ -675,10 +666,6 @@ Global
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Any CPU.Build.0 = Debug|Any CPU {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.ActiveCfg = Release|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Release|Any CPU.Build.0 = 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.ActiveCfg = Debug|Any CPU
{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Debug|Any CPU.Build.0 = 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 {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|Win32.ActiveCfg = Release|Any CPU
{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}.Release|x86.Build.0 = 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 {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.Build.0 = Debug|Any CPU
{E618A9CD-A39F-4925-A538-E8A3FEF24E54}.Debug|Win32.ActiveCfg = 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.Build.0 = Debug|Any CPU
@ -1727,9 +1706,9 @@ Global
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} {0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{CBC6C247-747B-4908-B09A-4D2E0F640B6B} = {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} {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} {6022AC51-B658-4C54-97EF-79187AC65B47} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{814DFF39-5324-40BE-90EA-F62F758660B3} = {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} {AFE34868-AFA1-4E1C-9450-47AB4BE329D5} = {C7F29FC2-1B03-4CDD-9E30-400F4765FF04}
{EEF5E054-4192-4A57-8FBF-E860D808A51D} = {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} {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} {0991423A-DBF6-4C89-B365-A1DF1EB32E42} = {BFA3BF26-33BD-4A65-B84D-C7F30D131668}
{5A1354DF-4989-4BB4-BC6B-D627C2E9FA13} = {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} {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} {66A378A1-E9F4-4AD5-8946-D0EC06C2902F} = {6022AC51-B658-4C54-97EF-79187AC65B47}
{9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {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} {78CC29AC-CC79-4355-B1F2-97936DF198AC} = {6022AC51-B658-4C54-97EF-79187AC65B47}

38
src/AddIns/DisplayBindings/IconEditor/IconEditor/AlphaTransparentBitmap.cs → src/AddIns/DisplayBindings/IconEditor/AlphaTransparentBitmap.cs

@ -6,7 +6,7 @@ using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.IO; using System.IO;
namespace IconEditor namespace ICSharpCode.IconEditor
{ {
/// <summary> /// <summary>
/// .NET does not support alpha-transparent .bmp files. /// .NET does not support alpha-transparent .bmp files.
@ -76,5 +76,41 @@ namespace IconEditor
return bmp; 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;
}
} }
} }

2
src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Configuration/AssemblyInfo.cs → 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 // change them to the information which is associated with the assembly
// you compile. // you compile.
[assembly: AssemblyTitle("IconEditorAddIn")] [assembly: AssemblyTitle("IconEditor")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]

51
src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.Designer.cs → src/AddIns/DisplayBindings/IconEditor/EditorPanel.Designer.cs generated

@ -1,7 +1,7 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) // 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) // 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 partial class EditorPanel : System.Windows.Forms.UserControl
{ {
@ -32,25 +32,49 @@ namespace IconEditor
private void InitializeComponent() private void InitializeComponent()
{ {
this.panel2 = new System.Windows.Forms.Panel(); 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.label1 = new System.Windows.Forms.Label();
this.colorComboBox = new System.Windows.Forms.ComboBox(); this.colorComboBox = new System.Windows.Forms.ComboBox();
this.table = new System.Windows.Forms.TableLayoutPanel(); this.table = new System.Windows.Forms.TableLayoutPanel();
this.tableLabel = new System.Windows.Forms.Label(); this.tableLabel = new System.Windows.Forms.Label();
this.panel1 = new System.Windows.Forms.Panel();
this.panel2.SuspendLayout(); this.panel2.SuspendLayout();
this.table.SuspendLayout(); this.table.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
// //
// panel2 // panel2
// //
this.panel2.Controls.Add(this.label2);
this.panel2.Controls.Add(this.addFormatButton);
this.panel2.Controls.Add(this.label1); this.panel2.Controls.Add(this.label1);
this.panel2.Controls.Add(this.colorComboBox); this.panel2.Controls.Add(this.colorComboBox);
this.panel2.Dock = System.Windows.Forms.DockStyle.Top; this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(0, 0); this.panel2.Location = new System.Drawing.Point(0, 0);
this.panel2.Name = "panel2"; 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; 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 // label1
// //
this.label1.Location = new System.Drawing.Point(3, 3); this.label1.Location = new System.Drawing.Point(3, 3);
@ -67,7 +91,7 @@ namespace IconEditor
this.colorComboBox.FormattingEnabled = true; this.colorComboBox.FormattingEnabled = true;
this.colorComboBox.Location = new System.Drawing.Point(108, 3); this.colorComboBox.Location = new System.Drawing.Point(108, 3);
this.colorComboBox.Name = "colorComboBox"; 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.TabIndex = 0;
this.colorComboBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.ColorComboBoxDrawItem); this.colorComboBox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.ColorComboBoxDrawItem);
this.colorComboBox.SelectedIndexChanged += new System.EventHandler(this.ColorComboBoxSelectedIndexChanged); 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.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
this.table.Controls.Add(this.tableLabel, 0, 0); this.table.Controls.Add(this.tableLabel, 0, 0);
this.table.Dock = System.Windows.Forms.DockStyle.Fill; 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.Name = "table";
this.table.RowCount = 1; this.table.RowCount = 1;
this.table.RowStyles.Add(new System.Windows.Forms.RowStyle()); 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; this.table.TabIndex = 5;
// //
// tableLabel // tableLabel
@ -96,28 +120,19 @@ namespace IconEditor
this.tableLabel.Text = "Icon Editor"; this.tableLabel.Text = "Icon Editor";
this.tableLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 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 // EditorPanel
// //
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.table); this.Controls.Add(this.table);
this.Controls.Add(this.panel1);
this.Controls.Add(this.panel2); this.Controls.Add(this.panel2);
this.Name = "EditorPanel"; this.Name = "EditorPanel";
this.Size = new System.Drawing.Size(297, 262); this.Size = new System.Drawing.Size(422, 262);
this.panel2.ResumeLayout(false); this.panel2.ResumeLayout(false);
this.table.ResumeLayout(false); this.table.ResumeLayout(false);
this.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.Label tableLabel;
private System.Windows.Forms.TableLayoutPanel table; private System.Windows.Forms.TableLayoutPanel table;
private System.Windows.Forms.ComboBox colorComboBox; private System.Windows.Forms.ComboBox colorComboBox;

73
src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.cs → src/AddIns/DisplayBindings/IconEditor/EditorPanel.cs

@ -4,9 +4,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
namespace IconEditor using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.IconEditor
{ {
/// <summary> /// <summary>
/// Description of EditorPanel. /// Description of EditorPanel.
@ -39,6 +44,11 @@ namespace IconEditor
activeIconFile.Save(fileName); activeIconFile.Save(fileName);
} }
public void SaveIcon(Stream stream)
{
activeIconFile.Save(stream);
}
public void ShowFile(IconFile f) public void ShowFile(IconFile f)
{ {
this.activeIconFile = f; this.activeIconFile = f;
@ -53,7 +63,7 @@ namespace IconEditor
table.ColumnCount = 1; table.ColumnCount = 1;
table.RowCount = 1; table.RowCount = 1;
table.Controls.Add(tableLabel, 0, 0); table.Controls.Add(tableLabel, 0, 0);
availableSizes = f.AvailableSizes; availableSizes = f.AvailableSizes.ToList();
foreach (Size size in availableSizes) { foreach (Size size in availableSizes) {
table.RowCount += 1; table.RowCount += 1;
table.RowStyles.Add(new RowStyle(SizeType.AutoSize)); table.RowStyles.Add(new RowStyle(SizeType.AutoSize));
@ -63,13 +73,13 @@ namespace IconEditor
lbl.Anchor = AnchorStyles.Right; lbl.Anchor = AnchorStyles.Right;
table.Controls.Add(lbl, 0, table.RowCount - 1); table.Controls.Add(lbl, 0, table.RowCount - 1);
} }
availableColorDepths = f.AvailableColorDepths; availableColorDepths = f.AvailableColorDepths.ToList();
foreach (int colorDepth in availableColorDepths) { foreach (int colorDepth in availableColorDepths) {
table.ColumnCount += 1; table.ColumnCount += 1;
table.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize)); table.ColumnStyles.Add(new ColumnStyle(SizeType.AutoSize));
Label lbl = new Label(); Label lbl = new Label();
lbl.TextAlign = ContentAlignment.MiddleRight; lbl.TextAlign = ContentAlignment.MiddleRight;
lbl.Text = colorDepth + "bit"; lbl.Text = colorDepth + " bit";
lbl.Anchor = AnchorStyles.Bottom; lbl.Anchor = AnchorStyles.Bottom;
lbl.AutoSize = true; lbl.AutoSize = true;
table.Controls.Add(lbl, table.ColumnCount - 1, 0); table.Controls.Add(lbl, table.ColumnCount - 1, 0);
@ -81,6 +91,7 @@ namespace IconEditor
for (int row = 1; row < table.RowCount - 1; row++) { 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] = new IconPanel(availableSizes[row-1], availableColorDepths[column-1]);
iconPanels[column-1,row-1].Anchor = AnchorStyles.None; 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); table.Controls.Add(iconPanels[column-1,row-1], column, row);
} }
} }
@ -88,7 +99,11 @@ namespace IconEditor
int row = availableSizes.IndexOf(e.Size); int row = availableSizes.IndexOf(e.Size);
int column = availableColorDepths.IndexOf(e.ColorDepth); int column = availableColorDepths.IndexOf(e.ColorDepth);
iconPanels[column, row].Entry = e; 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): // Work around Windows.Forms bug (scrollbars don't update correctly):
table.Size = new Size(3000, 3000); table.Size = new Size(3000, 3000);
@ -96,7 +111,23 @@ namespace IconEditor
table.Visible = true; 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) 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);
}
}
}
} }
} }

2
src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconDisplayBinding.cs → src/AddIns/DisplayBindings/IconEditor/IconDisplayBinding.cs

@ -5,7 +5,7 @@ using System;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.IconEditorAddIn namespace ICSharpCode.IconEditor
{ {
public class IconDisplayBinding : IDisplayBinding public class IconDisplayBinding : IDisplayBinding
{ {

10
src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.addin → src/AddIns/DisplayBindings/IconEditor/IconEditor.addin

@ -1,7 +1,7 @@
<AddIn name = "IconViewerAddIn" <AddIn name = "Icon Editor"
author = "Daniel Grunwald" author = "Daniel Grunwald"
copyright = "prj:///doc/copyright.txt" copyright = "prj:///doc/copyright.txt"
description = "Allows viewing .ico files inside SharpDevelop" description = "Allows editing .ico files inside SharpDevelop"
addInManagerHidden = "preinstalled"> addInManagerHidden = "preinstalled">
<Manifest> <Manifest>
@ -9,7 +9,7 @@
</Manifest> </Manifest>
<Runtime> <Runtime>
<Import assembly = "ICSharpCode.IconEditorAddIn.dll"/> <Import assembly = "ICSharpCode.IconEditor.dll"/>
</Runtime> </Runtime>
<Path name = "/SharpDevelop/Workbench/FileFilter"> <Path name = "/SharpDevelop/Workbench/FileFilter">
@ -21,9 +21,9 @@
<Path name = "/SharpDevelop/Workbench/DisplayBindings"> <Path name = "/SharpDevelop/Workbench/DisplayBindings">
<DisplayBinding id = "IconEditor" <DisplayBinding id = "IconEditor"
class = "ICSharpCode.IconEditorAddIn.IconDisplayBinding" class = "ICSharpCode.IconEditor.IconDisplayBinding"
insertbefore = "Text" insertbefore = "Text"
fileNamePattern = "\.(ico)$" fileNamePattern = "\.(ico|cur)$"
title = "${res:Gui.ProjectBrowser.OpenWith.Bindings.IconEditor}"/> title = "${res:Gui.ProjectBrowser.OpenWith.Bindings.IconEditor}"/>
</Path> </Path>
</AddIn> </AddIn>

51
src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.csproj → src/AddIns/DisplayBindings/IconEditor/IconEditor.csproj

@ -2,13 +2,13 @@
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<RootNamespace>ICSharpCode.IconEditorAddIn</RootNamespace> <RootNamespace>ICSharpCode.IconEditor</RootNamespace>
<AssemblyName>ICSharpCode.IconEditorAddIn</AssemblyName> <AssemblyName>ICSharpCode.IconEditor</AssemblyName>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}</ProjectGuid> <ProjectGuid>{DFB936AD-90EE-4B4F-941E-4F4A636F0D92}</ProjectGuid>
<OutputPath>..\..\..\..\..\AddIns\DisplayBindings\IconEditor\</OutputPath> <OutputPath>..\..\..\..\AddIns\DisplayBindings\IconEditor\</OutputPath>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib> <NoStdLib>False</NoStdLib>
<RegisterForComInterop>False</RegisterForComInterop> <RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> <GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
@ -18,8 +18,6 @@
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors> <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<IntermediateOutputPath>obj\Debug\</IntermediateOutputPath> <IntermediateOutputPath>obj\Debug\</IntermediateOutputPath>
@ -30,43 +28,56 @@
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
<IntermediateOutputPath>obj\Release\</IntermediateOutputPath> <IntermediateOutputPath>obj\Release\</IntermediateOutputPath>
<Optimize>True</Optimize> <Optimize>True</Optimize>
<DefineConstants>TRACE</DefineConstants> <DefineConstants>TRACE</DefineConstants>
<DebugSymbols>False</DebugSymbols> <DebugSymbols>false</DebugSymbols>
<DebugType>None</DebugType> <DebugType>PdbOnly</DebugType>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="IconEditorAddIn.addin"> <Compile Include="IconFile.cs" />
<Compile Include="IconEntry.cs" />
<Compile Include="InvalidIconException.cs" />
<Compile Include="IconPanel.Designer.cs">
<DependentUpon>IconPanel.cs</DependentUpon>
</Compile>
<Compile Include="IconPanel.cs" />
<Compile Include="PickFormatDialog.cs" />
<Compile Include="PickFormatDialog.Designer.cs">
<DependentUpon>PickFormatDialog.cs</DependentUpon>
</Compile>
<Compile Include="AlphaTransparentBitmap.cs" />
<Compile Include="EditorPanel.Designer.cs">
<DependentUpon>EditorPanel.cs</DependentUpon>
</Compile>
<Compile Include="EditorPanel.cs" />
<None Include="IconEditor.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<Compile Include="Configuration\AssemblyInfo.cs" /> <Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs"> <Compile Include="..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link> <Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="Src\IconDisplayBinding.cs" /> <Compile Include="IconDisplayBinding.cs" />
<Compile Include="Src\IconViewContent.cs" /> <Compile Include="IconViewContent.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\IconEditor\IconEditor.csproj"> <ProjectReference Include="..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}</Project>
<Name>IconEditor</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project> <Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name> <Name>ICSharpCode.SharpDevelop</Name>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj"> <ProjectReference Include="..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project> <Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name> <Name>ICSharpCode.Core</Name>
<Private>False</Private> <Private>False</Private>

16
src/AddIns/DisplayBindings/IconEditor/IconEditor/AssemblyInfo.cs

@ -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("")]

120
src/AddIns/DisplayBindings/IconEditor/IconEditor/EditorPanel.resx

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

78
src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.csproj

@ -1,78 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<RootNamespace>IconEditor</RootNamespace>
<AssemblyName>IconEditor</AssemblyName>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{DC1CCE11-CB91-40FA-9C47-4D9EB5D67BFD}</ProjectGuid>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>134742016</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<FileAlignment>4096</FileAlignment>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<RunPostBuildEvent>Always</RunPostBuildEvent>
<OutputPath>..\..\..\..\..\AddIns\DisplayBindings\IconEditor\</OutputPath>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<IntermediateOutputPath>obj\Debug\</IntermediateOutputPath>
<Optimize>False</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
<IntermediateOutputPath>obj\Release\</IntermediateOutputPath>
<Optimize>True</Optimize>
<DefineConstants>TRACE</DefineConstants>
<DebugSymbols>False</DebugSymbols>
<DebugType>None</DebugType>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
</ItemGroup>
<ItemGroup>
<Compile Include="MainForm.cs" />
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="IconFile.cs" />
<Compile Include="IconEntry.cs" />
<Compile Include="InvalidIconException.cs" />
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="IconPanel.Designer.cs">
<DependentUpon>IconPanel.cs</DependentUpon>
</Compile>
<Compile Include="IconPanel.cs" />
<EmbeddedResource Include="IconPanel.resx">
<DependentUpon>IconPanel.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="AlphaTransparentBitmap.cs" />
<Compile Include="EditorPanel.Designer.cs">
<DependentUpon>EditorPanel.cs</DependentUpon>
</Compile>
<Compile Include="EditorPanel.cs" />
<EmbeddedResource Include="EditorPanel.resx">
<DependentUpon>EditorPanel.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>GlobalAssemblyInfo.cs</Link>
</Compile>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

16
src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEditor.sln

@ -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

53
src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.Designer.cs generated

@ -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
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the control.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
this.Entry = null; // dispose temp. bitmaps
}
}
base.Dispose(disposing);
}
/// <summary>
/// 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.
/// </summary>
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);
}
}
}

120
src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.resx

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

130
src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.Designer.cs generated

@ -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
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// 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.
/// </summary>
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;
}
}

108
src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.cs

@ -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");
}
}
}

187
src/AddIns/DisplayBindings/IconEditor/IconEditor/MainForm.resx

@ -1,187 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="newToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAQ9JREFUOE+t09lq
wkAUBmBfyr5DfY32jaReSOmFCyKCgkKLFrVUBZeKiEbshqRuaNw1xiXmLxMJBJ0Zc+GBw9zMfDPnHMZm
u1ZE35s4zXCqjmC8Al+sgHLjD9y7yGFWPIbecOO45yORtMAEHnxxJHL1IyKI9JeEXqtMwOl50Q8bSS0l
8PzBBPbqAQQxICrgjeapgKZpkJUdBmNZB+y3d/QSnsIZKrDdqZjMFYj9OR9wB1NngHrQsJC36EkrfIkT
PuDyJ84AZbOHNF2j1Z2h9i3xAVKfOUjjZssN2oMFmq0xSkLfOmBu3E97iurnENlKxzpgbpzwO0Kh1kOy
KFoDjHmzVuYYjRmTDZfyWh9Yd/4B2Mz2w1z7EGUAAAAASUVORK5CYII=
</value>
</data>
<data name="openToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="saveToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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=
</value>
</data>
<data name="helpToolStripButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="openFileDialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>116, 17</value>
</metadata>
</root>

6
src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/IconEditorAddIn.sln

@ -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

37
src/AddIns/DisplayBindings/IconEditor/IconEditorAddIn/Src/IconViewContent.cs

@ -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));
}
}
}

298
src/AddIns/DisplayBindings/IconEditor/IconEditor/IconEntry.cs → 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) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.IO; using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
namespace IconEditor namespace ICSharpCode.IconEditor
{ {
/// <summary> /// <summary>
/// Describes the type of an icon entry. /// Describes the type of an icon entry.
@ -85,6 +88,29 @@ namespace IconEditor
} }
} }
/// <summary>
/// Gets/Sets the hotspot (cursors only).
/// </summary>
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 { public IconEntryType Type {
get { get {
if (isCompressed) if (isCompressed)
@ -113,6 +139,9 @@ namespace IconEditor
/// </summary> /// </summary>
public Stream GetImageData() public Stream GetImageData()
{ {
const int bmpFileHeaderLength = 14;
const int positionOfHeightInHeader = 8;
Stream stream = GetEntryData(); Stream stream = GetEntryData();
if (isCompressed) if (isCompressed)
return stream; return stream;
@ -126,7 +155,7 @@ namespace IconEditor
w.Write(0); // 4 reserved bytes w.Write(0); // 4 reserved bytes
w.Write(0); // data start offset, we'll fill it in later w.Write(0); // data start offset, we'll fill it in later
w.Write(entryData, 0, headerSize); // write header 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 w.Write(height); // write correct height into header
output.Position = output.Length; output.Position = output.Length;
if (biBitCount <= 8) { if (biBitCount <= 8) {
@ -178,10 +207,10 @@ namespace IconEditor
w.Write((short)1); // 1 plane w.Write((short)1); // 1 plane
w.Write((short)1); // monochrome w.Write((short)1); // monochrome
w.Write(0); // no compression 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); // biXPelsPerMeter, should be zero
w.Write(0); // biYPelsPerMeter, 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 w.Write(0); // no special "important" colors
// write color table: // 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;
}
/// <summary> /// <summary>
/// Gets the size of the data section of a DIB bitmap with the /// Gets the size of the data section of a DIB bitmap with the
/// specified parameters /// specified parameters
/// </summary> /// </summary>
static int GetBitmapSize(int width, int height, int bitsPerPixel) static int GetBitmapSize(int width, int height, int bitsPerPixel)
{ {
const int bitPack = 4*8; // 4 byte packing return GetStride(width, bitsPerPixel) * height;
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;
} }
/// <summary> /// <summary>
@ -261,7 +293,12 @@ namespace IconEditor
/// an InvalidOperationException is thrown if you call GetImageMask on a compressed icon.</exception> /// an InvalidOperationException is thrown if you call GetImageMask on a compressed icon.</exception>
public Bitmap GetMaskImage() public Bitmap GetMaskImage()
{ {
return new Bitmap(GetMaskImageData()); var stream = GetMaskImageData();
try {
return new Bitmap(stream);
} catch (ArgumentException) {
return null;
}
} }
/// <summary> /// <summary>
@ -273,7 +310,7 @@ namespace IconEditor
throw new ArgumentNullException("imageData"); throw new ArgumentNullException("imageData");
this.entryData = entryData; this.entryData = entryData;
isCompressed = false; isCompressed = false;
if (sizeInBytes > 8) { if (entryData.Length > 8) {
// PNG Specification, section 5.2: // PNG Specification, section 5.2:
// The first eight bytes of a PNG datastream always contain the following (decimal) values: // The first eight bytes of a PNG datastream always contain the following (decimal) values:
// 137 80 78 71 13 10 26 10 // 137 80 78 71 13 10 26 10
@ -294,11 +331,11 @@ namespace IconEditor
int CheckBitmapHeader(BinaryReader b, out int biBitCount) 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; const int BI_RGB = 0;
int biSize = b.ReadInt32(); int biSize = b.ReadInt32();
if (biSize <= knownHeaderSize) if (biSize < knownHeaderSize)
throw new InvalidIconException("biSize invalid: " + biSize); throw new InvalidIconException("biSize invalid: " + biSize);
if (b.ReadInt32() != width) if (b.ReadInt32() != width)
throw new InvalidIconException("biWidth invalid"); throw new InvalidIconException("biWidth invalid");
@ -312,12 +349,19 @@ namespace IconEditor
// Do not test biBitCount: there are icons where the colorDepth is saved // Do not test biBitCount: there are icons where the colorDepth is saved
// incorrectly; biBitCount is the real value to use in those cases // incorrectly; biBitCount is the real value to use in those cases
//if (biBitCount != colorDepth) int biCompression = b.ReadInt32();
// throw new InvalidIconException("biBitCount invalid: " + biBitCount); if (biCompression != BI_RGB)
int compression = b.ReadInt32();
if (compression != BI_RGB)
throw new InvalidIconException("biCompression invalid"); 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: // skip rest of header:
b.ReadBytes(biSize - knownHeaderSize); b.ReadBytes(biSize - knownHeaderSize);
return biSize; return biSize;
@ -348,6 +392,16 @@ namespace IconEditor
SetEntryData(imageData); 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() void CheckSize()
{ {
if (width <= 0 || height <= 0 || width > 256 || height > 256) { 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(); width = r.ReadByte();
height = r.ReadByte(); height = r.ReadByte();
@ -382,28 +436,37 @@ namespace IconEditor
if (colorCount != 0 && colorCount != 2 && colorCount != 16) { if (colorCount != 0 && colorCount != 2 && colorCount != 16) {
throw new InvalidIconException("Invalid color count: " + colorCount); 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"); throw new InvalidIconException("Invalid value for reserved");
} }
uint planeCount = r.ReadUInt16(); if (isCursor) {
// placeCount should always be 1, but there are some icons with planeCount = 0 colorDepth = -1;
if (planeCount == 0) { this.Hotspot = new Point(r.ReadUInt16(), r.ReadUInt16());
wellFormed = false; if (this.Hotspot.X >= width || this.Hotspot.Y >= height)
} throw new InvalidIconException("Hotspot is outside image");
if (planeCount > 1) { } else {
throw new InvalidIconException("Invalid number of planes: " + planeCount); uint planeCount = r.ReadUInt16();
} // planeCount should always be 1, but there are some icons with planeCount = 0
colorDepth = r.ReadUInt16(); if (planeCount == 0) {
if (colorDepth == 0) { wellFormed = false;
if (colorCount == 2) }
colorDepth = 1; if (planeCount > 1) {
else if (colorCount == 16) throw new InvalidIconException("Invalid number of planes: " + planeCount);
colorDepth = 4; }
else if (colorCount == 0) colorDepth = r.ReadUInt16();
colorDepth = 8; 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(); sizeInBytes = r.ReadInt32();
if (sizeInBytes <= 0) { if (sizeInBytes <= 0) {
@ -420,14 +483,19 @@ namespace IconEditor
uint saveOffsetToHeaderPosition; 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)(width == 256 ? 0 : width));
w.Write((byte)(height == 256 ? 0 : height)); w.Write((byte)(height == 256 ? 0 : height));
w.Write((byte)(colorDepth == 4 ? 16 : 0)); w.Write((byte)(colorDepth == 4 ? 16 : 0));
w.Write((byte)0); w.Write((byte)0);
w.Write((ushort)1); if (isCursor) {
w.Write((ushort)colorDepth); w.Write((ushort)Hotspot.X);
w.Write((ushort)Hotspot.Y);
} else {
w.Write((ushort)1);
w.Write((ushort)colorDepth);
}
w.Write((int)entryData.Length); w.Write((int)entryData.Length);
saveOffsetToHeaderPosition = (uint)stream.Position; saveOffsetToHeaderPosition = (uint)stream.Position;
w.Write((uint)0); w.Write((uint)0);
@ -445,11 +513,18 @@ namespace IconEditor
pos += c; pos += c;
} }
SetEntryData(imageData); 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))) { using (BinaryReader r = new BinaryReader(new MemoryStream(imageData, false))) {
int biBitCount; int biBitCount;
CheckBitmapHeader(r, out 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 // inconsistency in header information, fix icon header
wellFormed = false; wellFormed = false;
colorDepth = biBitCount; colorDepth = biBitCount;
@ -472,53 +547,124 @@ namespace IconEditor
/// Stores the specified bitmap. The bitmap will be resized and /// Stores the specified bitmap. The bitmap will be resized and
/// changed to the correct pixel format. /// changed to the correct pixel format.
/// </summary> /// </summary>
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) { if (bitmap.Width != width || bitmap.Height != height) {
bitmap = new Bitmap(bitmap, width, height); bitmap = new Bitmap(bitmap, width, height);
} }
PixelFormat expected; PixelFormat format = GetPixelFormat(colorDepth);
switch (colorDepth) { if (storeCompressed ?? (colorDepth == 32 && (width > 48 || height > 48))) {
case 1: bitmap = Convert(bitmap, format);
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) {
using (MemoryStream ms = new MemoryStream()) { using (MemoryStream ms = new MemoryStream()) {
bitmap.Save(ms, ImageFormat.Png); bitmap.Save(ms, ImageFormat.Png);
SetEntryData(ms.ToArray()); SetEntryData(ms.ToArray());
} }
} else { } 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() public override string ToString()
{ {
return string.Format("[IconEntry {0}x{1}x{2}]", this.width, this.height, this.colorDepth); return string.Format("[IconEntry {0}x{1}x{2}]", this.width, this.height, this.colorDepth);
} }
/// <summary>
/// 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.
/// </summary>
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);
}
}
}
} }
} }

71
src/AddIns/DisplayBindings/IconEditor/IconEditor/IconFile.cs → src/AddIns/DisplayBindings/IconEditor/IconFile.cs

@ -6,8 +6,9 @@ using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Linq;
namespace IconEditor namespace ICSharpCode.IconEditor
{ {
/// <summary> /// <summary>
/// Icon class supporting XP and Vista icons. /// Icon class supporting XP and Vista icons.
@ -89,25 +90,24 @@ namespace IconEditor
{ {
BinaryReader r = new BinaryReader(stream); BinaryReader r = new BinaryReader(stream);
if (r.ReadUInt16() != 0) 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(); ushort type = r.ReadUInt16();
if (type == 1) if (type == 1)
isCursor = false; isCursor = false;
else if (type == 2) else if (type == 2)
isCursor = true; isCursor = true;
else else
throw new InvalidIconException("invalid icon type " + type); throw new InvalidIconException("This is not a valid .ico file.");
if (isCursor)
throw new InvalidIconException("cursors are currently not supported");
IconEntry[] icons = new IconEntry[r.ReadUInt16()]; IconEntry[] icons = new IconEntry[r.ReadUInt16()];
for (int i = 0; i < icons.Length; i++) { for (int i = 0; i < icons.Length; i++) {
icons[i] = new IconEntry(); 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++) { for (int i = 0; i < icons.Length; i++) {
icons[i].ReadData(stream, ref wellFormed); icons[i].ReadData(stream, ref wellFormed);
} }
this.icons = new Collection<IconEntry>(icons); // need to use List<T> so that the collection can be resized
this.icons = new Collection<IconEntry>(new List<IconEntry>(icons));
} }
/// <summary> /// <summary>
@ -138,7 +138,7 @@ namespace IconEditor
w.Write((ushort)(isCursor ? 2 : 1)); w.Write((ushort)(isCursor ? 2 : 1));
w.Write((ushort)icons.Count); w.Write((ushort)icons.Count);
foreach (IconEntry e in icons) { foreach (IconEntry e in icons) {
e.WriteHeader(stream, w); e.WriteHeader(stream, isCursor, w);
} }
foreach (IconEntry e in icons) { foreach (IconEntry e in icons) {
e.WriteData(stream); e.WriteData(stream);
@ -170,41 +170,48 @@ namespace IconEditor
return best; return best;
} }
/// <summary>
/// Adds the specified entry
/// </summary>
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;
}
}
}
/// <summary> /// <summary>
/// Gets a sorted list of all icon sizes available in this file. /// Gets a sorted list of all icon sizes available in this file.
/// </summary> /// </summary>
public IList<Size> AvailableSizes { public IEnumerable<Size> AvailableSizes {
get { get {
List<Size> r = new List<Size>(); return this.Icons.Select(e => e.Size).Distinct().OrderBy(s => s.Width).ThenBy(s => s.Height);
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;
} }
} }
/// <summary> /// <summary>
/// Gets a sorted list of all color depths available in this file. /// Gets a sorted list of all color depths available in this file.
/// </summary> /// </summary>
public IList<int> AvailableColorDepths { public IEnumerable<int> AvailableColorDepths {
get { get {
bool[] depths = new bool[33]; return this.Icons.Select(e => e.ColorDepth).Distinct().OrderBy(v => v);
foreach (IconEntry e in this.Icons) {
depths[e.ColorDepth] = true;
}
List<int> r = new List<int>();
for (int i = 0; i < depths.Length; i++) {
if (depths[i]) r.Add(i);
}
return r;
} }
} }
} }

153
src/AddIns/DisplayBindings/IconEditor/IconPanel.Designer.cs generated

@ -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
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the control.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
this.Entry = null; // dispose temp. bitmaps
}
}
base.Dispose(disposing);
}
/// <summary>
/// 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.
/// </summary>
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;
}
}

169
src/AddIns/DisplayBindings/IconEditor/IconEditor/IconPanel.cs → src/AddIns/DisplayBindings/IconEditor/IconPanel.cs

@ -4,19 +4,31 @@
using System; using System;
using System.Drawing; using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Windows.Forms; using System.Windows.Forms;
namespace IconEditor using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.IconEditor
{ {
public partial class IconPanel public partial class IconPanel
{ {
Size size; Size iconSize;
int colorDepth; int colorDepth;
IconEntry entry; IconEntry entry;
Bitmap maskBitmap; Bitmap maskBitmap;
Bitmap bitmap; Bitmap bitmap;
public Size IconSize {
get { return iconSize; }
}
public int ColorDepth {
get { return colorDepth; }
}
public IconEntry Entry { public IconEntry Entry {
get { get {
return entry; return entry;
@ -31,22 +43,30 @@ namespace IconEditor
bitmap = null; bitmap = null;
} }
entry = value; entry = value;
this.ContextMenuStrip = null;
if (entry != null) { if (entry != null) {
bitmap = entry.GetImage(); bitmap = entry.GetImage();
if (entry.Type == IconEntryType.Classic) { if (entry.Type == IconEntryType.Classic) {
maskBitmap = FixBitmap(entry.GetMaskImage()); maskBitmap = FixBitmap(entry.GetMaskImage());
bitmap = FixBitmap(bitmap); 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(); Invalidate();
} }
} }
public event EventHandler EntryChanged = delegate {};
Bitmap FixBitmap(Bitmap src) Bitmap FixBitmap(Bitmap src)
{ {
if (src == null)
return src;
Bitmap dest = new Bitmap(src.Width, src.Height); Bitmap dest = new Bitmap(src.Width, src.Height);
using (Graphics g = Graphics.FromImage(dest)) { using (Graphics g = Graphics.FromImage(dest)) {
g.DrawImageUnscaled(src, 0, 0); g.DrawImageUnscaled(src, 0, 0);
@ -57,7 +77,7 @@ namespace IconEditor
public IconPanel(Size size, int colorDepth) public IconPanel(Size size, int colorDepth)
{ {
this.size = size; this.iconSize = size;
this.colorDepth = colorDepth; this.colorDepth = colorDepth;
// //
@ -65,7 +85,22 @@ namespace IconEditor
// //
InitializeComponent(); 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) void IconPanelPaint(object sender, PaintEventArgs e)
@ -77,8 +112,9 @@ namespace IconEditor
IntPtr memDC = Gdi32.CreateCompatibleDC(destDC); IntPtr memDC = Gdi32.CreateCompatibleDC(destDC);
IntPtr srcHBitmap = maskBitmap.GetHbitmap(); IntPtr srcHBitmap = maskBitmap.GetHbitmap();
IntPtr oldHBitmap = Gdi32.SelectObject(memDC, srcHBitmap); 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.SelectObject(memDC, oldHBitmap);
Gdi32.DeleteObject(srcHBitmap); Gdi32.DeleteObject(srcHBitmap);
Gdi32.DeleteDC(memDC); Gdi32.DeleteDC(memDC);
@ -88,7 +124,7 @@ namespace IconEditor
IntPtr memDC = Gdi32.CreateCompatibleDC(destDC); IntPtr memDC = Gdi32.CreateCompatibleDC(destDC);
IntPtr srcHBitmap = bitmap.GetHbitmap(); IntPtr srcHBitmap = bitmap.GetHbitmap();
IntPtr oldHBitmap = Gdi32.SelectObject(memDC, srcHBitmap); 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.SelectObject(memDC, oldHBitmap);
Gdi32.DeleteObject(srcHBitmap); Gdi32.DeleteObject(srcHBitmap);
@ -136,30 +172,82 @@ namespace IconEditor
dlg.DefaultExt = "png"; dlg.DefaultExt = "png";
dlg.Filter = "PNG images|*.png|All files|*.*"; dlg.Filter = "PNG images|*.png|All files|*.*";
if (dlg.ShowDialog() == DialogResult.OK) { 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) void ReplaceWithImageToolStripMenuItemClick(object sender, EventArgs e)
{ {
using (OpenFileDialog dlg = new OpenFileDialog()) { using (OpenFileDialog dlg = new OpenFileDialog()) {
dlg.Filter = "Images|*.png;*.bmp;*.gif;*.jpg|All files|*.*"; dlg.Filter = "Images|*.png;*.bmp;*.gif;*.jpg|All files|*.*";
if (dlg.ShowDialog() == DialogResult.OK) { if (dlg.ShowDialog() == DialogResult.OK) {
Bitmap newBitmap = new Bitmap(dlg.FileName); try {
// scale to correct size and make it ARGB Bitmap newBitmap = new Bitmap(dlg.FileName);
string oldFormat = entry.Width + "x" + entry.Height + "x" + entry.ColorDepth; SetImage(newBitmap);
string newFormat = newBitmap.Width + "x" + newBitmap.Height + "x"; } catch (Exception ex) {
if (newBitmap.Width != entry.Width || newBitmap.Height != entry.Height) { MessageService.ShowHandledException(ex);
MessageBox.Show("The loaded bitmap has the");
} }
//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; Point mouseDownLocation;
void IconPanelMouseDown(object sender, MouseEventArgs e) void IconPanelMouseDown(object sender, MouseEventArgs e)
@ -172,41 +260,56 @@ namespace IconEditor
void IconPanelMouseMove(object sender, MouseEventArgs e) void IconPanelMouseMove(object sender, MouseEventArgs e)
{ {
if (e.Button == MouseButtons.Left) { if (e.Button == MouseButtons.Left) {
/* if (mouseDownLocation.IsEmpty == false && entry != null) {
if (mouseDownLocation.IsEmpty == false) {
int dx = Math.Abs(e.X - mouseDownLocation.X); int dx = Math.Abs(e.X - mouseDownLocation.X);
int dy = Math.Abs(e.Y - mouseDownLocation.Y); int dy = Math.Abs(e.Y - mouseDownLocation.Y);
if (dx > SystemInformation.DragSize.Width || dy > SystemInformation.DragSize.Height) if (dx > SystemInformation.DragSize.Width || dy > SystemInformation.DragSize.Height)
{ {
mouseDownLocation = Point.Empty; mouseDownLocation = Point.Empty;
this.DoDragDrop(bitmap, DragDropEffects.Copy); this.DoDragDrop(entry.ExportArgbBitmap(), DragDropEffects.Copy);
} }
} }
*/
} }
} }
void IconPanelDragEnter(object sender, DragEventArgs e) void IconPanelDragEnter(object sender, DragEventArgs e)
{ {
/* if (e.Data.GetDataPresent(DataFormats.Bitmap)) {
if (e.Data.GetDataPresent(typeof(Bitmap)))
e.Effect = DragDropEffects.Copy; 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; e.Effect = DragDropEffects.None;
*/ }
} }
void IconPanelDragDrop(object sender, DragEventArgs e) void IconPanelDragDrop(object sender, DragEventArgs e)
{ {
/*try { try {
Bitmap bmp = (Bitmap)e.Data.GetData(typeof(Bitmap)); 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) { if (bmp != null) {
entry.SetImage(bmp, entry.IsCompressed); SetImage(bmp);
this.Entry = entry; // re-display entry
} }
} catch (Exception ex) { } catch (Exception ex) {
MessageBox.Show(ex.ToString()); MessageService.ShowHandledException(ex);
}*/ }
} }
} }
} }

55
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);
}
}
}

2
src/AddIns/DisplayBindings/IconEditor/IconEditor/InvalidIconException.cs → src/AddIns/DisplayBindings/IconEditor/InvalidIconException.cs

@ -4,7 +4,7 @@
using System; using System;
using System.Runtime.Serialization; using System.Runtime.Serialization;
namespace IconEditor namespace ICSharpCode.IconEditor
{ {
[Serializable] [Serializable]
public class InvalidIconException : Exception public class InvalidIconException : Exception

187
src/AddIns/DisplayBindings/IconEditor/PickFormatDialog.Designer.cs generated

@ -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
{
/// <summary>
/// Designer variable used to keep track of non-visual components.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Disposes resources used by the form.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
}
/// <summary>
/// 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.
/// </summary>
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;
}
}

45
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();
}
}
}

9
src/Setup/Files.wxs

@ -1534,12 +1534,9 @@
</Component> </Component>
</Directory> </Directory>
<Directory Id="IconEditorFolder" Name="IconEditor"> <Directory Id="IconEditorFolder" Name="IconEditor">
<Component Guid="13031705-82B1-46D8-8749-453A6A313A3B" Id="IconEditorExe" DiskId="1"> <Component Guid="A32C8CC1-705D-4BFF-B9CE-A4D867DD2EFA" Id="IconEditorFiles" DiskId="1">
<File Source="..\..\AddIns\DisplayBindings\IconEditor\IconEditor.exe" Id="IconEditor.exe" Name="IconEditor.exe" Assembly=".net" AssemblyApplication="IconEditor.exe" AssemblyManifest="IconEditor.exe" KeyPath="yes" /> <File Source="..\..\AddIns\DisplayBindings\IconEditor\ICSharpCode.IconEditor.dll" Id="ICSharpCode.IconEditor.dll" Name="ICSharpCode.IconEditor.dll" Assembly=".net" AssemblyApplication="ICSharpCode.IconEditor.dll" AssemblyManifest="ICSharpCode.IconEditor.dll" KeyPath="yes" />
</Component> <File Source="..\..\AddIns\DisplayBindings\IconEditor\IconEditor.addin" Id="IconEditor.addin" Name="IconEditor.addin" />
<Component Guid="A6F985C3-09A5-4650-9A8E-239BBC737B10" Id="IconEditorAddInFiles" DiskId="1">
<File Source="..\..\AddIns\DisplayBindings\IconEditor\ICSharpCode.IconEditorAddIn.dll" Id="ICSharpCode.IconEditorAddIn.dll" Name="ICSharpCode.IconEditorAddIn.dll" Assembly=".net" AssemblyApplication="ICSharpCode.IconEditorAddIn.dll" AssemblyManifest="ICSharpCode.IconEditorAddIn.dll" KeyPath="yes" />
<File Source="..\..\AddIns\DisplayBindings\IconEditor\IconEditorAddIn.addin" Id="IconEditorAddIn.addin" Name="IconEditorAddIn.addin" />
</Component> </Component>
</Directory> </Directory>
<Directory Id="ResourceEditorFolder" Name="ResourceEditor"> <Directory Id="ResourceEditorFolder" Name="ResourceEditor">

3
src/Setup/Setup.wxs

@ -365,8 +365,7 @@
<ComponentRef Id="WixUIInstallDirProjectTemplate"/> <ComponentRef Id="WixUIInstallDirProjectTemplate"/>
<ComponentRef Id="WixUIFeatureTreeProjectTemplate"/> <ComponentRef Id="WixUIFeatureTreeProjectTemplate"/>
<ComponentRef Id="FormsDesignerFiles"/> <ComponentRef Id="FormsDesignerFiles"/>
<ComponentRef Id="IconEditorAddInFiles"/> <ComponentRef Id="IconEditorFiles"/>
<ComponentRef Id="IconEditorExe"/>
<ComponentRef Id="ResourceEditorFiles"/> <ComponentRef Id="ResourceEditorFiles"/>
<ComponentRef Id="SettingsEditorFiles"/> <ComponentRef Id="SettingsEditorFiles"/>
<ComponentRef Id="ClassDiagramResources"/> <ComponentRef Id="ClassDiagramResources"/>

Loading…
Cancel
Save