Porównaj commity

...

132 Commity

Autor SHA1 Wiadomość Data
Nathan Crawford ee4fe73d20 Add Spanish translation from Claudio García Carlón 2022-01-03 18:24:48 -05:00
Nathan Crawford 34fb797550 Incremented versions and updated copyright year for embroideryReader and PesFile projects 2019-02-24 23:17:28 -05:00
Nathan Crawford 742cb94527 Speculative fix for #19, also parse design name from file and add more exceptions if file format is not as expected 2019-02-23 16:07:41 -05:00
Nathan Crawford f25708e604 Incremented version to 2.2.4, updated copyright year to 2018 2018-09-21 00:41:30 -04:00
Nathan Crawford 51bc553e73 Attempt to stop crash related to settings file when closing 2018-06-03 13:38:47 -04:00
Nathan Crawford afd3e80907 Try to catch errors when color number is out of range in PesFile.OpenFile()
Also cleanup some unneeded namespace specifiers
2017-12-14 16:43:03 -05:00
Nathan Crawford c16f3e7fb0 Fix select naming violations identified by VS 2017 2017-09-13 01:05:29 -04:00
Nathan Crawford 36e1668305 Increased version to 2.2.3 for new release, removed debug info from about dialog 2016-05-10 22:03:58 -04:00
Nathan Crawford b2e8809004 Added comment about printer resolution, incremented installer version to 2.2.2 2016-04-14 19:17:49 -04:00
Nathan Crawford de3eca27c8 Removed an unused property and added to a comment in Wix installer 2016-04-13 20:19:02 -04:00
Nathan Crawford aeb8aaf6e4 Catch InvalidPrinterException when showing print preview dialog. Should resolve issue #14. 2016-04-12 16:49:45 -04:00
Nathan Crawford 612b8d0a24 Set 100% scale based on 96 DPI instead of 254 DPI 2016-04-12 16:30:30 -04:00
Nathan Crawford 1b33c47dda Fix print scaling code, should resolve issue #12 and may help with issue #10 and issue #11 2016-04-12 16:16:08 -04:00
Nathan Crawford 34eb10023c Add manufacturer folder back to default install path to avoid possible name conflicts 2016-04-07 23:04:47 -04:00
Nathan Crawford 8471b3519c Increased version to 2.2.1 2016-04-07 22:21:55 -04:00
Nathan Crawford 2d59addb2d Add check for generated bitmap size 2016-04-07 14:36:19 -04:00
Nathan Crawford 9c44d3ecf6 Properly load and save background grid color when background grid is disabled 2016-04-04 22:51:35 -04:00
Nathan Crawford 2d78fbc5b5 Increase PesFile version to 1.5 2016-04-04 22:32:48 -04:00
Nathan Crawford fe2e9a7446 Add some basic checks on printer resolution to try to debug issue #11 2016-04-04 22:28:22 -04:00
Nathan Crawford 8798fcb80c Add basic input checks for PesFile.designToBitmap() to help diagnose issue #10 2016-04-04 22:10:04 -04:00
Nathan Crawford 3c9ff412ba Install the start menu icon as an icon, not an executable 2016-04-04 21:24:51 -04:00
Nathan Crawford 5d42ec4c52 Optimize stitch data for Graphics.Drawlines() before drawing 2016-04-04 21:18:12 -04:00
Nathan Crawford 9a7c4c19b4 Dispose temporary image used in scaling code 2016-04-04 21:15:46 -04:00
Nathan Crawford 7c779615dc Remove exception warning and narrowed exceptions down to just the expected types 2016-04-04 18:52:41 -04:00
Nathan Crawford 06e3a79874 Increase version to 2.2.0 for new feature release 2016-04-04 18:18:40 -04:00
Nathan Crawford 5f92c297f4 Updated to ErrorReporter.dll version 0.2 2016-04-04 16:23:41 -04:00
Nathan Crawford 09d181c1af Potential fix for issue #9 2016-04-04 16:22:28 -04:00
Nathan Crawford 8a141537a7 Change new instal to default to correct location, and allow user to change location 2016-04-01 01:18:34 -04:00
Nathan Crawford 01e04b0a61 Re-wrote Wix installer from the ground up 2016-04-01 00:49:07 -04:00
Nathan Crawford 54f5523484 Change installer to remove old versions before installing new one 2016-03-31 21:19:19 -04:00
Nathan Crawford 37c0b98487 Try to dispose IDisposable objects more diligently 2016-03-31 20:49:39 -04:00
Nathan Crawford 89c706588a Silence warnings about exceptions 2016-03-31 19:49:00 -04:00
Nathan Crawford 9d2b208a52 Reduce installer's minimum upgrade version to 1.6.0 2016-03-31 17:58:26 -04:00
Nathan Crawford 1c7f85d98e Update installer for beta release 2016-03-31 00:45:55 -04:00
Nathan Crawford ea38b44295 Attempt to optimize design drawing code a little, capture more info about each stitch as it is read from the file, increment project versions in prep for a beta release 2016-03-31 00:41:01 -04:00
Nathan Crawford 39cdbbda3f Try to make designToBitmap() a little more efficient, remove a redundant calculation for debug info stitch length 2016-03-30 20:29:26 -04:00
Nathan Crawford daa67cfcdd Properly mask off "extra bits" and clean up debug info loops slightly 2016-03-30 20:04:55 -04:00
Nathan Crawford 71f69a0b3a Add --all option to embroideryInfo. This should resolve issue #3. 2016-03-30 19:33:19 -04:00
Nathan Crawford 06632cc768 Add support for --help, -h and /? to print help message 2016-03-30 19:21:26 -04:00
Nathan Crawford 3bc68def33 Remove ErrorReporter.cs and use ErrorReporter.dll instead 2016-03-30 18:28:04 -04:00
Nathan Crawford 07e700a48d Removed unused returns 2016-03-28 23:24:41 -04:00
Nathan Crawford 7b024e7f27 Read bytes instead of characters when checking PES format markers, and cast bytes to characters before adding to strings 2016-03-28 23:23:14 -04:00
Nathan Crawford db7902970f Updated to IniFile 2.3.1 to fix issue where ini file is always rewritten 2016-03-27 22:15:19 -04:00
Nathan Crawford b1905feca1 Incremented versions for EmbroideryReader and PesFile 2016-03-22 19:51:42 -04:00
Nathan Crawford 3fda9e60b1 Replace PesFile.readyStatus with exceptions and exception handling 2016-03-22 19:48:13 -04:00
Nathan Crawford d2f64f0205 Catch IOExceptions when opening files 2016-03-22 19:17:25 -04:00
Nathan Crawford 725ab4e11e Use read-write sharing for opening PES files 2016-03-22 19:16:56 -04:00
Nathan Crawford 5aef99f6e5 Enclose PEC parsing with using() to ensure file is closed 2016-03-22 19:06:00 -04:00
Nathan Crawford 02ed3d8794 Use consts for WndProc messages 2016-03-22 18:48:12 -04:00
Nathan Crawford fc04bef577 Moved error reporting code to ErrorReporter class
Also tweaked and improved code to load reporting webpage
2016-02-24 12:53:19 -05:00
Nathan Crawford 97cc2d8935 Capture extra bits from certain stitches for debug output 2016-02-24 01:46:00 -05:00
Nathan Crawford d0c2eb485a Improved robustness of PesFile.OpenFile() 2016-02-23 23:41:24 -05:00
Nathan Crawford 5cf44ec832 Load translations before design file, in case there is an error 2016-02-23 23:40:21 -05:00
Nathan Crawford 246194c2aa Removed "using" directives that VS 2015 identified as unused 2016-02-23 23:09:13 -05:00
Nathan Crawford d32bab0edb First try at reporting unhandled exceptions 2016-02-23 22:19:59 -05:00
Nathan Crawford 9c1ec936a6 Updated another missed copyright year 2016-02-18 18:32:27 -05:00
Nathan Crawford c793ee83d2 Check working dir if translations can't be found relative to exe 2016-02-18 18:30:04 -05:00
Nathan Crawford b490109711 Don't change prefs until the OK button has been clicked
Also make the preferences dialog a bit more robust
2016-02-18 18:28:29 -05:00
Nathan Crawford d8d135ffe5 Update some copyright years that were missed last time around 2016-02-18 18:26:56 -05:00
Nathan Crawford 0e26a1644f Set minimum window size to prevent opening a tiny window 2016-02-18 18:25:56 -05:00
Nathan Crawford 3fed11f544 Incremented version to 2.0.2 and updated copyright year 2016-01-11 20:14:07 -05:00
Nathan Crawford b1d1fd0c89 Only save window size if not maximized or minimized, and save and restore window maximized state
This should help with the tiny window in issue #5
2016-01-11 19:52:02 -05:00
Nathan Crawford cb65256d5b Fix another bug with finding available translations 2015-12-28 21:02:59 -05:00
Nathan Crawford d9342e1180 Load translations relative to .exe instead of working directory 2015-12-28 20:17:09 -05:00
Nathan Crawford 5aa9cc9832 embroideryInfo fixes
Set image scale to 1.0, instead of 100,
Make default usage output more informative,
Update copyright year
2015-12-28 20:03:54 -05:00
Nathan Crawford f7d5589a19 Updated installer to 2.0.1 and changed ProductGuid 2015-12-28 19:19:38 -05:00
Nathan Crawford adf3b6a3cd Increase version to 2.0.1 to build test release for bug fixes 2015-12-28 19:01:19 -05:00
Nathan Crawford 0f11f3c63d Check for null design and valid bitmap size when updating image, should fix issue #5 2015-12-21 21:09:57 -05:00
Nathan Crawford e2604752e6 Increase version to 2.0.0 2015-09-22 22:28:46 -04:00
Nathan Crawford fd0e0c86f4 Installer: Removed UpdateCheck, updated translation file names, updated about URL 2015-09-22 22:09:57 -04:00
Nathan Crawford b1c18b1b77 Use IETF language tags for translation filenames 2015-09-22 21:54:55 -04:00
Nathan Crawford f71b0fe111 Removed UpdateCheck.dll and replaced it with EmbroideryReaderUpdates.cs 2015-09-22 21:38:01 -04:00
Nathan Crawford 0705e4b456 Try to match printer resolution when printing a design 2015-04-17 00:35:33 -04:00
Nathan Crawford 0d4ec463f2 Convert thread thickness and filter stitches threshold from double to float 2015-04-17 00:35:32 -04:00
Nathan Crawford 088682071b Fixed loaded file name in window title bar 2015-04-17 00:35:32 -04:00
Nathan Crawford 2f4b84e0e8 Default auto scale design to true 2015-04-17 00:35:32 -04:00
Nathan Crawford a5f7f8e14a Cleaned up and fixed rotate and scale code (resolves #4), fixed incorrect image being sent to print preview 2015-04-17 00:34:16 -04:00
Nathan Crawford 5d3f5886b8 Added Scale / Zoom menu as partial implementation of issue #4 2015-04-03 02:09:59 -04:00
Nathan Crawford 8c198c741b Removed unused references to PES classes 2015-04-02 22:44:41 -04:00
Nathan Crawford 4c0d607064 Update copyright year 2015-04-02 22:35:19 -04:00
Nathan Crawford be26151f95 Replace intpair struct with Tuple generic class 2015-04-02 22:25:27 -04:00
Nathan Crawford f6deb2eab9 Setup Wix installer to allow upgrades 2014-09-17 00:16:15 -04:00
Nathan Crawford dc37643ee6 Cleaned up Wix installer
Removed extra components, renamed some objects that were auto-generated
by he VS installer project
2014-09-16 22:51:24 -04:00
Nathan Crawford c570b3121d Rename translation files to language codes
Zip files don't handle Unicode characters, so store the
translation/language name in the ini file, instead of the name.
2014-09-16 19:46:10 -04:00
Nathan Crawford 85a022bd10 Update to IniFile 2.2 2014-09-15 23:59:02 -04:00
Nathan Crawford ebe1a80c50 Ignore generated msi files 2014-09-04 23:32:56 -04:00
Nathan Crawford 2d2f33115a Replace VS deployment project with Wix 2014-09-04 23:30:29 -04:00
Nathan Crawford 4ae27ec284 Add Chinese translations submitted by keetian 2014-09-04 20:40:36 -04:00
Nathan Crawford fb0eb1bd4d Update copyright year and bump version to 1.99.1 2014-09-04 20:39:42 -04:00
Nathan Crawford 0695371c8b Fix "pixels" label positioning 2014-09-04 20:33:24 -04:00
Nathan Crawford 3f3ca3e9aa Updated for beta of 2.0 2014-03-26 01:04:25 -04:00
Nathan Crawford c5d3c9be19 Added more translations from Andrea 2013-12-17 13:39:26 -05:00
Nathan Crawford f4f69fd5bd Added documentation for building translations 2013-12-11 20:51:22 -05:00
Nathan Crawford 7b3cc3f7d6 Fall back to English for missing strings
A placeholder string is still returned if the English translation is
missing or incomplete
2013-12-11 19:33:07 -05:00
Nathan Crawford 00779d20e5 Added translation files to installer 2013-12-11 19:09:55 -05:00
Nathan Crawford ce88147fdd Removed more obsolete Visual Studio files 2013-12-11 19:06:27 -05:00
Nathan Crawford dca8b020bc Updated IniFile.dll and UpdateCheck.dll to versions that target .Net 4.0 2013-12-11 18:56:48 -05:00
Nathan Crawford 9ccad2f545 Added controls for transparency grid size 2013-12-11 18:56:12 -05:00
Nathan Crawford 76a00f4aff Added batch file to generate images for a whole folder of designs 2013-12-11 18:54:47 -05:00
Nathan Crawford 09d0eb536a Added TranslationBuilder to turn translations.ods into language ini files 2013-12-11 18:52:35 -05:00
Nathan Crawford 19a1b51ffd Added settings for transparency grid 2013-12-10 19:33:45 -05:00
Nathan Crawford f373d5bc81 Finished initial translation support, closes #1 2013-12-10 19:17:41 -05:00
Nathan Crawford 96c38379db Initial support for loading translations. A big step for issue #1.
All controls and messageboxes appear to be translated now.
2013-12-07 01:32:24 -05:00
Nathan Crawford e0ebf2d20c Moved translation files to their own folder 2013-12-06 21:26:27 -05:00
Nathan Crawford 00c1ca3e37 Fixed string that got pasted in the name field 2013-12-06 21:12:44 -05:00
Nathan Crawford a2eb153ba1 Enhanced design debug output
Now includes unknown block start byte, and saving to a file displays a
messagebox when it's finished
2013-12-06 19:14:15 -05:00
Nathan Crawford 0f5ce1aa43 Make boolean values in settings file consistent
Deprecate YES and NO values in favor of TRUE and FALSE values
2013-12-06 19:06:37 -05:00
Nathan Crawford 91331d915c Added background grid to drawing panel
Includes setting to enable and disable the grid
2013-12-06 19:05:15 -05:00
Nathan Crawford edd9f83d84 Improved readability of X/Y value processing code
Included more descriptive comments as well
2013-12-06 19:04:33 -05:00
Nathan Crawford 1323b50759 Moved PesFile support classes to their own files 2013-12-06 19:03:40 -05:00
Nathan Crawford 046d2e82cb Fix broken filter 'ugly' stitches option 2013-12-06 19:02:34 -05:00
Nathan Crawford 0a2f9efa97 Fix swapped digits in 7-bit mask 2013-12-05 09:35:11 -05:00
njcrawford 72158feeeb Mask off the 8th bit in get7Bit2sComplement()
Also update copyright year
2013-12-04 23:21:33 -05:00
Nathan Crawford 10e7a923f1 Fixed issues around "dead code" comment
"Dead code" was part of the 2's complement conversion, when handling the odd-sized integers from PES file
2013-12-04 16:14:02 -05:00
Nathan Crawford 4e7b2e5d9e Add .gitattributes and normalize line endings 2013-12-03 16:59:12 -05:00
Nathan Crawford eda741d42e Removed old NSIS based installer 2013-12-03 16:48:52 -05:00
Nathan Crawford 042cc3abe3 Fixed detection of installed old versions 2013-12-03 15:12:59 -05:00
Nathan Crawford 5ef18eb593 Convert project to .Net 4.0 and add MSI installer 2013-12-03 14:32:03 -05:00
Nathan Crawford 18702b50a7 Removed IncrementVersionNumber 2013-12-03 13:32:29 -05:00
Nathan Crawford b0e3d20e9f Remove old visual studio project files, part 2 2013-12-03 13:30:11 -05:00
Nathan Crawford b014ab3499 Remove old Visual Studio project files, part 1 2013-12-03 13:17:03 -05:00
Nathan Crawford 341a97e4d8 Merge pull request #2 from virtualstaticvoid/patch-1
Failed to set `colorWarning` field in `getColorFromIndex` method.
2013-10-10 14:34:41 -07:00
Chris Stefano 9dffd4b251 Failed to set `colorWarning` field in `getColorFromIndex` method. 2013-10-10 23:25:23 +02:00
Nathan Crawford 61b4aad803 Added link to Embroidery Reader webpage 2013-10-08 00:30:44 -04:00
Nathan Crawford a642a33595 Added Italian translation from Andrea in 2011
Also started a spreadsheet to track translations, and eventually build
translation files from.
2013-10-07 23:25:07 -04:00
Nathan Crawford 97a728b74f Merge branch 'master' of https://github.com/njcrawford/EmbroideryReader 2013-10-07 22:13:53 -04:00
Nathan Crawford 7c810f386f Initial commit 2013-10-07 19:10:34 -07:00
Nathan Crawford 09cc4aaa68 Fixed compile errors 2012-09-30 01:26:32 +00:00
Nathan Crawford a10c80ed33 Moved file to docs folder 2012-09-28 22:54:37 +00:00
Nathan Crawford 035b7d2a8a Cleaned up and refactored code for easier reading 2012-09-28 22:53:54 +00:00
Nathan Crawford 8e07ced42c Moved PES colors into a table instead of a case statement 2012-09-28 22:23:10 +00:00
Nathan Crawford 4627214f50 Close file when we're done reading from it. Thanks to Farren Young for the patch. 2012-08-21 20:05:41 +00:00
115 zmienionych plików z 73302 dodań i 69840 usunięć

22
.gitattributes vendored 100644
Wyświetl plik

@ -0,0 +1,22 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain

114
.gitignore vendored 100644
Wyświetl plik

@ -0,0 +1,114 @@
# Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
[Bb]in/
[Oo]bj/
# mstest test results
TestResults
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
# Build results
[Dd]ebug/
[Rr]elease/
x64/
*_i.c
*_p.c
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.log
*.vspscc
*.vssscc
.builds
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*
# NCrunch
*.ncrunch*
.*crunch*.local.xml
# Installshield output folder
[Ee]xpress
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish
# Publish Web Output
*.Publish.xml
# NuGet Packages Directory
packages
# Windows Azure Build Output
csx
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
[Bb]in
[Oo]bj
sql
TestResults
[Tt]est[Rr]esult*
*.Cache
ClientBin
[Ss]tyle[Cc]op.*
~$*
*.dbmdl
Generated_Code #added for RIA/Silverlight projects
# Backup & report files from converting an old project file to a newer
# Visual Studio version. Backup files are not needed, because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
*.bak
*.wixpdb
*.wixobj
Thumbs.db
/.vs

1
Installer/.gitignore vendored 100644
Wyświetl plik

@ -0,0 +1 @@
/*.msi

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 103 KiB

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 318 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 318 B

Wyświetl plik

@ -0,0 +1,186 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v.NET Framework 4 Client Profile"/></startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705">
<dependentAssembly>
<assemblyIdentity name="Accessibility" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="cscompmgd" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="CustomMarshalers" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IEExecRemote" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IEHost" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="IIEHost" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ISymWrapper" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.JScript" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualBasic.Compatibility.Data" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualBasic.Compatibility" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualBasic" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualBasic.Vsa" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualC" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Vsa" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Vsa.Vb.CodeDOMProcessor" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft_VsaVb" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="mscorcfg" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Configuration.Install" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Data" publicKeyToken="b77a5c561934e089" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Design" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.DirectoryServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System" publicKeyToken="b77a5c561934e089" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Drawing.Design" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Drawing" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.EnterpriseServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Management" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Messaging" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Remoting" publicKeyToken="b77a5c561934e089" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Formatters.Soap" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Security" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ServiceProcess" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mobile" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.RegularExpressions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Services" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Windows.Forms" publicKeyToken="b77a5c561934e089" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Xml" publicKeyToken="b77a5c561934e089" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="vjscor" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="VJSharpCodeProvider" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="7.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="vjslib" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="vjslibcw" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="vjswfc" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="VJSWfcBrowserStubLib" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="vjswfccw" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="vjswfchtml" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
</dependentAssembly>
</assemblyBinding></runtime></configuration>

Wyświetl plik

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<!-- ProductGuid should change whenever ProductVersion changes -->
<?define ProductVersion="2.2.4" ?>
<?define ProductGuid="{39447850-C068-4C91-8142-AEA9630470C5}" ?>
<Product Id="$(var.ProductGuid)" Name="Embroidery Reader" Language="1033" Version="$(var.ProductVersion)" Manufacturer="Nathan Crawford" UpgradeCode="CE1642E2-5EE0-454F-B7DF-5C9C92D6D40D">
<Package Description="Test file in a Product" Comments="Simple test" InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="simple.cab" EmbedCab="yes" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="ROOTDIR" Name="NJCrawford Software">
<Directory Id="PRODUCTDIR" Name="Embroidery Reader">
<Component Id="RequiredFiles" DiskId="1" Guid="ad3defbe-e276-41ab-9d76-9ab9f2976ac2">
<File Id="EMBROIDERYREADER.EXE" Name="embroideryReader.exe" Source="..\embroideryReader\bin\Release\embroideryReader.exe" KeyPath="yes">
<Shortcut Id="ExeShortcut" Directory="ProgramMenuDir" Name="Embroidery Reader" Advertise="yes" Icon="StartMenuIcon.ico" />
</File>
<ProgId Id="EmbroideryDesign" Description="Embroidery Design File" Icon="StartMenuIcon.ico" Advertise="yes">
<Extension Id="pes" Advertise="yes">
<Verb Id="open" Command="&amp;Open" Argument="&quot;%1&quot;" Sequence="1" />
</Extension>
</ProgId>
<File Id="PESFILE.DLL" Name="PesFile.dll" Source="..\embroideryReader\bin\Release\PesFile.dll" />
<File Id="INIFILE.DLL" Name="IniFile.dll" Source="..\embroideryReader\bin\Release\IniFile.dll" />
<File Id="ERRORREPORTER.DLL" Name="ErrorReporter.dll" Source="..\embroideryReader\bin\Release\ErrorReporter.dll" />
</Component>
<Directory Id="TRANSLATIONS" Name="translations">
<Component Id="Translations" DiskId="1" KeyPath="yes" Guid="4ac2c11d-b2c9-4557-a618-fa4bacf50889">
<File Id="EN_US.INI" Name="en-US.ini" Source="..\translations\en-US.ini" />
<File Id="IT_IT.INI" Name="it-IT.ini" Source="..\translations\it-IT.ini" />
<File Id="ZH_HANS.INI" Name="zh-Hans.ini" Source="..\translations\zh-Hans.ini" />
<File Id="ZH_HANT.INI" Name="zh-Hant.ini" Source="..\translations\zh-Hant.ini" />
</Component>
</Directory>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder">
<Directory Id="ProgramMenuDir" Name="Embroidery Reader">
<Component Id="StartMenuShortcuts" Guid="DDE4256E-E2D5-477F-A006-929245B20219">
<RemoveFolder Id="ProgramMenuDir" On="uninstall" />
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" />
</Component>
</Directory>
</Directory>
</Directory>
<Feature Id="DefaultFeature" Title="Main Feature" Level="1">
<ComponentRef Id="RequiredFiles" />
<ComponentRef Id="Translations" />
<ComponentRef Id="StartMenuShortcuts" />
</Feature>
<UI />
<UIRef Id="WixUI_InstallDir" />
<Property Id="WIXUI_INSTALLDIR" Value="PRODUCTDIR" />
<!-- Require .Net Framework 4.0 Client profile -->
<PropertyRef Id="NETFRAMEWORK40CLIENT" />
<Condition Message="This application requires .NET Framework X.Y.">Installed OR NETFRAMEWORK40CLIENT</Condition>
<!-- Icon for start menu and file association -->
<Icon Id="StartMenuIcon.ico" SourceFile="..\embroideryReader\icon.ico" />
<!-- Allow upgrades from any older version with a Wix-based installer -->
<MajorUpgrade DowngradeErrorMessage="Downgrades are not supported. If you would like to install this version, you must uninstall the newer version first." />
<!-- Install for all users (or highest available level) by default -->
<Property Id="ALLUSERS" Value="2" />
<!-- Show help link in Programs and Features -->
<Property Id="ARPHELPLINK" Value="http://www.njcrawford.com/contact/" />
<!-- Show contact in Programs and Features -->
<Property Id="ARPCONTACT" Value="http://www.njcrawford.com/contact/" />
<!-- Show info/about URL in Programs and Features -->
<Property Id="ARPURLINFOABOUT" Value="http://www.njcrawford.com/programs/embroidery-reader/" />
<!-- Show icon in Programs and Features -->
<Property Id="ARPPRODUCTICON" Value="StartMenuIcon.ico" />
<!-- Search for pre-Wix installer versions -->
<Property Id="OLD_INSTALL">
<RegistrySearch Id="SearchForOldVersions" Root="HKLM" Key="Software\Microsoft\Windows\CurrentVersion\Uninstall\Embroidery Reader" Name="DisplayName" Type="raw" />
</Property>
<Condition Message="Embroidery Reader 1.5 or earlier is installed. Please remove previous versions of Embroidery Reader and run the installer again.">OLD_INSTALL = null</Condition>
<!-- It doesn't appear that PREVIOUSVERSIONSINSTALLED is needed with MajorUpgrade -->
<!-- <Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" /> -->
<!-- Specify license file -->
<WixVariable Id="WixUILicenseRtf" Value="..\docs\license.rtf" />
<!-- Specify custom banner bitmap 493x58 -->
<WixVariable Id="WixUIBannerBmp" Value="images\banner.bmp" />
<!-- Specify custom dialog bitmap 493x312 -->
<WixVariable Id="WixUIDialogBmp" Value="images\dialog.bmp" />
</Product>
</Wix>

Wyświetl plik

@ -0,0 +1,26 @@
Installer must:
1. Install files into program files, in Embroidery Reader folder (or a user-selected folder)
a. Program .exe and .dlls
b. Translation .inis
2. Install Start menu Folder
a. Short cut to .exe
b. Must install for all users
3. Check for required .net version before installing
a. Should also direct user to download page, if not installed
4. Check for old non-Wix versions before installing
a. Version 1.5.1 and older
b. Would be nice if it would offer to uninstall old version as well
5. Only allow upgrades
a. If downgrade is required, uninstall current version and install older version
b. Older Wix-based installers must be removed during upgrade (to maintain a single Programs and Features entry)
6. Must have a respectable Programs and Features presence
a. Correct program name
b. Program icon
c. Contact URL
d. Support URL
e. Help URL
7. Must include correct license in installer
8. Must install a file association
a. Show icon for .pes files
b. Open .pes file with double click

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 112 KiB

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 601 KiB

Plik binarny nie jest wyświetlany.

339
LICENSE 100644
Wyświetl plik

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Open source .PES file viewer
Copyright (C) 2013 Nathan Crawford
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
{signature of Ty Coon}, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -1 +0,0 @@
PesFile.cs

Wyświetl plik

@ -0,0 +1,98 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact/.
*/
namespace PesFile
{
public class PesColors
{
public static int[,] colorMap = new int[,] {
//red grn blu
{ 0, 0, 0}, // 0 Not used
{ 14, 31, 124}, // 1
{ 10, 85, 163}, // 2
{ 48, 135, 119}, // 3
{ 75, 107, 175}, // 4
{237, 23, 31}, // 5
{209, 92, 0}, // 6
{145, 54, 151}, // 7
{228, 154, 203}, // 8
{145, 95, 172}, // 9
{157, 214, 125}, // 10
{232, 169, 0}, // 11
{254, 186, 53}, // 12
{255, 255, 0}, // 13
{112, 188, 31}, // 14
{186, 152, 0}, // 15
{168, 168, 168}, // 16
{123, 111, 0}, // 17
{255, 255, 179}, // 18
{ 79, 85, 86}, // 19
{ 0, 0, 0}, // 20
{ 11, 61, 145}, // 21
{119, 1, 118}, // 22
{ 41, 49, 51}, // 23
{ 42, 19, 1}, // 24
{246, 74, 138}, // 25
{178, 118, 36}, // 26
{252, 187, 196}, // 27
{254, 55, 15}, // 28
{240, 240, 240}, // 29
{106, 28, 138}, // 30
{168, 221, 196}, // 31
{ 37, 132, 187}, // 32
{254, 179, 67}, // 33
{255, 240, 141}, // 34
{208, 166, 96}, // 35
{209, 84, 0}, // 36
{102, 186, 73}, // 37
{ 19, 74, 70}, // 38
{135, 135, 135}, // 39
{216, 202, 198}, // 40
{ 67, 86, 7}, // 41
{254, 227, 197}, // 42
{249, 147, 188}, // 43
{ 0, 56, 34}, // 44
{178, 175, 212}, // 45
{104, 106, 176}, // 46
{239, 227, 185}, // 47
{247, 56, 102}, // 48
{181, 76, 100}, // 49
{ 19, 43, 26}, // 50
{199, 1, 85}, // 51
{254, 158, 50}, // 52
{168, 222, 235}, // 53
{ 0, 103, 26}, // 54
{ 78, 41, 144}, // 55
{ 47, 126, 32}, // 56
{253, 217, 222}, // 57
{255, 217, 17}, // 58
{ 9, 91, 166}, // 59
{240, 249, 112}, // 60
{227, 243, 91}, // 61
{255, 200, 100}, // 62
{255, 200, 150}, // 63
{255, 200, 200} // 64
};
}
}

Wyświetl plik

@ -1,54 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PesFile</RootNamespace>
<AssemblyName>PesFile</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="PesFile.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>

Wyświetl plik

@ -1,58 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PesFile</RootNamespace>
<AssemblyName>PesFile</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="PesFile.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>"$(ProjectDir)IncrementVersionNumber.exe" --postbuild</PostBuildEvent>
<PreBuildEvent>"$(ProjectDir)IncrementVersionNumber.exe" --prebuild</PreBuildEvent>
</PropertyGroup>
</Project>

Plik diff jest za duży Load Diff

Wyświetl plik

@ -5,7 +5,7 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</ProjectGuid>
<ProjectGuid>{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>PesFile</RootNamespace>
@ -13,10 +13,10 @@
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -57,8 +57,11 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="PesColors.cs" />
<Compile Include="PesFile.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Stitch.cs" />
<Compile Include="StitchBlock.cs" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
@ -86,7 +89,9 @@
</Target>
-->
<PropertyGroup>
<PostBuildEvent>"$(ProjectDir)IncrementVersionNumber.exe" --postbuild</PostBuildEvent>
<PreBuildEvent>"$(ProjectDir)IncrementVersionNumber.exe" --prebuild</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embridery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2014 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact.html.
You can contact me at http://www.njcrawford.com/contact/.
*/
using System.Reflection;
@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("PesFile")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2011")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -55,5 +55,5 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.1.0.7")]
[assembly: AssemblyFileVersion("1.1.0.7")]
[assembly: AssemblyVersion("1.5.4.0")]
[assembly: AssemblyFileVersion("1.5.4.0")]

82
PesFile/Stitch.cs 100644
Wyświetl plik

@ -0,0 +1,82 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact/.
*/
using System;
using System.Drawing;
namespace PesFile
{
public class Stitch
{
public enum MoveBitSize
{
Unknown,
SevenBits,
TwelveBits
};
public enum StitchType
{
Unknown,
NormalStitch,
MovementBeginAnchor,
MovementEndAnchor,
MovementOnly
}
public Point a;
public Point b;
// Extra bits to output with debug info
public int extraBits1;
public int extraBits2;
// Was this stitch represented as 7 bit move or 12 bit move in the file
public MoveBitSize XMoveBits;
public MoveBitSize YMoveBits;
public StitchType stitchType;
public Stitch(Point pointA, Point pointB)
{
this.a = pointA;
this.b = pointB;
}
public Stitch(Point pointA, Point pointB, int extraBits1, int extraBits2, MoveBitSize XMoveBits, MoveBitSize YMoveBits, StitchType stitchType)
{
this.a = pointA;
this.b = pointB;
this.extraBits1 = extraBits1;
this.extraBits2 = extraBits2;
this.XMoveBits = XMoveBits;
this.YMoveBits = YMoveBits;
this.stitchType = stitchType;
}
public double CalcLength()
{
double diffx = Math.Abs(a.X - b.X);
double diffy = Math.Abs(a.Y - b.Y);
return Math.Sqrt(Math.Pow(diffx, 2.0) + Math.Pow(diffy, 2.0));
}
}
}

Wyświetl plik

@ -0,0 +1,42 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact/.
*/
using System;
using System.Drawing;
namespace PesFile
{
public class StitchBlock
{
public Color color;
public Int32 colorIndex;
public Int32 stitchesTotal;
public Stitch[] stitches;
public byte unknownStartByte;
public StitchBlock()
{
color = Color.Black;
}
}
}

6
README.md 100644
Wyświetl plik

@ -0,0 +1,6 @@
Embroidery Reader
================
Embroidery Reader is an open source .PES file viewer written in C#.
For more information, see [http://www.njcrawford.com/programs/embroidery-reader/](http://www.njcrawford.com/programs/embroidery-reader/).

74
TranslationBuilder/Form1.Designer.cs wygenerowano 100644
Wyświetl plik

@ -0,0 +1,74 @@
namespace TranslationBuilder
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.lblStatus = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(77, 113);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(133, 23);
this.button1.TabIndex = 0;
this.button1.Text = "Build Translation Files";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// lblStatus
//
this.lblStatus.AutoSize = true;
this.lblStatus.Location = new System.Drawing.Point(90, 179);
this.lblStatus.Name = "lblStatus";
this.lblStatus.Size = new System.Drawing.Size(38, 13);
this.lblStatus.TabIndex = 1;
this.lblStatus.Text = "Ready";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.lblStatus);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label lblStatus;
}
}

Wyświetl plik

@ -0,0 +1,82 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OdsReadWrite;
using System.IO;
namespace TranslationBuilder
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
lblStatus.Text = "Building...";
this.Invalidate();
Application.DoEvents();
List<string> languageName = new List<string>();
List<string> outputs = new List<string>();
DataSet theData = new OdsReaderWriter().ReadOdsFile("..\\..\\..\\translations\\translations.ods");
int rowCounter = 0;
foreach (DataRow thisRow in theData.Tables[0].Rows)
{
if (rowCounter == 0)
{
for (int i = 2; i < thisRow.ItemArray.Length; i++)
{
if (!String.IsNullOrEmpty(thisRow.ItemArray[i].ToString()))
{
languageName.Add(thisRow.ItemArray[i].ToString());
outputs.Add("");
}
}
}
else
{
string textId;
if (!String.IsNullOrEmpty(thisRow.ItemArray[0].ToString()))
{
textId = thisRow.ItemArray[0].ToString();
}
else
{
continue;
}
for (int i = 2; i < thisRow.ItemArray.Length; i++)
{
if (!String.IsNullOrEmpty(thisRow.ItemArray[i].ToString()))
{
outputs[i - 2] += textId + "=" + thisRow.ItemArray[i] + Environment.NewLine;
}
}
}
rowCounter++;
}
for (int i = 0; i < outputs.Count; i++)
{
StreamWriter outfile = new StreamWriter("..\\..\\..\\translations\\" + languageName[i] + ".ini");
outfile.WriteLine("# Embroidery Reader language strings file. To translate Embroidery Reader to a new");
outfile.WriteLine("# language, copy this file to a new name and translate each string.");
outfile.WriteLine("# If you make a new translation, please contact me! I'd love to");
outfile.WriteLine("# include your translation with Embroidery Reader.");
outfile.WriteLine("# The best way to contact me is through http://www.njcrawford.com/contact/.");
outfile.Write(outputs[i]);
outfile.Close();
//MessageBox.Show(languageName[i] + Environment.NewLine + outputs[i]);
}
lblStatus.Text = "Done";
}
}
}

Wyświetl plik

@ -0,0 +1,120 @@
<?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=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1,322 @@
using System;
using System.Data;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Xml;
using Ionic.Zip;
namespace OdsReadWrite
{
internal sealed class OdsReaderWriter
{
// Namespaces. We need this to initialize XmlNamespaceManager so that we can search XmlDocument.
private static string[,] namespaces = new string[,]
{
{"table", "urn:oasis:names:tc:opendocument:xmlns:table:1.0"},
{"office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0"},
{"style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0"},
{"text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0"},
{"draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"},
{"fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"},
{"dc", "http://purl.org/dc/elements/1.1/"},
{"meta", "urn:oasis:names:tc:opendocument:xmlns:meta:1.0"},
{"number", "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"},
{"presentation", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"},
{"svg", "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"},
{"chart", "urn:oasis:names:tc:opendocument:xmlns:chart:1.0"},
{"dr3d", "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"},
{"math", "http://www.w3.org/1998/Math/MathML"},
{"form", "urn:oasis:names:tc:opendocument:xmlns:form:1.0"},
{"script", "urn:oasis:names:tc:opendocument:xmlns:script:1.0"},
{"ooo", "http://openoffice.org/2004/office"},
{"ooow", "http://openoffice.org/2004/writer"},
{"oooc", "http://openoffice.org/2004/calc"},
{"dom", "http://www.w3.org/2001/xml-events"},
{"xforms", "http://www.w3.org/2002/xforms"},
{"xsd", "http://www.w3.org/2001/XMLSchema"},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance"},
{"rpt", "http://openoffice.org/2005/report"},
{"of", "urn:oasis:names:tc:opendocument:xmlns:of:1.2"},
{"rdfa", "http://docs.oasis-open.org/opendocument/meta/rdfa#"},
{"config", "urn:oasis:names:tc:opendocument:xmlns:config:1.0"}
};
// Read zip stream (.ods file is zip file).
private ZipFile GetZipFile(Stream stream)
{
return ZipFile.Read(stream);
}
// Read zip file (.ods file is zip file).
private ZipFile GetZipFile(string inputFilePath)
{
return ZipFile.Read(inputFilePath);
}
private XmlDocument GetContentXmlFile(ZipFile zipFile)
{
// Get file(in zip archive) that contains data ("content.xml").
ZipEntry contentZipEntry = zipFile["content.xml"];
// Extract that file to MemoryStream.
Stream contentStream = new MemoryStream();
contentZipEntry.Extract(contentStream);
contentStream.Seek(0, SeekOrigin.Begin);
// Create XmlDocument from MemoryStream (MemoryStream contains content.xml).
XmlDocument contentXml = new XmlDocument();
contentXml.Load(contentStream);
return contentXml;
}
private XmlNamespaceManager InitializeXmlNamespaceManager(XmlDocument xmlDocument)
{
XmlNamespaceManager nmsManager = new XmlNamespaceManager(xmlDocument.NameTable);
for (int i = 0; i < namespaces.GetLength(0); i++)
nmsManager.AddNamespace(namespaces[i, 0], namespaces[i, 1]);
return nmsManager;
}
/// <summary>
/// Read .ods file and store it in DataSet.
/// </summary>
/// <param name="inputFilePath">Path to the .ods file.</param>
/// <returns>DataSet that represents .ods file.</returns>
public DataSet ReadOdsFile(string inputFilePath)
{
ZipFile odsZipFile = this.GetZipFile(inputFilePath);
// Get content.xml file
XmlDocument contentXml = this.GetContentXmlFile(odsZipFile);
// Initialize XmlNamespaceManager
XmlNamespaceManager nmsManager = this.InitializeXmlNamespaceManager(contentXml);
DataSet odsFile = new DataSet(Path.GetFileName(inputFilePath));
foreach (XmlNode tableNode in this.GetTableNodes(contentXml, nmsManager))
odsFile.Tables.Add(this.GetSheet(tableNode, nmsManager));
return odsFile;
}
// In ODF sheet is stored in table:table node
private XmlNodeList GetTableNodes(XmlDocument contentXmlDocument, XmlNamespaceManager nmsManager)
{
return contentXmlDocument.SelectNodes("/office:document-content/office:body/office:spreadsheet/table:table", nmsManager);
}
private DataTable GetSheet(XmlNode tableNode, XmlNamespaceManager nmsManager)
{
DataTable sheet = new DataTable(tableNode.Attributes["table:name"].Value);
XmlNodeList rowNodes = tableNode.SelectNodes("table:table-row", nmsManager);
int rowIndex = 0;
foreach (XmlNode rowNode in rowNodes)
this.GetRow(rowNode, sheet, nmsManager, ref rowIndex);
return sheet;
}
private void GetRow(XmlNode rowNode, DataTable sheet, XmlNamespaceManager nmsManager, ref int rowIndex)
{
XmlAttribute rowsRepeated = rowNode.Attributes["table:number-rows-repeated"];
if (rowsRepeated == null || Convert.ToInt32(rowsRepeated.Value, CultureInfo.InvariantCulture) == 1)
{
while (sheet.Rows.Count < rowIndex)
sheet.Rows.Add(sheet.NewRow());
DataRow row = sheet.NewRow();
XmlNodeList cellNodes = rowNode.SelectNodes("table:table-cell", nmsManager);
int cellIndex = 0;
foreach (XmlNode cellNode in cellNodes)
this.GetCell(cellNode, row, nmsManager, ref cellIndex);
sheet.Rows.Add(row);
rowIndex++;
}
else
{
rowIndex += Convert.ToInt32(rowsRepeated.Value, CultureInfo.InvariantCulture);
}
// sheet must have at least one cell
if (sheet.Rows.Count == 0)
{
sheet.Rows.Add(sheet.NewRow());
sheet.Columns.Add();
}
}
private void GetCell(XmlNode cellNode, DataRow row, XmlNamespaceManager nmsManager, ref int cellIndex)
{
XmlAttribute cellRepeated = cellNode.Attributes["table:number-columns-repeated"];
string cellValue = this.ReadCellValue(cellNode);
int repeats = 1;
if (cellRepeated != null)
{
repeats = Convert.ToInt32(cellRepeated.Value, CultureInfo.InvariantCulture);
}
if (!String.IsNullOrEmpty(cellValue))
{
for (int i = 0; i < repeats; i++)
{
DataTable sheet = row.Table;
while (sheet.Columns.Count <= cellIndex)
sheet.Columns.Add();
row[cellIndex] = cellValue;
cellIndex++;
}
}
else
{
cellIndex += repeats;
}
}
private string ReadCellValue(XmlNode cell)
{
XmlAttribute cellVal = cell.Attributes["office:value"];
if (cellVal == null)
return String.IsNullOrEmpty(cell.InnerText) ? null : cell.InnerText;
else
return cellVal.Value;
}
/// <summary>
/// Writes DataSet as .ods file.
/// </summary>
/// <param name="odsFile">DataSet that represent .ods file.</param>
/// <param name="outputFilePath">The name of the file to save to.</param>
public void WriteOdsFile(DataSet odsFile, string outputFilePath)
{
ZipFile templateFile = this.GetZipFile(Assembly.GetExecutingAssembly().GetManifestResourceStream("OdsReadWrite.template.ods"));
XmlDocument contentXml = this.GetContentXmlFile(templateFile);
XmlNamespaceManager nmsManager = this.InitializeXmlNamespaceManager(contentXml);
XmlNode sheetsRootNode = this.GetSheetsRootNodeAndRemoveChildrens(contentXml, nmsManager);
foreach (DataTable sheet in odsFile.Tables)
this.SaveSheet(sheet, sheetsRootNode);
this.SaveContentXml(templateFile, contentXml);
templateFile.Save(outputFilePath);
}
private XmlNode GetSheetsRootNodeAndRemoveChildrens(XmlDocument contentXml, XmlNamespaceManager nmsManager)
{
XmlNodeList tableNodes = this.GetTableNodes(contentXml, nmsManager);
XmlNode sheetsRootNode = tableNodes.Item(0).ParentNode;
// remove sheets from template file
foreach (XmlNode tableNode in tableNodes)
sheetsRootNode.RemoveChild(tableNode);
return sheetsRootNode;
}
private void SaveSheet(DataTable sheet, XmlNode sheetsRootNode)
{
XmlDocument ownerDocument = sheetsRootNode.OwnerDocument;
XmlNode sheetNode = ownerDocument.CreateElement("table:table", this.GetNamespaceUri("table"));
XmlAttribute sheetName = ownerDocument.CreateAttribute("table:name", this.GetNamespaceUri("table"));
sheetName.Value = sheet.TableName;
sheetNode.Attributes.Append(sheetName);
this.SaveColumnDefinition(sheet, sheetNode, ownerDocument);
this.SaveRows(sheet, sheetNode, ownerDocument);
sheetsRootNode.AppendChild(sheetNode);
}
private void SaveColumnDefinition(DataTable sheet, XmlNode sheetNode, XmlDocument ownerDocument)
{
XmlNode columnDefinition = ownerDocument.CreateElement("table:table-column", this.GetNamespaceUri("table"));
XmlAttribute columnsCount = ownerDocument.CreateAttribute("table:number-columns-repeated", this.GetNamespaceUri("table"));
columnsCount.Value = sheet.Columns.Count.ToString(CultureInfo.InvariantCulture);
columnDefinition.Attributes.Append(columnsCount);
sheetNode.AppendChild(columnDefinition);
}
private void SaveRows(DataTable sheet, XmlNode sheetNode, XmlDocument ownerDocument)
{
DataRowCollection rows = sheet.Rows;
for (int i = 0; i < rows.Count; i++)
{
XmlNode rowNode = ownerDocument.CreateElement("table:table-row", this.GetNamespaceUri("table"));
this.SaveCell(rows[i], rowNode, ownerDocument);
sheetNode.AppendChild(rowNode);
}
}
private void SaveCell(DataRow row, XmlNode rowNode, XmlDocument ownerDocument)
{
object[] cells = row.ItemArray;
for (int i = 0; i < cells.Length; i++)
{
XmlElement cellNode = ownerDocument.CreateElement("table:table-cell", this.GetNamespaceUri("table"));
if (row[i] != DBNull.Value)
{
// We save values as text (string)
XmlAttribute valueType = ownerDocument.CreateAttribute("office:value-type", this.GetNamespaceUri("office"));
valueType.Value = "string";
cellNode.Attributes.Append(valueType);
XmlElement cellValue = ownerDocument.CreateElement("text:p", this.GetNamespaceUri("text"));
cellValue.InnerText = row[i].ToString();
cellNode.AppendChild(cellValue);
}
rowNode.AppendChild(cellNode);
}
}
private void SaveContentXml(ZipFile templateFile, XmlDocument contentXml)
{
templateFile.RemoveEntry("content.xml");
MemoryStream memStream = new MemoryStream();
contentXml.Save(memStream);
memStream.Seek(0, SeekOrigin.Begin);
templateFile.AddEntry("content.xml", memStream);
}
private string GetNamespaceUri(string prefix)
{
for (int i = 0; i < namespaces.GetLength(0); i++)
{
if (namespaces[i, 0] == prefix)
return namespaces[i, 1];
}
throw new InvalidOperationException("Can't find that namespace URI");
}
}
}

Wyświetl plik

@ -0,0 +1,43 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2018 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact/.
*/
using System;
using System.Windows.Forms;
namespace TranslationBuilder
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

Wyświetl plik

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("TranslationBuilder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("TranslationBuilder")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("0d502bfb-4e4a-4ffa-9006-8480b142ce68")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

Wyświetl plik

@ -1,14 +1,14 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryReader.Properties {
namespace TranslationBuilder.Properties {
using System;
@ -19,7 +19,7 @@ namespace embroideryReader.Properties {
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
@ -39,7 +39,7 @@ namespace embroideryReader.Properties {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("embroideryReader.Properties.Resources", typeof(Resources).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TranslationBuilder.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;

Wyświetl plik

@ -0,0 +1,117 @@
<?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.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: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" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</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" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</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>

Wyświetl plik

@ -1,18 +1,18 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
// Runtime Version:4.0.30319.18444
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryReader.Properties {
namespace TranslationBuilder.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

Wyświetl plik

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

Wyświetl plik

@ -1,16 +1,21 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A80DF4D8-967D-4352-9E1D-F22D23236BE2}</ProjectGuid>
<ProjectGuid>{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryTester</RootNamespace>
<AssemblyName>embroideryTester</AssemblyName>
<RootNamespace>TranslationBuilder</RootNamespace>
<AssemblyName>TranslationBuilder</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
@ -19,7 +24,8 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
@ -28,7 +34,13 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Ionic.Zip">
<HintPath>.\Ionic.Zip.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
@ -42,39 +54,34 @@
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="OdsReaderWriter.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<SubType>Designer</SubType>
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources-2005.Designer.cs</LastGenOutput>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources-2005.Designer.cs">
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings-2005.Designer.cs</LastGenOutput>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings-2005.Designer.cs">
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2005.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">

Wyświetl plik

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>

343
docs/license.rtf 100644
Wyświetl plik

@ -0,0 +1,343 @@
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.10586}\viewkind4\uc1
\pard\sa200\sl276\slmult1\f0\fs22\lang9\tab\tab GNU GENERAL PUBLIC LICENSE\par
\tab\tab Version 2, June 1991\par
\par
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\par
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par
Everyone is permitted to copy and distribute verbatim copies\par
of this license document, but changing it is not allowed.\par
\par
\tab\tab\tab Preamble\par
\par
The licenses for most software are designed to take away your\par
freedom to share and change it. By contrast, the GNU General Public\par
License is intended to guarantee your freedom to share and change free\par
software--to make sure the software is free for all its users. This\par
General Public License applies to most of the Free Software\par
Foundation's software and to any other program whose authors commit to\par
using it. (Some other Free Software Foundation software is covered by\par
the GNU Lesser General Public License instead.) You can apply it to\par
your programs, too.\par
\par
When we speak of free software, we are referring to freedom, not\par
price. Our General Public Licenses are designed to make sure that you\par
have the freedom to distribute copies of free software (and charge for\par
this service if you wish), that you receive source code or can get it\par
if you want it, that you can change the software or use pieces of it\par
in new free programs; and that you know you can do these things.\par
\par
To protect your rights, we need to make restrictions that forbid\par
anyone to deny you these rights or to ask you to surrender the rights.\par
These restrictions translate to certain responsibilities for you if you\par
distribute copies of the software, or if you modify it.\par
\par
For example, if you distribute copies of such a program, whether\par
gratis or for a fee, you must give the recipients all the rights that\par
you have. You must make sure that they, too, receive or can get the\par
source code. And you must show them these terms so they know their\par
rights.\par
\par
We protect your rights with two steps: (1) copyright the software, and\par
(2) offer you this license which gives you legal permission to copy,\par
distribute and/or modify the software.\par
\par
Also, for each author's protection and ours, we want to make certain\par
that everyone understands that there is no warranty for this free\par
software. If the software is modified by someone else and passed on, we\par
want its recipients to know that what they have is not the original, so\par
that any problems introduced by others will not reflect on the original\par
authors' reputations.\par
\par
Finally, any free program is threatened constantly by software\par
patents. We wish to avoid the danger that redistributors of a free\par
program will individually obtain patent licenses, in effect making the\par
program proprietary. To prevent this, we have made it clear that any\par
patent must be licensed for everyone's free use or not licensed at all.\par
\par
The precise terms and conditions for copying, distribution and\par
modification follow.\par
\par
\tab\tab GNU GENERAL PUBLIC LICENSE\par
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par
\par
0. This License applies to any program or other work which contains\par
a notice placed by the copyright holder saying it may be distributed\par
under the terms of this General Public License. The "Program", below,\par
refers to any such program or work, and a "work based on the Program"\par
means either the Program or any derivative work under copyright law:\par
that is to say, a work containing the Program or a portion of it,\par
either verbatim or with modifications and/or translated into another\par
language. (Hereinafter, translation is included without limitation in\par
the term "modification".) Each licensee is addressed as "you".\par
\par
Activities other than copying, distribution and modification are not\par
covered by this License; they are outside its scope. The act of\par
running the Program is not restricted, and the output from the Program\par
is covered only if its contents constitute a work based on the\par
Program (independent of having been made by running the Program).\par
Whether that is true depends on what the Program does.\par
\par
1. You may copy and distribute verbatim copies of the Program's\par
source code as you receive it, in any medium, provided that you\par
conspicuously and appropriately publish on each copy an appropriate\par
copyright notice and disclaimer of warranty; keep intact all the\par
notices that refer to this License and to the absence of any warranty;\par
and give any other recipients of the Program a copy of this License\par
along with the Program.\par
\par
You may charge a fee for the physical act of transferring a copy, and\par
you may at your option offer warranty protection in exchange for a fee.\par
\par
2. You may modify your copy or copies of the Program or any portion\par
of it, thus forming a work based on the Program, and copy and\par
distribute such modifications or work under the terms of Section 1\par
above, provided that you also meet all of these conditions:\par
\par
a) You must cause the modified files to carry prominent notices\par
stating that you changed the files and the date of any change.\par
\par
b) You must cause any work that you distribute or publish, that in\par
whole or in part contains or is derived from the Program or any\par
part thereof, to be licensed as a whole at no charge to all third\par
parties under the terms of this License.\par
\par
c) If the modified program normally reads commands interactively\par
when run, you must cause it, when started running for such\par
interactive use in the most ordinary way, to print or display an\par
announcement including an appropriate copyright notice and a\par
notice that there is no warranty (or else, saying that you provide\par
a warranty) and that users may redistribute the program under\par
these conditions, and telling the user how to view a copy of this\par
License. (Exception: if the Program itself is interactive but\par
does not normally print such an announcement, your work based on\par
the Program is not required to print an announcement.)\par
\par
These requirements apply to the modified work as a whole. If\par
identifiable sections of that work are not derived from the Program,\par
and can be reasonably considered independent and separate works in\par
themselves, then this License, and its terms, do not apply to those\par
sections when you distribute them as separate works. But when you\par
distribute the same sections as part of a whole which is a work based\par
on the Program, the distribution of the whole must be on the terms of\par
this License, whose permissions for other licensees extend to the\par
entire whole, and thus to each and every part regardless of who wrote it.\par
\par
Thus, it is not the intent of this section to claim rights or contest\par
your rights to work written entirely by you; rather, the intent is to\par
exercise the right to control the distribution of derivative or\par
collective works based on the Program.\par
\par
In addition, mere aggregation of another work not based on the Program\par
with the Program (or with a work based on the Program) on a volume of\par
a storage or distribution medium does not bring the other work under\par
the scope of this License.\par
\par
3. You may copy and distribute the Program (or a work based on it,\par
under Section 2) in object code or executable form under the terms of\par
Sections 1 and 2 above provided that you also do one of the following:\par
\par
a) Accompany it with the complete corresponding machine-readable\par
source code, which must be distributed under the terms of Sections\par
1 and 2 above on a medium customarily used for software interchange; or,\par
\par
b) Accompany it with a written offer, valid for at least three\par
years, to give any third party, for a charge no more than your\par
cost of physically performing source distribution, a complete\par
machine-readable copy of the corresponding source code, to be\par
distributed under the terms of Sections 1 and 2 above on a medium\par
customarily used for software interchange; or,\par
\par
c) Accompany it with the information you received as to the offer\par
to distribute corresponding source code. (This alternative is\par
allowed only for noncommercial distribution and only if you\par
received the program in object code or executable form with such\par
an offer, in accord with Subsection b above.)\par
\par
The source code for a work means the preferred form of the work for\par
making modifications to it. For an executable work, complete source\par
code means all the source code for all modules it contains, plus any\par
associated interface definition files, plus the scripts used to\par
control compilation and installation of the executable. However, as a\par
special exception, the source code distributed need not include\par
anything that is normally distributed (in either source or binary\par
form) with the major components (compiler, kernel, and so on) of the\par
operating system on which the executable runs, unless that component\par
itself accompanies the executable.\par
\par
If distribution of executable or object code is made by offering\par
access to copy from a designated place, then offering equivalent\par
access to copy the source code from the same place counts as\par
distribution of the source code, even though third parties are not\par
compelled to copy the source along with the object code.\par
\par
4. You may not copy, modify, sublicense, or distribute the Program\par
except as expressly provided under this License. Any attempt\par
otherwise to copy, modify, sublicense or distribute the Program is\par
void, and will automatically terminate your rights under this License.\par
However, parties who have received copies, or rights, from you under\par
this License will not have their licenses terminated so long as such\par
parties remain in full compliance.\par
\par
5. You are not required to accept this License, since you have not\par
signed it. However, nothing else grants you permission to modify or\par
distribute the Program or its derivative works. These actions are\par
prohibited by law if you do not accept this License. Therefore, by\par
modifying or distributing the Program (or any work based on the\par
Program), you indicate your acceptance of this License to do so, and\par
all its terms and conditions for copying, distributing or modifying\par
the Program or works based on it.\par
\par
6. Each time you redistribute the Program (or any work based on the\par
Program), the recipient automatically receives a license from the\par
original licensor to copy, distribute or modify the Program subject to\par
these terms and conditions. You may not impose any further\par
restrictions on the recipients' exercise of the rights granted herein.\par
You are not responsible for enforcing compliance by third parties to\par
this License.\par
\par
7. If, as a consequence of a court judgment or allegation of patent\par
infringement or for any other reason (not limited to patent issues),\par
conditions are imposed on you (whether by court order, agreement or\par
otherwise) that contradict the conditions of this License, they do not\par
excuse you from the conditions of this License. If you cannot\par
distribute so as to satisfy simultaneously your obligations under this\par
License and any other pertinent obligations, then as a consequence you\par
may not distribute the Program at all. For example, if a patent\par
license would not permit royalty-free redistribution of the Program by\par
all those who receive copies directly or indirectly through you, then\par
the only way you could satisfy both it and this License would be to\par
refrain entirely from distribution of the Program.\par
\par
If any portion of this section is held invalid or unenforceable under\par
any particular circumstance, the balance of the section is intended to\par
apply and the section as a whole is intended to apply in other\par
circumstances.\par
\par
It is not the purpose of this section to induce you to infringe any\par
patents or other property right claims or to contest validity of any\par
such claims; this section has the sole purpose of protecting the\par
integrity of the free software distribution system, which is\par
implemented by public license practices. Many people have made\par
generous contributions to the wide range of software distributed\par
through that system in reliance on consistent application of that\par
system; it is up to the author/donor to decide if he or she is willing\par
to distribute software through any other system and a licensee cannot\par
impose that choice.\par
\par
This section is intended to make thoroughly clear what is believed to\par
be a consequence of the rest of this License.\par
\par
8. If the distribution and/or use of the Program is restricted in\par
certain countries either by patents or by copyrighted interfaces, the\par
original copyright holder who places the Program under this License\par
may add an explicit geographical distribution limitation excluding\par
those countries, so that distribution is permitted only in or among\par
countries not thus excluded. In such case, this License incorporates\par
the limitation as if written in the body of this License.\par
\par
9. The Free Software Foundation may publish revised and/or new versions\par
of the General Public License from time to time. Such new versions will\par
be similar in spirit to the present version, but may differ in detail to\par
address new problems or concerns.\par
\par
Each version is given a distinguishing version number. If the Program\par
specifies a version number of this License which applies to it and "any\par
later version", you have the option of following the terms and conditions\par
either of that version or of any later version published by the Free\par
Software Foundation. If the Program does not specify a version number of\par
this License, you may choose any version ever published by the Free Software\par
Foundation.\par
\par
10. If you wish to incorporate parts of the Program into other free\par
programs whose distribution conditions are different, write to the author\par
to ask for permission. For software which is copyrighted by the Free\par
Software Foundation, write to the Free Software Foundation; we sometimes\par
make exceptions for this. Our decision will be guided by the two goals\par
of preserving the free status of all derivatives of our free software and\par
of promoting the sharing and reuse of software generally.\par
\par
\tab\tab\tab NO WARRANTY\par
\par
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\par
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\par
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\par
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\par
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\par
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\par
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\par
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\par
REPAIR OR CORRECTION.\par
\par
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\par
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\par
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\par
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\par
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\par
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\par
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\par
POSSIBILITY OF SUCH DAMAGES.\par
\par
\tab\tab END OF TERMS AND CONDITIONS\par
\par
\tab How to Apply These Terms to Your New Programs\par
\par
If you develop a new program, and you want it to be of the greatest\par
possible use to the public, the best way to achieve this is to make it\par
free software which everyone can redistribute and change under these terms.\par
\par
To do so, attach the following notices to the program. It is safest\par
to attach them to the start of each source file to most effectively\par
convey the exclusion of warranty; and each file should have at least\par
the "copyright" line and a pointer to where the full notice is found.\par
\par
<one line to give the program's name and a brief idea of what it does.>\par
Copyright (C) <year> <name of author>\par
\par
This program is free software; you can redistribute it and/or modify\par
it under the terms of the GNU General Public License as published by\par
the Free Software Foundation; either version 2 of the License, or\par
(at your option) any later version.\par
\par
This program is distributed in the hope that it will be useful,\par
but WITHOUT ANY WARRANTY; without even the implied warranty of\par
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par
GNU General Public License for more details.\par
\par
You should have received a copy of the GNU General Public License along\par
with this program; if not, write to the Free Software Foundation, Inc.,\par
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par
\par
Also add information on how to contact you by electronic and paper mail.\par
\par
If the program is interactive, make it output a short notice like this\par
when it starts in an interactive mode:\par
\par
Gnomovision version 69, Copyright (C) year name of author\par
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par
This is free software, and you are welcome to redistribute it\par
under certain conditions; type `show c' for details.\par
\par
The hypothetical commands `show w' and `show c' should show the appropriate\par
parts of the General Public License. Of course, the commands you use may\par
be called something other than `show w' and `show c'; they could even be\par
mouse-clicks or menu items--whatever suits your program.\par
\par
You should also get your employer (if you work as a programmer) or your\par
school, if any, to sign a "copyright disclaimer" for the program, if\par
necessary. Here is a sample; alter the names:\par
\par
Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par
`Gnomovision' (which makes passes at compilers) written by James Hacker.\par
\par
<signature of Ty Coon>, 1 April 1989\par
Ty Coon, President of Vice\par
\par
This General Public License does not permit incorporating your program into\par
proprietary programs. If your program is a subroutine library, you may\par
consider it more useful to permit linking proprietary applications with the\par
library. If this is what you want to do, use the GNU Lesser General\par
Public License instead of this License.\par
}

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2018 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -19,40 +19,55 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact.php.
You can contact me at http://www.njcrawford.com/contact/.
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace embroideryInfo
{
class Program
{
static void Main(string[] args)
static void PrintHelp()
{
if (args.Length > 0)
Console.WriteLine("No input file specified.");
Console.WriteLine("To generate design debug text file:");
Console.WriteLine("embroideryInfo.exe --debug input.pes");
Console.WriteLine("To generate design debug text file for all files in current folder:");
Console.WriteLine("embroideryInfo.exe --debug --all");
Console.WriteLine("To generate PNG file:");
Console.WriteLine("embroideryInfo.exe --image input.pes");
Console.WriteLine("To generate PNG file for all files in the current folder:");
Console.WriteLine("embroideryInfo.exe --image --all");
}
static void GenerateDebug(string filename)
{
try
{
if (args[0] == "--image" && args.Length > 1)
PesFile.PesFile design = new PesFile.PesFile(filename);
design.SaveDebugInfo();
}
catch (Exception ex)
{
PesFile.PesFile design = new PesFile.PesFile(args[1]);
Bitmap DrawArea = design.designToBitmap(5, false, 0);
Console.WriteLine(ex.ToString());
}
}
static void GenerateImage(string filename)
{
try
{
PesFile.PesFile design = new PesFile.PesFile(filename);
Bitmap DrawArea = design.DesignToBitmap(5.0f, false, 0.0f, 1.0f);
Bitmap temp = new Bitmap(DrawArea.Width, DrawArea.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics tempGraph = Graphics.FromImage(temp);
using (Graphics tempGraph = Graphics.FromImage(temp))
{
tempGraph.FillRectangle(Brushes.White, 0, 0, temp.Width, temp.Height);
tempGraph.DrawImageUnscaled(DrawArea, 0, 0);
tempGraph.Dispose();
temp.Save(System.IO.Path.ChangeExtension(args[1], ".png"));
}
else
{
PesFile.PesFile design = new PesFile.PesFile(args[0]);
design.saveDebugInfo();
temp.Save(System.IO.Path.ChangeExtension(filename, ".png"));
}
}
catch (Exception ex)
@ -60,14 +75,48 @@ namespace embroideryInfo
Console.WriteLine(ex.ToString());
}
}
static void Main(string[] args)
{
if (args.Length > 0)
{
if(args[0] == "--help" || args[0] == "-h" || args[0] == "/?")
{
PrintHelp();
}
else if (args[0] == "--image" && args.Length > 1)
{
if (args[1] == "--all")
{
foreach(string file in System.IO.Directory.EnumerateFiles(Environment.CurrentDirectory, "*.pes"))
{
GenerateImage(file);
}
}
else
{
Console.WriteLine("Specify input file");
for (int x = 0; x < args.Length; x++)
{
Console.WriteLine(args[x]);
GenerateImage(args[1]);
}
}
else if (args[0] == "--debug" && args.Length > 1)
{
if (args[1] == "--all")
{
foreach (string file in System.IO.Directory.EnumerateFiles(Environment.CurrentDirectory, "*.pes"))
{
GenerateDebug(file);
}
}
else
{
GenerateDebug(args[1]);
}
}
}
else
{
PrintHelp();
}
}
}
}

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embridery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2014 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact.html.
You can contact me at http://www.njcrawford.com/contact/.
*/
using System.Reflection;
@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("embroideryInfo")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2011")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -53,5 +53,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.1.0.0")]
[assembly: AssemblyFileVersion("1.1.0.0")]

Wyświetl plik

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>

Wyświetl plik

@ -1,54 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryInfo</RootNamespace>
<AssemblyName>embroideryInfo</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2005.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Wyświetl plik

@ -1,60 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryInfo</RootNamespace>
<AssemblyName>embroideryInfo</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2008.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Wyświetl plik

@ -5,7 +5,7 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}</ProjectGuid>
<ProjectGuid>{CD77BA88-4A2F-4366-816C-402DDB1C0D08}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryInfo</RootNamespace>
@ -13,10 +13,10 @@
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -60,15 +60,6 @@
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2010.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
@ -86,6 +77,15 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile.csproj">
<Project>{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -0,0 +1 @@
for %%i in (*.pes) do "embroideryInfo.exe" --image "%%~i"

Wyświetl plik

@ -1,75 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryReader", "embroideryReader\embroideryReader-2005.csproj", "{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryTester", "embroideryTester\embroideryTester-2005.csproj", "{A80DF4D8-967D-4352-9E1D-F22D23236BE2}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryInfo", "embroideryInfo\embroideryInfo-2005.csproj", "{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PesFile", "PesFile\PesFile-2005.csproj", "{66EF662E-F52C-4104-9C15-A14266D8F3B8}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{1BA749B5-4B20-4C6A-AAE0-57F3A718B6E7}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
ProjectSection(SolutionItems) = preProject
docs\csewfigseg.html = docs\csewfigseg.html
docs\docsindex.html = docs\docsindex.html
docs\pes0001.html = docs\pes0001.html
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryThumbs", "embroideryThumbs\embroideryThumbs-2005.csproj", "{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Release|Any CPU.Build.0 = Release|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.Build.0 = Release|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.Build.0 = Release|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Release|Any CPU.Build.0 = Release|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Wyświetl plik

@ -1,70 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual C# Express 2008
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{1BA749B5-4B20-4C6A-AAE0-57F3A718B6E7}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryReader-2008", "embroideryReader\embroideryReader-2008.csproj", "{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryTester-2008", "embroideryTester\embroideryTester-2008.csproj", "{A80DF4D8-967D-4352-9E1D-F22D23236BE2}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryInfo-2008", "embroideryInfo\embroideryInfo-2008.csproj", "{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PesFile-2008", "PesFile\PesFile-2008.csproj", "{66EF662E-F52C-4104-9C15-A14266D8F3B8}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryThumbs-2008", "embroideryThumbs\embroideryThumbs-2008.csproj", "{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}"
ProjectSection(WebsiteProperties) = preProject
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.Debug = "False"
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Release|Any CPU.Build.0 = Release|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.Build.0 = Release|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.Build.0 = Release|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Release|Any CPU.Build.0 = Release|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Wyświetl plik

@ -1,46 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{1BA749B5-4B20-4C6A-AAE0-57F3A718B6E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryReader-2010", "embroideryReader\embroideryReader-2010.csproj", "{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryTester-2010", "embroideryTester\embroideryTester-2010.csproj", "{A80DF4D8-967D-4352-9E1D-F22D23236BE2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryInfo-2010", "embroideryInfo\embroideryInfo-2010.csproj", "{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PesFile-2010", "PesFile\PesFile-2010.csproj", "{66EF662E-F52C-4104-9C15-A14266D8F3B8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryThumbs-2010", "embroideryThumbs\embroideryThumbs-2010.csproj", "{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}.Release|Any CPU.Build.0 = Release|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A80DF4D8-967D-4352-9E1D-F22D23236BE2}.Release|Any CPU.Build.0 = Release|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1E3B0E33-E0BC-41C1-B1B3-7CADD39BE362}.Release|Any CPU.Build.0 = Release|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66EF662E-F52C-4104-9C15-A14266D8F3B8}.Release|Any CPU.Build.0 = Release|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Wyświetl plik

@ -0,0 +1,94 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Express 2013 for Windows Desktop
VisualStudioVersion = 12.0.30723.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{1BA749B5-4B20-4C6A-AAE0-57F3A718B6E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryReader", "embroideryReader\embroideryReader.csproj", "{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryTester", "embroideryTester\embroideryTester.csproj", "{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryInfo", "embroideryInfo\embroideryInfo.csproj", "{CD77BA88-4A2F-4366-816C-402DDB1C0D08}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PesFile", "PesFile\PesFile.csproj", "{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "embroideryThumbs", "embroideryThumbs\embroideryThumbs.csproj", "{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TranslationBuilder", "TranslationBuilder\TranslationBuilder.csproj", "{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|Mixed Platforms = Release|Mixed Platforms
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Debug|x86.ActiveCfg = Debug|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Any CPU.Build.0 = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}.Release|x86.ActiveCfg = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Debug|x86.ActiveCfg = Debug|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Any CPU.Build.0 = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}.Release|x86.ActiveCfg = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Debug|x86.ActiveCfg = Debug|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Any CPU.Build.0 = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{CD77BA88-4A2F-4366-816C-402DDB1C0D08}.Release|x86.ActiveCfg = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Debug|x86.ActiveCfg = Debug|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Any CPU.Build.0 = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}.Release|x86.ActiveCfg = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Debug|x86.ActiveCfg = Debug|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Any CPU.Build.0 = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}.Release|x86.ActiveCfg = Release|Any CPU
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|Any CPU.ActiveCfg = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|Mixed Platforms.Build.0 = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|x86.ActiveCfg = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Debug|x86.Build.0 = Debug|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|Any CPU.ActiveCfg = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|Mixed Platforms.ActiveCfg = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|Mixed Platforms.Build.0 = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|x86.ActiveCfg = Release|x86
{470DCEFF-9178-475E-B3A0-A1ABF42AB1ED}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -24,8 +24,6 @@ You can contact me at http://www.njcrawford.com/contact
using System;
using System.Collections.Generic;
using System.Text;
namespace embroideryReader
{
@ -51,20 +49,28 @@ namespace embroideryReader
private const String SETTING_LAST_SAVE_IMAGE_LOCATION = "last save image location";
private const String SETTING_WINDOW_MAXIMIZED = "window maximized";
private const String SETTING_WINDOW_WIDTH = "window width";
private const String SETTING_WINDOW_HEIGHT = "window height";
private const String SETTING_AUTOSCALE_DESIGN = "auto scale design";
private const String VALUE_YES = "yes";
private const String VALUE_NO = "no";
private const String SECTION_TRANSPARENCY_GRID = "transparency grid";
private const String SETTING_TRANSPARENCY_GRID_ENABLE = "enabled";
private const String SETTING_TRANSPARENCY_GRID_SIZE = "size";
private const String SETTING_TRANSPARENCY_GRID_COLOR_RED = "red";
private const String SETTING_TRANSPARENCY_GRID_COLOR_GREEN = "green";
private const String SETTING_TRANSPARENCY_GRID_COLOR_BLUE = "blue";
private const String VALUE_TRUE = "true";
private const String VALUE_FALSE = "false";
private const String SETTING_TRANSLATION = "translation";
private const String UPDATE_URL = "http://www.njcrawford.com/updates/embroidery-reader.ini";
private const String SETTINGS_FILENAME = "embroideryreader.ini";
private const String SETTINGS_PATH_COMPANY = "NJCrawford Software";
private const String SETTINGS_PATH_APP_NAME = "Embroidery Reader";
private const int DEFAULT_WINDOW_SIZE = 300;
private const int MINIMUM_WINDOW_SIZE = 150;
public EmbroideryReaderSettings()
{
string settingsPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
@ -85,51 +91,73 @@ namespace embroideryReader
// Windows 7.
NJCrawford.IniFile oldSettings = new NJCrawford.IniFile(SETTINGS_FILENAME);
if (!String.IsNullOrEmpty(oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED)))
if (oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, -1) != -1)
{
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED));
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED)))
if (oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED, -1) != -1)
{
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED));
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN)))
if (oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN, -1) != -1)
{
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN));
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE)))
if (oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE, -1) != -1)
{
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE));
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE, oldSettings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SETTING_FILTER_STITCHES)))
if (oldSettings.getValue(SETTING_FILTER_STITCHES, false))
{
settings.setValue(SETTING_FILTER_STITCHES, oldSettings.getValue(SETTING_FILTER_STITCHES));
settings.setValue(SETTING_FILTER_STITCHES, oldSettings.getValue(SETTING_FILTER_STITCHES, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SETTING_FILTER_STITCHES_THRESHOLD)))
if (oldSettings.getValue(SETTING_FILTER_STITCHES_THRESHOLD, 0.0) > 0.0)
{
settings.setValue(SETTING_FILTER_STITCHES_THRESHOLD, oldSettings.getValue(SETTING_FILTER_STITCHES_THRESHOLD));
settings.setValue(SETTING_FILTER_STITCHES_THRESHOLD, oldSettings.getValue(SETTING_FILTER_STITCHES_THRESHOLD, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SETTING_THREAD_THICKNESS)))
if (oldSettings.getValue(SETTING_THREAD_THICKNESS, 0.0) > 0.0)
{
settings.setValue(SETTING_THREAD_THICKNESS, oldSettings.getValue(SETTING_THREAD_THICKNESS));
settings.setValue(SETTING_THREAD_THICKNESS, oldSettings.getValue(SETTING_THREAD_THICKNESS, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SETTING_LAST_OPEN_FILE_FOLDER)))
if (!String.IsNullOrEmpty(oldSettings.getValue(SETTING_LAST_OPEN_FILE_FOLDER, "")))
{
settings.setValue(SETTING_LAST_OPEN_FILE_FOLDER, oldSettings.getValue(SETTING_LAST_OPEN_FILE_FOLDER));
settings.setValue(SETTING_LAST_OPEN_FILE_FOLDER, oldSettings.getValue(SETTING_LAST_OPEN_FILE_FOLDER, ""));
}
if (!String.IsNullOrEmpty(oldSettings.getValue(SETTING_LAST_SAVE_IMAGE_LOCATION)))
if (!String.IsNullOrEmpty(oldSettings.getValue(SETTING_LAST_SAVE_IMAGE_LOCATION, "")))
{
settings.setValue(SETTING_LAST_SAVE_IMAGE_LOCATION, oldSettings.getValue(SETTING_LAST_SAVE_IMAGE_LOCATION));
settings.setValue(SETTING_LAST_SAVE_IMAGE_LOCATION, oldSettings.getValue(SETTING_LAST_SAVE_IMAGE_LOCATION, ""));
}
}
// Default to transparency grid enabled
if (String.IsNullOrWhiteSpace(settings.getValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_ENABLE, "")))
{
settings.setValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_ENABLE, true);
}
// Update deprecated settings
if (settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, "") == "yes")
{
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, true);
}
else
{
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, false);
}
// Default language to english
if (String.IsNullOrWhiteSpace(settings.getValue(SETTING_TRANSLATION, "")))
{
settings.setValue(SETTING_TRANSLATION, "English (EN-US)");
}
}
// This is no longer in the settings file, but I'm keeping it here because
@ -146,16 +174,11 @@ namespace embroideryReader
{
get
{
return (settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED) == VALUE_YES);
return settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, false);
}
set
{
String output = VALUE_NO;
if (value)
{
output = VALUE_YES;
}
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, output);
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_ENABLED, value);
}
}
@ -163,31 +186,27 @@ namespace embroideryReader
{
get
{
if (backgroundColorEnabled)
{
if (frmMain.checkColorFromStrings(settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED),
settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN),
settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE)))
{
return frmMain.makeColorFromStrings(settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED),
settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN),
settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE));
}
else
if (!backgroundColorEnabled)
{
return System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.Control);
}
try
{
return System.Drawing.Color.FromArgb(settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED, -1),
settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN, -1),
settings.getValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE, -1));
}
else
catch(ArgumentException /*argEx*/)
{
return System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.Control);
}
}
set
{
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED, value.R.ToString());
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN, value.G.ToString());
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE, value.B.ToString());
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_RED, value.R);
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_GREEN, value.G);
settings.setValue(SECTION_BACKGROUND_COLOR, SETTING_BACKGROUND_COLOR_BLUE, value.B);
}
}
@ -195,62 +214,45 @@ namespace embroideryReader
{
get
{
return (settings.getValue(SETTING_FILTER_STITCHES) == VALUE_TRUE);
return (settings.getValue(SETTING_FILTER_STITCHES, false));
}
set
{
String output = VALUE_FALSE;
if (value)
{
output = VALUE_TRUE;
}
settings.setValue(SETTING_FILTER_STITCHES, output);
settings.setValue(SETTING_FILTER_STITCHES, value);
}
}
public double threadThickness
public float threadThickness
{
get
{
double thickness = 5;
if (settings.getValue(SETTING_THREAD_THICKNESS) != null)
float thickness = settings.getValue(SETTING_THREAD_THICKNESS, 5.0f);
if (thickness < 1.0f)
{
if (Double.TryParse(settings.getValue(SETTING_THREAD_THICKNESS), out thickness))
{
if (thickness < 1)
{
thickness = 1;
}
}
thickness = 1.0f;
}
return thickness;
}
set
{
settings.setValue(SETTING_THREAD_THICKNESS, value.ToString());
settings.setValue(SETTING_THREAD_THICKNESS, value);
}
}
public double filterStitchesThreshold
public float filterStitchesThreshold
{
get
{
int threshold = 120;
if (settings.getValue(SETTING_FILTER_STITCHES_THRESHOLD) != null)
float threshold = settings.getValue(SETTING_FILTER_STITCHES_THRESHOLD, 64.0f);
if (threshold < 10.0f)
{
if (Int32.TryParse(settings.getValue(SETTING_FILTER_STITCHES_THRESHOLD), out threshold))
{
if (threshold < 10)
{
threshold = 10;
}
}
threshold = 10.0f;
}
return threshold;
}
set
{
settings.setValue(SETTING_FILTER_STITCHES_THRESHOLD, value.ToString());
settings.setValue(SETTING_FILTER_STITCHES_THRESHOLD, value);
}
}
@ -258,7 +260,7 @@ namespace embroideryReader
{
get
{
return settings.getValue(SETTING_LAST_OPEN_FILE_FOLDER);
return settings.getValue(SETTING_LAST_OPEN_FILE_FOLDER, "");
}
set
{
@ -275,7 +277,7 @@ namespace embroideryReader
{
get
{
return settings.getValue(SETTING_LAST_SAVE_IMAGE_LOCATION);
return settings.getValue(SETTING_LAST_SAVE_IMAGE_LOCATION, "");
}
set
{
@ -283,21 +285,28 @@ namespace embroideryReader
}
}
public bool windowMaximized
{
get
{
return settings.getValue(SETTING_WINDOW_MAXIMIZED, false);
}
set
{
settings.setValue(SETTING_WINDOW_MAXIMIZED, value);
}
}
public int windowWidth
{
get
{
Int32 retval;
string temp = settings.getValue(SETTING_WINDOW_WIDTH);
if(!Int32.TryParse(temp, out retval))
{
retval = 300;
}
return retval;
// Return the stored window size, but no smaller than MINUMUM_WINDOW_SIZE
return Math.Max(settings.getValue(SETTING_WINDOW_WIDTH, DEFAULT_WINDOW_SIZE), MINIMUM_WINDOW_SIZE);
}
set
{
settings.setValue(SETTING_WINDOW_WIDTH, value.ToString());
settings.setValue(SETTING_WINDOW_WIDTH, value);
}
}
@ -305,17 +314,88 @@ namespace embroideryReader
{
get
{
Int32 retval;
string temp = settings.getValue(SETTING_WINDOW_HEIGHT);
if (!Int32.TryParse(temp, out retval))
{
retval = 300;
}
return retval;
// Return the stored window size, but no smaller than MINUMUM_WINDOW_SIZE
return Math.Max(settings.getValue(SETTING_WINDOW_HEIGHT, DEFAULT_WINDOW_SIZE), MINIMUM_WINDOW_SIZE);
}
set
{
settings.setValue(SETTING_WINDOW_HEIGHT, value.ToString());
settings.setValue(SETTING_WINDOW_HEIGHT, value);
}
}
public bool AutoScaleDesign
{
get
{
return settings.getValue(SETTING_AUTOSCALE_DESIGN, true);
}
set
{
settings.setValue(SETTING_AUTOSCALE_DESIGN, value);
}
}
public bool transparencyGridEnabled
{
get
{
return (settings.getValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_ENABLE, false));
}
set
{
settings.setValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_ENABLE, value);
}
}
public int transparencyGridSize
{
get
{
return settings.getValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_SIZE, 5);
}
set
{
settings.setValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_SIZE, value);
}
}
public System.Drawing.Color transparencyGridColor
{
get
{
if (!transparencyGridEnabled)
{
return System.Drawing.Color.LightGray;
}
try
{
return System.Drawing.Color.FromArgb(settings.getValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_COLOR_RED, -1),
settings.getValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_COLOR_GREEN, -1),
settings.getValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_COLOR_BLUE, -1));
}
catch(ArgumentException /*argEx*/)
{
return System.Drawing.Color.LightGray;
}
}
set
{
settings.setValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_COLOR_RED, value.R);
settings.setValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_COLOR_GREEN, value.G);
settings.setValue(SECTION_TRANSPARENCY_GRID, SETTING_TRANSPARENCY_GRID_COLOR_BLUE, value.B);
}
}
public String translation
{
get
{
return settings.getValue(SETTING_TRANSLATION, "");
}
set
{
settings.setValue(SETTING_TRANSLATION, value);
}
}
}

Wyświetl plik

@ -0,0 +1,255 @@
using System;
using System.ComponentModel;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;
namespace embroideryReader
{
class EmbroideryReaderUpdates
{
public enum versionImportance { unknownOrUnavailable, bugfix, feature, critical, };
System.Net.WebClient downloader = new System.Net.WebClient();
NJCrawford.StringIniReader updateInfo;
System.Uri updateURI;
string lastError = "";
private bool isInfoReady = false;
private BackgroundWorker internalThread;
private string updateURL;
private const string VERSION = "version";
private const string RELEASE_DATE = "release date";
private const string MORE_INFO_URL = "more info url";
public const string SETTINGS_SECTION_NAME = "update info";
public const string SETTINGS_NEWER_VERSION = "newer version available";
public const string SETTINGS_MORE_INFO = "more info url";
public const string SETTINGS_RELEASE_DATE = "release date";
public const string SETTINGS_LAST_CHECK = "last update check";
private Mutex infoReadyMutex;
private Version callerVersion;
private string callerName;
private NJCrawford.IniFile appSettings;
public delegate void callbackFunctionType();
private callbackFunctionType callbackFunction;
public EmbroideryReaderUpdates(string updateLocation, NJCrawford.IniFile settingsFile, callbackFunctionType callback)
{
callbackFunction = callback;
appSettings = settingsFile;
infoReadyMutex = new Mutex();
updateURL = updateLocation;
callerVersion = Assembly.GetCallingAssembly().GetName().Version;
callerName = Assembly.GetCallingAssembly().GetName().Name;
//internalThread = new Thread(new ThreadStart(internalThreadFunction));
internalThread = new BackgroundWorker();
internalThread.DoWork += new DoWorkEventHandler(internalThread_DoWork);
internalThread.RunWorkerCompleted += new RunWorkerCompletedEventHandler(internalThread_RunWorkerCompleted);
internalThread.RunWorkerAsync();
}
void internalThread_DoWork(object sender, DoWorkEventArgs e)
{
string downloadString = "";
updateURI = new Uri(updateURL);
downloader.Headers.Add("user-agent", "UpdateCheck/" + Assembly.GetExecutingAssembly().GetName().Version + " " + callerName + "/" + callerVersion);
try
{
downloadString = downloader.DownloadString(updateURI);
updateInfo = new NJCrawford.StringIniReader(downloadString);
}
catch (Exception ex)
{
//don't complain, just remember it for later
lastError = ex.Message;
}
// I suspect that this will prevent a race condition
infoReadyMutex.WaitOne();
isInfoReady = true;
infoReadyMutex.ReleaseMutex();
}
void internalThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (appSettings != null)
{
if (IsInfoValid())
{
appSettings.setValue(SETTINGS_SECTION_NAME, SETTINGS_NEWER_VERSION, VersionAvailable().ToString());
appSettings.setValue(SETTINGS_SECTION_NAME, SETTINGS_MORE_INFO, getMoreInfoURL());
appSettings.setValue(SETTINGS_SECTION_NAME, SETTINGS_RELEASE_DATE, getReleaseDate().ToShortDateString());
}
appSettings.setValue(SETTINGS_SECTION_NAME, SETTINGS_LAST_CHECK, DateTime.Now.ToShortDateString());
}
if (callbackFunction != null)
{
callbackFunction();
}
}
/*<summary>Returns null if not available for any reason.</summary>*/
public Version VersionAvailable()
{
Version retval = null;
string versionString = updateInfo.getValue(VERSION, "");
if (!String.IsNullOrEmpty(versionString))
{
try
{
retval = new Version(versionString);
}
catch (FormatException fex)
{
lastError = fex.Message;
}
}
return retval;
}
public bool IsUpdateAvailable()
{
bool retval = false;
Version currentVersion = Assembly.GetCallingAssembly().GetName().Version;
if (VersionAvailable() != null)
{
retval = (VersionAvailable() > currentVersion);
}
return retval;
}
public string GetLastError()
{
return lastError;
}
public void ResetLastError()
{
lastError = "";
}
/*<summary>Returns the date and possibly time
* the latest update was released. Returns DateTime.MinValue
* if not available.</summary>
*/
public DateTime getReleaseDate()
{
DateTime retval = DateTime.MinValue;
try
{
retval = Convert.ToDateTime(updateInfo.getValue(RELEASE_DATE, ""));
}
catch (FormatException fx)
{
lastError = fx.Message;
}
return retval;
}
// gets 'more info url'
public string getMoreInfoURL()
{
return updateInfo.getValue(MORE_INFO_URL, "");
}
public bool IsInfoReady()
{
bool retval;
// I suspect that this will prevent a race condition
infoReadyMutex.WaitOne();
retval = isInfoReady;
infoReadyMutex.ReleaseMutex();
return retval;
}
public void waitForInfo()
{
while (!isInfoReady)
{
System.Threading.Thread.Sleep(100);
Application.DoEvents();
}
}
public bool IsInfoValid()
{
string versionString = updateInfo.getValue(VERSION, "");
if (String.IsNullOrEmpty(versionString))
{
lastError = "Missing version in update info";
return false;
}
else
{
// Make sure the version is valid
// Check for 4 int16s seperated by dots
string[] parts = versionString.Split('.');
bool versionOK = true;
if (parts.Length == 4)
{
Int16 junk;
for (int i = 0; i < 4; i++)
{
if (!Int16.TryParse(parts[i], out junk))
{
versionOK = false;
}
}
}
else
{
versionOK = false;
}
if (!versionOK)
{
lastError = "Invalid version format";
return false;
}
}
string releaseDateString = updateInfo.getValue(RELEASE_DATE, "");
if (String.IsNullOrEmpty(releaseDateString))
{
lastError = "Missing release date in update info";
return false;
}
else
{
// Make sure the date is valid
DateTime junk;
if (!DateTime.TryParse(releaseDateString, out junk))
{
lastError = "Invalid release date";
return false;
}
}
string moreInfoURL = updateInfo.getValue(MORE_INFO_URL, "");
if (String.IsNullOrEmpty(moreInfoURL))
{
lastError = "Missing 'more info url' in update info";
return false;
}
else
{
// Make sure url is valid
if(!Uri.IsWellFormedUriString(moreInfoURL, UriKind.Absolute))
{
lastError = "Invalid 'more info url'";
return false;
}
}
return true;
}
}
}

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1,29 @@
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace embroideryReader
{
class GuiResources
{
/// uiFlags: 0 - Count of GDI objects
/// uiFlags: 1 - Count of USER objects
/// - Win32 GDI objects (pens, brushes, fonts, palettes, regions, device contexts, bitmap headers)
/// - Win32 USER objects:
/// - WIN32 resources (accelerator tables, bitmap resources, dialog box templates, font resources, menu resources, raw data resources, string table entries, message table entries, cursors/icons)
/// - Other USER objects (windows, menus)
///
[DllImport("User32")]
extern public static int GetGuiResources(IntPtr hProcess, int uiFlags);
public static int GetGuiResourcesGDICount()
{
return GetGuiResources(Process.GetCurrentProcess().Handle, 0);
}
public static int GetGuiResourcesUserCount()
{
return GetGuiResources(Process.GetCurrentProcess().Handle, 1);
}
}
}

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -24,7 +24,7 @@ You can contact me at http://www.njcrawford.com/contact
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Windows.Forms;
namespace embroideryReader
@ -37,6 +37,10 @@ namespace embroideryReader
[STAThread]
static void Main()
{
// Register ErrorReporter to report unhandled exceptions
NJCrawford.ErrorReporter.RegisterWebReport("Embroidery Reader", "http://www.njcrawford.com/contact/error-reports/?2subject=Embroidery%20Reader%20Automated%20Error%20Report&2message=");
// Normal program.cs stuff
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embridery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2018 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -35,7 +35,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Embroidery Reader")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2011")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2019")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -54,5 +54,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("1.5.0.0")]
[assembly: AssemblyFileVersion("1.5.0.0")]
[assembly: AssemblyVersion("2.2.5.0")]
[assembly: AssemblyFileVersion("2.2.5.0")]

Wyświetl plik

@ -1,71 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryReader.Properties
{
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("embroideryReader.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}

Wyświetl plik

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

Wyświetl plik

@ -1,30 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.42
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryReader.Properties
{
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
{
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default
{
get
{
return defaultInstance;
}
}
}
}

Wyświetl plik

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

Wyświetl plik

@ -0,0 +1,219 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
A copy of the full GPL 2 license can be found in the docs directory.
You can contact me at http://www.njcrawford.com/contact
*/
using System;
using System.Collections.Generic;
using NJCrawford;
namespace embroideryReader
{
public class Translation
{
private const string TRANSLATIONS_FOLDER = "translations";
private const string TRANSLATION_FILE_EXT = ".ini";
private const string DEFAULT_TRANSLATION_NAME = "EN-US";
// String IDs
public enum StringID {
TRANSLATION_DISPLAY_NAME,
UNSUPPORTED_FORMAT,
COLOR_WARNING,
ERROR_FILE,
CORRUPT_FILE,
// File type descriptions
FILE_TYPE_PES,
FILE_TYPE_ALL,
FILE_TYPE_BMP,
FILE_TYPE_PNG,
FILE_TYPE_JPG,
FILE_TYPE_GIF,
FILE_TYPE_TIFF,
ABOUT_MESSAGE,
ERROR_UPDATE,
VERSION,
ERROR_WEBPAGE,
NO_UPDATE,
ERROR_DEBUG,
NO_DESIGN,
UNSUPPORTED_CLASS,
IMAGE_SAVED,
// Menu strings
MENU_FILE,
MENU_OPEN,
MENU_SAVE_IMAGE,
MENU_PRINT,
MENU_PRINT_PREVIEW,
MENU_EXIT,
MENU_EDIT,
MENU_COPY,
MENU_PREFS,
MENU_VIEW,
ROTATE_LEFT,
ROTATE_RIGHT,
MENU_RESET,
MENU_SCALE_ZOOM,
MENU_FIT_TO_WINDOW,
MENU_HELP,
CHECK_UPDATE,
SAVE_DEBUG,
SHOW_DEBUG,
MENU_ABOUT,
PICK_COLOR,
BACKGROUND_COLOR,
RESET_COLOR,
CANCEL,
OK,
THREAD_THICKNESS,
PIXELS,
BACKGROUND,
STITCH_DRAW,
REMOVE_UGLY_STITCHES,
UGLY_STITCH_LENGTH,
SETTINGS,
LATEST_VERSION,
NEW_VERSION_MESSAGE,
NEW_VERSION_QUESTION,
NEW_VERSION_TITLE,
DEBUG_INFO_SAVED,
ENABLE_TRANSPARENCY_GRID,
LANGUAGE,
GRID_SIZE,
TRANSLATION_INCOMPLETE,
// This must be last. Used for checking completeness of translation files.
TOTAL_COUNT,
};
IniFile translationFile;
IniFile defaultFile;
public Translation(String name)
{
Load(name);
}
private string GetBasePath()
{
// Build the path that should be used by default
string exePath = System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath);
exePath = System.IO.Path.Combine(exePath, TRANSLATIONS_FOLDER);
// If the default path exists, use it
if (System.IO.Directory.Exists(exePath))
{
return exePath;
}
// If the translations folder exists in the current working directory, use it
else if(System.IO.Directory.Exists(TRANSLATIONS_FOLDER))
{
return TRANSLATIONS_FOLDER;
}
// No usable translations folder found
throw new Exception("Unable to locate a suitable translations directory");
}
// Returns the names of available translations
// The first value of each tubple is the display name, the second value
// is the file name that must be passed to the open function.
public List<Tuple<String, String>> GetAvailableTranslations()
{
List<Tuple<String, String>> retval = new List<Tuple<String, String>>();
foreach (String file in System.IO.Directory.EnumerateFiles(
GetBasePath(),
"*" + TRANSLATION_FILE_EXT,
System.IO.SearchOption.TopDirectoryOnly))
{
IniFile tempFile = new IniFile(file);
retval.Add(new Tuple<String, String>(tempFile.getValue(StringID.TRANSLATION_DISPLAY_NAME.ToString(), ""), System.IO.Path.GetFileNameWithoutExtension(file)));
}
return retval;
}
// Load a translation file
// Names are just the file name without the extension
public void Load(String translationName)
{
// Init default translation, in case loaded translation is missing any strings
defaultFile = new IniFile(System.IO.Path.Combine(GetBasePath(), DEFAULT_TRANSLATION_NAME + TRANSLATION_FILE_EXT));
String translationPath = System.IO.Path.Combine(GetBasePath(), translationName + TRANSLATION_FILE_EXT);
if (System.IO.File.Exists(translationPath))
{
// Tranlation exists, load it
translationFile = new IniFile(translationPath);
}
else
{
// Requested translation doesn't exist, so use the default
translationFile = defaultFile;
}
}
// Returns the translated string, or a string representation of the
// string ID if the translation isn't available.
public String GetTranslatedString(StringID sid)
{
string retval;
retval = translationFile.getValue(sid.ToString(), "");
// Check the default translation if string is not found in the loaded translation
if (String.IsNullOrEmpty(retval))
{
retval = defaultFile.getValue(sid.ToString(), "");
}
// If it's not found in the default, return a placeholder string
if (String.IsNullOrEmpty(retval))
{
retval = "%" + sid.ToString() + "%";
}
return retval;
}
// Returns true if the loaded translation file contains all expected
// string IDs, or false if not.
public bool IsComplete()
{
bool retval = true;
for (StringID sid = (StringID)0; sid < StringID.TOTAL_COUNT; sid++)
{
if (translationFile.getValue(sid.ToString(), (String)null) == null)
{
retval = false;
break;
}
}
return retval;
}
}
}

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>

Wyświetl plik

@ -1,124 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryReader</RootNamespace>
<AssemblyName>embroideryReader</AssemblyName>
<ApplicationIcon>icon.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="IniFile, Version=1.2.1.11, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\IniFile.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="UpdateCheck, Version=0.2.0.35, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\UpdateCheck.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="frmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmMain.Designer.cs">
<DependentUpon>frmMain.cs</DependentUpon>
</Compile>
<Compile Include="frmSettingsDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmSettingsDialog.Designer.cs">
<DependentUpon>frmSettingsDialog.cs</DependentUpon>
</Compile>
<Compile Include="frmTextbox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmTextbox.Designer.cs">
<DependentUpon>frmTextbox.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="EmbroideryReaderSettings.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmMain.resx">
<SubType>Designer</SubType>
<DependentUpon>frmMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmSettingsDialog.resx">
<SubType>Designer</SubType>
<DependentUpon>frmSettingsDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmTextbox.resx">
<SubType>Designer</SubType>
<DependentUpon>frmTextbox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources-2005.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources-2005.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings-2005.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings-2005.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2005.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
<PreBuildEvent>
</PreBuildEvent>
</PropertyGroup>
</Project>

Wyświetl plik

@ -1,129 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryReader</RootNamespace>
<AssemblyName>embroideryReader</AssemblyName>
<ApplicationIcon>icon.ico</ApplicationIcon>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="IniFile, Version=1.2.1.11, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\IniFile.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="UpdateCheck, Version=0.2.0.35, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\UpdateCheck.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="EmbroideryReaderSettings.cs" />
<Compile Include="frmMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmMain.Designer.cs">
<DependentUpon>frmMain.cs</DependentUpon>
</Compile>
<Compile Include="frmSettingsDialog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmSettingsDialog.Designer.cs">
<DependentUpon>frmSettingsDialog.cs</DependentUpon>
</Compile>
<Compile Include="frmTextbox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmTextbox.Designer.cs">
<DependentUpon>frmTextbox.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="frmMain.resx">
<SubType>Designer</SubType>
<DependentUpon>frmMain.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmSettingsDialog.resx">
<SubType>Designer</SubType>
<DependentUpon>frmSettingsDialog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmTextbox.resx">
<SubType>Designer</SubType>
<DependentUpon>frmTextbox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources-2008.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources-2008.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings-2008.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings-2008.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2008.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PostBuildEvent>"$(ProjectDir)\IncrementVersionNumber.exe" --postbuild</PostBuildEvent>
<PreBuildEvent>"$(ProjectDir)\IncrementVersionNumber.exe" --prebuild</PreBuildEvent>
</PropertyGroup>
</Project>

Wyświetl plik

@ -5,7 +5,7 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{0A9A24AD-60F0-4664-BCC6-2B98B3E8B565}</ProjectGuid>
<ProjectGuid>{91B4187B-F1FB-40AD-BFBA-2DF2790965DB}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryReader</RootNamespace>
@ -14,10 +14,10 @@
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -53,6 +53,9 @@
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="ErrorReporter">
<HintPath>.\ErrorReporter.dll</HintPath>
</Reference>
<Reference Include="IniFile, Version=1.2.1.11, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\IniFile.dll</HintPath>
@ -63,13 +66,10 @@
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="UpdateCheck, Version=0.2.0.35, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>.\UpdateCheck.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="EmbroideryReaderSettings.cs" />
<Compile Include="EmbroideryReaderUpdates.cs" />
<Compile Include="frmMain.cs">
<SubType>Form</SubType>
</Compile>
@ -88,8 +88,10 @@
<Compile Include="frmTextbox.Designer.cs">
<DependentUpon>frmTextbox.cs</DependentUpon>
</Compile>
<Compile Include="GuiResources.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Translation.cs" />
<EmbeddedResource Include="frmMain.resx">
<SubType>Designer</SubType>
<DependentUpon>frmMain.cs</DependentUpon>
@ -104,10 +106,10 @@
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources-2010.Designer.cs</LastGenOutput>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources-2010.Designer.cs">
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
@ -115,20 +117,14 @@
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings-2010.Designer.cs</LastGenOutput>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings-2010.Designer.cs">
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2010.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
</ItemGroup>
@ -149,6 +145,12 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile.csproj">
<Project>{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -49,6 +49,19 @@ namespace embroideryReader
this.rotateLeftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.rotateRightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.zoomToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.fitToWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale100ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale90ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale80ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale70ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale60ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale50ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale40ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale30ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale20ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale10ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.scale5ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.checkForUpdateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveDebugInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -64,6 +77,7 @@ namespace embroideryReader
this.printPreviewDialog1 = new System.Windows.Forms.PrintPreviewDialog();
this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator();
this.menuStrip1.SuspendLayout();
this.panel2.SuspendLayout();
this.statusStrip1.SuspendLayout();
@ -105,13 +119,13 @@ namespace embroideryReader
this.toolStripSeparator3,
this.exitToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(35, 20);
this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.fileToolStripMenuItem.Text = "File";
//
// openToolStripMenuItem
//
this.openToolStripMenuItem.Name = "openToolStripMenuItem";
this.openToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
this.openToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
this.openToolStripMenuItem.Text = "Open...";
this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click);
//
@ -119,20 +133,20 @@ namespace embroideryReader
//
this.saveAsBitmapToolStripMenuItem.Enabled = false;
this.saveAsBitmapToolStripMenuItem.Name = "saveAsBitmapToolStripMenuItem";
this.saveAsBitmapToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
this.saveAsBitmapToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
this.saveAsBitmapToolStripMenuItem.Text = "Save as image...";
this.saveAsBitmapToolStripMenuItem.Click += new System.EventHandler(this.saveAsBitmapToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(163, 6);
this.toolStripSeparator2.Size = new System.Drawing.Size(154, 6);
//
// printToolStripMenuItem
//
this.printToolStripMenuItem.Enabled = false;
this.printToolStripMenuItem.Name = "printToolStripMenuItem";
this.printToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
this.printToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
this.printToolStripMenuItem.Text = "Print...";
this.printToolStripMenuItem.Click += new System.EventHandler(this.printToolStripMenuItem_Click);
//
@ -140,19 +154,19 @@ namespace embroideryReader
//
this.printPreviewToolStripMenuItem.Enabled = false;
this.printPreviewToolStripMenuItem.Name = "printPreviewToolStripMenuItem";
this.printPreviewToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
this.printPreviewToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
this.printPreviewToolStripMenuItem.Text = "Print Preview...";
this.printPreviewToolStripMenuItem.Click += new System.EventHandler(this.printPreviewToolStripMenuItem_Click);
//
// toolStripSeparator3
//
this.toolStripSeparator3.Name = "toolStripSeparator3";
this.toolStripSeparator3.Size = new System.Drawing.Size(163, 6);
this.toolStripSeparator3.Size = new System.Drawing.Size(154, 6);
//
// exitToolStripMenuItem
//
this.exitToolStripMenuItem.Name = "exitToolStripMenuItem";
this.exitToolStripMenuItem.Size = new System.Drawing.Size(166, 22);
this.exitToolStripMenuItem.Size = new System.Drawing.Size(157, 22);
this.exitToolStripMenuItem.Text = "Exit";
this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click);
//
@ -163,26 +177,26 @@ namespace embroideryReader
this.toolStripSeparator4,
this.preferencesToolStripMenuItem});
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new System.Drawing.Size(37, 20);
this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20);
this.editToolStripMenuItem.Text = "Edit";
//
// copyToolStripMenuItem
//
this.copyToolStripMenuItem.Enabled = false;
this.copyToolStripMenuItem.Name = "copyToolStripMenuItem";
this.copyToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.copyToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
this.copyToolStripMenuItem.Text = "Copy";
this.copyToolStripMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click);
//
// toolStripSeparator4
//
this.toolStripSeparator4.Name = "toolStripSeparator4";
this.toolStripSeparator4.Size = new System.Drawing.Size(152, 6);
this.toolStripSeparator4.Size = new System.Drawing.Size(141, 6);
//
// preferencesToolStripMenuItem
//
this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem";
this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(155, 22);
this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(144, 22);
this.preferencesToolStripMenuItem.Text = "Preferences...";
this.preferencesToolStripMenuItem.Click += new System.EventHandler(this.preferencesToolStripMenuItem_Click);
//
@ -191,16 +205,17 @@ namespace embroideryReader
this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.rotateLeftToolStripMenuItem,
this.rotateRightToolStripMenuItem,
this.refreshToolStripMenuItem});
this.refreshToolStripMenuItem,
this.zoomToolStripMenuItem});
this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
this.viewToolStripMenuItem.Size = new System.Drawing.Size(41, 20);
this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
this.viewToolStripMenuItem.Text = "View";
//
// rotateLeftToolStripMenuItem
//
this.rotateLeftToolStripMenuItem.Enabled = false;
this.rotateLeftToolStripMenuItem.Name = "rotateLeftToolStripMenuItem";
this.rotateLeftToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
this.rotateLeftToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.rotateLeftToolStripMenuItem.Text = "Rotate left";
this.rotateLeftToolStripMenuItem.Click += new System.EventHandler(this.rotateLeftToolStripMenuItem_Click);
//
@ -208,7 +223,7 @@ namespace embroideryReader
//
this.rotateRightToolStripMenuItem.Enabled = false;
this.rotateRightToolStripMenuItem.Name = "rotateRightToolStripMenuItem";
this.rotateRightToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
this.rotateRightToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.rotateRightToolStripMenuItem.Text = "Rotate right";
this.rotateRightToolStripMenuItem.Click += new System.EventHandler(this.rotateRightToolStripMenuItem_Click);
//
@ -216,10 +231,115 @@ namespace embroideryReader
//
this.refreshToolStripMenuItem.Enabled = false;
this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem";
this.refreshToolStripMenuItem.Size = new System.Drawing.Size(143, 22);
this.refreshToolStripMenuItem.Text = "Reset";
this.refreshToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.refreshToolStripMenuItem.Text = "Reset / Refresh";
this.refreshToolStripMenuItem.Click += new System.EventHandler(this.refreshToolStripMenuItem_Click);
//
// zoomToolStripMenuItem
//
this.zoomToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fitToWindowToolStripMenuItem,
this.toolStripSeparator5,
this.scale100ToolStripMenuItem,
this.scale90ToolStripMenuItem,
this.scale80ToolStripMenuItem,
this.scale70ToolStripMenuItem,
this.scale60ToolStripMenuItem,
this.scale50ToolStripMenuItem,
this.scale40ToolStripMenuItem,
this.scale30ToolStripMenuItem,
this.scale20ToolStripMenuItem,
this.scale10ToolStripMenuItem,
this.scale5ToolStripMenuItem});
this.zoomToolStripMenuItem.Enabled = false;
this.zoomToolStripMenuItem.Name = "zoomToolStripMenuItem";
this.zoomToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.zoomToolStripMenuItem.Text = "Scale / Zoom";
//
// fitToWindowToolStripMenuItem
//
this.fitToWindowToolStripMenuItem.Name = "fitToWindowToolStripMenuItem";
this.fitToWindowToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.fitToWindowToolStripMenuItem.Text = "Fit to window";
this.fitToWindowToolStripMenuItem.Click += new System.EventHandler(this.fitToWindowToolStripMenuItem_Click);
//
// scale100ToolStripMenuItem
//
this.scale100ToolStripMenuItem.Name = "scale100ToolStripMenuItem";
this.scale100ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale100ToolStripMenuItem.Text = "100%";
this.scale100ToolStripMenuItem.Click += new System.EventHandler(this.scale100ToolStripMenuItem_Click);
//
// scale90ToolStripMenuItem
//
this.scale90ToolStripMenuItem.Name = "scale90ToolStripMenuItem";
this.scale90ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale90ToolStripMenuItem.Text = "90%";
this.scale90ToolStripMenuItem.Click += new System.EventHandler(this.scale90ToolStripMenuItem_Click);
//
// scale80ToolStripMenuItem
//
this.scale80ToolStripMenuItem.Name = "scale80ToolStripMenuItem";
this.scale80ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale80ToolStripMenuItem.Text = "80%";
this.scale80ToolStripMenuItem.Click += new System.EventHandler(this.scale80ToolStripMenuItem_Click);
//
// scale70ToolStripMenuItem
//
this.scale70ToolStripMenuItem.Name = "scale70ToolStripMenuItem";
this.scale70ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale70ToolStripMenuItem.Text = "70%";
this.scale70ToolStripMenuItem.Click += new System.EventHandler(this.scale70ToolStripMenuItem_Click);
//
// scale60ToolStripMenuItem
//
this.scale60ToolStripMenuItem.Name = "scale60ToolStripMenuItem";
this.scale60ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale60ToolStripMenuItem.Text = "60%";
this.scale60ToolStripMenuItem.Click += new System.EventHandler(this.scale60ToolStripMenuItem_Click);
//
// scale50ToolStripMenuItem
//
this.scale50ToolStripMenuItem.Name = "scale50ToolStripMenuItem";
this.scale50ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale50ToolStripMenuItem.Text = "50%";
this.scale50ToolStripMenuItem.Click += new System.EventHandler(this.scale50ToolStripMenuItem_Click);
//
// scale40ToolStripMenuItem
//
this.scale40ToolStripMenuItem.Name = "scale40ToolStripMenuItem";
this.scale40ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale40ToolStripMenuItem.Text = "40%";
this.scale40ToolStripMenuItem.Click += new System.EventHandler(this.scale40ToolStripMenuItem_Click);
//
// scale30ToolStripMenuItem
//
this.scale30ToolStripMenuItem.Name = "scale30ToolStripMenuItem";
this.scale30ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale30ToolStripMenuItem.Text = "30%";
this.scale30ToolStripMenuItem.Click += new System.EventHandler(this.scale30ToolStripMenuItem_Click);
//
// scale20ToolStripMenuItem
//
this.scale20ToolStripMenuItem.Name = "scale20ToolStripMenuItem";
this.scale20ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale20ToolStripMenuItem.Text = "20%";
this.scale20ToolStripMenuItem.Click += new System.EventHandler(this.scale20ToolStripMenuItem_Click);
//
// scale10ToolStripMenuItem
//
this.scale10ToolStripMenuItem.Name = "scale10ToolStripMenuItem";
this.scale10ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale10ToolStripMenuItem.Text = "10%";
this.scale10ToolStripMenuItem.Click += new System.EventHandler(this.scale10ToolStripMenuItem_Click);
//
// scale5ToolStripMenuItem
//
this.scale5ToolStripMenuItem.Name = "scale5ToolStripMenuItem";
this.scale5ToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.scale5ToolStripMenuItem.Text = "5%";
this.scale5ToolStripMenuItem.Click += new System.EventHandler(this.scale5ToolStripMenuItem_Click);
//
// helpToolStripMenuItem
//
this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -229,13 +349,13 @@ namespace embroideryReader
this.toolStripSeparator1,
this.aboutToolStripMenuItem});
this.helpToolStripMenuItem.Name = "helpToolStripMenuItem";
this.helpToolStripMenuItem.Size = new System.Drawing.Size(40, 20);
this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20);
this.helpToolStripMenuItem.Text = "Help";
//
// checkForUpdateToolStripMenuItem
//
this.checkForUpdateToolStripMenuItem.Name = "checkForUpdateToolStripMenuItem";
this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.checkForUpdateToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.checkForUpdateToolStripMenuItem.Text = "Check for update";
this.checkForUpdateToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdateToolStripMenuItem_Click);
//
@ -243,7 +363,7 @@ namespace embroideryReader
//
this.saveDebugInfoToolStripMenuItem.Enabled = false;
this.saveDebugInfoToolStripMenuItem.Name = "saveDebugInfoToolStripMenuItem";
this.saveDebugInfoToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.saveDebugInfoToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.saveDebugInfoToolStripMenuItem.Text = "Save design debug info";
this.saveDebugInfoToolStripMenuItem.Click += new System.EventHandler(this.saveDebugInfoToolStripMenuItem_Click);
//
@ -251,19 +371,19 @@ namespace embroideryReader
//
this.showDebugInfoToolStripMenuItem.Enabled = false;
this.showDebugInfoToolStripMenuItem.Name = "showDebugInfoToolStripMenuItem";
this.showDebugInfoToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.showDebugInfoToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.showDebugInfoToolStripMenuItem.Text = "Show design debug info";
this.showDebugInfoToolStripMenuItem.Click += new System.EventHandler(this.showDebugInfoToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(196, 6);
this.toolStripSeparator1.Size = new System.Drawing.Size(199, 6);
//
// aboutToolStripMenuItem
//
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(202, 22);
this.aboutToolStripMenuItem.Text = "About";
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
//
@ -276,6 +396,7 @@ namespace embroideryReader
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(572, 332);
this.panel2.TabIndex = 10;
this.panel2.Resize += new System.EventHandler(this.panel2_Resize);
//
// statusStrip1
//
@ -323,6 +444,11 @@ namespace embroideryReader
//
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(149, 6);
//
// frmMain
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -335,8 +461,9 @@ namespace embroideryReader
this.MainMenuStrip = this.menuStrip1;
this.Name = "frmMain";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Load += new System.EventHandler(this.Form1_Load);
this.ResizeEnd += new System.EventHandler(this.frmMain_ResizeEnd);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.panel2.ResumeLayout(false);
@ -383,6 +510,20 @@ namespace embroideryReader
private System.Windows.Forms.SaveFileDialog saveFileDialog1;
private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.ToolStripMenuItem zoomToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem fitToWindowToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale100ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale90ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale80ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale70ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale60ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale50ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale40ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale30ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale20ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale10ToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem scale5ToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator5;
}
}

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -24,14 +24,11 @@ You can contact me at http://www.njcrawford.com/contact
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
namespace embroideryReader
{
@ -45,6 +42,13 @@ namespace embroideryReader
private const String APP_TITLE = "Embroidery Reader";
private Translation translation;
private float designScale = 1.0f;
private Size panel2LastUpdateSize;
private bool maximizeChanged = false;
private int designRotation = 0;
private string loadedFileName = "";
public frmMain()
{
@ -52,24 +56,77 @@ namespace embroideryReader
args = Environment.GetCommandLineArgs();
}
private void checkSettings()
private void LoadSettings(bool reload)
{
this.BackColor = settings.backgroundColor;
if (settings.backgroundColorEnabled)
{
panel2.BackColor = settings.backgroundColor;
}
else
{
panel2.BackColor = Color.FromKnownColor(KnownColor.Control);
}
if (!reload)
{
if (settings.windowMaximized)
{
// Check maximized first
this.WindowState = FormWindowState.Maximized;
}
else
{
// Not maximized, restore last saved window size
this.Width = settings.windowWidth;
this.Height = settings.windowHeight;
}
}
SetDesignScaleSetting(1.0f, settings.AutoScaleDesign, false);
}
private void Form1_Load(object sender, EventArgs e)
{
checkSettings();
// Set app window title
this.Text = APP_TITLE;
// Load and check settings
LoadSettings(false);
// Load translation
LoadTranslatedStrings(settings.translation);
// Load design, if specified
if (args.Length > 1)
{
openFile(args[1]);
OpenFile(args[1]);
}
}
public static bool checkColorFromStrings(string red, string green, string blue)
// WndProc values
// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms646360(v=vs.85).aspx for more info
const int WM_SYSCOMMAND = 0x0112;
const int SC_MAXIMIZE = 0xF030;
const int SC_MINIMIZE = 0xF020;
const int SC_RESTORE = 0xF120;
const int SC_WPARAM_MASK = 0xFFF0;
// Override WndProc to capture maximize and restore events
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_SYSCOMMAND)
{
// Check your window state here
int maskedWParam = m.WParam.ToInt32() & SC_WPARAM_MASK;
if (maskedWParam == SC_MAXIMIZE ||
maskedWParam == SC_MINIMIZE ||
maskedWParam == SC_RESTORE)
{
maximizeChanged = true;
}
}
base.WndProc(ref m);
}
public static bool CheckColorFromStrings(string red, string green, string blue)
{
byte redByte;
byte greenByte;
@ -88,20 +145,21 @@ namespace embroideryReader
blueByte = Convert.ToByte(blue);
retval = true;
}
catch (Exception ex)
catch (FormatException /* ex */)
{
retval = false;
}
catch (OverflowException /* ex */)
{
#if DEBUG
Console.WriteLine(ex.Message);
#endif
retval = false;
}
}
return retval;
}
public static Color makeColorFromStrings(string red, string green, string blue)
public static Color MakeColorFromStrings(string red, string green, string blue)
{
if (checkColorFromStrings(red, green, blue))
if (CheckColorFromStrings(red, green, blue))
{
return Color.FromArgb(Convert.ToByte(red), Convert.ToByte(green), Convert.ToByte(blue));
}
@ -111,34 +169,186 @@ namespace embroideryReader
}
}
private void openFile(string filename)
private void UpdateDesignImage()
{
if(design == null)
{
// No design loaded - nothing to update
return;
}
// Assume 96 DPI until we can come up with a better way to calculate it
float screenDPI = 96;
Bitmap tempImage = design.DesignToBitmap((float)settings.threadThickness, (settings.filterStiches), settings.filterStitchesThreshold, (screenDPI / design.NativeDPI));
// Rotate image
switch (designRotation)
{
case 90:
tempImage.RotateFlip(RotateFlipType.Rotate90FlipNone);
break;
case 180:
tempImage.RotateFlip(RotateFlipType.Rotate180FlipNone);
break;
case 270:
tempImage.RotateFlip(RotateFlipType.Rotate270FlipNone);
break;
}
// Scale image
if (fitToWindowToolStripMenuItem.Checked)
{
// Calculate size of image based on available drawing area
float windowWidth = panel2.Width - 3;
float windowHeight = panel2.Height - 3;
// Figure out which dimension is more constrained
float widthScale = windowWidth / tempImage.Width;
float heightScale = windowHeight / tempImage.Height;
if (widthScale < heightScale)
{
designScale = widthScale;
}
else
{
designScale = heightScale;
}
}
int width = (int)(tempImage.Width * designScale);
int height = (int)(tempImage.Height * designScale);
if (width < 1 || height < 1)
{
// Image area is too small to update
return;
}
if (width != tempImage.Width || height != tempImage.Height)
{
// Scale image code from http://stackoverflow.com/questions/1922040/resize-an-image-c-sharp
Rectangle destRect = new Rectangle(0, 0, width, height);
Bitmap scaledImage = new Bitmap(width, height);
scaledImage.SetResolution(tempImage.HorizontalResolution, tempImage.VerticalResolution);
using (var graphics = Graphics.FromImage(scaledImage))
{
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
using (var wrapMode = new ImageAttributes())
{
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
graphics.DrawImage(tempImage, destRect, 0, 0, tempImage.Width, tempImage.Height, GraphicsUnit.Pixel, wrapMode);
}
}
// Keep the scaled image and dispose the intermediate image
tempImage.Dispose();
tempImage = scaledImage;
}
// About to abandon the current DrawArea object, dispose it now
if(DrawArea != null)
{
DrawArea.Dispose();
DrawArea = null;
}
// Add transparency grid
if (settings.transparencyGridEnabled)
{
DrawArea = new Bitmap(tempImage.Width, tempImage.Height);
using (Graphics g = Graphics.FromImage(DrawArea))
{
Color gridColor = settings.transparencyGridColor;
using (Pen gridPen = new Pen(gridColor))
{
int gridSize = settings.transparencyGridSize;
for (int xStart = 0; (xStart * gridSize) < DrawArea.Width; xStart++)
{
for (int yStart = 0; (yStart * gridSize) < DrawArea.Height; yStart++)
{
// Fill even columns in even rows and odd columns in odd rows
if ((xStart % 2) == (yStart % 2))
{
g.FillRectangle(gridPen.Brush, (xStart * gridSize), (yStart * gridSize), gridSize, gridSize);
}
}
}
}
g.DrawImage(tempImage, 0, 0);
// Done with tempImage
tempImage.Dispose();
tempImage = null;
}
}
else
{
// Keeping the object tempImage was pointing at, so don't dispose it
DrawArea = tempImage;
}
panel1.Width = DrawArea.Width;
panel1.Height = DrawArea.Height;
panel1.Invalidate();
panel2LastUpdateSize = panel2.Size;
// Update window title
this.Text = System.IO.Path.GetFileName(loadedFileName) + " (" + (designScale * 100).ToString("0") + "%) - " + APP_TITLE;
}
private void OpenFile(string filename)
{
if (!System.IO.File.Exists(filename))
{
// "An error occured while reading the file:"
MessageBox.Show(Translation.StringID.ERROR_FILE + Environment.NewLine + "File \"" + filename + "\" does not exist", "File not found", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
try
{
design = new PesFile.PesFile(filename);
if (design.getStatus() == PesFile.statusEnum.Ready)
{
this.Text = System.IO.Path.GetFileName(filename) + " - " + APP_TITLE;
DrawArea = design.designToBitmap((float)settings.threadThickness, (settings.filterStiches), (int)settings.filterStitchesThreshold);
panel1.Width = design.GetWidth() + (int)(settings.threadThickness * 2);
panel1.Height = design.GetHeight() + (int)(settings.threadThickness * 2);
panel1.Invalidate();
if (design.getFormatWarning())
{
toolStripStatusLabel1.Text = "The format of this file is not completely supported";
}
else if (design.getColorWarning())
catch(System.IO.IOException ioex)
{
toolStripStatusLabel1.Text = "Colors shown for this design may be inaccurate";
// "An error occured while reading the file:"
MessageBox.Show(Translation.StringID.ERROR_FILE + Environment.NewLine + filename + ":" + Environment.NewLine + ioex.Message, "IOException", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
design = null;
}
catch(PesFile.PECFormatException pecex)
{
// "This file is either corrupt or not a valid PES file."
MessageBox.Show(Translation.StringID.ERROR_FILE + Environment.NewLine + filename + ":" + Environment.NewLine + pecex.Message, "PECFormatException", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
design = null;
}
loadedFileName = filename;
if (design != null)
{
UpdateDesignImage();
if (design.GetFormatWarning())
{
toolStripStatusLabel1.Text = translation.GetTranslatedString(Translation.StringID.UNSUPPORTED_FORMAT); // "The format of this file is not completely supported";
}
else if (design.GetColorWarning())
{
toolStripStatusLabel1.Text = translation.GetTranslatedString(Translation.StringID.COLOR_WARNING); // "Colors shown for this design may be inaccurate"
}
else
{
toolStripStatusLabel1.Text = "";
}
copyToolStripMenuItem.Enabled = true;
saveDebugInfoToolStripMenuItem.Enabled = true;
printPreviewToolStripMenuItem.Enabled = true;
@ -146,18 +356,13 @@ namespace embroideryReader
rotateLeftToolStripMenuItem.Enabled = true;
rotateRightToolStripMenuItem.Enabled = true;
refreshToolStripMenuItem.Enabled = true;
zoomToolStripMenuItem.Enabled = true;
showDebugInfoToolStripMenuItem.Enabled = true;
saveAsBitmapToolStripMenuItem.Enabled = true;
panel2.Select();
}
else
{
string message = "An error occured while reading the file:" + Environment.NewLine + design.getLastError();
if (design.getStatus() == PesFile.statusEnum.ParseError)
{
message += Environment.NewLine + "This file is either corrupt or not a valid PES file.";
}
MessageBox.Show(message);
copyToolStripMenuItem.Enabled = false;
saveDebugInfoToolStripMenuItem.Enabled = false;
printPreviewToolStripMenuItem.Enabled = false;
@ -178,7 +383,8 @@ namespace embroideryReader
openFileDialog1.InitialDirectory = settings.lastOpenFileFolder;
}
openFileDialog1.FileName = "";
openFileDialog1.Filter = "Embroidery Files (*.pes)|*.pes|All Files (*.*)|*.*";
openFileDialog1.Filter = translation.GetTranslatedString(Translation.StringID.FILE_TYPE_PES) + " (*.pes)|*.pes|" + // "Embroidery Files (*.pes)|*.pes|
translation.GetTranslatedString(Translation.StringID.FILE_TYPE_ALL) + " (*.*)|*.*"; // All Files (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
filename = openFileDialog1.FileName;
@ -189,7 +395,7 @@ namespace embroideryReader
else
{
settings.lastOpenFileFolder = System.IO.Path.GetDirectoryName(filename);
openFile(filename);
OpenFile(filename);
}
}
}
@ -209,21 +415,32 @@ namespace embroideryReader
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("EmbroideryReader version " + currentVersion() + ". This program reads and displays embroidery designs from .PES files.");
string message = String.Format(translation.GetTranslatedString(Translation.StringID.ABOUT_MESSAGE), CurrentVersion()); // "EmbroideryReader version " + currentVersion() + ". This program reads and displays embroidery designs from .PES files."
//message += Environment.NewLine;
//message += Environment.NewLine + "GUI GDI count: " + GuiResources.GetGuiResourcesGDICount();
//message += Environment.NewLine + "GUI USER count: " + GuiResources.GetGuiResourcesUserCount();
//message += Environment.NewLine + ".Net framework version: " + Environment.Version;
MessageBox.Show(message);
}
private void checkForUpdateToolStripMenuItem_Click(object sender, EventArgs e)
{
NJCrawford.UpdateCheck updater = new NJCrawford.UpdateCheck(settings.updateLocation, null, null);
EmbroideryReaderUpdates updater = new EmbroideryReaderUpdates(settings.updateLocation, null, null);
updater.waitForInfo();
if (updater.GetLastError() != "")
{
MessageBox.Show("Encountered an error while checking for updates: " + updater.GetLastError());
MessageBox.Show(translation.GetTranslatedString(Translation.StringID.ERROR_UPDATE) + // "Encountered an error while checking for updates: "
updater.GetLastError());
}
else if (updater.IsUpdateAvailable())
{
if (MessageBox.Show("Version " + updater.VersionAvailable() + " was released on " + updater.getReleaseDate().ToShortDateString() + "." + Environment.NewLine + "You have version " + currentVersion() + ". Would you like to go to the Embroidery Reader website to download or find out more about the new version?", "New version available", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
if (MessageBox.Show(String.Format(translation.GetTranslatedString(Translation.StringID.NEW_VERSION_MESSAGE),
updater.VersionAvailable(), updater.getReleaseDate().ToShortDateString(), CurrentVersion()) + // "Version " + updater.VersionAvailable() + " was released on " + updater.getReleaseDate().ToShortDateString() + ". You have version " + currentVersion() + "."
Environment.NewLine +
translation.GetTranslatedString(Translation.StringID.NEW_VERSION_QUESTION), // "Would you like to go to the Embroidery Reader website to download or find out more about the new version?",
translation.GetTranslatedString(Translation.StringID.NEW_VERSION_TITLE), // "New version available",
MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
try
{
@ -231,25 +448,52 @@ namespace embroideryReader
}
catch (Exception ex)
{
MessageBox.Show("An error occured while trying to open the webpage:" + Environment.NewLine + ex.ToString());
MessageBox.Show(translation.GetTranslatedString(Translation.StringID.ERROR_WEBPAGE) + // "An error occured while trying to open the webpage:"
Environment.NewLine + ex.ToString());
}
}
}
else
{
MessageBox.Show("No updates are available right now." + Environment.NewLine + "(Latest version is " + updater.VersionAvailable() + ", you have version " + currentVersion() + ")");
MessageBox.Show(translation.GetTranslatedString(Translation.StringID.NO_UPDATE) + // "No updates are available right now."
Environment.NewLine +
String.Format(translation.GetTranslatedString(Translation.StringID.LATEST_VERSION),
updater.VersionAvailable(), CurrentVersion())); // "(Latest version is " + updater.VersionAvailable() + ", you have version " + currentVersion() + ")");
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
settings.windowMaximized = true;
}
else
{
settings.windowMaximized = false;
if (this.WindowState == FormWindowState.Normal)
{
// If window is not minimized or maximized, save current size
settings.windowWidth = this.Width;
settings.windowHeight = this.Height;
}
}
try
{
settings.save();
}
catch (System.IO.IOException /*ioex*/)
{
// Ignore IO exceptions when saving settings file, to deal with crashes caused by
// closing many windows at once.
private string currentVersion()
// This isn't a great way to handle the problem, but it's better than getting
// the same automated error report over and over.
}
}
private string CurrentVersion()
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
@ -260,16 +504,19 @@ namespace embroideryReader
{
try
{
design.saveDebugInfo();
string debugFile = design.SaveDebugInfo();
MessageBox.Show(String.Format(translation.GetTranslatedString(Translation.StringID.DEBUG_INFO_SAVED), // "Saved debug info to " + debugFile
debugFile));
}
catch (Exception ex)
{
MessageBox.Show("There was an error while saving debug info:" + Environment.NewLine + ex.ToString());
MessageBox.Show(translation.GetTranslatedString(Translation.StringID.ERROR_DEBUG) + // "There was an error while saving debug info:"
Environment.NewLine + ex.ToString());
}
}
else
{
MessageBox.Show("No design loaded.");
MessageBox.Show(translation.GetTranslatedString(Translation.StringID.NO_DESIGN)); // "No design loaded."
}
}
@ -277,11 +524,14 @@ namespace embroideryReader
{
frmSettingsDialog tempForm = new frmSettingsDialog();
tempForm.settingsToModify = settings;
tempForm.setTranslation = translation;
if (tempForm.ShowDialog() == DialogResult.OK)
{
settings = tempForm.settingsToModify;
checkSettings();
LoadSettings(true);
UpdateDesignImage();
}
LoadTranslatedStrings(settings.translation);
}
private void printToolStripMenuItem_Click(object sender, EventArgs e)
@ -294,91 +544,92 @@ namespace embroideryReader
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
if (DrawArea != null)
if (design != null)
{
float dpiX = 100;
float dpiY = 100;
double inchesPerMM = 0.03937007874015748031496062992126;
e.Graphics.ScaleTransform((float)(dpiX * inchesPerMM * 0.1), (float)(dpiY * inchesPerMM * 0.1));
// Note: scaling based on reported printer DPI may produce terrible results in some
// cases. The reported DPI can even be a negative number, which indicates a general print
// quality. So, future self, for the sake of your sanity... just don't do it. :-)
// See https://msdn.microsoft.com/en-us/library/system.drawing.printing.printerresolution.x(v=vs.110).aspx
// for more detail.
e.Graphics.DrawImage(DrawArea, 30, 30);
// Calculate scale values for print graphics object (100 dpi seems to be the default
// for the printer graphics object)
double graphicsXScaleFactor = (100.0 / design.NativeDPI);
double graphicsYScaleFactor = (100.0 / design.NativeDPI);
// Check for scale out of range
if(graphicsXScaleFactor < 0.001 || graphicsXScaleFactor > 100.0)
{
throw new ArgumentOutOfRangeException("Print X graphics scale is '" + graphicsXScaleFactor + "', expected range is 0.001 - 100.0");
}
if (graphicsYScaleFactor < 0.001 || graphicsYScaleFactor > 100.0)
{
throw new ArgumentOutOfRangeException("Print Y graphics scale is '" + graphicsYScaleFactor + "', expected range is 0.001 - 100.0");
}
// Set print graphics object scale and draw the image
e.Graphics.ScaleTransform((float)graphicsXScaleFactor, (float)graphicsYScaleFactor);
using (Bitmap tempDrawArea = design.DesignToBitmap((float)settings.threadThickness, settings.filterStiches, settings.filterStitchesThreshold, 1.0f))
{
e.Graphics.DrawImage(tempDrawArea, 30, 30);
}
}
}
private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
printPreviewDialog1.Document = printDocument1;
printPreviewDialog1.ShowDialog();
}
catch(System.Drawing.Printing.InvalidPrinterException pex)
{
MessageBox.Show("Unable to find a default printer: " + pex.Message + Environment.NewLine + Environment.NewLine + "Possible reasons include: no printers are installed, or no printer is set as the default.");
}
}
private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
if (DrawArea != null)
{
Clipboard.Clear();
Bitmap temp = new Bitmap(DrawArea.Width, DrawArea.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics tempGraph = Graphics.FromImage(temp);
using (Bitmap temp = new Bitmap(DrawArea.Width, DrawArea.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb))
{
using (Graphics tempGraph = Graphics.FromImage(temp))
{
tempGraph.FillRectangle(Brushes.White, 0, 0, temp.Width, temp.Height);
tempGraph.DrawImageUnscaled(DrawArea, 0, 0);
tempGraph.Dispose();
}
Clipboard.SetImage(temp);
}
}
}
private void refreshToolStripMenuItem_Click(object sender, EventArgs e)
{
if (design != null && design.getStatus() == PesFile.statusEnum.Ready)
{
DrawArea = design.designToBitmap((float)settings.threadThickness, (settings.filterStiches), (int)settings.filterStitchesThreshold);
panel1.Width = design.GetWidth() + (int)(settings.threadThickness * 2);
panel1.Height = design.GetHeight() + (int)(settings.threadThickness * 2);
panel1.Invalidate();
if (design.getClassWarning())
{
toolStripStatusLabel1.Text = "This file contains a class that is not yet supported";
}
else if (design.getFormatWarning())
{
toolStripStatusLabel1.Text = "The format of this file is not completely supported";
}
else if (design.getColorWarning())
{
toolStripStatusLabel1.Text = "Colors shown for this design may be inaccurate";
}
else
{
toolStripStatusLabel1.Text = "";
}
}
designRotation = 0;
UpdateDesignImage();
}
private void rotateLeftToolStripMenuItem_Click(object sender, EventArgs e)
{
Bitmap temp = new Bitmap(DrawArea.Height, DrawArea.Width);
Graphics g = Graphics.FromImage(temp);
g.RotateTransform(270.0f);
g.DrawImage(DrawArea, -DrawArea.Width, 0);
g.Dispose();
DrawArea = temp;
int temp2 = panel1.Width;
panel1.Width = panel1.Height;
panel1.Height = temp2;
panel1.Invalidate();
designRotation -= 90;
if(designRotation < 0)
{
designRotation += 360;
}
UpdateDesignImage();
}
private void rotateRightToolStripMenuItem_Click(object sender, EventArgs e)
{
Bitmap temp = new Bitmap(DrawArea.Height, DrawArea.Width);
Graphics g = Graphics.FromImage(temp);
g.RotateTransform(90.0f);
g.DrawImage(DrawArea, 0, -DrawArea.Height);
g.Dispose();
DrawArea = temp;
int temp2 = panel1.Width;
panel1.Width = panel1.Height;
panel1.Height = temp2;
panel1.Invalidate();
designRotation += 90;
if (designRotation >= 360)
{
designRotation -= 360;
}
UpdateDesignImage();
}
private void showDebugInfoToolStripMenuItem_Click(object sender, EventArgs e)
@ -388,16 +639,17 @@ namespace embroideryReader
try
{
frmTextbox theform = new frmTextbox();
theform.showText(design.getDebugInfo());
theform.showText(design.GetDebugInfo());
}
catch (Exception ex)
{
MessageBox.Show("There was an error while saving debug info:" + Environment.NewLine + ex.ToString());
MessageBox.Show(translation.GetTranslatedString(Translation.StringID.ERROR_DEBUG) + // "There was an error while saving debug info:"
Environment.NewLine + ex.ToString());
}
}
else
{
MessageBox.Show("No design loaded.");
MessageBox.Show(translation.GetTranslatedString(Translation.StringID.NO_DESIGN)); // "No design loaded."
}
}
@ -405,14 +657,21 @@ namespace embroideryReader
{
if (DrawArea != null)
{
Bitmap temp = new Bitmap(DrawArea.Width, DrawArea.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics tempGraph = Graphics.FromImage(temp);
using (Bitmap temp = new Bitmap(DrawArea.Width, DrawArea.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb))
{
using (Graphics tempGraph = Graphics.FromImage(temp))
{
tempGraph.FillRectangle(Brushes.White, 0, 0, temp.Width, temp.Height);
tempGraph.DrawImageUnscaled(DrawArea, 0, 0);
tempGraph.Dispose();
}
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "Bitmap (*.bmp)|*.bmp|PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|All Files (*.*)|*.*";
// "Bitmap (*.bmp)|*.bmp|PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|All Files (*.*)|*.*"
saveFileDialog1.Filter = translation.GetTranslatedString(Translation.StringID.FILE_TYPE_BMP) + " (*.bmp)|*.bmp|" +
translation.GetTranslatedString(Translation.StringID.FILE_TYPE_PNG) + " (*.png)|*.png|" +
translation.GetTranslatedString(Translation.StringID.FILE_TYPE_JPG) + " (*.jpg)|*.jpg|" +
translation.GetTranslatedString(Translation.StringID.FILE_TYPE_GIF) + " (*.gif)|*.gif|" +
translation.GetTranslatedString(Translation.StringID.FILE_TYPE_TIFF) + " (*.tif)|*.tif|" +
translation.GetTranslatedString(Translation.StringID.FILE_TYPE_ALL) + " (*.*)|*.*";
if (settings.lastSaveImageLocation != null)
{
saveFileDialog1.InitialDirectory = settings.lastSaveImageLocation;
@ -432,13 +691,14 @@ namespace embroideryReader
default: format = System.Drawing.Imaging.ImageFormat.Bmp; break;
}
temp.Save(filename, format);
showStatus("Image saved", 5000);
ShowStatus(translation.GetTranslatedString(Translation.StringID.IMAGE_SAVED), 5000); // "Image saved"
settings.lastSaveImageLocation = System.IO.Path.GetDirectoryName(filename);
}
}
}
}
private void showStatus(string text, int msec)
private void ShowStatus(string text, int msec)
{
toolStripStatusLabel2.Text = text;
timer1.Interval = msec;
@ -449,5 +709,149 @@ namespace embroideryReader
{
toolStripStatusLabel2.Text = "";
}
private void LoadTranslatedStrings(String translationName)
{
translation = new Translation(translationName);
// File menu
fileToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_FILE);
openToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_OPEN);
saveAsBitmapToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_SAVE_IMAGE);
printToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_PRINT);
printPreviewToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_PRINT_PREVIEW);
exitToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_EXIT);
// Edit menu
editToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_EDIT);
copyToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_COPY);
preferencesToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_PREFS);
// View menu
viewToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_VIEW);
rotateLeftToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.ROTATE_LEFT);
rotateRightToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.ROTATE_RIGHT);
refreshToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_RESET);
zoomToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_SCALE_ZOOM);
fitToWindowToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_FIT_TO_WINDOW);
// Help menu
helpToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_HELP);
checkForUpdateToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.CHECK_UPDATE);
saveDebugInfoToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.SAVE_DEBUG);
showDebugInfoToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.SHOW_DEBUG);
aboutToolStripMenuItem.Text = translation.GetTranslatedString(Translation.StringID.MENU_ABOUT);
}
private void SetDesignScaleSetting(float scale, bool autoSize, bool updateDesign)
{
if(autoSize)
{
fitToWindowToolStripMenuItem.Checked = true;
settings.AutoScaleDesign = true;
}
else
{
fitToWindowToolStripMenuItem.Checked = false;
settings.AutoScaleDesign = false;
designScale = scale;
}
if (updateDesign)
{
UpdateDesignImage();
}
}
private void scale100ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(1.0f, false, true);
}
private void scale90ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.9f, false, true);
}
private void scale80ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.8f, false, true);
}
private void scale70ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.7f, false, true);
}
private void scale60ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.6f, false, true);
}
private void scale50ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.5f, false, true);
}
private void scale40ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.4f, false, true);
}
private void scale30ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.3f, false, true);
}
private void scale20ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.2f, false, true);
}
private void scale10ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.1f, false, true);
}
private void scale5ToolStripMenuItem_Click(object sender, EventArgs e)
{
SetDesignScaleSetting(0.05f, false, true);
}
private void fitToWindowToolStripMenuItem_Click(object sender, EventArgs e)
{
// Toggle checked state
fitToWindowToolStripMenuItem.Checked = !fitToWindowToolStripMenuItem.Checked;
// Update design
SetDesignScaleSetting(1.0f, fitToWindowToolStripMenuItem.Checked, true);
}
private void frmMain_ResizeEnd(object sender, EventArgs e)
{
// Finished resize, update design scale if set to fit-to-window.
// This event also captures window move events, so check if the size
// of panel2 has changed to see if it's really a resize event.
if (fitToWindowToolStripMenuItem.Checked && panel2LastUpdateSize != panel2.Size)
{
UpdateDesignImage();
}
}
private void panel2_Resize(object sender, EventArgs e)
{
// This event is the one we really want, but it fires much too
// frequently during a resize event. So, let ReziseEnd handle most
// of the cases and only process this after a window maximize or
// restore.
if(maximizeChanged)
{
maximizeChanged = false;
if (fitToWindowToolStripMenuItem.Checked)
{
UpdateDesignImage();
}
}
}
}
}

Wyświetl plik

@ -112,30 +112,30 @@
<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>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.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>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="openFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>147, 17</value>
</metadata>
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>256, 17</value>
</metadata>
<metadata name="printDocument1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="printDocument1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>366, 17</value>
</metadata>
<metadata name="printDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="printDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>497, 17</value>
</metadata>
<metadata name="printPreviewDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="printPreviewDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>609, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="printPreviewDialog1.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAYAICAQAAAAAADoAgAAZgAAABAQEAAAAAAAKAEAAE4DAAAgIAAAAQAIAKgIAAB2BAAAEBAAAAEA
@ -309,13 +309,13 @@
wf+0BQAAgAUAAIAFAACAAQAAgAHB/4ABAACAAQAAgAEAALwBAAC8AQAAvAHB/4ABbP///5H/
</value>
</data>
<metadata name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="saveFileDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>760, 17</value>
</metadata>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>888, 17</value>
</metadata>
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>43</value>
</metadata>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">

Wyświetl plik

@ -28,28 +28,43 @@ namespace embroideryReader
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmSettingsDialog));
this.colorDialog1 = new System.Windows.Forms.ColorDialog();
this.btnColor = new System.Windows.Forms.Button();
this.lblColor = new System.Windows.Forms.Label();
this.btnResetColor = new System.Windows.Forms.Button();
this.btnOK = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.lblThreadThickness = new System.Windows.Forms.Label();
this.txtThreadThickness = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.chkUglyStitches = new System.Windows.Forms.CheckBox();
this.lblPixelThick = new System.Windows.Forms.Label();
this.grpBackground = new System.Windows.Forms.GroupBox();
this.txtGridSize = new System.Windows.Forms.TextBox();
this.lblGridSizePixels = new System.Windows.Forms.Label();
this.lblGridSize = new System.Windows.Forms.Label();
this.btnResetGridColor = new System.Windows.Forms.Button();
this.btnGridColor = new System.Windows.Forms.Button();
this.pnlBackground = new System.Windows.Forms.Panel();
this.lblBackgroundColor = new System.Windows.Forms.Label();
this.chkDrawGrid = new System.Windows.Forms.CheckBox();
this.grpStitch = new System.Windows.Forms.GroupBox();
this.lblUglyLength = new System.Windows.Forms.Label();
this.lblPixelLength = new System.Windows.Forms.Label();
this.txtThreshold = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.chkUglyStitches = new System.Windows.Forms.CheckBox();
this.cmbLanguage = new System.Windows.Forms.ComboBox();
this.grpLanguage = new System.Windows.Forms.GroupBox();
this.lblIncompleteTranslation = new System.Windows.Forms.Label();
this.grpTranparencyGrid = new System.Windows.Forms.GroupBox();
this.grpBackground.SuspendLayout();
this.pnlBackground.SuspendLayout();
this.grpStitch.SuspendLayout();
this.grpLanguage.SuspendLayout();
this.grpTranparencyGrid.SuspendLayout();
this.SuspendLayout();
//
// btnColor
//
this.btnColor.Location = new System.Drawing.Point(171, 16);
this.btnColor.Location = new System.Drawing.Point(200, 19);
this.btnColor.Name = "btnColor";
this.btnColor.Size = new System.Drawing.Size(75, 23);
this.btnColor.TabIndex = 0;
@ -57,19 +72,9 @@ namespace embroideryReader
this.btnColor.UseVisualStyleBackColor = true;
this.btnColor.Click += new System.EventHandler(this.btnColor_Click);
//
// lblColor
//
this.lblColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.lblColor.Location = new System.Drawing.Point(6, 16);
this.lblColor.Name = "lblColor";
this.lblColor.Size = new System.Drawing.Size(130, 52);
this.lblColor.TabIndex = 1;
this.lblColor.Text = "Background Color";
this.lblColor.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// btnResetColor
//
this.btnResetColor.Location = new System.Drawing.Point(171, 45);
this.btnResetColor.Location = new System.Drawing.Point(200, 48);
this.btnResetColor.Name = "btnResetColor";
this.btnResetColor.Size = new System.Drawing.Size(75, 23);
this.btnResetColor.TabIndex = 2;
@ -80,7 +85,7 @@ namespace embroideryReader
// btnOK
//
this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOK.Location = new System.Drawing.Point(171, 190);
this.btnOK.Location = new System.Drawing.Point(137, 327);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(75, 23);
this.btnOK.TabIndex = 3;
@ -91,7 +96,7 @@ namespace embroideryReader
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(252, 190);
this.btnCancel.Location = new System.Drawing.Point(218, 327);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 4;
@ -99,14 +104,14 @@ namespace embroideryReader
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// label1
// lblThreadThickness
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(6, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(92, 13);
this.label1.TabIndex = 5;
this.label1.Text = "Thread thickness:";
this.lblThreadThickness.AutoSize = true;
this.lblThreadThickness.Location = new System.Drawing.Point(6, 16);
this.lblThreadThickness.Name = "lblThreadThickness";
this.lblThreadThickness.Size = new System.Drawing.Size(92, 13);
this.lblThreadThickness.TabIndex = 5;
this.lblThreadThickness.Text = "Thread thickness:";
//
// txtThreadThickness
//
@ -115,42 +120,146 @@ namespace embroideryReader
this.txtThreadThickness.Size = new System.Drawing.Size(32, 20);
this.txtThreadThickness.TabIndex = 6;
//
// label2
// lblPixelThick
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(142, 16);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(33, 13);
this.label2.TabIndex = 7;
this.label2.Text = "pixels";
this.lblPixelThick.AutoSize = true;
this.lblPixelThick.Location = new System.Drawing.Point(142, 16);
this.lblPixelThick.Name = "lblPixelThick";
this.lblPixelThick.Size = new System.Drawing.Size(33, 13);
this.lblPixelThick.TabIndex = 7;
this.lblPixelThick.Text = "pixels";
//
// groupBox1
// grpBackground
//
this.groupBox1.Controls.Add(this.lblColor);
this.groupBox1.Controls.Add(this.btnColor);
this.groupBox1.Controls.Add(this.btnResetColor);
this.groupBox1.Location = new System.Drawing.Point(12, 12);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(315, 79);
this.groupBox1.TabIndex = 8;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Background";
this.grpBackground.Controls.Add(this.grpTranparencyGrid);
this.grpBackground.Controls.Add(this.pnlBackground);
this.grpBackground.Controls.Add(this.btnColor);
this.grpBackground.Controls.Add(this.btnResetColor);
this.grpBackground.Location = new System.Drawing.Point(12, 12);
this.grpBackground.Name = "grpBackground";
this.grpBackground.Size = new System.Drawing.Size(281, 155);
this.grpBackground.TabIndex = 8;
this.grpBackground.TabStop = false;
this.grpBackground.Text = "Background";
//
// groupBox2
// txtGridSize
//
this.groupBox2.Controls.Add(this.label4);
this.groupBox2.Controls.Add(this.label3);
this.groupBox2.Controls.Add(this.txtThreshold);
this.groupBox2.Controls.Add(this.chkUglyStitches);
this.groupBox2.Controls.Add(this.label1);
this.groupBox2.Controls.Add(this.txtThreadThickness);
this.groupBox2.Controls.Add(this.label2);
this.groupBox2.Location = new System.Drawing.Point(12, 97);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(315, 87);
this.groupBox2.TabIndex = 3;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Stitch drawing";
this.txtGridSize.Location = new System.Drawing.Point(64, 42);
this.txtGridSize.Name = "txtGridSize";
this.txtGridSize.Size = new System.Drawing.Size(32, 20);
this.txtGridSize.TabIndex = 18;
this.txtGridSize.TextChanged += new System.EventHandler(this.txtGridSize_TextChanged);
//
// lblGridSizePixels
//
this.lblGridSizePixels.AutoSize = true;
this.lblGridSizePixels.Location = new System.Drawing.Point(102, 45);
this.lblGridSizePixels.Name = "lblGridSizePixels";
this.lblGridSizePixels.Size = new System.Drawing.Size(33, 13);
this.lblGridSizePixels.TabIndex = 17;
this.lblGridSizePixels.Text = "pixels";
//
// lblGridSize
//
this.lblGridSize.AutoSize = true;
this.lblGridSize.Location = new System.Drawing.Point(6, 45);
this.lblGridSize.Name = "lblGridSize";
this.lblGridSize.Size = new System.Drawing.Size(52, 13);
this.lblGridSize.TabIndex = 16;
this.lblGridSize.Text = "Grid Size:";
//
// btnResetGridColor
//
this.btnResetGridColor.Location = new System.Drawing.Point(188, 44);
this.btnResetGridColor.Name = "btnResetGridColor";
this.btnResetGridColor.Size = new System.Drawing.Size(75, 23);
this.btnResetGridColor.TabIndex = 15;
this.btnResetGridColor.Text = "Reset Color";
this.btnResetGridColor.UseVisualStyleBackColor = true;
this.btnResetGridColor.Click += new System.EventHandler(this.btnResetGridColor_Click);
//
// btnGridColor
//
this.btnGridColor.Location = new System.Drawing.Point(188, 15);
this.btnGridColor.Name = "btnGridColor";
this.btnGridColor.Size = new System.Drawing.Size(75, 23);
this.btnGridColor.TabIndex = 14;
this.btnGridColor.Text = "Pick Color...";
this.btnGridColor.UseVisualStyleBackColor = true;
this.btnGridColor.Click += new System.EventHandler(this.btnGridColor_Click);
//
// pnlBackground
//
this.pnlBackground.Controls.Add(this.lblBackgroundColor);
this.pnlBackground.Location = new System.Drawing.Point(10, 19);
this.pnlBackground.Name = "pnlBackground";
this.pnlBackground.Size = new System.Drawing.Size(130, 50);
this.pnlBackground.TabIndex = 13;
this.pnlBackground.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlBackground_Paint);
//
// lblBackgroundColor
//
this.lblBackgroundColor.BackColor = System.Drawing.Color.Transparent;
this.lblBackgroundColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.lblBackgroundColor.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblBackgroundColor.Location = new System.Drawing.Point(0, 0);
this.lblBackgroundColor.Name = "lblBackgroundColor";
this.lblBackgroundColor.Size = new System.Drawing.Size(130, 50);
this.lblBackgroundColor.TabIndex = 16;
this.lblBackgroundColor.Text = "Background Color";
this.lblBackgroundColor.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// chkDrawGrid
//
this.chkDrawGrid.AutoSize = true;
this.chkDrawGrid.Location = new System.Drawing.Point(6, 19);
this.chkDrawGrid.Name = "chkDrawGrid";
this.chkDrawGrid.Size = new System.Drawing.Size(143, 17);
this.chkDrawGrid.TabIndex = 12;
this.chkDrawGrid.Text = "Enable transparency grid";
this.chkDrawGrid.UseVisualStyleBackColor = true;
this.chkDrawGrid.CheckedChanged += new System.EventHandler(this.chkDrawGrid_CheckedChanged);
//
// grpStitch
//
this.grpStitch.Controls.Add(this.lblUglyLength);
this.grpStitch.Controls.Add(this.lblPixelLength);
this.grpStitch.Controls.Add(this.txtThreshold);
this.grpStitch.Controls.Add(this.chkUglyStitches);
this.grpStitch.Controls.Add(this.lblThreadThickness);
this.grpStitch.Controls.Add(this.txtThreadThickness);
this.grpStitch.Controls.Add(this.lblPixelThick);
this.grpStitch.Location = new System.Drawing.Point(12, 173);
this.grpStitch.Name = "grpStitch";
this.grpStitch.Size = new System.Drawing.Size(281, 86);
this.grpStitch.TabIndex = 3;
this.grpStitch.TabStop = false;
this.grpStitch.Text = "Stitch drawing";
//
// lblUglyLength
//
this.lblUglyLength.AutoSize = true;
this.lblUglyLength.Location = new System.Drawing.Point(31, 58);
this.lblUglyLength.Name = "lblUglyLength";
this.lblUglyLength.Size = new System.Drawing.Size(67, 13);
this.lblUglyLength.TabIndex = 11;
this.lblUglyLength.Text = "Ugly Length:";
//
// lblPixelLength
//
this.lblPixelLength.AutoSize = true;
this.lblPixelLength.Location = new System.Drawing.Point(142, 58);
this.lblPixelLength.Name = "lblPixelLength";
this.lblPixelLength.Size = new System.Drawing.Size(33, 13);
this.lblPixelLength.TabIndex = 10;
this.lblPixelLength.Text = "pixels";
//
// txtThreshold
//
this.txtThreshold.Location = new System.Drawing.Point(104, 55);
this.txtThreshold.Name = "txtThreshold";
this.txtThreshold.Size = new System.Drawing.Size(32, 20);
this.txtThreshold.TabIndex = 9;
//
// chkUglyStitches
//
@ -162,30 +271,51 @@ namespace embroideryReader
this.chkUglyStitches.Text = "Remove \'ugly\' stitches";
this.chkUglyStitches.UseVisualStyleBackColor = true;
//
// txtThreshold
// cmbLanguage
//
this.txtThreshold.Location = new System.Drawing.Point(130, 55);
this.txtThreshold.Name = "txtThreshold";
this.txtThreshold.Size = new System.Drawing.Size(32, 20);
this.txtThreshold.TabIndex = 9;
this.cmbLanguage.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbLanguage.FormattingEnabled = true;
this.cmbLanguage.Location = new System.Drawing.Point(14, 19);
this.cmbLanguage.Name = "cmbLanguage";
this.cmbLanguage.Size = new System.Drawing.Size(132, 21);
this.cmbLanguage.TabIndex = 10;
this.cmbLanguage.SelectedIndexChanged += new System.EventHandler(this.cmbLanguage_SelectedIndexChanged);
//
// label3
// grpLanguage
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(168, 58);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(33, 13);
this.label3.TabIndex = 10;
this.label3.Text = "pixels";
this.grpLanguage.Controls.Add(this.lblIncompleteTranslation);
this.grpLanguage.Controls.Add(this.cmbLanguage);
this.grpLanguage.Location = new System.Drawing.Point(12, 265);
this.grpLanguage.Name = "grpLanguage";
this.grpLanguage.Size = new System.Drawing.Size(281, 56);
this.grpLanguage.TabIndex = 11;
this.grpLanguage.TabStop = false;
this.grpLanguage.Text = "Language";
//
// label4
// lblIncompleteTranslation
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(57, 58);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(67, 13);
this.label4.TabIndex = 11;
this.label4.Text = "Ugly Length:";
this.lblIncompleteTranslation.AutoSize = true;
this.lblIncompleteTranslation.Location = new System.Drawing.Point(152, 22);
this.lblIncompleteTranslation.Name = "lblIncompleteTranslation";
this.lblIncompleteTranslation.Size = new System.Drawing.Size(123, 13);
this.lblIncompleteTranslation.TabIndex = 11;
this.lblIncompleteTranslation.Text = "Translation is incomplete";
this.lblIncompleteTranslation.Visible = false;
//
// grpTranparencyGrid
//
this.grpTranparencyGrid.Controls.Add(this.chkDrawGrid);
this.grpTranparencyGrid.Controls.Add(this.btnResetGridColor);
this.grpTranparencyGrid.Controls.Add(this.txtGridSize);
this.grpTranparencyGrid.Controls.Add(this.btnGridColor);
this.grpTranparencyGrid.Controls.Add(this.lblGridSize);
this.grpTranparencyGrid.Controls.Add(this.lblGridSizePixels);
this.grpTranparencyGrid.Location = new System.Drawing.Point(6, 75);
this.grpTranparencyGrid.Name = "grpTranparencyGrid";
this.grpTranparencyGrid.Size = new System.Drawing.Size(269, 74);
this.grpTranparencyGrid.TabIndex = 12;
this.grpTranparencyGrid.TabStop = false;
this.grpTranparencyGrid.Text = "Transparency Grid";
//
// frmSettingsDialog
//
@ -193,20 +323,27 @@ namespace embroideryReader
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(339, 225);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.ClientSize = new System.Drawing.Size(305, 359);
this.Controls.Add(this.grpLanguage);
this.Controls.Add(this.grpStitch);
this.Controls.Add(this.grpBackground);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOK);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "frmSettingsDialog";
this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide;
this.Text = "Embroidery Reader Settings";
this.groupBox1.ResumeLayout(false);
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.grpBackground.ResumeLayout(false);
this.pnlBackground.ResumeLayout(false);
this.grpStitch.ResumeLayout(false);
this.grpStitch.PerformLayout();
this.grpLanguage.ResumeLayout(false);
this.grpLanguage.PerformLayout();
this.grpTranparencyGrid.ResumeLayout(false);
this.grpTranparencyGrid.PerformLayout();
this.ResumeLayout(false);
}
@ -215,18 +352,29 @@ namespace embroideryReader
private System.Windows.Forms.ColorDialog colorDialog1;
private System.Windows.Forms.Button btnColor;
private System.Windows.Forms.Label lblColor;
private System.Windows.Forms.Button btnResetColor;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label lblThreadThickness;
private System.Windows.Forms.TextBox txtThreadThickness;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label lblPixelThick;
private System.Windows.Forms.GroupBox grpBackground;
private System.Windows.Forms.GroupBox grpStitch;
private System.Windows.Forms.Label lblPixelLength;
private System.Windows.Forms.TextBox txtThreshold;
private System.Windows.Forms.CheckBox chkUglyStitches;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label lblUglyLength;
private System.Windows.Forms.CheckBox chkDrawGrid;
private System.Windows.Forms.ComboBox cmbLanguage;
private System.Windows.Forms.GroupBox grpLanguage;
private System.Windows.Forms.Panel pnlBackground;
private System.Windows.Forms.Button btnResetGridColor;
private System.Windows.Forms.Button btnGridColor;
private System.Windows.Forms.Label lblBackgroundColor;
private System.Windows.Forms.Label lblIncompleteTranslation;
private System.Windows.Forms.TextBox txtGridSize;
private System.Windows.Forms.Label lblGridSizePixels;
private System.Windows.Forms.Label lblGridSize;
private System.Windows.Forms.GroupBox grpTranparencyGrid;
}
}

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -25,18 +25,22 @@ You can contact me at http://www.njcrawford.com/contact
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace embroideryReader
{
public partial class frmSettingsDialog : Form
{
private bool colorChanged = false;
private EmbroideryReaderSettings settings;
private Translation translation;
private List<Tuple<String, String>> availableTranslations = new List<Tuple<string,string>>();
// Local copies of settings to update
private bool backgroundColorEnabled;
private Color transparencyGridColor;
private int gridSize;
public EmbroideryReaderSettings settingsToModify
{
get
@ -45,17 +49,29 @@ namespace embroideryReader
}
set
{
// Save a local reference to update later if/when the user clicks the OK button
settings = value;
if (settings.backgroundColorEnabled)
// Load background color settings
backgroundColorEnabled = settings.backgroundColorEnabled;
if (backgroundColorEnabled)
{
lblColor.BackColor = settings.backgroundColor;
pnlBackground.BackColor = settings.backgroundColor;
}
// Load thread thickness setting
txtThreadThickness.Text = settings.threadThickness.ToString();
// Load filter stitches settings
chkUglyStitches.Checked = settings.filterStiches;
txtThreshold.Text = settings.filterStitchesThreshold.ToString();
// Load transparency grid settings
chkDrawGrid.Checked = settings.transparencyGridEnabled;
gridSize = settings.transparencyGridSize;
txtGridSize.Text = gridSize.ToString();
transparencyGridColor = settings.transparencyGridColor;
updateGridColorControls();
}
}
@ -71,50 +87,182 @@ namespace embroideryReader
private void btnColor_Click(object sender, EventArgs e)
{
colorDialog1.Color = lblColor.BackColor;
if (colorDialog1.ShowDialog() == DialogResult.OK && lblColor.BackColor != colorDialog1.Color)
colorDialog1.Color = pnlBackground.BackColor;
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
lblColor.BackColor = colorDialog1.Color;
colorChanged = true;
pnlBackground.BackColor = colorDialog1.Color;
backgroundColorEnabled = true;
}
}
private void btnResetColor_Click(object sender, EventArgs e)
{
if (lblColor.BackColor != Color.FromKnownColor(KnownColor.Control))
{
lblColor.BackColor = Color.FromKnownColor(KnownColor.Control);
colorChanged = true;
}
pnlBackground.BackColor = Color.FromKnownColor(KnownColor.Control);
backgroundColorEnabled = false;
}
private void btnOK_Click(object sender, EventArgs e)
{
if (colorChanged)
{
if (lblColor.BackColor != Color.FromKnownColor(KnownColor.Control))
{
settings.backgroundColorEnabled = true;
settings.backgroundColor = lblColor.BackColor;
}
else
{
settings.backgroundColorEnabled = false;
}
}
double threadThickness;
if (Double.TryParse(txtThreadThickness.Text, out threadThickness))
// Save thread thickness setting
float threadThickness;
if (Single.TryParse(txtThreadThickness.Text, out threadThickness))
{
settings.threadThickness = threadThickness;
}
// Save filter stitches settings
settings.filterStiches = chkUglyStitches.Checked;
double threshold;
if (Double.TryParse(txtThreshold.Text, out threshold))
float threshold;
if (Single.TryParse(txtThreshold.Text, out threshold))
{
settings.filterStitchesThreshold = threshold;
}
// Save Transparency grid settings
settings.transparencyGridEnabled = chkDrawGrid.Checked;
settings.transparencyGridSize = gridSize;
if(chkDrawGrid.Checked)
{
settings.transparencyGridColor = transparencyGridColor;
}
// Save background color settings
settings.backgroundColorEnabled = backgroundColorEnabled;
if(backgroundColorEnabled)
{
settings.backgroundColor = pnlBackground.BackColor;
}
// Save translation setting
settings.translation = availableTranslations[cmbLanguage.SelectedIndex].Item2;
// Save settings file
settings.save();
}
public Translation setTranslation
{
set
{
translation = value;
loadTranslatedStrings();
availableTranslations = translation.GetAvailableTranslations();
foreach (Tuple<String, String> names in availableTranslations)
{
cmbLanguage.Items.Add(names.Item1 + " (" + names.Item2 + ")");
if(names.Item2 == settings.translation)
{
cmbLanguage.SelectedIndex = cmbLanguage.Items.Count - 1;
}
}
// Make sure a valid language is selected if no match was found
if(cmbLanguage.Items.Count != 0 && cmbLanguage.SelectedIndex == -1)
{
cmbLanguage.SelectedIndex = 0;
}
}
}
private void loadTranslatedStrings()
{
this.Text = translation.GetTranslatedString(Translation.StringID.SETTINGS);
grpBackground.Text = translation.GetTranslatedString(Translation.StringID.BACKGROUND);
lblBackgroundColor.Text = translation.GetTranslatedString(Translation.StringID.BACKGROUND_COLOR);
btnColor.Text = translation.GetTranslatedString(Translation.StringID.PICK_COLOR);
btnResetColor.Text = translation.GetTranslatedString(Translation.StringID.RESET_COLOR);
grpStitch.Text = translation.GetTranslatedString(Translation.StringID.STITCH_DRAW);
lblThreadThickness.Text = translation.GetTranslatedString(Translation.StringID.THREAD_THICKNESS);
txtThreadThickness.Left = lblThreadThickness.Right + 5;
lblPixelThick.Text = translation.GetTranslatedString(Translation.StringID.PIXELS);
lblPixelThick.Left = txtThreadThickness.Right + 5;
chkUglyStitches.Text = translation.GetTranslatedString(Translation.StringID.REMOVE_UGLY_STITCHES);
lblUglyLength.Text = translation.GetTranslatedString(Translation.StringID.UGLY_STITCH_LENGTH);
txtThreshold.Left = lblUglyLength.Right + 5;
lblPixelLength.Text = translation.GetTranslatedString(Translation.StringID.PIXELS);
lblPixelLength.Left = txtThreshold.Right + 5;
chkDrawGrid.Text = translation.GetTranslatedString(Translation.StringID.ENABLE_TRANSPARENCY_GRID);
grpLanguage.Text = translation.GetTranslatedString(Translation.StringID.LANGUAGE);
btnCancel.Text = translation.GetTranslatedString(Translation.StringID.CANCEL);
btnOK.Text = translation.GetTranslatedString(Translation.StringID.OK);
btnGridColor.Text = translation.GetTranslatedString(Translation.StringID.PICK_COLOR);
btnResetGridColor.Text = translation.GetTranslatedString(Translation.StringID.RESET_COLOR);
lblGridSize.Text = translation.GetTranslatedString(Translation.StringID.GRID_SIZE);
txtGridSize.Left = lblGridSize.Right + 5;
lblGridSizePixels.Text = translation.GetTranslatedString(Translation.StringID.PIXELS);
lblGridSizePixels.Left = txtGridSize.Right + 5;
lblIncompleteTranslation.Text = translation.GetTranslatedString(Translation.StringID.TRANSLATION_INCOMPLETE);
}
private void cmbLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
translation.Load(availableTranslations[cmbLanguage.SelectedIndex].Item2);
lblIncompleteTranslation.Visible = !translation.IsComplete();
loadTranslatedStrings();
}
private void chkDrawGrid_CheckedChanged(object sender, EventArgs e)
{
pnlBackground.Invalidate();
pnlBackground.Update();
updateGridColorControls();
}
private void updateGridColorControls()
{
btnGridColor.Enabled = chkDrawGrid.Checked;
btnResetGridColor.Enabled = chkDrawGrid.Checked;
txtGridSize.Enabled = chkDrawGrid.Checked;
}
private void pnlBackground_Paint(object sender, PaintEventArgs e)
{
if (chkDrawGrid.Checked)
{
using (Pen gridPen = new Pen(transparencyGridColor))
{
for (int xStart = 0; (xStart * gridSize) < pnlBackground.Width; xStart++)
{
for (int yStart = 0; (yStart * gridSize) < pnlBackground.Height; yStart++)
{
// Fill even columns in even rows and odd columns in odd rows
if ((xStart % 2) == (yStart % 2))
{
e.Graphics.FillRectangle(gridPen.Brush, (xStart * gridSize), (yStart * gridSize), gridSize, gridSize);
}
}
}
}
}
}
private void btnGridColor_Click(object sender, EventArgs e)
{
colorDialog1.Color = transparencyGridColor;
if (colorDialog1.ShowDialog() == DialogResult.OK)
{
transparencyGridColor = colorDialog1.Color;
pnlBackground.Invalidate();
}
}
private void btnResetGridColor_Click(object sender, EventArgs e)
{
transparencyGridColor = Color.LightGray;
pnlBackground.Invalidate();
}
private void txtGridSize_TextChanged(object sender, EventArgs e)
{
if (Int32.TryParse(txtGridSize.Text, out gridSize))
{
// Try to keep grid size in a reasonable range
if (gridSize < 1 || gridSize > 1000)
{
gridSize = 5;
}
pnlBackground.Invalidate();
}
}
}
}

Wyświetl plik

@ -112,12 +112,851 @@
<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>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.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>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="colorDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="colorDialog1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAQAAAAAAAEAIABfiAAARgAAADAwAAABACAAqCUAAKWIAAAgIAAAAQAgAKgQAABNrgAAEBAAAAEA
IABoBAAA9b4AAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAiCZJREFUeNrsvXnUJcdV
J3jzvW+pfVVJpaW075Jl2WBWL4ANDMs0NI3ZZoYzcPrvPjPTMDRLmwONJctyz8zpv/s05zCnoQHT0zRb
AwbTWGYzYFv7Yu27qlSqff3ei8mIlzfyFzfujYz3fV9JJbni1KuXGREZ+b7MvL/7u0tENnShnOvSFPab
gbrG6Kf1GRpvLcUp27LOGe2u0IcG6qz9C2Wdyno8HBdKXiyhn0egm8p9bVv+hrXc55KwuoHtoX2a45uM
/QtlDeUCAKxfaQa2h4Tcqhv6kLFf+k21pUb4tf2aDw3UaecsbV8oqygXAGBtpUbT12j0EdkCPqqsG2IE
2u8tFUv4hwR+WllntRHNDwra/oVSUS4AwOrKajV8SZBHld+l7RIQyN89VEo2fkmIte2h7yGQWC1DuFAG
ygUAqC8lbV8j8CXBltvavtW/Fgisv0MrJe0/JPhTZduq0/pbADEPIJCxf6GIcgEAhkuNtq/R7pZQa59x
ZT85tjwv0epYwJD2l4JvCbz2mVT2k2PPAwja33ChKOUCANilJjQ3pOFrhXw88F0LCusBAqsR/hphnwx8
14LDEEPQfrf2t10odAEAtFIS/CFqj9tSYMeUCrbclp+RsW8BguUvKEUGrFLy+GtCOCTwE2PfapPbckzL
dKhhBnL7q7pcAIC+SMEvCf+Qlh8Sbv4sVNZZwKGaBL74befcqGnCn9F0daG09U1XrxU3nU7DN3/a/SF7
3xJ6S+BXKusskKhhB0PMgOgCEFwAAKoXfE3TS42MwikFeQG+FyrqLDDwsrzA3+1n3IyaS0cLC98wHo2v
WFxa3LbYlnFbPxqPm/HCAo1bYW8RgLzQO4ooEZ/+EYBBCw40aQHAg8DKygqtnD1LZ86c8d+urZ+05cxk
ZXJ06qbPtRV/0x7wcttXE9CSgK/A90pFnTxOYwh+u4YZEF0Agli+mgGglupb2t7S8lKotf3SJxmjE/LZ
Z2Hhw61s37G8YXnb8vLywsZNm5rNmzbRxo0baeOG9rNpI23dupW2bNkS9peWlmg8HgdhZwIw6oCAP/EC
dNseAFj4T506RcdPHKdjx4/RieMn6PTp03Ty5Ek6ceJEW3ecTrftvs/J06fo7OkzbmVWDrcw8SWauj9v
x7GEHgV96DMx9mvZQQ0rIGX7q6J8NQLAWgRfE/oaAV+s2A6fVkAX/We8uPCBVsi/qRXyLZs2bx55wd6+
fXv72UY7duygHdt3hO/t27a3Qr+FNm/ePPts2kybWlBoj6WFVvvPhH/2J0nB180ADwAzEPCaPwh4K/Qn
T7Wfk6eC8B89eoSOHD1Khw8fDp9Dhw/RoUOz7SNt27Fjx0K/My1gnD512tOGo5OVlc+3oPA5sgX9bMV2
CSCGwOACECjlqw0AasJ4UvBLmr4k7IvwWbC2O4FfGi8tfveGDRve2wrvxq2tkO/euYt27d5Fey7aQ3v2
zD67d+2inTt30rZt22jLZi/0m6g9hpYWl6hlBkHg/Ye1vhT0gt2fFM8C+OOBoBXg+PHM4MzZMx0baBlC
ywSOtmBwqBX+Nw69QQcOHKD9+/fTgdcPtJ/X6eDBN+jIkcOhz/HjHhROtWNMTrSo8I+trfEHlAv72cI2
7pcAoQQGtUDwVQECXy0AsF6CXyvwxU8Q+IWFvUvLS//rpi2bd2zdtr3xwn3xxRfTpZdeSnsvuYT27t1L
F++5mHa3IOC1/ZYtmwOt95qdhZ2pfYnS1wq9LF745TZ+Tzs/QQQFzxZa4Q5MoBV4L/geCF597VV6+ZVX
6JX289r+1+j11w8GBuGB41QLIGdXzrrpyuSNFgz+Qzv0a5QKe82nBAgXgGCgvNMBYMjBV7LvLYpvCfyS
+E7qgtAvLrxvacOG796ydcvG3bt3twK+pxX0S+mKyy+ny9vPpe32JS0IzLT8Vtq0cVOw41mre2HWNHtp
G5z/1aWLAsSCYID7FjB4QDh79mxgCcdbU8CbBq8fPBgA4KWXXgqfF158sQWGl9u6Ay1oHKKTJ463/c94
QDnZ/vf7rbnw9zQT7DPi26qzAMEyEUrmAdFXiaPwnQwAQ1pf8+Zbgq8J/ZLyvST3m/H4loXlpR/Z2Jad
O3e0VP7iIPBXXXUVXXXllXTFFVcEjb97127a1tr53qHHQo/aPfwBhlZfjZCvtkhw8MUCBGQJniF4X8LR
Y8daMHi9ZQav0QsvvEDPPvdc+Lzw4gv02mv7A1h4/4GPPkymLRisTP5TCwaP0EzYUfDlvgYICAYlX4GW
dfhVwQbeiQCgaX1L+CXVL2n7ksDzZ5k6bT9aXvqp1p7ftW379qDV912xj6699hq67tprW8G/aib0Lb33
Tjtvx0uB14T9zRT0eYvGGhAQ+OPBwLMDDwbekejB4KWXXw4g8Myzz9IzzzwTGML+AwcCGHgnpAeP9uCD
rb1wL/WCfppSICgBQokVWA5DyzQgegcBwTsNAEpa37LxZehNantN4Je17WZx4Z8sLS9/49ZtW8e7Wo2+
r9Xu115zDV1/3fVB+L3m9069rT5M12p6pPbhx4rv81nghwoCgmUqMBh4jX/4yJHWHNgfmIAHgiefeoqe
bb9fbMHg9ddfDz6DM2dOt8eEnIO/pjNn/yv1Qn/a2NaYAYOBDEnW+AiI3mFs4J0CAENaf4jqS41fEnr8
nmn85aV/ubi8vMeH5fa22v7KltrfeMMNdNONNwUAuHTvXtrRMgEfpvMOPPbShx8LQv92FvihYgEC+g3Y
Z3Dw4MHgOHzy6afoK08+SU89/XRgCB4gjh45HPr5/u1F20+nzvxb6gX/NKUgYIGB5jgsmQbvWDbwTgCA
Wq1vUX2L5mvCjp+l0cblj3nb3tN8L+TXXXsd3XTDja3wX0/XXH1NoPle8DWKH37o24Ten4vCgIDmgS/R
X3DqZIgovPzqK61Z8Cw98eRXAhgEE6EFh8OHD9GpkydD//bIky0Q/DKlQIAfCQaWeWCZBu9YNvB2B4Ch
sJ7m2ZcaH6k+Cr7+aZqLm8XF/2Pj5o2LPjHnsksvoxuuv55uuelmuummG+nqq64ONr936GEyTviRIPxf
bQJvFckMJCtgX8Err75Kzz7/HD32+OPh49mBDy2GCIIHAj+Oc2fp7Mr/1e74cOLpwkeyAjQPJCPQIgZD
iURvm/J2BYAS5ZdaX6P7muBHzd5+NlAq+Btayd1Liwv/+4ZNGxe2tMIdNP4119Jtt95Kt91ya6v9r2kF
/5Io+JiMc0Ho64pkBVzHackMBE898zQ98uijLRA81m4/E8wFdhhO/XHOrbRA8H/TyuSVdohTlAq/35cm
gwUEWlJRaY4B0dsMCN6OAGBRfs3JVyv4/L1B+fapdr+0uGF50efd72m1+7VXXx2E/vZbb6Mbb7yBLtt7
KW3fti1SfenJvyD48xXNPPAfBgKfdehNA+8ofPjRR1oweCyAwmuvvUZHjhwJJkTnZThLJ07/Is2EnoFA
fmvmQQkIhnIH8Pu8L283AKil/BbdRxtf0vsN4rNMy4u/OFpY8GY+7dq5i668ch/devMtdMft76Jbb7mZ
9l1+RVu/M7Pxww98hzv13oyimQecknzi5Al6441D9PyLLwb/wEMPP0yPPPYYPfPcMzFq4AHDzQ4+2QLB
L1Ev+PjRzAPpIyiZBW9rk+DtBABDCT0o/Jqdr9n4qaYn2hi+lxd/qhmP9ywuLbaUfltIz73pxhvpjttu
p9tvu62l/teELD6fj++9+jJDz5cLwr++RbICDiH6WYl+3sEzz838A/c/+CA9/sQTIZzo5yacPhOyCyk8
Kg3tp2MnP0UzwT9JOjOwfAQSCIZ8A0RvAxB4OwDAkL1vaX1J96V9j9p+JviLC99PC+P3j8ajMKNu165d
Qdhvu+U2eve73kW33HwzXXHZ5YHus52Pmv6C0J/74oFAJhb5sKD3D3iz4Iknn6QHH3qIHnzk4WAi+PRj
3zbp2YC/UffR0RP/hXIgQDBA06BkFgyBANF5DATnOwBo9r41TRcTeSwHX67t+Xvj8r+hUbPgNbp38l22
dy/dfONNdOcd724p/+0BCPZcdFHI3PN9UONfEPw3vyAQsKPQmwV+zsGzzz9PDz/6KD3w0IPBLHju+efo
jcOH6fTJkzMnYShuhY6d+teUgoBkBSVHoQwZar4BovOcDZzPAFBj75dsfRR+ad9vjJ/lpf+t1fqXeVn2
Wn3Hjp109VVX0rtuvZ3ee+edrfa/Jdj6HM/HGXgXBP+tLwwEPO+A2cBLr7wc2MD9Dz3QAsFD9JUnWzZw
YD+d9PMMPBtgIBiPXqLDx/8fmgk/fzQ/gTQLSr6Bt41f4HwFgKFluWR4DzP4NDtfavyN7Sg7W63/C16K
PZX3jj5v1/u03Xe3Gv89rea/+aab6NJL9ra2fqr1Lwj/+VU0NuAzCv16BD464M2BLz/wAD3+lSeC09Cv
TeCBws1ChmEIOnnmV1p74g1KQUBjBAgEmFaMn6HlyM6bcj4CQI2zz3L0yZBervH9Z8Pyv6SF0d5Wklvl
Pw5LaPmpuLe0Au+1/p3vuoOuv/Zaumj37jAHHz38FwT//CzsJGQw4NTiQ0cOB6H3JsGXHrifHnz44ZBQ
5E2F0yFvYNqL5MLoFXrjmE8tPkk2I8DQYY2D8LwGgfMNAIaEX8b2LVtfavxNxMK/ecOvtFLsj6elYO9v
oysuv6yl/LfR177nvcHZd/WVV9LO7TsuUP63WWHh521e1sxPQfYmwWMtA/jS/fe3ZkFrEjz1ZJhxePLk
iS6LMA4zoSPHf4F64T9BOSOwfAOlnIHzEgTOJwAo5fLLPH4p/FosHwV/E21Y+nFaXLgjnKAdcXFxKay0
c+W+fcHJ54X/jttuoyuv2BfsfT8n/wLlf3sWzSTw4cJX97/WmgFfoS8/+EDLBh4I+QM+SuDXMDzrJxex
SPonbmHhfnr98K9RDwAIBJpZoEUJSpOKiM4DEDhfAKBG+C0vv9T6+NkUPpuWf7G9oZvCCdoRvXD7BJ5r
rrqa3nXbTPjfdeutIcTnU3ml8F8ob78iZxzOogQngyPwyaefbkHgQfpyaxI8+sTj9OLLL7cgcLRzDsYR
fHjnBL1x1CcQnaAeAKRpoIEARgnOaxA4H55uS/hL8X3Nw58Lvv9s2fjxbllc6j39O1rhv4bec8cdrfC/
h2672Qv/ZUH4ObFnrWvqXShvfZEg4HMGTrZ2v6f+Tz37DD3w8EOBCXj/wEsvvxRWNPbJReGwcN/d7ODD
x3+eehCQQKBFCubJFyB6C0HgrX665xF+zd5HW7+n+/6zvPQDtLz4foqC3Gv+a6++JqTzvq/V/Lffcitd
fumlQfhlOu+F8s4pEgS8E/Dp555tQeBh+sf7v0SPPvY4vfDSi2FB0wgCsyNnD8/C+D7af+g/UwoC/lv6
Bkp+gfMOBN7KJ71W+OV8fYvys9bfTJs3/gwtjC6iZhTCPCz8frHNa668Otj8QfhvnQn/VkjplcKP+3Jx
TKtfbZlnvFLf1fafZ8z1/tvXuwz9PmQDHgROnT4dQOCZ55+jBx55mL54/5dD0lAAgcOHg09gFiaMZ/B+
gQN04NA97c5xstmANAlkqPC8AoG36s7VCD+G+Swvf0r3vfBv3fTLNB4t8ylmDr/FkL571b6rWpv/Nnrf
e1vhv/mWaPMvwgy+87acxz9tsPD7yPi71O/N+Dnh9WctCJxqQeCNDgRaJvDFB+6nRx5/LCxDFhyDngmQ
S39X05ymg0c+RikIIBBoUYLaMOGbeBW6P+fNPJk4Z43wS2eftPd7wfff2zbd1XH4+LB54fYTevzCHbfd
cvPM4dfS/isvvyKAgqX5ww+s0JLn9ELB67pq+mFZzTFvp2LdMxcY36x+aAVjZgIHDr4ezQGfNfjYVx6n
l199NYQPZ9EBJweZ0htHf45mgq+xAekXsCIEbzkIvNlPwZC338rssyj/5vi9fbMXfjhT0xKBUZixd+ne
S8JSXe99951B+K/aty/E+ZeWFmnUGDb/eScfNSp0/jILb8px3dwmhfqL5zQhzsk5ggJ36v4sOjAJy48d
aM0BnzX40KOP0oOPPhJChK++tj+8F3ElzCakFAj89gwEGAD4WzMJSpmDb2l04M18zEtJPiXh12L7vfAv
Lb6bNm/4CXb2hRvj4/btZ+OmTXTR7ovopuuuC04/L/zXXHUV7dqxI2T4yYU5q/8KjBd3xQPJW3JVz0E5
L9iBvMbrIA7awqQ+E3C2vsBJ2h9Sh59pAeBhevixR+krLSC8fuBg23Z8liwUf4frt5371RYIvkw6G8Cc
gRIIvGXJQm/WnR4Sfo7zyzAfCj97+Xutv2nD99Dy0kfSCcNN2OVwn8/qu/3mW0N+/3VXX0N7du8Ob9wZ
j2u8/Xl7F1Ec7vsWyBCaLOeFEK9XcYMVcxVtoZGz3fwBnyz0pAeBR1oQePwxeu6FF8LLT/1rzELacHL6
jjktjD9Drx707zlENoBRAgkCaA7IxUffVBB4MwGAz6Ut3VWK8eeOvpnw/yhtWHrfbNQm+WsWxwu0ZdvW
ENu/+fobg+a/8frr6dKLLyG/rFfJ7jf/AMNH4MswdW2qr/RaBXctdPqtK9pvbSKb6/6gWL1eIiHfU3Dm
7Nlg9/s1Bp945qlgDjzemgJ+nQE/w9C/7XgqIwP8tTj+Ar1y8DdoJvyag3AoV0BOJ+aR3/YAoK3dZ8X5
peaX9v7ss2XDT7YG/O2a8I9H47D+vp+7f8O119FtN9/cgsANdPmlfaLPzO7Hv94O/eG+ZhcPCWz0IqMJ
39mh+Xj8vGv2vmJ3yAsNx6byP+yGn8fmt/9mR9phTZTlns9nY6CtvopHvgo4kb5DmcCU4tNnToeXlPjs
wMefepIefeKJlhE8Ta+89mpYZsxHBvLL2o25sPAgvfK6f8npcUqBQDoHJQiUQoSrvCKV1+1cDSzGL6X3
ytl8muYH4d/4z1vaf2tM0PCXpqPlXrCXNyy3Nv5OuvKKK+jWm26mW268MXj8vdPPmwXeN9B0/RsBHnKn
mu6v4krXgIc9kCbI8zkIy6eWalYa4gLN1qNYP39Nw7u5qn1okCMDbxw6RM+/9BI98dRX6JEWBPySYwff
OBjeYhT9ARgi5N8/Hj/cgsC/pxwEJBPQZhNaacNrvhJWOZcAUAr3WZq/JPxbWuH/yVb4b080N2wvhTX8
Zqv53HjdDXRTS/uvufKqblrvhtZUWyin+HZV0aFXdXUU239YWdujrcUEeDPN/nOkk+LfPzj+Kn7AAGYx
6/EswDsFfXjw2RdeCDMHn3j6KXrhxZfo8NFu+fGpFnHgRUbGzASOURkEhpjAOfcHnKtHZijWbyX5aMK/
hWaa/8eCzY9CDyaAd+pt2riZdu/aFTz9N113PV1/zbW092L/Lj6f7LNoe/0b3Ezt9bkFshmsWN8rbDbW
M4IeQ4W9nXUsjBc4PpWJw3oXZ+4YP78Z6N5PJT5z5iwdP3GcXvLvIXj2mQAAfh2BV/3ryUKS0Jn+Msnw
oC8L4y/Qy6//Os2En4GgBAKYLPSm5QicSwDQnH5yYk+d8G/e8L20cfkjlvCHbL+lZdq+dRtdftmldP3V
19AN11wXnIA7w1JeGwOdNx1/XdgQ91d3Jec/rhnVHvP28uoX3ATrVAr+giHLhJ0tBtBxZOBMK+TeH+Bf
RfZYywJ8dMCnCh98442QOxDyA6YAfAyC02780egzLRP4fZofBLQXkfBfe94DwJDTz8rw02n/8tKdtG3T
T8xGVIS0mTn+fGjPv2776n1XtsJ/bQj/Xbz7ouD1X9BSfcF06IcazXdFBvuuY4JR98ByqE9nJo2uhV3e
LTPncVtzL5DSx+UDW4JfG5UY1tLFhtikZXF27tHe91P4nTyF2E8c8gL/3IsvhLyAp557ll557bUwfTgs
K0ZwHTA6wNdoZfKr9PqRL1GdOSAnEJ1zp+B6A4BF/WWij5bemzr7Ztp/C+3ZcVd3R/uzjPpUX38zl5aX
aEtL8y+/ZG8AAP/mnsvD23q20ga/fLdfAKjpnX5+2e/k56pXQXjFpeeaz2+qutLY63CFhyvzXqvNE3Cr
bhz4Q8rHBqAjxBln+3AAxIISnjpFyTv7uP6k8dw+5OdXFPKLibz82qthzoAHgPDK8kNvhHcSZlmCHGlA
MHj1DZ8xeIxSEGAgsNKGS4lCa7nw2V1Yr1Lj9JNTejHUlwv/Rds/EdJ7lXAfA4JP993Yan+f3Xd5S/mv
2XcVXXXFFSEMuGnDhmD7N6N0fv/MF6CxgaG/bg663iBmzZnG28fNuora2TQDd8bQ+k12PijFcOI8v6fi
ea15pBUwmG9MV+jDwt/tdVmCYdLQoYP04suvBBB45gXvCzgQ0oTPtgAx7Q+AYTIQ+FekgwCGCOVU4nPu
FFxvAJAfGe5ju19q/pT2E22l3dvu7tL18mcNhHm8uEjbtmxp6f5u2nf5viD8PgqwY9t2Wl5covHCODr2
UuGHa5c5BWsFdf7LOGzzr/KWrMOdnNvhaT1+lhkS6yufWzFGg0impQpbpCKCm+I3wOdKmAyYIORnB756
4AA9/9ILLQA8HyYL+VDhqdOnwnyC5HdpTsF2KHr14M+2W0dJNwckE5BOQQ4PatmCqy7rBQC1dr+W6CM1
/1bate1XWtW93I+M2r93BHph3rC8gXbu2B6W79532eXB8bdnV6v9N25IMv780t/5Ly78+SVhqLH9C+HA
ZjRS7ec13xkrjl5Rv27CP88AlWM0GYWZ97eVEoycuSsXEfEpwS+39v+zLz5PL7RmwP6DB1tg8MlBp7tV
hGjmAEzGc5DF2Jyml1/3C45KEGAmUEoUOif+gPUAgHnsfi3Rp6f8/rNr68+1kntRou0h2QcFd3FxgTZ7
+r9zV1jYY18r/JdevDfY/stLM9t/YXGhu0ouC/HFAVU2W2PD91EIR5iJ17c6zo4rCtvqaX3yN8mZb0ND
rDrnoBRMJ5sByD81ygXVP8bMIBIDvxIg5EQekzHM/mOfiWcBPgPwaEv5fW7ACy+/HD4+O/DQkSOtiXAS
VhbG5CCXn3fUHKAXD3i/1jFKTYJSotA58wesFwAMJftY4b5U82/d9IOt4f7+2Ui6x58F1oftllvt7xN/
/AQfv7jHZZdcQrt37py9vqu1/ReD8DfxWfGhQFf6M0x/nmIiOPH0whoEjAa5C0CztQ3bW97WjLEox8nc
ef9vDVq+x8X8OD/UlJ108rfW2ufJ36mkPktH61BUQM3NyTV8GXA6JynhKkL9jMHDR4+GXIAXXn4p5Ah4
Z6DPFzgbIwL425ueAeCzMWruoxf3f5p0c8AKD9YsNT53WSsAWNRfy/STc/pZ+LcSA8De3XfFOxSFnoXG
b/dhOh/a27i83NL/XXTJxXtCBOCSPRfT9hYQ/FyAhVb7O5bp5GEc8PwXnfqN2VZ+4FdL7+uPqxa4ks1c
o4m1Y7A4qDY97rVUfs7nWvhN+2ilEg7UcFf+PkC26As4fpxef+ONMEHoxfbz2oEDYaKQzx6cxIgA/AD8
O5ARvHzARwYYAPy35hSUS4tZIDDHRU3LWgBgiPpLp5//aIk+W8Pn4p2faDl7z6nxm7djdRPW+Nu8cTPt
2rWT9u7ZE6i//8bZftw3GSP5C4D7o5ZGbsr8fdT0D3XCPJEBaJ57ss+fFIsJNMOHVt+q1ZTVzlmgOR5J
Vzymocbubw2Vxg+VaIZxLCsbP4TrwKO7t2fPrgSn3+GjR4Lgewbglxk/ePhQ8BH4iAD274FA+DtcN/DL
r/vIwFFKmQDmCODSYlaS0JpAYK0AUBPyQ7tfE34f7vs3rdRukk6+DAi6dk/lPf3fsmUz7dm1uxX8i8NU
X+8M3NjW82u7Vakx0oD19OBa5mCMXbzaJcGu8T8Y5y9Px4vfaU6Dy/tjkZlzWsrwUESQD8UoSK1Qliqt
R165Do05jLPr2K/iKL5p6NjJE3Swpf4+IegVDwBvHKSjx46HtrjWgBUSRDbQNCdaU8C/oZhZgASBkj9g
XUyBtXiB+LuG+stpvez020o7tv5kK7V31Aq//+ff57e8obX/t2wNwu81v5/ws7W1/eNLPYLG5nBBBRDI
tkSRI4sQfeOD34cae4FR+g9FH6rvDDgb34LFP9RzrnYNAg0IJJgJ7On74HmVyAquI4BdUEATtiDChQ3F
l4hyduCp8M7BIyEK8OqB18L30SOH2/ozwQxwHgTw92O6cASD7ns8up+ee9VPHGIAkE5BZgLnxBRYCwDU
Un+Z5tsLv/9cdtHdyZ1tSiDQe/996q9/hZdP973koovCdF9J/2eHgOOvuPafJeSgLc2r1ZSvpHEOBiiO
UKAH35qzUPReYxk1swdPgt8UBALSixNhKV0vwST6OiqzAMd/kx12K5YSuFi+hQgaBjPKvJdKaFJEDlYm
K629P3vf4MFDh0JuwIE3DtChw0dbADjZmgFnu0Ok3Q+gkrCA9vuF/ZwfgCBgpQsPmQLnHABQ+2vz+zHb
T0vz7YX/ktbuX1gYd3cpPQPvc8ycbfr2gV5aXGoBYGNL+XeGBKA9u3bRtm0t/V9aDsM1zYiS1F02BxwI
BGjuTKuQ3BfqowMpl2gNcVjFWgK1E4ESJ5ah7YdYQDMEUtlJ5a4DGW/MA6yVlHuwI1OY4/i8TmkSVaE8
xi7xBAFIFXi4X7y8VyP+GozZKmNMWw3vnYHHWzPAswD/CvL9rQlw6PDhWTSgbZtNFRaaXiYJpW2TFgQ0
f4BMF5bzBbT1A5S7Z5e5rUz4RuqvrelXsvu3tnb/z9Dy0t6U+otvNfw3mjkAW23vtb4Xfv+2H/9yj+W2
fjxeiOG+RjUjxJ+i+t00B2J+yZzq6LOucNrQdH/fTDDFAyftc+13SCagKNeAebN4ne0TwaKdP55M+S2U
d2swcxOPVU4j25sYPROufO0WKedWd5zRMRMVPCY9yHUC7e9VyAnwk4ROnwre/zcOHworCvtvv6agnyA0
ywnIIwlxliCaCGweNM0rrSngXzpiOQW1qIA1dVi/8DXXsaK/5fiTK/toyT4z4R+P9tDe3R+bjQhCPwKB
ZW3toE+X0ecZwJbNMwDYvXMX7dy2jTZt2hSSf8IqPmF6r7aoRzP7tVFo4NzmX2s7Ak2aXn1165x9VTb+
OvgB5s8GFM5Bsx93QyYzSrRwNEVQSzdwjqkAJzdNxs8ua3TmSwco6aAgfQPJ2C46A719P5lMgx/g+Mnj
wQzwn0NHDgezwJsH3k+QjJVEBOBbOghfPfjLLb3YTzoIoClgzRqc2xSY544POf4k9cd4P9r921rhb6m/
z/OHG61oe/nNufwbNiy3DGBLCwDbaPeOXbR1yxba3JoEC2G9vyZ6uWf3vOl/sfhTcgqu+B+0q9CM+odJ
HiusgobfVYAPVrDPlauvedqbjq4yoPE2z+ormRqavT4bZK5bn2jkUlmND1AjFUPRgcxOd3oHNaSoHGeO
Bw1TF82XSRcN8Br/yLGjAQDeONqaAMeOh3DgCr9WDMfTQCB+uU5825v7wmveFDhCuVNQThoaigpU3ZF5
AaDk+NMSfqTdv432bP9pWl6+DLX6bHQQoFF3CrT/OjawuLQYNP2WVuP7Zb93bt0e2IBf59/b/6MR5PyP
ELNcDjLxL9Odc7rpQPpx2r5xpaPTzezbDI5RvFFrZQOaVhd1EdjI9c5GS4vij0fgRLD0j64fshurcVDf
UA6MyTkGwoJGPkB6lYZZAEcDohlw8mQLAMfp0NGWARw+ElKFPTNY8X4AKfCaU1Brb5qX6NlX7qUUBOR8
gVJUYC4WUPuklLS/Rv3Z9t8Cn23kQWDfxXcP2/pCE4OzbmFhMTCArZs30/ZW+H0qsAcD7xcI7/jDtwMR
FYRetMvL0Z23Ia0fpb9b9onORkX7ovLln8b5uqo2F8Z+Y4wbu+f15zpKqIcEjc6uukN/bUwCYtjtJRBg
GxzPgSdw0AdSeV0nrDNfZBcOPHWajrVmwOEjR+nwsSPBBAgJQcERCPkAKOhx3K6O5xDgOZ99haMCHgRw
zoCcNThkCpQudPe3V95j8Snl+tvU/9KW+nsp5RuBQjmSwifaO0q/2Ar6Bs8AWq3v3/nngcBPCArx/2BV
sLlgrCPA4+OfJgUSNTSMkaSkJ3RfcwT2xwxN/MPfMLTAiAylJWMP+hK0yhGYFVO7XRYH7clPAEHDBz9L
RiJ7TLGvWyCGra6NIy+UkhqcHCdNgGR3xgA8APhogJ8fcKTV/N4hePT40QAK3jyIjsDVsADnVui5V4dM
gdJcgWoWUAMAKB7We/y0mH8q/Du3fpS2bnp/vKMqAxDmgPQBtCDhJ/n4VX58FMDb/t7777P/PAD4dvYB
ZFEADPcgXZVMgO1rDBdyP44O4BiK3c/jZDPz+AZ7ljLtuO2IHZ4jFRfipuuOG7hTtS8Fbaqxfy0FTAZq
oiMtux72YYWJO5A7ETWo680I6NPLMUYVHF+wJCM8lCmR6gfofjNPEfZmwIkTJ0NI0PsCPAPwJkAAAJ8Q
JAUbflcGCBIImuY+eubl36YcBKylxKz3DSp/BFzfirtY0v5Djr+Z8PvPFXvuoTAn3xGhdsbZdHF7pJgB
M+H203u9DyAAQCv8Ph/AL/kdXvgxGiVC3+AYUqMn3/KKSNagM4aZ8lPVan58WbF3m6XzdoUTfNTTopYt
nM+B81Dz5Cupw2k79drZTO2FyqjJmy6k1v9p1gs9eaPp/pY+v8DF/fj7jdPK86u+As0xh+NK1tEJ6CRM
ET4ziwacOBFSgY+dYAA42wJA5whEVpElAw0AwbOv/AzNAED6A2ocglUsYAgAStpfZvxhum8f8vPCf8mu
n2t5+57uKZhP+ycC7bMAl2h5eSlkAnoQ8N7/5ZAAtNAv+93Z3yESgJqctbblOefzOdhWHYiRkKcARiAo
MvGopN5j1QAArEJpnytNPxgZqIgIzHx7cG2tqbsE11JqUbxuToZWZt51zrmgKcoCHONkO7Q1M4fktOs3
C8rMGMAsK9CbASfCikEnWvvf5wcEBtCaBy5JVXYgihAVUIU/spr99PRLfu0ABgAGAS1NWGYIVrGAGgDQ
tD8m/ciZfmmqrweAq/Z+Ivf4Dwu8rA8MoDUBPN33Wn/zpo3B+48JQJi222BEIJr1gGmS/svt5Co1ethQ
u4qN2MnaG2htlOOajsqKek1QknTc3l4Pf7vfRrNhOtXNCKse2zSfo5pqPO1NnMQ/kGvUJGVb/l1wnEzn
l0Nm14Rw5V95XqfoROwjBJN7dKyLk4L8N6cFe8eff2OQNwVOnjrdmgYtAKxMgAFUUP5ku+nB7OmX0Beg
mQI4WUi+a3CQBZQAYEj7M/2Xy3ulwn/ZRR9vDfeNZthPFXwQLL/dpQN7AV9oGcCS9wNs2hBSfze2DMC/
DDQwAO9f7BxMTbSvKRV+Nj+0rLdRA3+261iHWCochZS1l2pmaPuU+iLMu1Gj+dPKczEhaHBMN1iRVTUI
ZlP1mUwPQsFtMPTYv6m38as8TwXFZmBCrS7ZWRxaCGYzO66JviLXmy4dqwivFV+ZhHcHeNrvnYEnTp+k
U6fOBNNg4nMBcEwUcKnpLYCY7Z9sQeDnKQcBuYyYjAhUsYAhAKjR/jLjrxd+/7n60ruy8F62r4FCDhD+
yyf7LLUf/54/7wz0334/vvYLaX//tKV/EcG4lJ4/zZlvdOHX3eniijbdnyHYhablxugUZO1JvUbnOjZx
HP4GZTxtso7VRvAbUSBr5ikoAJD5MdzAwRWmAgsJ+wP04106lpYnIMUA36+AwijGiOsCdOfgZcKmUw8A
szUCvOb3k4FOn24BYOVsmQGEaz2NQNNfe/gb0M/z5It+8RD0BfACIlqG4FwsYMg1JYVf2v5yZV/h+Lv4
E616XizT+yYPAXbpvPFB7RiAj/H7VX59KvBityLQUvvxDkCfIhze+ttp8Wwd/2iTj1JBzkJ+1NublmmQ
mBJ9ZWMBjDZGxW3Qs/yaocPMst4cwX6JhwFKvrDZgB57jkxoYyBoRu1Ms2PxVNIxClNwY+gUHXJ4sOUQ
zMDFzdwCnVniHX0+EuBXA/Lhv1NnTgUHoM8DCFEA1c7XGEHBDzBrO0tPRVMAHYJyReGh2YLZzSk9kZr2
1xb6kMt7zQBgw9JVdOlFP53RfAkCLDUN0aBZ0FDQ9D4S4M0Ab/uHBKDFhZAB2IxmeQCuwQVAFTaBD6Rl
r3M7hAz7tF5K5xTwONFJxSAGD3jDxzVp5pxvcuI2jFON3PCLTMRD7pAFsL8gToEAAI0a3wAaExkcj6Sy
l0hEnHKYviMeO6e2ROo8NEzEDqc/3pogk+yvg0DD94n/SHYWdsf6ZCBP81dabX+m1fanT50KQOAdgP5l
IZMkHbgBkwXO56aw7QC0uvNiMtKBw/fS4WPPUs4C2BQoLRxisoCSikHh15b31pJ+eu2/7+J7Zkk/TS8c
aJuh0ymm/na3n7U09u/Cej7ZZ7zgAaAV/lbwfWKQXyAkAECg/6PecxzPSXGM/q8UZgIARNPIbEJSjoOG
7Co26jG6w8++G/5VZXGtgE49agtkcmy918hr0PWJVu9j7eriKi0F9vfKTftEovRvbPqHOPndnQrvHvam
o9dRXvw9RE3Y/6EUnw/cx+04486pOJORMv4bpckAmtuhv6G73t4n4KcGn/Us4IwHgTMz+t9qf58k1CcC
lez8Oeq8Vn/yxaGwoJYiXMwOtB5DS/tj1p+W9DMT/uXFfXT5np+p0vayTvYXYUAv6J7ue9rv8cWDQQCA
bhmwmbBQ7gcQjsWZl9z1oBMBw1EiwGyL48PBjsGp6xJ4XHxwEwHihx8dUgmtb5JxGx4j9hOAMa306hPl
KdGrLMkDIjT7oPnulDGIdNZARp3qWFRAgQTAagtxCDbALClbNDTzJXROQHAQznwA02gGnPFMwAv/mRn9
DwAgp/1qdJ81/tTlvxvBwH/2H7qHjhx/nnoQ0JKD5soOHAKAkvbHhT7Q87+drrzkEyFlzxd+EA2hTuoS
Gx3ZQKeZu1CcF3Yv9D4kGACg7cMAMDtn05GH0UwxkQEGSR1ekR4AEjagxek1dkB6XeYjMO/CsAY3FztN
YuWiGG1JxqTmMNT+JnxQeS1Xbnew42A/qXfK9erGnLh+EVbui8cqh5hOQKb0+IMy+i9tcBhYsdPDbivc
HgI91T/rcwLOng2Lhnrt78ODod2y6TUfQLFf/F1n6SsveF/AYdKnDFsThaxXiymerP5bvt1Hy/rLtb8H
gOsuv2tY+xt2fnZM2t/fyAAAC+Pw4g8PAN4sCMLun0swH3hdQJeEA1EgQaDj23qEycIXBcfg6byQxhuP
QydXtOWpD6TycURpn3jhwbs1FIYbaF+v0GDVMIN0AP+kIfteCDP7M/C6RbcGgprrzcYJzF/gP4Dr2DRJ
woLTmS+G72m00TsTaNov/+ImU4prA0xn7wzwgu+9//41YdN2e4rCi6Cb0XwFCDIWANfjied9RMADwBAL
QF+AXDQkXnUNAPAjl/rSpvui7d9q/70fbw30jWG0kRB6ra4g7IkDLwGAUaC4PvPPmwPjIPTdawSZnifn
wT8V6X3BTGB/ABElq+motn+jXMnMoE8udy5Uij8hzhmA/ZoCE3x6LSom/CQMAiYEYSklCEF7TukVljHV
AE044HCgzLGogYbS1+FQmhkgjkc2gGN2bU1H/+Mr2YPPYmYATSc+JXglLBAycwhOYgrwFCcDZYLO46+G
BbiT9MQLPi+AQUDLC5AswHq3oB7lJt3217Q/ev63kweB6y7/RCbYFuVHul0SfF+iKTETcq/dPQOYrQA8
mq0E5BtbcHCQDRduYBirNy2SZJSowbsLPh73dhkXZgfyTcWYaZea8/1ukgqM5kS20T+4aimYDNHJuJ5l
laMJIGgUbFQ1Pv8dibakNCMSDmxifwS0TkhilMWl2ZQRaNzMzMA/c+JS7R9ON+2d8vxMhfGn4Zmadnb+
zOb3nv+ZTyAAhibgRLmwT7vvKjDoxnj8eQ4Joikg8wKG1gsIJ5AAIO1/OeOPAUC3/fdd/PMh5z/S/VR7
l82Air7djW46yj5L/R1Fz79j4Qa20bC3uULbq/taX0J6PYf2zybydGNhPWe1db+fpnIcKBhS5IU0xH4i
UGjqSPs+CU+6NNYeD58DFAYYQR6a685hHseg69QxGhxP2vhUaGMcUDMD5b7rhmCn4DQsAOoBwIOBNwl8
ZGCq0XwOBZa0f+75TzMceXvU7KfHnvs4lX0B+IJR0xloAcBQ6E/X/tdf/smoaTPNX9D0I2hzREX2ELQ8
L/k1a28QKHzpNHWDDkiZBMS2ovQJaAAQ+8KDqJoClAp/7JNr75lCUo6XHY3TFGVxDbb/oJCrTsFS/66L
Zc5EW10RbJy2jefncTzwo5kizQItWoALcHCDx0OxAIh0dDo+dzduuH9dNMC5aQcALmQHumkKGEVbv+T1
1/wI3Pb48/8nlVlAlTMw0XuUCr90/mnz/Xvbf++uH6Ktm9+vCnoNGJgJQVK4RT9SBJeBQdruRe2PLAAn
FVkCD9sxfbeXhHBlYe2+9Cr3iT3xEG3twJgANBD+w3Ajsgc+R2AfMnUOkdCSYNuzZ4byrOIKncUlSrs6
HQSy412y3fB2khKN42lswBl9nCKszYwBdHVTcAz2IT88Fs8Fgo7hQRT+hvI2IgSD++jx536Lcl+AtYCo
6gyUdr+k/0Ohv97zf+1l93QZObOxuxlkcZ+FlMN6iQZ2lMTQYwKPkhAU67ox0T7HcbrU4US4nTiPBAC2
6c0wITKDOah/sg8bTX4M/7l1KwFXV8bCMW8ePzq35irdGPJcqDXVEGJ3jREoUdDCQ882PS6Q4lIbXaKP
lvTDoJi1gZ+gSX5EDxoCAGbmv7HCT7cfAMDS9JpjT40GFFhC3m/SmgE+MUhGBGpCgioD0Oi/Ffpj+j8T
fv9945V312l+y9avZAVDiUO4T3h+qx0eToUJ9E8GpaFCrOe+0o7GpB5GdAkcSWadS4TDnJDjXDpPYGqM
pbwdaB79X1dccVdvq/UJCDvMMY67qFP6QxS6L/0CClNIBVqpiyAw7RSzwiA6s8JJYIiABqYFUS7UWcSg
+y3TaXoePo5Z3qPP+rUD2QxgFmA5AyULiABg0X/rFV/o/JsJ/9V7P0bLS7skBU/W+Y/aH24s9kH7vLPz
s/GQNVimAo+bmROynigRehJ1JcpPeKzcFv3lc2za/VZ/KtSvTXSzIu10q03rl6QQQ0gRjwlt4NBixsb9
Sra/ZQrE9Qp6wWmy/hoAKEBQqHPoe4imBWwPJvhgneIDiLMBSyxA7I+ag/TwM79MqS/ACgmqLxKR1N9/
rNi/5fzbTjfs+2QQ2Kjxm86DrGn2Gk3f6MI9GDqEBzHT8qKdve0yGQhp6ojj5qIP00e5HYWB+mNwOi/B
ufmhT45TBDpxcvntMc1V1gMj5rH1Q/+KA6w+kgnM4w/I4v0CBDwoTTrlhyFEFQSEX8CJY1j6J+g8JJjm
O4XxmhQwuwhC1ha1PpFpBhD4Dfz2I896Z+BhqncGJjkBUvit13xZiT9+sc+voYt3/kTU4Jqgu+6bQQG1
PaT6JiZD5uxzlGTcDeUNlOi+ltiT9RH18KX6CEgcl+wrY8hSZfNXSrPsliQAiVV+tVV/tZWCsU5qdasM
AYFs11YR0uqcMYZJ8SkHCtNMKACAdmyJ2oe/aQ7NzsLNY1nH8rXym8dO/Co9/9o/kD1JSOYEIAtwmvBb
9F/G/mfa/9rLPk5LixsHNby1Hx4kjQGQzSZIMS80wU8cki6tZwoXzj/ubfSxoKoIUNSd2yma298QZhWs
8XksyQZkkYJdwwxWU+YZZl6tb44zJwhk5x5gAjKXITgLCabydm3M1ND5N4E6Ev1ZAJnmx/Ah6QDgxDEM
kslKQjjmAL2v3feZgQ8/w5mB0gyQzsDMDGDBRxAoxf4x738GALdcfU8qlGzv8zZo7xIQDDEAM2V4wASo
ZQTaN1HeN7P3Fd+APBZLpp0HpHIe4dcSf4b6JEtniTouahovpceVVhDyNLnUboKA1O5G/1ozQGp33q70
A5he/dhWsu2pXrD5OKtO/paHnuZoADsDtXUD1WgAAoBM/pHTfvO8/z07PkgX7fioLtDzCDm0jRQBx5eE
YjvXs8OQC9vk3MbmNzoQo0kOgOXkN7CHbJkx2Gb7MAMO2DmXgq+e8xyX1TCEGjaAy58xcCS2OvWTfTD/
Am1sCQJ8LTHZh/dR0Hkc1/kL/HoHMZej68O/aV5hl/S+SsNX1p08/dv01Et/SeX5AXKacMIA5KKfmPyD
i37gen876PrLW/q/tHGQ5s8LDkj/tX41zCBuQ/+sXRxHlG5L7V60/ecUfml7y2QiVTMLzzqfS6wZGPuM
hAkij9XGy8ZojDGhDIKBG+7vSn0HzICwW+ML0NgAHlvhB8iOE23+ck1cPtbUEGK+rpaw4/nRQZiuH3CS
HnzKmwGHKF8xCBcLkasFOQQAueinXPMvzfsP9P+qTybz/Vmjo7Ycc0KQ0NyQsJPZ61FInZhsw8d19wvt
c/aojnHiDtvrY5CBrl8Dx+NDNGYsJAEekuqTTf/NfauO7H6l0qy6cZVFmAly4k7N8XHeQ5PmKETb2epH
vV0fzt99Y4KQNH+i6cICBPY/Cibb9Zbgy/g+mgAles/jkyHc8zAAHgcXEcXzPPiUFg2Q7xOUawZOWetb
uf9a6u9M+DdvuJquvvSn5tf0NXWwTaT3Ixquqw0NkujDD5Bm+8e5/jBpR9r6EayAbuLEHimbWj/NDsdJ
Q5IhyBWESkVOFKpZATgrbq5qtYPKBFzhEKH1iyyg0heQsAXRpyjs3eXm8C6G/dCUiEIKdcT3281MCskG
+B7h78Q8CQQDHv+lA5+ig0eeodwZWJohmACAteyX7v2/7vKP0YalXYmdLoVW2vMjYc8jQxgLOx+psAQA
J+u5DlkEdRea+kU3VuMIHKL/lvCL6qSooUN1Rzm2unLOMboyt20PdrscwzIxwkM71ftOJv1+EgJ0PXDx
BCJrslAc1+UAUAwHDgBAKdxn2fwOfnvSD/pr2l0KuMkQ4m8+SA886ZOCStGAbLkw/yh4gbfCf3byzy1X
3UvjcZNpYTQDVmX/z8ECohBrdZT7Efjh57fmoCnAyI0P6QjsdNVHEP+D/W4Dk3fkw48POJ+jgXPKjDsG
tMwGPxc0f7XFVVX1bQNIk9n0YsDMzhfHWQCQ9HH5MRo7YAXDAsl2PpueOPknsgICgUZ2AONgO0F9NFlE
UtDEpfspCLgWAH6a6pKCYjgQAWAo/Ie5/zvo9mvvTj36o3TxC35Qo53tUptb2vLoda8NHRJRwgDGo7RO
dQx2/2kmAh6r+gFEX62d5LGUjm0Vq209NH5t0RyPpb5avxHlpgXb6TLUWAoPSoDgMVZtBmgAgPXOBgBp
19fY/1lyz1BfASQ1vgBs85fmy1/xcwO8I9CaIZiFA/1hi5QDAK/5jy/86Gf+XXnJD9G2zR/I6XlJo4NJ
kLAEssfAPqSNTamWl+ZF0Q8g6rLwH4AG18t4OIcfccIPwTlZmORLRuTqwOzoQsFKxoNx16OsqwlQOZA1
bokJOG0MReuzcIXQoTQh0B4XY8f7iqG/aSrs8ni/P+nCg2zDszM7E1Zp8xNo/2n6O7AuYxCaxnd5+2T6
OXroKZwizDkB/AIR+R7BCACa/a+F/2b0/+YrffbfppTql8wAxS+gpQCjEA6ZC4OhQKUfthUdgUZ91gc2
zH1xvCzVmn9A+EsTeRqjT+kYbmcqWlqfUBtj1MXRsd88IGDSfthwxvHzmgGrYQKaf0D6ANC+txhCrb2f
9YN24nFaIf/yEzIrUIYDEz+AfzS8sNfY/332323X3BvXztO0fEmrJ2xAsAJN+2uZhWhicN8xhBWJoF9n
73Ooke0wLf1XAgCHEJO1/xqwyxtho7vUtOkHA0YgxtLKemn+9bYUVsUO1sAEhkCAt9ExGO9J0zvhOmWt
ZtTxfcNnZwLMget5G9vwt2eaX7YNUPuSZp/HVPjyV9APoE0RTvwADABa/N+2/++4/u5eqzQzOoQ0l4Wt
xAjWkiBUYgMk+idMAfbXxf5XtL8lvLJeE34MB3IfJ9qlHS3NCWWpcfU13rJNxuTxHNjPVY6LZcjhZ/Wz
NL5WV5UIBP2G/ABm/YD9L73/UlDRH1Cj/TUQ4GufTBzqgOmLjw/5AZJ8AH/3vLa34v95+G/fxd9FO7d9
d2bTWzZ/yScQtbQACGuNAA0QmKb67TFss7bPtDsIeXQ6Um+HJ7a/U34DpeNFgUMgERuajDQVglPTJ+k/
X/c1lRqZRsCqAYF4TcHksEAg2u4EfaEPgxUuqqGlELMjkjU7/1ZNgCUjYO+zBgTViT6VJsEUj4eogux3
ZuUP6eGn/4j0cGCWDyABQLP/08k/N1/5S7S8vN2k+kNhwDWzALFPlNfLOo0hxD6U13WHpBpdaHfLF6DV
DWl/DPfJBS4yoRrlNrk0O6RNro2PfVf7GjE3Z6Or6Cv7lFiBZAROOc5iA9UMAACspPm15KCJWBtACjc7
FC1giKZKBzo83kRxFsaXl7ZC/8XHf5HyyUGqH8AP57U9AoCc/pva/++69t7uVTy54EnhjqHA7ulMwnTw
iZRV2PJRG8M5xhAa5IuorRPId0OesztNr/HlsuFEpuDXxP+HhL0xdwrVtf3ewqKtE8DaF+uiVoaSrOiD
KwPB1GwcO4wx6bfxXE6MFyfvEKUgoQBBBJtKyl8T2uN+NUk9iW1f0PJaXe/XmLYAUPIDJNODGQAsB2Bu
/9954z2JTV2y8S1tr/bvHqJ5tH8UVosVUA4giYAL4a4R/q46kb4sLZhSJ2F8cHGRDUV6uU+iqZV+luCv
5i1C611cRaXFBGpDghYLMKMBBW3P7SWbX/ZhjcyCx1q5swjSsCOMxWm/yCymAG6Y8DPkLEQAQCbgf8M/
POanB9fkAwQA8MKOL/+w8/89ALznxrvCyaL2xlV/R7pfABOAkv6iLdHwlAo+M4KRYABZ4hBRERS6ZtUn
EL8KpkG2DRtD2n+wfrDirdH6Qy8c9QXzGCZOOdaJiT/wh8h5Dpqj08HxRMMgMGQCcB8VFIQpkICAMA9q
GEC15gftP3VloS8lBf3jY/79gQwAxXkBDAA1CUA76Oq930c7t32kqOWrbX/oV51QpOzXMIBMyKVPoPsv
WXYa2jE/geuTZB0YB73lfB4pPOjonCfp53yi/ENlPZmAUw6oBYDYV6H6kv7zfcMkHgkIckxMBNJYAIeT
JxhGpFTz48rBGiOw6L7VdvbsZ+iBp36X+unBZkKQ/yle0BEAMAKACUA76NZrfoGWFy9KtD8KiSbIsi70
HfUXGyfqaGMWQYGoBwCD5pdMglWbAAgc8phSnRhHdDd2zKpVF8uRqNnmWEprCWj7aJ/H9knq4VfXF1CQ
IdPkyYZi4xNlLEBjAPLbDdRrZsG8Gl/17BeEuggClDOGhg7Q3z/6K9SzAJkQFF8awgAg3/4jHYAzBvCu
6+6hxYVFW/NTbwpomt0CCKKyz2AIADD8N8aJPgYIxOQiCBXGueIFAJCTefg87NPgiT+8cq9mEmgLag5p
/7eT5pfFDVSslgUE8CAIM0I7b7Omjd8NpAe7vi/2Q5DApB/uh6wgeuVd2jZku2vZgTFSIBb9KNF92xF4
tgUA9gPgYqHSERgAwAu6FgFQHIA3fDLOAJQpvQn1H6X7vsjMQTM5yDALiGyASJx8itCTaMvYQfxPZwKa
A1DT2I21r4yjHK4fRKsHAOXloaFo8w643pzkI/rUliFToBoACoDgREONT8CJOk7i4b6Z7U+pUJMbFvaS
zc/jSoEOgAI5Dbxt0f84zhT3XQsAfoEQyxEYIwEMAHUzAL/mpntUoR0Z25ZWV5cQl6CgtGd1lAOAzEgk
Uc/PrqMcABJ20PR2fwMPP68xOBLH8o3Q1g7kotYNVKy39m8qByx55Oct68ECeKIPrhOAYUYEBAxJum6f
QMtikhDb5eyYjsk+lPoBUAjjmgYVtF++TKRkz+PxeO7kd0yHWYAvX3ikKhLgnwYv6BYA9DMAAwDcfHcv
nBDjT9KByTYDanwEVl4BKXUlBlBjAlhMQGr+dYn/wz7a22O0vVep/bVEH2nPewZWk/STvIjErS1RiMs5
ZQEuH6MY/sPtAhOIQsz9NFagMANnCLT0H6BmR83PY+NKQVNwHKIZkdj+Aqy+8IhMCUZHoAoAHAHQU4B3
br2Jrr38X9Rpf8rNANb6wT52BeFvelueQ3u+JCFDrnfdpJ6GnR99vxgWBJUf94Xgx3AiUWbLW2DQdVXp
/vmk/Ws1fqmsBxtgzYvr5Mt27bzSjMHfIm15vG7ypaDcrxH7zARRyOTfzbH5hlIhrrX5MeZf7dybo03b
fnH/v6OXDjxGdkpwiAT4P8kLuTUHoM8AvGHfj9OOLe8zNfg8ZsA8ZsE8IcEsDDjAAFCzMzDw/lAEAPvB
V+yDNnM0G0RHJ55aKzQobXbexr5YuE98UUlDRdu9tDYgvux0LWUuFlBgB05rc8Y29E9YgKL5Ucsnx5W0
fwUAMIXn4+RinhgC5LRgvu7BrsfXhk3S8WJKsAIA0+kX6O8f/TWyU4JDLgADgPYOgDQEeNu1P0ublvdm
gqw58+S2XDkY7f2xON4XDAVyH7THNVOAkXysrAfImkKuGERw7EjUVTsBa+i/snOutf96aH5ZmCmV1hDw
xerjRDuu+c/tvI6Adowv6AeIoUZFyOO7BSbp9ZDmQKLRqc4EKAICn18zBdCm78adV+PH5cWmZRbQNK/Q
3z50N5VDgQEAvJa3cgB6BvDuG+6ipYVN0d6P9j3a/tp2QWij1jfChqtlAFLLqxEB0afbNQEgSdN1NgDI
iTzyOKxLSpM+2FH7D9jgmu0vlztfr7LuLKBkBjj9mEE/gDhuyB8gAUCz9/k6ByVDqa0ugQDX/5MAkdj1
3TMUvfcADtlagtM0fJgkEVkA0Nr6f/OQzwjU5gTEXAANALRJQDvoPTd9khZGC5nQjyC8l6wL2PSaXDrz
UMMniT9KmjD2QUEP8fvx/PRf8wHM5QTEPgb9l6XJNnRWMFBVXVYr/OgTkePgwyzt8nDvoK+W+aiVaJeL
Y5kZNGJ8i/LDV24iOF3ok2/e1jQ75YI8SPutOhRUIl17T5W2AW2fsYTwe1daBqCFApNcAAaAoVmAO+hr
b/7ULAeAUodcjR9grjChxhCGGIHoQ0pbrAsbOgDgPAbMV09eJirAAr76hCAQDgSsEdjkDsZ3cG6tPQqS
EB4zHn8OtH8qVevWzWQVWr0q9ApTGPL+S4DjMCD6APieRS98A5576u9PFFpxPO4HM6TpTJumZwNJP9Ds
luMQp/3yOS0w8L3++sGfogoA8AIuXwOW5wB83S2fSif7jNL0X7bjk5WARkKYDTDgC86sIdjuQvhL6wTi
8aopoFB9ZAJ4PLeXMgKhOms3bXzKBXqoPus3RycrzbcUKpR9eT8rbrgP2uGaGTO07sG6AMAAG8iYgNJe
8vhz/VTUY8ze0vS1dr+p7afGGNS3/c1DGgB4R2B8XRgDgMUA+lmAX3/bvWp8PvEJFIR8tdGBUr2WDyBn
E7LmRY2K4IAmCNfhOwMY2GKokDX1NH0dOAsn7zvFJrcEogYAqpX6udT+iTStT7eSX0G2YdgvGd+VAQAT
f4Z8AA1BMhAIlC8xXdgwA+JkICmM1Astn1N68KcFjz6aBkOan1mE//1/9YBfF0DOClQZwHAa8DfcngOA
L0GAOtt9PIa6AfMg3JiRbgLMs9z4COqIDGCgVOjjtjyW2/GbUgEdDAMaDGAt2l8Lw6lr+AtTBstUOV5b
T1BLF1b3C2v6c8FTlkyWWhZg2f0WAOB2yR/gLECwfABz+gGGFvcsRQJY6KVvAFcFQpNhMu0VzOfvRwBQ
04ElAMiVgHsG8I23f3L2jBkMYEjra0Awl09gAABw9aGm6dEctT+yFL6hbHbg2n7IGuSa/uiY4vGShTjP
AQBo462+0zqVCvVewwBwRd/seAYdMEuQgXHKrxyD2RaOwc8ErhwUfQAQf2fNz8cmgjztnxlL6K0ZfhpF
n84JCFOnU3/JFNh/9fn70QkoGYBqAtjzADwADDr9wBSY1wwYZAJUBwhYxzc0YwJCU66GAaga3xB+OUZN
fdbPEiBc38/Ztr/sG4+Z2m1aiebLWgDA1fVT/QBOOU7T8qK/1PJqm6XxxbaaF3AOAIDvKQo2hguRBbiu
7xTALAUAdT6Af6x2UOoE1FcC+sbb71kTAEgNjfUy/IdtKHBhqi9oZXzFeLKWIIQPw7EKIMQkIGHbIzuQ
Kwrz7xhy+qmhQAsABiuK1avotE5FmhRiPQDskjkcXXrMZKqDlUz6YcGRx/F4yfp/BEIEE3wk/Ud7n39a
yfkXj3NKP0XI8VhNY2fanSjx9JeiAKrDEM77+ftxQpC2MlACABso9wGkADAacvZVMoAsAUiMi23VjIBy
QUcNXxsKzCIFpANAnMTTpHJnebbZP5IsjjFNJwPFMOEo78vnsDz7oc3Va3I5fk19VlbLAtaJAcRjDQZQ
Y//z92oBAK8ZtlkAgOeTzj3W8BPF3rfChTKBCMcsA4D3AZzSAGBz90lnAjIAJKE9EMBxt4DlWGhfFu4x
TKzhiT6s0XHiT2QDoy4kCNpd5gXEY6kfr5QHwP2R2muCXzIDNAZQY++/4xiAL6zJwS8inYtMTbHgQh64
hqCWC8HFmpOA1D7J0KQBAGDh5G3DDNCEVpoEJQdf5kMgGwCGfAGyj2b7Y3sKADwj8Hj3SQAAowA6AHzT
u+7ptTxrcoOyD2n9GoegtmKwtU4AUXoMkQ4ASX4AHyNDhN1/UtDHqNkFAIyb9CHn3yIFQfPc41t8pAbH
4xtRpy3k8VYBwNxd1pMBuPT46giAAICG5w1UAoC/1LjOnwYCvhOu+68BAO9jslDsXwAJyRLQJ8DH3vfl
IQCIJkAdALCWHwnB9gUBAOtlOjALTBISVIBCvjwUJx0RpWCTgALl4JCYAkQp/edtqJ83FCi1+9uFAcic
hKEXhWbtLm2XY+DLRZN+gjo3hrkhKTaaV/G4GgAQ9L7UpoYAWcio3x4KBQ4l/Zge/+n6MYB1BYBvvuOe
QY0vlwIvhQMbTdhBiDUAqAoPUtqGawM4lwPAkAOQHwhcUAPDTAyKDuxxdFTFh7Uh1a5uKBXCt6MJMHeX
dWAADg5eLQCwSREX5HBpPe9LAODjtYU8pHDKeinQ1I3LzjtNsGsFXjKFz9UDwLAPwAOAnMSTUX4CFlAA
gHD8WG9zPLYi6NVOwKbPD7ASf6RpIL8z27/AAGQk4M1iANn6fU2hzSilCT2lZKHwPTz8/ADg9HonNlQA
UMBApf9kaHrqBUq2Yb0WAbDScS1WELendQDgx0lWETIAgKDfMACoTkA9CvCBd9+TCaO066sZQA07UABA
zudHrVoLADJcyNqekyesdQEaEBR8GShqe/QL4H6SKJR07BgACtlXOwNYAwBgym+4HLw/6X0w3M4sDoWU
2xE4op0/6cczHYIG3dcYgmUKyBwBs94AAKz7yy/NFQUo5wF88M574kVGgawxCcyZg6NOUJk14Lai3WUU
IPoPZB0J8KDcERi3RRuRDQBcNK0/mBtA+s5Y2NajcW4z83JVvE9EmT2O6w3IYr0MVHtRqDyv+SJRNxwu
dJUNqwYAAwycHMNgAk4e43IAqPL6UxkANKHn6zkVAmwdP6kAABkyLAPAnJmAH7xzlgqMQl0TBSjVJ4IO
YDAGO1rzA+AKQzFUKNYGjCFGTtXt3heAIUvuG9c0IIqCPMVjxcSdWgDATQsA1mICrK7TOpXVan/Kw4Dc
Dyf6hD+n6TPr5KAaAPB9w8sw6UyVSTc2PyM8Lrf5Yxg48A0/SPUx3dhy9EWBpAIAFEJ/EgxKTEBzGuIr
1f/iH6syAevmAngA0IQ9E2gJDEbYz0oqGjIDBh2DlGp5jDLEtu5piZq9yQFAiwQQHi/bFEDgryx+jQxA
2teGJudxrHh7qIexrEk8pWJN2FHr1wAAJQagOv7EjsYGNOdf7CKYgfyeKvVSs3M/0+4XH1YwqLn9JeTJ
OjFEaJkFNDNd5AIiGFYMYyOYUD+mf04/+49zzwWwZwN+6D33hj+8KOyijjUtCzra8GGf7XVB6TVQYRPB
dePJlYQk9WcBwenBbAdaIUL89n3590kAwO0aAJAlMyeyDlVVq+y0ToWBxVhXALoMVibY2KSpv9jO9ypq
4g4w2U73ZTpNry9qXIzy8Pd60v+hWX9m+E9xANbY/sgAZH9fPvuPc88GtNcD8ACQ2OJo5wstr4X3SqxB
ZQdNr/USH4HBCjLbX/alVMgH/QAG1ceHK76GTPTDlX/wgcYHNFnYUtrzY8pKSbYTgRFjn5NSof3Nbq7c
pxT6y44ZYABJyBCYg6bphwAgXGc3DACs5SVTsCi9JtTB+ej636DZ/9Lul+P5Z+zP/6F6PYDhFYE+9J5P
xYebqNe6mZZmFiDmBfAxGlPAerbnfYla3qVhQwQMtPmlwLMfYcgMoEZhAvE/HSBKfbHUhASzLoa0rzcL
sEKFlqkR+7q8P5eYsku5iTJq+mPjlGpxLtbuOCYKYIzdiz/VAgAEi0TQuZ9C9S36j/kASX6AxQZglp4M
6Q3Z+BpwDLEC3J8BQNWKQHVrAn7ozk+1wtSYtr2q7Un3CVi+A401WHkAMu3XyhGID9MAAMhjWJYwVRgd
Vr7gS0UlgPBDg+YIKf2k04ooZRDywa+x5c+pKbAW7a804K4zDsoYgCsfmwGAYAIxo6/75jRg121z2JDD
f77wvQx2OfVCypgmQ36ZFx/WA5Rpu9rqQGjTx6gBU34C6i8AojcBnAEA6qKgw6sCf+DOT7YP/EK0izEt
eCxMAha2sdDyMgToy1jxI8TjARg0yl9yENaaASoQaHWa5lc0eW0S0DnzAygda9f/0+qykKHr27UQYnyt
GB7DxYmxCKb0Uh395zrNDMD+Ce0XVF5jCJLSk+sFrxTv1zz+lt1fwwIG6xSvv9a3oRX6s3+oXhV4+L0A
73/3XbQ43mTb/AAADfQxAWBA6w8mBcErxqSAyxmCUYMDmGCYkZE8Ahv1dSMIH0b5ApOGHyZcB1AKPJ8r
kVHZRwrLWsyAuTrOUc6h9ufrRAN1UvtbqwFJAIiTfWCMpuntaz4Ok314PQLWwnwuNAfY4492v/YmoKlL
vf5shiDDMB2CU/gmIfSmE/AE/dnfV70XoO7NQN90+8/SBn4zEM0EI6b1jgTVp94ml8I7Fn4Aad+r5gIJ
5yD2IerpvTANSklB8zgBpY2faW9oI8qFez39AGNFQ6ur/DZ5n6FtfnjN+qbsXIxv4zH6uAEAKQGApfFV
555oMzW/1PpEurbndqHNZb/S2n6a5z5jAVKbyzoBAFkyULI+4CstAFS9Gaju3YBfe/OP07bN70soPCfu
aCxAtfUVplBaSTg5D2h+dgxa0QBczy+m+4rEIAQvBhDW9JEZTHsGEIQB2EBiQnQCh9sog40hzFb9UPtb
wgLWqP0t4Wf/yJD97wgAqOm95Lytxf4bGJt9KFHoussjhZUvW4n+Sy8/mgKo/SUtN0OCA7TfsvNVJ2EH
AiuTL9B//+KvUcW7AeveDnzZ7pvo5qv/RabpEyZQYAWjCuFXQ4EV5oC1ToCs4weOSAiwYe+bbIBEPT81
RAkjwE2LBUhPPHrd+aEnSkGLH2jtuGx7lB6vfeN10Yq1ArA2UcgCrbVo/7ANGxobkE5AJ/sSJZpbYwea
sPPfxX0iWGlaXhyrxu3nFP5E8/N4U1LNgzipqP3+ygv/jp55uertwAwAWjpwOiPww197d6pppSAbQq5t
JysGGSCA2nksz+X/WGn749ReGJsLvmyEhUsDAgf9eayiMzD+dx6ygFUfQFSr9Ye61wh/aU1ADA2yMDCz
w4k/uGZAEJjJjEEWTQDqJvqwg1PR7AwKmnb3pUj3haBm9r0h8FWJP8o2/94//bufpXwmYJIGTB0D8Nre
AoA0EvCR9/UTgiwBj3UknIWWExABw0obrmEAhtbXIgNa3B8nFmVMAARIA4EaMyA51yh9WLFo6wjIgi8i
sYr1EhJONx4q08n8iURrAYBS/ZDGT/oKhjDoAyDKND+RDgBR6DU7v7u2jetNEiu2L80DX2IyDzgZESgm
0xwQ5D6aJn/yd3IqcDYPgAAAFqgmHfjbvuaTMReAhZY97tLuxxd3oiZPwKMT+gVYE1BGB3xJGEMzMzvI
5bMRWX3H1YMhCaiUKUhkA4Mm4BoLSI6B/rj/lrOAdSpynoEvTumj2fbSdJG5DZqw49oD3J54/rENhJtN
khrnXxRsyoUe+6hhQGW/xArU9f80Wq+0m/Z/4gB0LQCUJgKFCAB1AOCFfZHKuQD+s4O+9b33tMK1mDv9
RjRI+VXHoLUugBZWLLCArA8N+wMyge/+s3wAYd0/mn07SsfErDZ8IHmDJ/xoig5tfTVzjlJfAJeYakx6
vdw+l6Wk4OfR/knXgvbPjlO0vmrjG+0WMEgQiOHCTOD6GYQywUcDCKyLa/tN+21ORJoY6wMOgUJDZ+mP
IwNg+p/lALSfswwAngFYuQB9KPBD7/kFWly4KBNgFtixIeCW8PvC7GBBiwYwE2hm9j76D1jY5CrEGiAQ
ARMgimwEhb1oAkB9/ALhG/ILJJtanRhDK6X29ZZxKySo9WPB08KDHOO21hZA27/BPk6vc+I4XxIzweUA
UaT9Vt0aGIDp8FOcgZbGr9Hype2mOUB//Le/QuUQYAQAL+wIAP6ziXJHoH9F+PfRzq0fKWv6AQYwxAg0
m39I41tZgUjnUcCtfABM+00cik1qs6Nwcz+5XiDH63liT0MgSABueBwKh7p+4BBIrFXy5yhuqH2og+iz
ntpftvM9QdOAr1dcL2CajjMRQh7ulcu1vvQbWFo/ruPfjcOvJNdAANsm0idQwQBOnv4Mfe7Lv0spA2D6
7z+nSQCAf0plLoC+MtC3f91dphNQCjavwY9TcmOC0CgVUg4hombP9kcDgk8FQCCdEWhAMGQOoDZ/M1lA
TR9mTNMKAbRKyRwhAq1vmSxOP07rw+PJyUL486VAJ+2gxfmrpPWzeoMRSA+/lQRk2vqG139I4xf9AUYE
ABOEfPlvf+MzAEsrAYUcAOoAwAv8AqWOQDsS8B1ff08/TdfQ+NI/YNn9avIQpW01LKCWAaBWRWBIUoQp
B4A4rdf1NjsfR0SZedDAQy4djTI+D4fG3zVUqvoMd5m71GDKemh+3NS8/VL4MTxYygeITACEuOlAB1OC
5Tr/XMclmdjjZjZ7SAfuUn15m5o+bu+Lmd4rwMAS/pIpEO3/9px/9NdVEYD2s8IA4BmAFgnI5wR8x9fd
255klFB6zqGX9rvlIMT+EgwyQCiYAyXBT2x8UWdFBUq2v1oPbXJbCmnmIIQdKazIUtTpuqP+ZmdtxjGN
MkZ4KJWJPVyPoBfrnZ6ENFFsfPkOAMp3iwlAazUBqpjAAAPA0J+06/l6DGl/094vTeuVGl7rhyHEKUc9
pi0A+HUAtDkASQSAOgDwAo8A4D+8LkCeEvyR9/1SK7zbq+1/jO8PsgPRl4UTQ41JSFAJE/K2v1A4ESia
H9SPi20MSrzvL6b0A6DzCYGB20ls8zhy1eCacKDapaDWz4XGHypuzkaL1iOg1Ag/hhg5FTjY8WDbc1+e
bi0pO9ch0EUmQNBH0H0JBPJtPIm2t5J/lPqo1QvavcYBSM3hFgB+kewUYP85QwYAWHMCej/A193yXbRj
63cnNntJ2Kupvzh+yDlYMgNYYxWjAQoDmNsPoND+pF+smH3hK8Twd6JpgSXT2s0sFCnj8CwQDeXaGo/F
+lIKck1Zi/CzwFChbj20/6D9T6SzADwGBZ77THXNryb6OOE0NGbvcV10/k1yIfdlZdL/Fl5XAPscO/mH
dN+X/4jsFOBo/1MHAF7gGQCYBWiOwN4P8F3fcHdMx6wRdlXwFRMgalwBDvyAaqYCx+g1YCCC/lR2Cvq/
B1OFiSqAANqwPusDG/OwgOT4wcrq5jWVQRN/FcIvQ3rytd/cncOKeJ1QmJMx4F0AuGYgam62/y3hH3L4
mSHAaRkMpkJoiw6/Ac2P8wO88vyDz8sUYMsBuEIAAP5qW47A3A/wXd9wbyakTcW2NX9gyBdQChGW/AGW
L4BIjwJIYZd1+OCVWADa6HwcrvfPdfi6MfyW9WNhW/N4WLRFPNYbCM6F8Mt6pxzslOOqbH/RJkN2WB+u
IWhguc/OPRRSHqe0ui+Pw32imdD0gMZgxebERGh5yQiScKNISPqDvyrZ/4kDkDoA8LR/TGU/ACYEeUfg
x9uHclO+9p9Y4GOhS/Jhzcrr73OqsOY09AXXBCQCTY+hQldYR6DpfQCaxm8MIZdmQdzu2tebBcj+VKg3
hblCytcCBMz0tJWDfOH32zXdgijxnMLJGMZyabsD+1muEIR9k4U6UJsTxaw5vmbcV9PwfC5L8Hl8R7nw
4zGxrsIUyCbtAAho7eZMP8sXAG1NK+R/8Fc/Tyn9xwSgxP73V5sBwF999AOUEoK20wfu/CHasuEDvdAr
Wl4N/41srZ4cY6QCD7EB0upIaSPKBH4sVv6RYIE0VYIDzzjjfvjwMpi5KSUz01AokzUHQNj4b8XEIB4n
EfA5JbzUfVDLy/6VB2QaXDmhs/oKjc5fmT+ghgEYdfF4Q+jRochpv5yog+demfbj8JoFUbOj86/bXpmK
cyjef5kYlIFId8zps5+jz3zht0ifAZgkABEAgBd6CQDD+QDf801391qWUgFXTQAh4GNpAoxSgZPtGVNw
FNciKIEAa+2kjWZCZGn+ufwABiOAr7lCgrJ+HuGWfUsJQej0G0oawj7SA8+llPQzgfUENIof+rjeXufz
hC7SNJD2vtiXAm7VRwFXMgQzW596QZPtWeqv0PZFr70U+oKNP1Tn7/3v3Tdk/zP9VwGgxg/QmwHf8033
themSTW/EQYcKcKsRQ6yPtA+lAcg+/FDNB71Dr7OjIu/yZFuDmBKMFH+UlJOAonnppl3PnmlOICNJpyO
0nbqxlU2Y0hynjIvK6gptdre6m8Jv6X5uU6yhSjcYr9W+PmaciYg2/ZN078EdAKCxXY+t2PSjwYCvmA/
Ph/a9pYTsJTua1H/2W93LQCg/Y/0X7X//a8KupZ6BiD9AJgQlIYD/4dv/BiNm11R4HANQI3q4+QfjtVz
my+BFUjWAHH4hZEt7DUOQRRy1REoIgDSSUiUAgB/ZXUo1GtkAspulWAPTuBxeV90XGoTd+S41gQfHD/u
k+jr0jYWVCwqne82nNJHtpeSfax6q24Kf89Q2K8m6cdM9NGyAq1MQXE8uYP0+3/1y6SH/zgBKLH/qWMA
DACaGWDPC7jsoqvpPTf+VNGrH7V5IRFI0n/uJ5N/pN0fAKQLFdVEA6QPAE0Kcuk5HGtc6MsPDps8gQXA
A49g1XQPENv8yCBkOVcg8FaVotYXFUOan78xUYe7sg1u2fvcZwIUP2pzALqp7MsaHJyJWmagm+ZCL30D
JNotEGDhn4i6iUH9NVD48hOfoudfe4Yq8v+pB4DAAEaUAwDmA8gFQnoQ+N5v/mQmeGOh7a35ASUfQSmX
QGp9Lc6Px/liTRoq5QVI2z+bRwBt0vOvMQDpK8BSAgFM8rGO05J6iFIbX0sekvultF+ZICTPpwoxiWMH
hH8o1MdfWjJQxhgk1cfxnFIvfADZ5B9F22cCLgTY0viS2kthjmyA+vBfxiaoBwNf/ut9fgEQSf9xAZAk
/k8KADAb4JmB8nVh6AeYTQ/+7m/6eHtzN/aCj9re8PiPsb0TKqT32fsEBDDg/H+p5SNtl/38vWr6hCEW
Hj5H5iPgv6UTRKnFWZNgvL0EAkMmAG5ngm74BcgY860olvDrO/XCH/vCNmtu7oNjYdKPFg7ECTPJ5J9J
/xygvS/z7fk81tyAwdV9a4Cg0vmHS4i5VsP/3n0+/MfTf7XwH3v//WfSfRwDAAKB5geQacGzaMDX3fpB
unjnR02b38r0Y6DIFvo0HICa86+0mKhlDsg04CRjEMAjYQREui9AsfnXAgK4lDlqfAwdwnBZQVPEWg+Q
S2kCkDqhRylmQk+pn9P7zRv2S+pBqztjv5j22/VNtD22F2x+KeyEgmkIO2ruEgOIQs4Cr7Tx94FDv01/
/eBfUu79l+m/aP/7h2CKAMDbQ+HAdHLQP/nAPYkNbUYDoE6GDgP3gIk60qmIdJ418QIvtNGkwMIP9hAA
MPojk3BTeO8ACQBQwEA1A4Sw14CArNNMAfM4sst6soNSBACbMEwY96dpXxkeRHMi2u9wHGvjhnphQW2P
MXoWMN5Gm56vl8zPj3WkOP8UIZ8awDDX+v5GOnBi9ysAIvMAfPndz/npv3LyTzH8RzMAcCz4yAC0cKAd
Dfjeb+7MgFEfdksov8UKKsOExXDgyGYAMhegOCdgJOopBQE0D1iQ8cWgCAI8YYfXDuSHjimmBQL8e/nh
5oeSQQtt6Ubs44PNY2GJY84BCDUhP1dzXKXWxzqntKMHP+6TXsfhPU3TM0CQaEvSgPm7yT30XJc58WSf
rn0FwoXs5PPtXK+t8suOSw4bJglErg8phns7Pdna/zL7T3r/s/AfAQPQQIABoDQ7cJYZ+O7rv4au3PsT
qvCXcgT8N6YKm9mDUO+L1Vez6REcsiSgRhf6Iadgw6YCpW1EaR2J45M6sU/GvsUErGONbutepOxiAo+s
l8dEIeHfyynDkz4syIKATIH/Vj6ej2N7nahsDmhOPw0MNFMAhT38BiH8CAAlVmBN9tFMAKT/cmxse+7V
X6UvPv4PlC7+ac7+oxQAEgbAHw4LWmZAnhT0/R/4ZDI7UMb5LU2fsASNMSjbGkCgX0Ha91Lzh/N2y4on
yTpNqmHxVWJIS0sgMOry2zm1l+3y+DoycCQyTbXi8hwGlZOBpIRju+a1Xw8zoJb+a5WW1ndiw8k+Bdsf
+5YSfkpsANfvz4CCetOABY7r8JwY7pNhv/jK72nfL7KLaZ8mrAl3/C7MAeDz/ZfPad5/LfmHAcAfOOEr
y0LPT9aQGaCtEbCNvu8DH2sftF1hlGwdQAEGYxBSuaZAA3UskBJI+KHOXkiKZgLloCA1vHQIYl24ElLI
cQwiFQASTz5oejU02CS7qa0PQmMyArWiWG2WoXRgBJWJy/uznY+/FdsbqEPzBWdHTqGfFh1Q6b4Qfi3J
Z3C6r2wz7HvL8Sedcmad5t0XGl9GBcxoQASTgy0A+OQfr/mtuf8m/acOAPgWSDMAw4EyKUhOEd5G//SD
Yo2AQvxfZQhKBqAaCVDsfg0E8DyOYL9JBZrbiXoQSpyFfFVGueAnSUNQhzY3goAU6vjAUw9EU+oBi5Rj
tVJqXw+ToOQOGPIVlLQ+tjut/4Dwh2XDJ2l7DOuJNq531N83zQaPyT+Ua10OCUeP/6QXUv5dmPorhT1p
M5J7JjXg0P2m/++/+9x/Fn5t6i/Sfw7/ReEnAwAYBLRogHQG9jMEv/+D94RjMMaf0XyN/iumgiXw8k1A
2XetUxA0Py4IqvkC+KEq1fM2Udpu9SF5jGyHfvg68Bo6j3201F1rW9axAGgpwYmmN1KDUWDVyUCG4Gft
oMn5K6vTGABRnOhj+QKseD7/XYkfQPHwS+2e1BsOQs3+VwVcZAbmUYZJCwDs/ceZf5rzL/P+kwIA/C0z
A+Vbg/QZgt/59T9EG5ffP6jhxwYj0NiBDA1GM4JfJdYJfenlIDF82B0jwSCuG0hg9497+w/j8yOol1EC
vnyJmQB1UXAMoZ/HFND2h8pqfAE1kYBSf1X7w05J+Pnas63L7VFDg7D7Z4C1K2t3DBFiMlDoN+rBYQra
Pnw7ShyDE9b8aKfzir8F4Z+I8bIkoALVN80BaD9x6j7647/Fqb9a6q9M/knoP5F4xOBjzQ0oOQO3tSzg
k0UHoAYEFliYjj6tbsAsqNmXGl7a+kmiEFHGAmQewGAOQFMAAdhhhqKtEYDHaglAmkaX+zWa3yrcD98A
VCP4qvDPQf0ToCBKNLxkA5x8Y2l9vC7WxB4Swq0yAcNjP2TzZ44/cbx8aSgDy3/+C+/8Q9t/yPmX0X8C
BsBPnGYG4EtDrBmCMxD4/g/+fHvkHtXbX6L9yevB2BnIefyo8cXxySvC2Hnoeg86a3UWeNbcaKI46B9j
5QwQ3SC+Dycesc1vOQbjlVRMAWzDooUTk9tCSn1hnDejlLQ9Owv7xvQ38sPN1z9OyOnuHwtqtOthH4Wf
2QC3+++J6/enwAKSyUSC9kcQEfWY/msJu0b7h0J/Q9pdMxXSKMH+lv5/nPK8f23mH6b+JsJPCgDwtwQA
a4ZgzgJ+4EOfSEN6FSxgqC6L+2vOxJKmF5EAc5KQxgS6S4KJNFY4sAYE+KGX4T/Mc8AwHoOWo977zkNq
iUHapCCWwQa+16tkQFBok/Uq9Yc+apKPON7y9vuSzBaU9r+i9UsRgMxfQLbzriTwElxWeF1AZSxkBOiY
/J2/+FdU1v7azD8JAOGqZDpFfKycAHt+wPd/aJYZiJodNTZT6Zo8AZkshAIuJwWR0obzD1D4B4GAcodf
BgDCRLCcf1ZiEJoHuC/ZgCzFsGDhuPUsLFRoPjjY5zwHLBxR4Yc8WSeg+83sLJzIPuC9x/NrTjo+N2bt
aSyATYOS4Jem8w4xAsvuTxx7A9pfA4PJ9GSr/Tnzz0r8Kcb+4ZOTSvi2nIHaOgFpROAHvuWuojOwVuOb
acFKVqHmJ1BDhELQa9kA9sEVgzDZRz6gEgRQ60s2wA/rGITIl1ISUDxWb07vrGissfPnSQDK+pbsfdGg
hQJVO19hBM6JPt0xUvsjW9CE3xfUsiUmoDn++LMCCTw8lkwkwuSgxB8gACJrbz+f/qx/75/0/Fvz/k3n
HxkAwHVoBtSGBHtT4J+2ZsB4tJhpbM3bn4UMifq1/roHN9j3mEAkJgSxh97MCwBAYKGPwqnE/gdZgEL7
SxoftT1qeqn1JRvAtuROidtmsgUql6EEICxOHKNN6MGEIIyU4Dp/PA562rkegYCZAQstnyfSfSeOcToA
aICgJfbwb0pAYg4Q0Fbz1ex5zclXcgDi98rkbKv9Pf0v2f5Vzr/SIyLNAOkLkNOEcxZwxcX76Otv/Rk7
1q9odzVJyGIFo2GNb6URawDBDkimjQgCcSJQ0z/0GgigacFpvywE4VjqMRfBLbkLgv5z/RSEaaTcsqay
bq1FYwRFllBgAVooMNH60F4V9xfCHh2ETT+phpciR03P/WK0gNL1AHA9fxR+nCiU5e0jEFC+pj8CAicn
8e8qOQD/+sF76IXXnqdh7Z8s+0WK8088cemjA99DLEC+Q7CfJPTPvuWeVggW1JDfvBmCUshVxx8mD4k6
X4aAQDMH+Lio5alsImSefkXQq8KAYjx5p4aEu9QuQ4KsrWsThaTZwUWuB8iCGbeVOtzXaD+yCQf1sb8C
CNKzH7W/bB+w+zWWUIr7l0KAQ4zAivsnLGCyQr/zFz7xx5r0Uxv6w7thksQSC8DEIAaBzSRXDLpq71X0
vlt+2tb0IxElqAWGSjAYdyo3iRh04URM3EFnIj7cmPgTbXV4dwCPlwg4fEvQwPogLGMFAAxqbwn/PFp+
NYygpN1LfecV/NhPaH1uR+HPjhsQfl84NIghQ7nSDwo395WCHs5nTNDRJgMhY9Ccf6oJoACB//67h++l
Z195lvIVfxgAcM3/YugveSysxwW+NTNAWzNQZgduox/4lk+0dvpiJtDVJoACCrI9jl0yBcDOT0KCgiFk
Gh7ZAWt0TagLdZndj0ItBNwCApztJ8EgziFwupBHDQ/9iITdDnWyj4kBLu2rhTS5PvltmuBTKrDSH6A5
+iznXwkQVA8/gVbH7YLdX/QFICNQBH6qAMh0SmpkgI9ZmZ6l3/ksh/5k1l9pzT819KcJulYsFoBrBcj0
YLlu4Db66LfdpdrwUvvjvqbZg8NPCPZQNCCZCIRjozA3qfZHR2MpNwBj8zIHQKvLQEK0xSuO2Cs2SyFA
VcOvQuubpcL+d0qbUzqwUHLID38/OuLiOB2Tw8k8cqJPMBlgTX9qxH5XViY9KPKUW2r6bT6vZsfz70nC
etLDrwGAS89XzQK6Pr/1Z97zj8Kvxf3xjT9q3r92E4cAgL+7OFWWGOQ/zAKkL2AGAv/sW/x7BDdWmwCa
E3Bk9NMcgqqTUNH6idefyI4GSA2PxzCQkND4sg7qOczHryLDS41AEJ2InAoMpguGCWPsXbuD3d8eX0vW
fUd5hHqivk17/RjPY0cfQjNK6zQzAO16rV49RtD9WFfQ/pq9X+P91/YzBqBoeWs1oJLHXy7pxaYBuTR8
iCzAx/0//dmfF8Iv4/6nqKf+qP0dgEByN2oAgNtrWIC2bmAPAj/04U8k4bex8k1NDwhjg/Jr8weSRB9I
LQ6CAzY9j8u0FlcM8gXt+SRCQLA9YBJIACAYTwq4RvelzV8THrT2a+7uPEUzBSQDYKDC/iMSNrRyrOYI
lB5+/hvZ1uZtKewNpZQf1/d3DnwAcAx/Jz4C1zOCIYEfCuMV03xB20s24Mt/+gxTfxR+ud7fqrR/zSMy
xALka8TkTMGOBXzrz9HCaE8vsJXaX4KBlS04NElI8/4nzj7IHJwHBGQugabxwxUDU4TtYQ0g+Pc4cfWj
5sc+YKdnST5udn1j/+5YqdSxvaYMgYBF97FNYwaZvU9ksgEJDFOxr9r/ABTWFGDp7U+iAQwEkODD5gia
CBkDEKCB6b/OMgHgPCuT/fTpP7+LcgBg4dde91Wt/fERKxWLBVjZgXpY8Ic/fA+x1z2x08e9ELEvQFsb
MGp8EELVqYiMYkQJM7CyArW8gCQhSHMQEmXaXa1Dc4HSerwDbE5kdeIuaT4C7U6uRx6ADAeyHcwle6QA
ueKrv7nJpWFCrMekoGDfs2niIFY/gbYmne7rugGjMCvjIhAkAg5RAJwabJkDWdrvlDJbv+j8w9wBjT3A
WL/5maGwn5b1V639tcem1EdjAThTUFsvoAeB7/3mj9KWje+3Q3zKpCHT429EB9S6kS7s8cUkLgWj6DEX
Y/p6XFMgCEVD/fqClJozXIczEzGUyG1MOXk9Qf5t/OBy4XGSO9P9Dl5/0Gpfj6ImAQ21Gz4BLRnI8vrz
sVo4UCb/qAxAsIGE+lMqpAmFp/4+Taa58BNBIg+whhVY9SeuFwhsgI9JogrMIgAIjp64j37/879NqfBr
8/3ljL9q7R8ekcrbX2IBmB2oJQf1IPDRb/NhwYVsQQ52qiUOQjmBiGaRgOKbhAvCL8OB+LYhmSzEjj1z
foCg/JkzEP0Bso7rpRkgbonpDyBbsNfDD4Ban/cnwvmnsQE8f5LmC1o/euMdOBxdrtW5jxT0JDHI5WCR
xeyFBp8n+UcN+0lmICb6mB5/rU7LJ2Dqv7JCv/XnaPuz8GtJP9VZf+ojU/lYIAtgAJDZgRgWxPcJYprw
VvqRb7872sVWrD97t4CM98vkoYbyaIA1GWiUAo4EgeTFIJSuRcACgfvRKSiciOxwInkuFgzJDEa6kHMV
RgFKmt3KBVhtGdLsVttQMpDp+FNs/mxfEX6c4ENiv+T1R+H3lwlX741ORhBWrsdt6o6TTj8JDNZ6AXHi
T7f9G3/q1/rzgo/pvvI9f5j0U5X1pz4uczwKQyzAmi6c+gM++m0/3WryyxLhHjQFCnWawGcOwIEwoBX6
G5omLLW79BXEK6f5B7r/hiIDuK/6AsS2NcHHAgGZ/INjsDmEk3+yR0oR6ikINZs4eProrRe038GYks7H
UwlbX/aNU36B8ptJQAWtL52CJW1vpf+W6uRcf+63MnmJfuvP7qXc7i9N912V9pePVG1fjQXUOAR7EPBh
wYVW2kva3FpMRHujUBIWBKqPoT8OM6Jtz955dhZaIICrBSPdx6iBg3Z2AUgQiVcPxmDhlFTfBAEFDLL+
JYZQcaddZaOVCKSxAK1e2v7qJCBD0Pn6TsEbjwlBDBAMQDG0Zgg/UWqPS00uF+VAr32yXJezNX5p6W8/
xtm2w29+Zoj6lxx/c2n/2sdB9pcsoGQKYIZgHxrcsWUPfdc3fqwX7IrJQJnWV0DCYgUJMwCBxv7SmViK
BKCfYNA3QHpfIh0I4lUGgcdkHSIdJLQ7iQ7H5C6KZCCs05KD2DmZJQIBe0APfRybv+F51EDCKX0S4ef2
gq2PfgIiUil/YiqUUn5BaE0W4BSNPhANMPMBuvY//KtfpkPH9pM+1Vdb6LM03XdQ+K3Hpqa/BAD/ka8T
wzUDchD4oQ//TMsC9iaCr+X843p98aUjXR0fw+3slY9OvSbti4KJLyJBDY3JRrjP6kQDFivshzQ/E2q4
nGbikLjsQ6aAdkfXIxJgaXqtXRN6WR8TewheNAKal1OEpZ3PfpWJEH60333hzMiJAhIY7pP7MpxXcvYl
b/oZEPipIzNRiPucWXmlpf5+aX1N+K25/tmLPvBK19za1TwdCAIYFmQQkKYALhySgsAPf+QTtNhKYKPQ
/yzsV7L5rW2FIUTqbmh8yw9ARAnlH8wJqAACHo9vVfJCUQAxRykYcB0n+IxBE2MiUTJRCO+gcts5Bo9F
2v7cz9qfxwRIAAEOzkJ5XVtNfWQF4CMwvf+QdEOUCr9MAqr1A/hD8VVhckx2FPrCoUBfzpyddBl/Uvhx
oQ9J/eVSX1VhP1lWqx40U8DKEERTIE8V/rHvuDufKSiouXyJKG4nWXwCBMYg/PJ4FHZMGpJZgaUsQdw3
zQJRT5QDQdZOfT/8pkL9vJrfAoFSidmHo/6Bl23ZGM1MWDjSgZN/MFmHwIQore+X1FMeQsRlwJHWc4w+
9FGAQIJCltU35zbm+meRAGQB7W/6j3/CXn8Z79di/qXZftXU33ps5j1OmgJWVADThFOn4A9+60/ShqU7
UrufmUBBm2esoMb+NyIADYxRAoHEqUf9GCWBx98RkolGvTAwpZUvE42LkMB41D3UMfnH9WNj3F6+KBQF
vbQOYKmt1gTQ2IDU7Nq2lfSTRAAK9YmtT1RM/V2N8GuMgMfAJKHp1O63AnQfHZInTt9Pn/7sf6Dc6ael
+2pe/1VRfy5rMRA1FqBFBXiykOUP2EI/+u3/hhbGm8KonBgk8wOCodExgYWxLvgxEw/HQWFXnH5yTkDo
jqYC7CcmgQADaQJI3wARqcwh3gXDH4B3CRmDvHsWS5j3jgf729nHMm3Fqby+aALPv4NNEJys4wsLHdcl
+y7tj4Ij62LoD+pCX65X9ov5/1oocGpv1/gAshTg4PU/Qb/xp/+aZkJfsvuthT7WpP1rHoeaY2tNAZwx
mDsFf/TbP0GLC41p1yfsoClo/9GAxq8AgWhjCz8AAkym6cU4joTTUQCCbx9Dv3glm759RDmIxKvfGNuU
2u7n2gmoJffIfTXs51LQUBN+eF+x/5M8f6VO0v/Emy+EmygX+okh8JLyRycf2PTxpaE4uUdM9Dm74ujX
/0Sz+5H6s/DXUH95Z6rKWp+OeU0BmR/AC4jMgOB//s67MmG21hCUQjceDYOCFtu3XigqHYQJI2jEh1Iz
QUsSKkUDpC8Ax0mu8oBQW6CAhf8uuW4/Fyf6YoIQHhdDgJCeK9v5oWdATN7fx+cDAdcm+qDdL00Aqfm1
tF9kFnJWn+YQzEKCwn6vZgFwrBb//3//m1/kgwVfLu9Vk/CzJuofb+lqDlLGKJkCcq6AzA/omcD3feAH
advm9ycOPC3xRzr6pGBbIBDMiHGqHdms4Db+K/BFoeTgJaJ8HpgExKsVaYIfbXi0+xFQACD4N9WAAFbK
u1hrDtSUktefiDLqj32kXc91Wsw/9qNUeK0IQOLtV+i/xgKihsaEHUjllWYGhvuk/S7Hl6sASbrPfgD/
ffjYffS7n/s06R5/Kfxarv+aqb94gtZUhkwByx+gOQW30I99x8+1AnWRSeVLgDBoEhQYQQPjSzYgnX9S
20vHYAkIMmag7JMi+PzKsKQfHC9vB4cIw+8Vmhz3Zaqvth0e7G5MrkdnJBfcxtAj109EHWp9MoS85ARE
rZ6F+qAtYQCKKTC1mMGcmn6w3YPAygH6j3/i5/hjjr8m/Jrdv27UXwrvWotlCsgsQXyngJwv0DOBH/uO
X2lBYFlPD1ZAIGp3JTU4STIiBSCEf4CFeAHThNGGVwQ+WWOQCs4+yzyg9HjuG49R6tS7UGEC1Nxx63Eq
2fuy3rL7kzqxz/S/SvD5+AbW1lds/hiGpNQRR9QLPr/um00UHk+m9eJvk0CxsgK/YUrqRKIzZ0+3dv8v
UK755fJe+GJPme23LtR/nsdhnrHkBxOEtPwAGRnoQeB/+o67aWFhlGn+zDSw7PtmuD0JEQpTIYkACKHX
ogKSAVgRAoL9MZgE8W4IwddeJ8YPdTyOE4rAViZKmQo/8Fiv7ctFQEomAC/cwfUsaJiMZCb/oJkgBZty
oTfpPlEW9iuZApbd74Swazn9lgNQTueVs/uC0+/sFOL9kvbLWX7o9Cu9229Nwg9P27oUyxSwJgxpk4YQ
BLbQ//Kdn0heCxaEBtcPGPdCMtIEWGh/tveRWfADK19PhqHAEH8fpWOzTc8CyftFs8Cg/WZCEABDMfmn
oPnX4w7LxywBBZf3sYQe6xqok5NysD3J8CPQwpQCA48t1/VjcJlAXy0/AJfliscLwZfvEJhAmwQDrDu7
4p1+3uOPlF9z+qHmHwr5aXdm7rKeAIDj1fgDNCaQg8CPf9ddpodfYwKY4JM5DQnqRil4yMQgOSHIigBY
9n/Wv6uLdjwIOzolMQTItzeei3rAwtuPKwixzc7HYX9+eEfGbec2+V0VBlTMgxL9n5cBSM/+UPivlAQU
HXOkRwS0iUFWYtCQ8Pvsw1/7I+/x14Rf0/zn3O7XBHY9S60/wFpKLDUHvuG2O+nGK3/CBAFtyTC2yxMG
0P2sEdSFfRkGFCaAmgxUMSdAnSRUYgCGtrfsf1mv3c7V+AFq7H/ZUfP6y/qa+L8GEnjc1AIBAQaWE1Cb
CTg4GWgNwu8Zw2PP/ir9zUNfIp32a+G+c2731z4Kax2Xx+YJQ1aSUAkEtoTv//Gbv5d2bf9IuqCo4gOw
7H05Z0C1+4X2b4xtLf3XygHI1gJocuHWgMECA7xjRZOA8rbq2248WzUsoAQEUui5X+bYo1zwM+8+tMuV
f6TWd8Z2adpvBgiV0QFZ9/rhz9Dvff73aSb0WqKPFu7Tkn2mBFeM1rGcSwDgb40JSKfgMAj84Lf+GG3Z
+L7B14pZjsBEwAX9LzoASalv8k9xWrDYJjkG5cfxPg0IfkIA3kQGkEQERJ0EAkvo5X6N598EBo0JUKr1
s3op0JQKcWYSFByAUviPnfwCffqzv07zC781xXfdtf/Qo7BeY2sgoGUKDpsDP/zhn6SNy7cXQcDyAZQY
AvoGLCZgsQHLLCCaDwjiNpVNAAsQsm3tjsxxu7UwnzPaNYGX9ZptH/dXIfiS7pe0fk0koKThZVyfBoT/
5OkH6Tf/zE/wqaH9NZl+50T4rcfkXIyPAOC/ZXiwlCiUOgd/5Nv/OW1YvNUEAdbcEgRKYcFMuI31AiQL
UHMDmtUBQdJvDhOADKGvyRWwylCMP2wnDWl7yQSQ2j6pozrBl3RfmgjWlGCN8msmguUY1JyHmfCfeZh+
8zP/nnJnXynRRwv3nTO7P3kczsWgxjk0U8BiAv9/e9f648ZdRY93k202JYVUtGoofIDwBYmGCiGhqAkq
4aENraCiBZUPmyL+AqAgPoCIUh5feP4FQFMkIkpRQYUEKKEiqSIhhNq0EhIiIPFoKgoEGpJNsmubmfWO
fefOufd3x96H7fWVvDPzmxnPjO1z7rmPmZWNQrptOCOBd+e3EFeVQEnW65uHxJgkAwDVRKBDELoRSBJC
v0QA2GRQzHc/wUTs7yUFU9+8+xMjHl/vkyz/EdAX79Ev8Esy3yAFTw2Y/wxEJwrZmAL/lWvP49iTuefX
4JelPqvRZ12SfpGfwVodpziWTArKykAkHOgRwX3v/EglJ1Dx8hrwMkSY4mCnzwRQoPcagVh+wJX9iJEB
nar1ej7yDcvGIcv0ak/+V/IAQdBX1jNV0LYJQWf+tdfPzZL82vPLTL8mBCtcuJTF/I/+6nuoev2U7GfP
9VuzpF/l61/LNyfHaahXQQA6HNBKoOgTKBqGOkTwgf134VU7ytUBU+pb0n8q7fVTOQBW8/cUAVAlAw1+
iwxA3qM0Br7tIGZVACgRtKv7RhKA+j08j8+Sff3kAKx4X4+boUG7U+r7z8Un8aNTP0EP+EWDj6zzM88v
Zb91g89YEIA8lkUCslFIVgckCei8wHbsffNbun0CXTA6APduBWZPApJqQCf7ZFiQIoKKOgCop7fAr729
l/GPVgMi5mb/jXVMFVigl+sr3n5lhxTwaQ5g5f11NcCT/EwdWAnBfNsc/H/4y7dx5vln0QO+9voa/Dno
U40+6wL+5Z/GWh/AOJ4mgHzqkYB+loDMC3Sm83Nf7j4pyEr8sW4/60GhZg5AbOvmABAnAsAmg+6n1Yf8
r3z6Nb7uZFgQDAMYCejlOsBP5gCMh4JQNWA1BskwwEgI5h1+nXv6pdeX8b5V6vP+j9+6gn/5J7EeBzGO
qUnAygmwtmFJAj0iyB8osrW4gSjQ6RfOAYCTQyU0QFwRdD+BIBmUpsa4/kb7qQTUrQB4Xr+yXwr0Kysi
Hl/H+W0D5Nrrp3IAlBCUalhcauG7P8vBz7y+9Pysw8/r8ltX8C//FNbrQMZxIySglYBWA+UE4fzcQ8u3
ErOYPQX6lBqgoA4QgVcGBAF+MutfE/hrFgKQcSsvoJVAiTAcb28pAgv4WhF4Xj9CBlr+LzWvZp7/8+CJ
Pl3mY00+QwP+5Z/Geh7MOLZHAjIckErACgkKEvgMpqdenUz8lW72SUh/C+iVNuA+iACwyaA7L7cDB/Ug
1QBm+qfoxf9yTHv5YoyBXm7XD/Bza7V8Yoi0BUvJbyUEm61/ZuDP/3kH8/oM/IXXZ3f2bTj4+/1ZrMXx
UySgwwGdF5BVgg4R3HvnB/GK7ftKDUG5WTX/yM0/9PHgDhGE8gAA9/pE7luhQGlsHb5S6u3JOh0WSDDL
bVKgZwnC3Nh9ADT5V+yfaAe2JH/++t/l03jsqR+iDPwiy2+V+SJ1/g0Df24bTQDyHCIkYPUKWGpgOw7N
fQnT0w1b+jfiaoAmAzE4EXS3d5aT9wQY4QBQXR816uXJeisPIDsEK2qALPcLfBnnex7f8voyuae3bTbb
OHris+Byn8X7rMY/lODPbRgIQJ6HJoF8KvsE5PMEUiFBjwgOzR3OgLk9XfMnCT92B6C+y89K9iUbguCT
Acj2gE0KpXXgoI8QgSfvK/NqJlIC7I6vDCZVQRumWtCPB488DyCaA2i1LmfgPwIOfEvyy/v5vfbeDQd/
bsNCAPJcPBLwKgRSDciegc70/vccwnVb99CQQCf+zHZfBfQ6RADAVQXFegTB75UD9dc6yLfcdgZSmX+L
BELxvwol6gCfyX3L68v3kpL/6uJZHPvFUZTlvq7tM/DrZN/Qgj+3YSIAeT4NgIYEslfAygvo3IAkglnM
z+UPHJ0eKPHnPRwEMPZpoOKdk8pgZaEO+FOhgN5Gm1kGNLYJkYD2+uDA1vtbyT+9nsX5qYSgFRosNZt4
5ET+4M7Cy0vgW1l+Fu+nHuG94eDPbdgIQJ6TRQKsTCjvJtS5gWpoMD/3IKanbvFr/iwZmJD11gNAUqqA
bdsdQ3m7VC6AfaurWgYk67zYv1hk8X8K9Na21OMbgK6oAaUgpApotl7MwP81cKmvY312N1+qzDdU4M9t
GAlAnhcjgSIk8DoHWVggFcEsdu7Yibvv+FymBqb8mr8IC0rhgEMEZh6guKqgMuh+AinPv0bgL8wjgbW4
Fbh4Hzf+b9vb0NuBnd6ApWYLTzz9RVy4eAFl0Oskn/T6VmefJfmHDvy5DSsByHNrAMmQQKsBTQTbYCmC
+bmPZ2rgNUnpH+r7n/KJAHDGwckAZDu9jn2bFeD381Vr4Lf5qlDsb4BeLyfjfyL1GfA9uV9e9wKOHv8m
bI+vM/w6yx/5rz1DCf7chpkA5PnJqb6dWIYErEog1YClCLbh0NwXMlBvSdb8I0SAgCqA3sdZLn0iDWNK
trGW61g7QAJWOVDuwzw7XU54e7TjwPd6A1qtJRw9kf9nXunpmcdnsb7M8jPJX0yBIQZ/bsNOAPocU3kB
ViWQlYLi7kKWI9iG+w7cg+u37bNvAIJNBKw5KEoEUMtMHQCcEIpxOdXj1qdpGfupWkRglQwtNcDUgV4f
Ab6M8RnwZZyv1cClK6fxg5OPowr6AvjF3XusvBet75c0UuBT3xAbBQLQ5+qRgJcgtPIDVVVw6OCnMjDf
VCvxl2z3dcgAiBECwEkBZL7y6fXxVbfbsXV14n+Q5Trevh0Avi33X8rk/lfBvb0V50cSfSMR7zMbJQKQ
5+vlBVK5Ad07wHoIOsTwwMHDGXBmYzV/Kw+AKhEAnAy6V8bie7UfG9efkt6mH6tTBSjWW3F/MWVJQblf
CvjtFicNuzdgAQ8fP4Ie0FktX9f0I7H+SMX7zEaNAOQ5azJgjxpLhQUyNNCKoEcK83NHMD21ldb8p5zE
X0QVAGofvQ2QlPjhRGBiPDezDyCYALTGaayPOOhpm7AB/GKs2VrEIycOg3t6XdJjcb4GPnt0FwP9SIA/
t1EkAH3eTAkUU10uTBGBzhP01MHuW2/Bvj2fyMCzJdb8Q4hAblchg5VLsYAfqQKUPqFGbMwyK7b3to1U
AaS8l8tWKZABP90UtITTZ7+Bc39/EVUvL+P7OsDX/6hj5OJ9ZqNKAPr8UyGBFxZ4OYLq6/W7bsb+2z+Z
AX1rvPknSAbdMXF5yVbgQBXAGktZigRSVYDSek0AqAf6SFNQq72IU898HX8+/w9UpT3L6lvAt+T+yEt+
baNOAPIaGBloNaBLhgUJsByBDg/0awYffV/+YIjZWjX/CBlAv4+61DqJwDVpBAokAEHGvVJgXdCXxxfw
nZ8+hLJn14DX3l7fr1+AXvfxW14fGHHw5zYOBKCvw1ID+VSSgKUIio5CpgoYKczggYMPZkC7KUwE1hi7
K7B7RY7H18TAPpXuWOArp57f2iahCMwxTwUEgd9uv4SHj+etu1rSM9BL4EvQW3G+19E3spJf27gQgL6e
lBrQjyPXjUS6fGiRQXn+Qwfej9nr9mZhwXT95h8C9lW/EajO150ggWgZsDueqAIUm6RA32o3sXD1DB49
+WP0gH3VmNfeXj+hR3p96fHH2utLGzcC0NfUgK0INBHo0MALDzQhaDLYmoUHn86mN/oNPokqgNxHXlrd
MqBeH7WUErDKgHLG6gXQVQAG+vI+/85k/lfQA7QGOgM8k/me1Pfi/LHx+tLGkQD0tVmJwoIAvNCA5QmY
MtCE0Fvet+dN2H3r/d1+goGafyzv74B/GG4GKqaMCPRyWeIv4NwLx3D62d+jCnAP8Nrba9BbUj/V0DM2
wC9snAlAX18DVTJg9xV4RGCRASOE6th73/427Lrx7hIZdM+GefIaVQB9tXqduRGzQAnQUwJeOVBvVw0H
FnD+X0/g57/5LWxwW4BPeXsvs89q+mPp9aWNOwHo60yVDVmOwEoYpgjBf73xtTdn6uBj2fzO5ePW7Qas
XFkg+7/afQAa6KWxIOA7Ixdw+uy38Me/5eW7xZovltDzEntejL8pvL60zUIA+noHJQKLDCxC2OLMd5Y/
fOAuzG57a3bk7Z0zq9n8k7onoJ9vmv30GbDZercpCJexcOV3+P7J/P/pSfBqUOv5FOCt5p0J8A3bbASg
r7kOEXiqwCMESQrefPl1zzv2Y+eOO9Bq78jOYirs/Vcj5k+ZVwEojS17/BamGhdx4eLTePzXp2ADdzEw
bwE+5e3rAF/Pj7VtRgJg116XCFLKQBNCiiDYtnLaed1757tww/W3Z6TwyuV1jZXQoXsVgT4Aa9vc3Lv/
nG07QM8HljKw/xcvX3oGjz31S5RBuUSmkVcTacBboJ8AP2GbmQAKSyUKLSKQ1QNJBLqkaBFDaoy9h3z/
3vS23btw2xv2Ymbmddlv+IbszGayn/J06doGLwO2s3drZn+vZW/2Mq5d+yue+9MZPHfuPMrgk1NGAIwE
UmN6P/n+LdjZfC+rv6mBX9iEAHoWJQJPFaTUgaUWUmP6/eQx5EueWzGvr0dfqzYNjGJZgkkCTL4YOJvw
ycAbi3r5Ot5+AnxhEwKoWjQ08JQBA6gH5BTgGej1+zfASYAlPlPGEmIM/JoEmrDJwCMEjzjY+0c8/UTq
B2xCALZ5RCDnGRF46oABeDoxtTw+UwCaAPR562vTZikATQBMAViKwAoRrG28FyMhz9NPgO/YhADSZhFB
MU0pA6YO6pBDCvCrCf7C+iGBCCFEQc68fF1PPwF+wCYEELeGsZzKF3gKwSMHRhZsewZ8S/6z62DGwMMA
5+UFGCG04YM84uGj3p4tT0zZhAD6s4gqkPNRlRCZ1gV+XfAXllIBKSLwAN1K7FcX8BNv36dNCGAw81RB
MWVkoJctEFvrvO3Zca3z9cxTAXLeI4MIuK1bbuuAni1PLGATAlg9ayTmIwqBjaVeMJa9c4qaRQLFNEII
EW/er4efgH5AmxDA2lhEGVjTiGIA0h5/UPAXFiEBa74fjz7x9Oto/wdH6/MKHJzfagAAAABJRU5ErkJg
gigAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAAAAoAAAAQAAAA
FgAAAB0AAAAjAAAAJgAAACgAAAAoAAAAJwAAACQAAAAeAAAAGAAAABEAAAALAAAABgAAAAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAgAAAARAAAA
HgAAAC0AAAA9AAAATAgKAGYTGACAFx4AkBceAJIXHgCSFx4AkBUcAIUJCwBqAAEAUAAAAEAAAAAvAAAA
IAAAABQAAAAKAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAJAAAA
FQAAACYAAAA+BQcAYB4nAJwzQgDNRlsA705lAP1QaAD+UWkA/lFpAP5SaQD+UWkA/lBoAP5PZgD+SV4A
9DdHANMiLACnCQwAagAAAEMAAAArAAAAFwAAAAsAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
BgAAABIAAAAnAAAAQw8UAH0yQQDLTGMA+1FpAP5UbQD+V3AA/lhzAP5adQD+W3YA/lx3AP5cdwD+W3YA
/lp1AP5ZcwD+V3EA/lVuAP5SagD+TmYA/jlKANgVGwCLAAEASgAAACsAAAAVAAAACAAAAAIAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAIAAAAKAAAAHAAAADkMEABzNEQA0E5mAP1TbAD+V3EA/lt1AP5eeQD+YH0A/mJ/AP5kgQD+ZYMA
/maEAP5mhAD+ZYMA/mSCAP5jgAD+YX0A/l56AP5bdgD+WHIA/lRtAP5QZwD+O00A3hMZAIUAAABAAAAA
IQAAAA0AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAwAAAA4AAAAlAQIATSMtAKxMYwD6U2wA/lhyAP5ceAD+YX0A/mSBAP5nhgD+aokA
/myMAP5ujgD+b48A/m+QAP5vkAD+b48A/m6OAP5sjAD+aooA/miGAP5lggD+YX4A/l15AP5ZcwD+VG0A
/k5lAP0uPADCBAUAWQAAACsAAAARAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACwGCABiOEkA11BoAP5WcAD+XHcA/mF9AP5lgwD+aokA
/m2NAP5wkQD+c5UA/nWYAP53mQD+eJsA/nicAP54nAD+eJsA/neaAP51mAD+c5UA/nGSAP5ujgD+aooA
/maEAP5ifgD+XXgA/ldxAP5SagD+QFQA5w0QAHYAAAAzAAAAFAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAQAAAALgwPAG9AVADnUmsA/llzAP5fegD+ZIIA
/mmIAP5ujgD+cpQA/naYAP55nAD+e6AA/n6iAP5/pQD+gKYA/oGmAP6BpwD+gKYA/n+lAP5+owD+fKAA
/nmdAP52mQD+c5UA/m+QAP5qiQD+ZYMA/mB8AP5adAD+VGwA/kdcAPMUGgCFAAAANgAAABQAAAAFAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA0AAAArCw4AbEVaAO5TbAD+WnQA
/mB9AP5nhQD+bIwA/nGTAP52mQD+ep4A/n6jAP6BpwD+g6oA/oWtAP6HrwD+iLAA/oiwAP6JsQD+iLAA
/oevAP6GrQD+hKoA/oGnAP5+owD+e58A/neaAP5ylAD+bY0A/miGAP5ifgD+W3YA/lVtAP5LYQD4FBoA
hQAAADMAAAARAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACgAAACQFBwBfPlAA
5VJpAP5ZcwD+YHwA/maEAP5sjAD+cpMA/neaAP58oAD+gKUA/oOpAP6GrQD+ibAA/oqzAP6MtAD+jbYA
/o22AP6NtwD+jbYA/oy1AP6LtAD+ibIA/oeuAP6EqwD+gacA/n2iAP55nAD+dJYA/m+PAP5ohwD+Yn8A
/lt2AP5UbQD+RlsA8wwQAHYAAAArAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA
GgAAAEgzQgDST2UA/lZvAP5deAD+ZIEA/mqJAP5wkQD+dpgA/nueAP5/pAD+g6kA/oatAP6JsAD+i7QA
/o22AP6OtwD+j7kA/pC5AP6QuQD+j7kA/o+4AP6NtgD+jLUA/oqyAP6HrwD+hKsA/oGmAP59oQD+eJsA
/nKUAP5tjAD+ZoQA/mB7AP5YcgD+UWkA/j5RAOcDBQBZAAAAIQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAIAAAAQAAAANh0mAKNLYAD+UmoA/lp0AP5hfQD+aIUA/m6NAP50lQD+eZsA/n2hAP6CpwD+hasA
/oivAP6KsgD+jLUA/o63AP6PuQD+kLkA/pC6AP6QugD+kLoA/pC5AP6PuAD+jbYA/ou0AP6JsQD+hq0A
/oOpAP5/pAD+e54A/naYAP5wkAD+aokA/mOAAP5cdwD+VW0A/k1jAP4rOADCAAAAQAAAABUAAAAEAAAA
AAAAAAAAAAAAAAAAAAAAAAgAAAAjCAoAaUJVAPZNZAD+VW4A/lx3AP5jgAD+aokA/nCRAP51mAD+ep4A
/n+jAP6DqQD+hq0A/oiwAP6LswD+jLUA/o63AP6PuQD+kLkA/pC6AP6QugD+kLoA/pC5AP6PuAD+jbYA
/oy0AP6KsgD+h64A/oSqAP6BpgD+fKAA/niaAP5ykwD+bIwA/maEAP5fewD+WHEA/lBoAP5IXAD9ERYA
hQAAACwAAAALAAAAAQAAAAAAAAAAAAAAAwAAABIAAAA+KDQAwkhdAP5QZwD+V3EA/l96AP5lgwD+bIsA
/nKSAP53mQD+e58A/n+kAP6DqQD+hq0A/oiwAP6KsgD+jLUA/o22AP6OtwD+j7gA/o+5AP6PuQD+j7gA
/o+4AP6OtwD+jbUA/ou0AP6KsQD+h64A/oSrAP6BpwD+faIA/nmcAP50lQD+bo4A/miGAP5hfgD+WnQA
/lNrAP5LYQD+NUQA3gABAEoAAAAYAAAABAAAAAAAAAAAAAAABwAAACIHCQBsQVQA+kpgAP5SagD+WXMA
/mB8AP5nhQD+bYwA/nOUAP53mgD+fJ8A/n+kAP6DqQD+hasA/oevAP6JsQD+i7MA/oy0AP6NtQD+jbYA
/o62AP6OtwD+jbYA/o22AP6MtQD+i7QA/oqyAP6JsAD+hq0A/oSqAP6BpgD+faIA/nmdAP51lgD+b48A
/mmIAP5jfwD+XHYA/lVtAP5NYwD+RVkA/hIXAIsAAAArAAAACgAAAAEAAAABAAAADwAAADcjLQC6RFgA
/ktiAP5TawD+WnUA/mF9AP5nhQD+bY0A/nKTAP53mgD+e58A/n6jAP6BpwD+hKoA/oasAP6HrgD+ibAA
/omxAP6KsgD+i7MA/ouzAP6LswD+i7MA/ouzAP6KsgD+ibEA/oiwAP6HrgD+hawA/oOpAP6ApQD+faEA
/nmcAP51lgD+cJAA/mqJAP5kgQD+XXgA/lZvAP5OZQD+R1sA/jA+ANgAAABDAAAAFAAAAAMAAAAEAAAA
GQABAFA5SgDyRVkA/kxjAP5UbAD+W3UA/mF9AP5nhgD+bYwA/nKTAP52mAD+ep0A/n2hAP5/pAD+gqcA
/oOpAP6FqwD+hq0A/oeuAP6HrgD+iK8A/oiwAP6IsAD+iLAA/oivAP6HrgD+h64A/oasAP6FqwD+g6kA
/oGmAP5+owD+e58A/nibAP50lQD+b5AA/mqJAP5kgQD+XXkA/lZvAP5PZgD+R1wA/kBTAP4ICgBqAAAA
IQAAAAYAAAAIAAAAJg8TAIU+UAD+RVkA/k1jAP5UbAD+WnUA/mF9AP5mhAD+bIsA/nCRAP50lgD+eJsA
/nueAP59oQD+f6QA/oGmAP6CqAD+g6kA/oOqAP6EqgD+hKsA/oWrAP6FqwD+hasA/oSrAP6EqwD+hKkA
/oOpAP6CpwD+gKUA/n6jAP58oAD+ep0A/naZAP5zlAD+bo4A/mmIAP5jgAD+XXgA/lZwAP5PZgD+SF0A
/kFTAP4bIwCnAAAAMAAAAAsAAAANAAAANB4mALU+UAD+RVkA/kxiAP5TbAD+WnQA/mB8AP5lgwD+aokA
/m+PAP5ykwD+dZgA/nibAP56ngD+fKAA/n2iAP5+owD+f6QA/oClAP6ApQD+gaYA/oGnAP6BpwD+gaYA
/oGmAP6ApgD+gKUA/n+kAP5+owD+fqIA/nygAP56nQD+d5oA/nSWAP5xkgD+bYwA/miGAP5ifwD+XHcA
/lZvAP5PZgD+SF0A/kBTAP4qNgDTAAAAQAAAABEAAAASAAAAQio2ANo9TwD+RFgA/kthAP5SagD+WHIA
/l56AP5jgAD+aIYA/myMAP5wkAD+c5QA/nWXAP53mgD+eZwA/nqdAP57nwD+fJ8A/nygAP59oQD+faEA
/n2hAP59ogD+faIA/n2hAP59oQD+fKAA/nygAP57ngD+ep0A/nibAP52mQD+dJYA/nGSAP5ujgD+aokA
/maEAP5hfQD+W3UA/lVtAP5OZQD+R1wA/kBTAP42RQD0AAAAUAAAABgAAAAXAAAATjJBAPQ8TgD+Q1cA
/kpfAP5RaAD+VnAA/lx3AP5hfQD+ZoMA/mmIAP5tjAD+b5AA/nKTAP50lQD+dZcA/naYAP53mgD+eJoA
/nibAP55nAD+eZwA/nmcAP55nAD+eZwA/nmcAP55nAD+eJsA/niaAP53mgD+dpgA/nWXAP5zlQD+cZIA
/m+PAP5riwD+aIYA/mSBAP5fegD+WXMA/lNrAP5NYwD+RloA/j9RAP44SQD+BggAawAAAB4AAAAcBQYA
YzRDAPw7TAD+QlUA/khdAP5OZQD+VG0A/lp0AP5eegD+Y38A/maEAP5piAD+bIsA/m6OAP5vkAD+cZIA
/nKTAP5zlAD+dJUA/nSWAP50lgD+dZYA/nWWAP51lgD+dZYA/nSXAP50lgD+dZYA/nSVAP5zlAD+cpMA
/nGSAP5vkAD+bo0A/muKAP5ohgD+ZYIA/mF9AP5cdwD+V3AA/lFpAP5LYQD+RFgA/j5QAP43RwD+DxMA
hgAAACQAAAAeBgcAbDNCAP45SgD+QFIA/kZaAP5MYgD+UmkA/ldwAP5bdgD+X3sA/mN/AP5mgwD+aIYA
/mqJAP5riwD+bYwA/m6OAP5ujwD+b48A/m+QAP5vkAD+cJAA/nGRAP5wkAD+cZEA/nCRAP5wkQD+cJAA
/m+QAP5ujwD+bo4A/m2MAP5riwD+aYgA/meGAP5lggD+YX4A/l15AP5ZcwD+VG0A/k9mAP5IXgD+QlYA
/jxOAP41RQD+DxQAkAAAACcAAAAfBQcAbjE/AP43RwD+PlAA/kNXAP5JXgD+T2UA/lNsAP5YcQD+XHYA
/l96AP5ifgD+ZIEA/maDAP5nhQD+aYcA/mmIAP5qiQD+a4kA/muKAP5rigD+bIoA/myKAP5siwD+bIsA
/myLAP5riwD+a4oA/muKAP5qiQD+aogA/mmHAP5nhQD+ZoMA/mSAAP5hfQD+XnkA/lp0AP5WbwD+UWkA
/kxiAP5GWwD+QFMA/jpLAP4zQgD+DhMAkgAAACgAAAAfBQcAbi89AP41RAD+O0wA/kBTAP5GWwD+S2EA
/lBnAP5UbQD+WHEA/lt1AP5eeQD+YHsA/mF+AP5jgAD+ZIEA/mWCAP5mgwD+ZoMA/maEAP5nhQD+Z4UA
/miFAP5ohQD+aIUA/meFAP5nhQD+Z4UA/maEAP5mgwD+ZYMA/mSCAP5jgAD+YX4A/l97AP5deAD+WnQA
/lZvAP5SagD+TmQA/kleAP5DVwD+Pk8A/jdIAP4xQAD+DhIAkgAAACgAAAAeBQYAayw5AP4yQQD/OEgA
/z1PAP9CVgD/R1wA/0xiAP9QZwD/VGwA/1ZwAP9ZcwD/W3YA/114AP9eegD/X3sA/2B8AP9hfQD/Yn4A
/2J/AP9ifwD/Y38A/2N/AP5jfwD+Y38A/mJ/AP5ifwD+Yn4A/mJ+AP5hfgD+YH0A/mB8AP5eegD+XXgA
/lt1AP5YcgD+Vm8A/lJqAP5OZQD+SmAA/kVZAP5AUgD+OksA/jVEAP4vPQD+DREAkAAAACcAAAAbAgMA
Xik1APsvPQD/NUQA/zpLAP8/UQD/RFcA/0hdAP9MYgD/T2YA/1JqAP9VbQD/V3AA/1hyAP9adAD/W3YA
/1x3AP9cdwD/XXgA/115AP9deQD/XnkA/196AP5fegD+XnoA/l55AP5eeQD+XnkA/l55AP5deAD+XHcA
/lt2AP5adAD+WHIA/lZwAP5UbAD+UWkA/k5lAP5KYAD+RloA/kFUAP48TgD+N0cA/jFAAP4sOQD+Cg4A
gAAAACMAAAAWAAAATCQuAPEsOQD/MUAA/zZGAP87TAD/QFIA/0RYAP9IXAD/S2AA/05kAP9QZwD/UmoA
/1RsAP9VbgD/V28A/1dwAP9YcgD/WXIA/1lzAP9ZcwD/WXMA/1lzAP5ZcwD+WXMA/llzAP5ZcwD+WXMA
/lhyAP5YcgD+V3EA/ldwAP5VbgD+VGwA/lJqAP5QZwD+TWMA/kpfAP5GWgD+QlUA/j5PAP45SQD+NEMA
/i48AP4pNQD9BAUAZwAAAB0AAAARAAAAPxoiANQpNQD/LjsA/zJBAP83RwD/O00A/z9SAP9DVgD/RloA
/0leAP9LYQD/TWQA/09mAP9QaAD/UWkA/1JqAP9TawD/VGwA/1RsAP9UbQD/VG0A/1RtAP5UbQD+VG0A
/lRtAP5VbQD+VG0A/lRsAP5TbAD+U2oA/lJpAP5QaAD+T2YA/k1jAP5LYAD+SF0A/kVZAP5CVQD+PlAA
/jpKAP41RAD+MD4A/is4AP4jLgDvAAAATAAAABcAAAAMAAAAMhAVAK4mMQD/KjcA/y88AP8zQgD/N0cA
/ztMAP8+UAD/QVQA/0RYAP9GWwD/SF4A/0pfAP9LYQD/TWMA/01kAP9OZQD/T2YA/09mAP9QZgD/UGcA
/1BnAP5QZwD+UGcA/lBnAP5QZwD+T2cA/k9mAP5OZQD+TmQA/k1jAP5LYQD+SmAA/khdAP5GWgD+Q1cA
/kBTAP49TwD+OUoA/jVFAP4xPwD+LDkA/igzAP4YIADNAAAAPQAAABAAAAAHAAAAJAYIAHkiLAD/JjIA
/ys3AP8vPAD/MkEA/zZGAP85SgD/PE4A/z9RAP9BVAD/Q1cA/0VZAP9GWwD/R1wA/0hdAP9JXgD/Sl8A
/0pgAP9KYAD/S2EA/0tgAP5LYQD+S2EA/kthAP5KYAD+SmAA/kpgAP5JXwD+SV4A/kdcAP5GWwD+RVkA
/kNXAP5BVAD+PlEA/jtNAP44SQD+NUQA/jE/AP4tOgD+KDQA/iQvAP4NEQCcAAAALQAAAAoAAAADAAAA
FwAAAEsaIgDqIi0A/yYyAP8qNwD/LjsA/zFAAP80RAD/N0cA/zpLAP88TgD/PlAA/0BSAP9BVAD/QlYA
/0NXAP9EWAD/RFgA/0VZAP9FWQD/RloA/0ZaAP5GWgD+RloA/kZaAP5GWgD+RVoA/kVZAP5EWAD+RFcA
/kNWAP5BVAD+QFIA/j5QAP48TQD+OUoA/jZGAP4zQgD+MD4A/iw5AP4oNAD+JS8A/iAqAPsCAwBgAAAA
HgAAAAUAAAABAAAADQAAADMNEQCsHygA/yItAP8mMQD/KTUA/y06AP8yQAP/NUQE/zhHBP86SgT/PE0F
/z5PBf9AUQX/QVIF/0JUBf9DVQX/RFYF/0RXBv9FVwb/RVcG/0VYBv5GWAb+RlgG/kZYB/5GWAf+RlgH
/kVXCP5EVgj+RFUI/kNUCP5CUwj+QVEJ/j9PCf4+TQn+O0oJ/jhGCP4xPwP+KzgA/ig0AP4kLwD+ISoA
/hQaAMsAAAA+AAAAEgAAAAIAAAAAAAAABgAAAB8BAgBgGiEA9h4nAP8iLAD/JTAA/yw3Bf88RxT/QE0X
/0NPF/9FUhj/R1QY/0lXGP9KWRn/S1oZ/0xbGf9NXBn/Tl0a/09eGv9PXxr/UF8b/1BgG/5RYBv+UWAb
/lFgHP5RYBz+UWAc/lBfHP5QXx3+T14d/k9dHf5OXB3+TVod/kxYHv5KVh7+SFQe/kVQHf41QQ3+JzIA
/iMuAP4gKgD+HSUA/QYHAH0AAAAnAAAACQAAAAAAAAAAAAAAAgAAABAAAAA4DA8AshoiAP8dJgD/ICoA
/y03C/9KVCv/UFov/1JcL/9UXi//VmEw/1djMP9YZDD/WWUx/1pnMf9bZzH/XGkx/11pMv9dajL/Xmoy
/15rMv5eazP+X2sz/l9rM/5fazP+Xms0/l5qNP5eajT+XWk0/l1pNf5cZzX+W2Y1/lplNf5ZYzb+V2E2
/lRdNP45Qxj+IiwA/h8pAP4cJQD+EhcA0AAAAEMAAAAVAAAAAwAAAAAAAAAAAAAAAAAAAAYAAAAfAQEA
WxQaAO4ZIQD/HCQA/yw1D/9aYUH/YmpJ/2RsSf9lbkn/Z29K/2hxSv9pckr/anRK/2t0Sv9sdUr/bXZL
/213S/9td0v/bnhL/254TP5ueUz+bnlM/m55TP5veU3+b3lN/m54Tf5ud03+bndN/m12Tv5sdk7+bHRO
/mtzTv5qck/+aHBP/mNrS/45Qh3+HicA/hsjAP4YHwD6BAUAcwAAACcAAAAJAAAAAQAAAAAAAAAAAAAA
AAAAAAIAAAAOAAAAMAUHAIwWHAD+GB8A/iQsC/5mbFP+d3xk/nh+ZP55f2X/e4Fl/3yCZf99g2X/fYRl
/36FZf9/hmb/f4dm/4CHZv+AiGb/gYhn/4GIZ/6BiWf+goln/oGJZ/6BiWj+gYho/oGIaP6BiGj+gYho
/oCHaf6Ahmn+f4Vp/n6Eaf5+g2n+fIJp/nF3Xv4wNxf+GSEA/hceAP4KDQCsAAAAOgAAABIAAAADAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFgAAAEAKDQC8FBoA/hkgBP5hZVD+jZGA/o+Tgv6QlIL/kZWC
/5KXgv+TmIL/k5iC/5SZgv+UmoP/lZqD/5Wbg/+Wm4P/lpuD/5acg/6WnIP+lpyE/pachP6WnIT+lpyE
/pachP6Wm4T+lpuF/paahf6VmoX+lZmF/pSYhf6UmIX+kpaF/m5zXv4fJgj+FRwA/g8UANcAAABNAAAA
HAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACAAAAB8AAABQDA8A0xIYAP49Qi3+nJ+T
/qirn/6qrKD/qq2g/6uuoP+rrqH/rK+h/6ywof+tsKH/rbCh/62xof+tsaH/rrGh/66xof6usqL+rrKi
/q6yov6usaL+rrGi/q6xov6tsaL+rrGi/q2wo/6tsaP+rbCj/q2vo/6sr6P+pKaa/khNOP4UGgD+DxQA
5wECAGIAAAAlAAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAkAAEA
WgsPAN4YHQj+g4V6/sPEvv7Fx8D/x8jB/8fJwv/IycL/yMnC/8jKwv/IysL/yMrC/8nKwv/Jy8L/ycvC
/8nLwv7Jy8P+ycvD/snLw/7Jy8P+ycvD/snLw/7Jy8P+ycvD/snKw/7JysP+ycrD/sjKxP7Gx8H+h4p+
/hsgC/4PEwDuAwQAbwAAACwAAAAOAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAIAAAANAAAAJwABAFoJDADTLC8g/rq7tv7k5OL/5OXj/+Xl4//l5uP/5ebk/+Xm5P/l5uT/5ubk
/+bm5P/m5+T/5ufk/+bn5P7m5+T+5+fl/ubn5f7m5+X+5+fl/ubn5f7m5+X+5ufl/ubn5f7n5+X+5ufl
/uTl4/61t7D+LTEg/gwPAOUCAwBsAAAALgAAABAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADQAAACQAAABQBggAvDs+M/7S09D/+fn5//r6+v/6+vr/+vr6
//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v76+vr++vr6/vr6+v76+vr++vr6/vr6+v76+vr++vr6
/vr6+v76+vr++Pj4/sjJxf42OSz+CQwA0gEBAF8AAAArAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAsAAAAeAAAAQAIDAIwuMCfuuLm2
//n5+f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f79/f3+/f39/v39/f79/f3+/f39
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
/0ZbAO0iLACjAgIARQAAABoAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAIAAAAJRAVAHVCVQDlVW0A/1t2AP9hfQD/ZoMA/2mIAP9siwD/bY0A/22NAP9siwD/aYgA
/2aEAP9ifgD/XHcA/1VvAP9GWwDtFh0AhQAAACsAAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAACgAAAC8gKgCfUGcA/Fp0AP9ifgD/aYcA/2+PAP9zlQD/d5oA/3mdAP96ngD/ep4A
/3mdAP93mgD/dJYA/2+QAP9piAD/Y4AA/1t2AP9SagD+KDQAsgAAADYAAAAMAAAAAQAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAgAAAAuKTUAsFNrAP9deAD/ZoQA/26PAP91mAD/e58A/4ClAP+DqQD/hawA
/4auAP+HrgD/ha0A/4OqAP+ApgD/fKAA/3aZAP9vkAD/Z4YA/156AP9UbQD/MkEAxAAAADYAAAAKAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAJB0mAJxRaQD/XHYA/2aDAP9vjwD/d5kA/36iAP+DqQD/h68A
/4uzAP+NtgD/jrcA/463AP+NtgD/i7QA/4iwAP+EqwD/f6QA/3mcAP9xkgD/aIYA/155AP9TbAD/JzMA
sgAAACsAAAAGAAAAAAAAAAAAAAAAAAAAAQAAABQNEABvSmAA+1dwAP9ifgD/bIsA/3SWAP98nwD/gqcA
/4euAP+LswD/jbYA/4+5AP+QugD/kLoA/5C5AP+OtwD/jLQA/4ivAP+DqQD/faIA/3aYAP9ujgD/ZIEA
/1lzAP9OZQD+FRsAhQAAABoAAAACAAAAAAAAAAAAAAAHAAAANzdIAN9QZwD/W3YA/2WDAP9vjwD/d5oA
/36jAP+DqgD/iK8A/4u0AP+OtwD/j7kA/5C6AP+QugD/kLkA/463AP+MtQD/ibEA/4WsAP+ApQD/eZwA
/3GSAP9ohgD/XnkA/1NrAP9AUgDtAgIARQAAAAoAAAAAAAAAAQAAABcVGwCKSF0A/1NrAP9eeQD/aIYA
/3GSAP94mwD/fqMA/4SpAP+HrgD/irIA/4y0AP+NtgD/jrcA/463AP+OtwD/jbUA/4uzAP+IsAD/hasA
/4ClAP96ngD/c5QA/2qJAP9hfQD/Vm8A/0pgAP8dJgCjAAAAHQAAAAIAAAAFAAAAMTFAANtKXwD/VW4A
/197AP9phwD/cZIA/3ibAP99oQD/gacA/4WrAP+HrgD/ibAA/4qxAP+KsgD/irIA/4qyAP+JsQD/iK8A
/4atAP+DqQD/f6QA/3qdAP9zlQD/a4sA/2J/AP9YcQD/TWMA/zpLAO0AAAA8AAAABwAAAAwHCQBeQFIA
/ktgAP9WbgD/X3sA/2iGAP9wkAD/dpgA/3ueAP9+owD/gaYA/4OpAP+EqgD/hawA/4asAP+GrAD/hawA
/4WrAP+EqgD/gqgA/4ClAP98oAD/d5oA/3KTAP9rigD/Yn4A/1hyAP9NZAD/QlUA/w8TAHkAAAARAAAA
FxYdAJg/UgD/SmAA/1VtAP9eeQD/ZoQA/22NAP9ylAD/d5kA/3qdAP98oAD/fqIA/3+kAP9/pAD/gKUA
/4ClAP+ApQD/f6QA/36jAP99ogD/e58A/3ibAP90lgD/b48A/2mHAP9gfAD/V3EA/01jAP9CVQD/HicA
sAAAAB0AAAAhICkAvT5RAP9JXgD/UmoA/1t2AP9jfwD/aYgA/26OAP9ykwD/dZcA/3eZAP94mwD/eZwA
/3qdAP96nQD/ep4A/3qeAP96nQD/eZwA/3ibAP92mAD/dJUA/3CRAP9rigD/ZYMA/155AP9VbgD/S2EA
/0FUAP8oNADTAAAAKgAAAComMQDWPE4A/0ZbAP9PZgD/WHEA/196AP9kggD/aYcA/2yMAP9vjwD/cZEA
/3KTAP9zlAD/c5UA/3SVAP90lQD/dJUA/3OVAP9zlAD/cpMA/3CRAP9ujgD/a4oA/2aEAP9hfQD/WnQA
/1JqAP9JXgD/P1EA/y48AOkAAAA0AAAALSUwANo5SgD/Q1YA/0thAP9TawD/WnQA/197AP9jgAD/ZoQA
/2mHAP9qiQD/a4sA/2yLAP9sjAD/bYwA/22MAP9tjAD/bIwA/2yLAP9riwD/aokA/2iGAP9lggD/YX0A
/1x3AP9WbwD/TmUA/0VZAP88TQD/LDoA7QAAADgAAAAtIi0A2jZFAP8+UQD/RlsA/05kAP9UbQD/WXMA
/114AP9gfAD/Yn8A/2SAAP9lggD/ZYMA/2aDAP9mgwD/ZoMA/2aDAP9mhAD/ZYMA/2WCAP9jgAD/YX4A
/196AP9bdgD/Vm8A/1BoAP9JXgD/QVQA/zhJAP8qNgDtAAAAOAAAACkeJwDTMUAA/zpKAP9BVAD/SF0A
/05kAP9TawD/Vm8A/1lzAP9bdgD/XXgA/155AP9eegD/XnoA/197AP9gewD/X3sA/197AP9fegD/XnkA
/113AP9bdQD/WHIA/1RtAP9QZwD/SmAA/0NXAP88TgD/NEMA/yYxAOcAAAAzAAAAIBYcALotOgD/NEMA
/ztMAP9CVQD/R1wA/0xiAP9PZgD/UmoA/1RtAP9WbwD/V3AA/1hxAP9YcQD/WHIA/1hyAP9YcgD/WHIA
/1hxAP9XcAD/Vm4A/1RsAP9RaQD/TmQA/0lfAP9EWAD/PlAA/zdGAP8vPQD/HCUA0AAAACkAAAAVDBAA
kSgzAP8uPAD/NUQA/ztMAP9AUwD/RFkA/0hdAP9LYQD/TWMA/05lAP9PZwD/UGgA/1FoAP9RaQD/UWkA
/1FoAP9RaAD/UGgA/09nAP9OZQD/TGIA/0pfAP9GWwD/QlYA/z1PAP83RwD/MT8A/yo2AP8SGACqAAAA
HAAAAAsCAwBWIiwA/Sg0AP8vPAD/NEMA/zlKAP89TwD/QVMA/0NXAP9FWQD/R1sA/0hdAP9JXgD/SV8A
/0pfAP9KXwD/Sl8A/0pfAP9JXgD/SF0A/0dbAP9FWQD/QlYA/z9RAP87TAD/NkYA/zE/AP8rNwD/JC8A
/wcJAHAAAAAPAAAABAAAAC0VGwDSIi0A/yg0AP8tOgD/M0EC/zhHA/87SwP/Pk8D/0BSA/9BVAP/Q1YD
/0RXBP9FWAT/RVgE/0VYBP9FWAT/RVgF/0VXBf9EVgX/Q1UF/0FTBv8/Twb/PEwG/zhHBv8wPgH/KjYA
/yQvAP8bIgDmAAAANwAAAAYAAAABAAAAFAYIAH0dJQD/ISsA/yo1BP9BTBv/RlId/0lWHf9MWR7/Tlse
/09eH/9RXx//UmEg/1NiIP9UYiD/VGMh/1RjIf9UYyH/VGIi/1NhIv9SYCP/UV4j/09cI/9NWST/SVQj
/zE8C/8jLgD/HigA/woOAJcAAAAaAAAAAQAAAAAAAAAGAAAAMhEWANQbIwD/JzAJ/1hgPv9fZ0P/YWpD
/2RtQ/9lb0T/ZnFE/2hyRP9pdEX/anRF/2p1Rf9qdUb/anVG/2t1Rv9qdUf/anRH/2lzSP9ockj/Z3BI
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
</value>
</data>
</root>

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2019 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -24,11 +24,6 @@ You can contact me at http://www.njcrawford.com/contact
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace embroideryReader

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2014 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2018 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -23,7 +23,6 @@ You can contact me at http://www.njcrawford.com/contact/.
*/
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace embroideryTester

Wyświetl plik

@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("emroideryTester")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2011")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Wyświetl plik

@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1433
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryTester.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("embroideryTester.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

Wyświetl plik

@ -1,63 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryTester.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("embroideryTester.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

Wyświetl plik

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

Wyświetl plik

@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.1433
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryTester.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

Wyświetl plik

@ -1,26 +0,0 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4200
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace embroideryTester.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

Wyświetl plik

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
// Runtime Version:4.0.30319.18408
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.

Wyświetl plik

@ -0,0 +1,3 @@
<?xml version="1.0"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>

Wyświetl plik

@ -1,91 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A80DF4D8-967D-4352-9E1D-F22D23236BE2}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryTester</RootNamespace>
<AssemblyName>embroideryTester</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<SubType>Designer</SubType>
<DependentUpon>Form1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources-2008.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources-2008.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings-2008.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings-2008.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2008.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Wyświetl plik

@ -5,7 +5,7 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A80DF4D8-967D-4352-9E1D-F22D23236BE2}</ProjectGuid>
<ProjectGuid>{0B91A835-C5E1-479F-A56B-D2E8E5A2FFC1}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryTester</RootNamespace>
@ -13,10 +13,10 @@
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -73,10 +73,10 @@
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources-2010.Designer.cs</LastGenOutput>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources-2010.Designer.cs">
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
@ -84,20 +84,14 @@
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings-2010.Designer.cs</LastGenOutput>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings-2010.Designer.cs">
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2010.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
@ -115,6 +109,12 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile.csproj">
<Project>{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -1,7 +1,7 @@
/*
Embroidery Reader - an application to view .pes embroidery designs
Copyright (C) 2011 Nathan Crawford
Copyright (C) 2018 Nathan Crawford
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
@ -23,7 +23,6 @@ You can contact me at http://www.njcrawford.com/contact/.
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
@ -175,7 +174,7 @@ namespace embroideryThumbs
logfile.WriteLine("Called Extract");
logfile.Close();
System.Drawing.Bitmap designBitmap = designFile.designToBitmap(3, false, 0);
System.Drawing.Bitmap designBitmap = designFile.DesignToBitmap(3, false, 0, 1.0f);
IntPtr hBmp = designBitmap.GetHbitmap();

Wyświetl plik

@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("embroideryThumbs")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2011")]
[assembly: AssemblyCopyright("Copyright © Nathan Crawford 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Wyświetl plik

@ -1,63 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryThumbs</RootNamespace>
<AssemblyName>embroideryThumbs</AssemblyName>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RegisterForComInterop>true</RegisterForComInterop>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="PESThumbnail.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2005.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PreBuildEvent>
</PreBuildEvent>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>

Wyświetl plik

@ -1,67 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryThumbs</RootNamespace>
<AssemblyName>embroideryThumbs</AssemblyName>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>2.0</OldToolsVersion>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<RegisterForComInterop>false</RegisterForComInterop>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="PESThumbnail.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2008.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<PreBuildEvent>"$(ProjectDir)\IncrementVersionNumber.exe" --prebuild</PreBuildEvent>
<PostBuildEvent>"$(ProjectDir)\IncrementVersionNumber.exe" --postbuild</PostBuildEvent>
</PropertyGroup>
</Project>

Wyświetl plik

@ -5,7 +5,7 @@
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{978B855C-C9CD-4A5E-A335-9ED8DD3E001A}</ProjectGuid>
<ProjectGuid>{C4E7E0E5-EA6E-45DC-809A-1EF1FF8CCFE0}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>embroideryThumbs</RootNamespace>
@ -13,10 +13,10 @@
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>3.5</OldToolsVersion>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<TargetFrameworkProfile />
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
@ -63,12 +63,6 @@
<Compile Include="PESThumbnail.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile-2010.csproj">
<Project>{66EF662E-F52C-4104-9C15-A14266D8F3B8}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
@ -86,6 +80,12 @@
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PesFile\PesFile.csproj">
<Project>{DBF6F9B8-D00A-4BC0-BECF-EE4081F22375}</Project>
<Name>PesFile</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

Wyświetl plik

@ -1,219 +0,0 @@
# DotNET and MSI version checking macro.
# Written by AnarkiNet(AnarkiNet@gmail.com) originally, modified by eyal0 (for use in http://www.sourceforge.net/projects/itwister)
# MSI check code based on http://www.codeproject.com/useritems/NSIS.asp
# Downloads the MSI version 3.1 and runs it if the user does not have the correct version.
# Downloads and runs the Microsoft .NET Framework version 2.0 Redistributable and runs it if the user does not have the correct version.
# To use, call the macro with a string:
# !insertmacro CheckDotNET "2"
# !insertmacro CheckDotNET "2.0.9"
# (Version 2.0.9 is less than version 2.0.10.)
# All register variables are saved and restored by CheckDotNet
# No output
!macro CheckDotNET DotNetReqVer
!define DOTNET_URL "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f5%2f6%2f7%2f567758a3-759e-473e-bf8f-52154438565a%2fdotnetfx.exe"
!define MSI31_URL "http://download.microsoft.com/download/1/4/7/147ded26-931c-4daf-9095-ec7baf996f46/WindowsInstaller-KB893803-v2-x86.exe"
DetailPrint "Checking your .NET Framework version..."
;callee register save
Push $0
Push $1
Push $2
Push $3
Push $4
Push $5
Push $6 ;backup of intsalled ver
Push $7 ;backup of DoNetReqVer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; MSI ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GetDLLVersion "$SYSDIR\msi.dll" $R0 $R1
IntOp $R2 $R0 / 0x00010000 ; $R2 now contains major version
IntOp $R3 $R0 & 0x0000FFFF ; $R3 now contains minor version
IntOp $R4 $R1 / 0x00010000 ; $R4 now contains release
IntOp $R5 $R1 & 0x0000FFFF ; $R5 now contains build
StrCpy $0 "$R2.$R3.$R4.$R5" ; $0 now contains string like "1.2.0.192"
${If} $R2 < '3'
;options
SetOutPath "$TEMP"
SetOverwrite on
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
"Your MSI version: $0.$\nRequired Version: 3 or greater.$\nDownload MSI version from www.microsoft.com?" \
/SD IDYES IDYES DownloadMSI IDNO NewMSI
goto GiveUpDotNET ;IDCANCEL
${Else}
DetailPrint "MSI3.1 already installed"
goto NewMSI
${EndIf}
DownloadMSI:
DetailPrint "Beginning download of MSI3.1."
NSISDL::download ${MSI31_URL} "$TEMP\WindowsInstaller-KB893803-v2-x86.exe"
DetailPrint "Completed download."
Pop $0
${If} $0 == "cancel"
MessageBox MB_YESNO|MB_ICONEXCLAMATION \
"Download cancelled. Continue Installation?" \
IDYES NewMSI IDNO GiveUpDotNET
${ElseIf} $0 != "success"
MessageBox MB_YESNO|MB_ICONEXCLAMATION \
"Download failed:$\n$0$\n$\nContinue Installation?" \
IDYES NewMSI IDNO GiveUpDotNET
${EndIf}
DetailPrint "Pausing installation while downloaded MSI3.1 installer runs."
ExecWait '$TEMP\WindowsInstaller-KB893803-v2-x86.exe /quiet /norestart' $0
DetailPrint "Completed MSI3.1 install/update. Exit code = '$0'. Removing MSI3.1 installer."
Delete "$TEMP\WindowsInstaller-KB893803-v2-x86.exe"
DetailPrint "MSI3.1 installer removed."
goto NewMSI
NewMSI:
DetailPrint "MSI3.1 installation done. Proceeding with remainder of installation."
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NetFX ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
StrCpy $7 ${DotNetReqVer}
System::Call "mscoree::GetCORVersion(w .r0, i ${NSIS_MAX_STRLEN}, *i r2r2) i .r1 ?u"
${If} $0 == 0
DetailPrint ".NET Framework not found, download is required for program to run."
Goto NoDotNET
${ElseIf} $0 == ""
DetailPrint ".NET Framework not found, download is required for program to run."
Goto NoDotNET
${EndIf}
;at this point, $0 has maybe v2.345.678.
StrCpy $0 $0 $2 1 ;remove the starting "v", $0 has the installed version num as a string
StrCpy $6 $0
StrCpy $1 $7 ;$1 has the requested verison num as a string
;MessageBox MB_OKCANCEL "found $0" IDCANCEL GiveUpDotNET
;MessageBox MB_OKCANCEL "looking for $1" IDCANCEL GiveUpDotNET
;now let's compare the versions, installed against required <part0>.<part1>.<part2>.
${Do}
StrCpy $2 "" ;clear out the installed part
StrCpy $3 "" ;clear out the required part
${Do}
${If} $0 == "" ;if there are no more characters in the version
StrCpy $4 "." ;fake the end of the version string
${Else}
StrCpy $4 $0 1 0 ;$4 = character from the installed ver
${If} $4 != "."
StrCpy $0 $0 ${NSIS_MAX_STRLEN} 1 ;remove that first character from the remaining
${EndIf}
${EndIf}
${If} $1 == "" ;if there are no more characters in the version
StrCpy $5 "." ;fake the end of the version string
${Else}
StrCpy $5 $1 1 0 ;$5 = character from the required ver
${If} $5 != "."
StrCpy $1 $1 ${NSIS_MAX_STRLEN} 1 ;remove that first character from the remaining
${EndIf}
${EndIf}
;MessageBox MB_OKCANCEL "installed $2,$4,$0 required $3,$5,$1" IDCANCEL GiveUpDotNET
${If} $4 == "."
${AndIf} $5 == "."
${ExitDo} ;we're at the end of the part
${EndIf}
${If} $4 == "." ;if we're at the end of the current installed part
StrCpy $2 "0$2" ;put a zero on the front
${Else} ;we have another character
StrCpy $2 "$2$4" ;put the next character on the back
${EndIf}
${If} $5 == "." ;if we're at the end of the current required part
StrCpy $3 "0$3" ;put a zero on the front
${Else} ;we have another character
StrCpy $3 "$3$5" ;put the next character on the back
${EndIf}
${Loop}
;MessageBox MB_OKCANCEL "finished parts: installed $2,$4,$0 required $3,$5,$1" IDCANCEL GiveUpDotNET
${If} $0 != "" ;let's remove the leading period on installed part if it exists
StrCpy $0 $0 ${NSIS_MAX_STRLEN} 1
${EndIf}
${If} $1 != "" ;let's remove the leading period on required part if it exists
StrCpy $1 $1 ${NSIS_MAX_STRLEN} 1
${EndIf}
;$2 has the installed part, $3 has the required part
${If} $2 S< $3
IntOp $0 0 - 1 ;$0 = -1, installed less than required
${ExitDo}
${ElseIf} $2 S> $3
IntOp $0 0 + 1 ;$0 = 1, installed greater than required
${ExitDo}
${ElseIf} $2 == ""
${AndIf} $3 == ""
IntOp $0 0 + 0 ;$0 = 0, the versions are identical
${ExitDo}
${EndIf} ;otherwise we just keep looping through the parts
${Loop}
${If} $0 < 0
DetailPrint ".NET Framework Version found: $6, but is older than the required version: $7"
Goto OldDotNET
${Else}
DetailPrint ".NET Framework Version found: $6, equal or newer to required version: $7."
Goto NewDotNET
${EndIf}
NoDotNET:
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
".NET Framework not installed.$\nRequired Version: $7 or greater.$\nDownload .NET Framework version from www.microsoft.com?" \
/SD IDYES IDYES DownloadDotNET IDNO NewDotNET
goto GiveUpDotNET ;IDCANCEL
OldDotNET:
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
"Your .NET Framework version: $6.$\nRequired Version: $7 or greater.$\nDownload .NET Framework version from www.microsoft.com?" \
/SD IDYES IDYES DownloadDotNET IDNO NewDotNET
goto GiveUpDotNET ;IDCANCEL
DownloadDotNET:
DetailPrint "Beginning download of latest .NET Framework version."
NSISDL::download ${DOTNET_URL} "$TEMP\dotnetfx.exe"
DetailPrint "Completed download."
Pop $0
${If} $0 == "cancel"
MessageBox MB_YESNO|MB_ICONEXCLAMATION \
"Download cancelled. Continue Installation?" \
IDYES NewDotNET IDNO GiveUpDotNET
${ElseIf} $0 != "success"
MessageBox MB_YESNO|MB_ICONEXCLAMATION \
"Download failed:$\n$0$\n$\nContinue Installation?" \
IDYES NewDotNET IDNO GiveUpDotNET
${EndIf}
DetailPrint "Pausing installation while downloaded .NET Framework installer runs."
ExecWait '$TEMP\dotnetfx.exe /q /c:"install /q"'
DetailPrint "Completed .NET Framework install/update. Removing .NET Framework installer."
Delete "$TEMP\dotnetfx.exe"
DetailPrint ".NET Framework installer removed."
goto NewDotNet
GiveUpDotNET:
Abort "Installation cancelled by user."
NewDotNET:
DetailPrint "Proceeding with remainder of installation."
Pop $0
Pop $1
Pop $2
Pop $3
Pop $4
Pop $5
Pop $6 ;backup of intsalled ver
Pop $7 ;backup of DoNetReqVer
!macroend

Wyświetl plik

@ -1,4 +0,0 @@
..\embroideryReader\bin\Release\embroideryReader.exe
..\embroideryReader\nc_settings.dll
..\embroideryReader\nc_Updater.dll
..\PesFile\bin\Release\PesFile.dll

Wyświetl plik

@ -1,150 +0,0 @@
; example2.nsi
;
; This script is based on example1.nsi, but it remember the directory,
; has uninstall support and (optionally) installs start menu shortcuts.
;
; It will install example2.nsi into a directory that the user selects,
!include LogicLib.nsh
!include "DotNET.nsh"
#define DOTNET_VERSION "2.0"
;--------------------------------
; The name of the installer
Name "Embroidery Reader"
; The file to write
OutFile "embroideryReadervvv-setup.exe"
; The default installation directory
InstallDir "$PROGRAMFILES\Embroidery Reader"
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\Embroidery Reader" "Install_Dir"
;--------------------------------
; Pages
Page components
Page directory
Page instfiles
UninstPage uninstConfirm
UninstPage instfiles
;--------------------------------
; The stuff to install
Section "Embroidery Reader (required)"
SectionIn RO
;check for .net 2
!insertmacro CheckDotNet "2.0"
; Set output path to the installation directory.
SetOutPath $INSTDIR
; Put file there
File "embroideryReader.exe"
File "IniFile.dll"
File "PesFile.dll"
File "UpdateCheck.dll"
; Write the installation path into the registry
WriteRegStr HKLM "SOFTWARE\Embroidery Reader" "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Embroidery Reader" "DisplayName" "Embroidery Reader"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Embroidery Reader" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Embroidery Reader" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Embroidery Reader" "NoRepair" 1
WriteUninstaller "uninstall.exe"
SectionEnd
; Optional section (can be disabled by the user)
Section "Start Menu Shortcuts"
CreateDirectory "$SMPROGRAMS\Embroidery Reader"
CreateShortCut "$SMPROGRAMS\Embroidery Reader\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\Embroidery Reader\Embroidery Reader.lnk" "$INSTDIR\embroideryReader.exe" "" "$INSTDIR\embroideryReader.exe" 0
SectionEnd
Section "Associate with .PES files"
; back up old value of .pes
!define Index "Line${__LINE__}"
ReadRegStr $1 HKCR ".pes" ""
StrCmp $1 "" "${Index}-NoBackup"
StrCmp $1 "EmbroideryDesign" "${Index}-NoBackup"
WriteRegStr HKCR ".pes" "backup_val" $1
"${Index}-NoBackup:"
WriteRegStr HKCR ".pes" "" "EmbroideryDesign"
ReadRegStr $0 HKCR "EmbroideryDesign" ""
StrCmp $0 "" 0 "${Index}-Skip"
WriteRegStr HKCR "EmbroideryDesign" "" "Embroidery Design File"
WriteRegStr HKCR "EmbroideryDesign\shell" "" "open"
WriteRegStr HKCR "EmbroideryDesign\DefaultIcon" "" "$INSTDIR\embroideryReader.exe,0"
"${Index}-Skip:"
WriteRegStr HKCR "EmbroideryDesign\shell\open\command" "" '$INSTDIR\embroideryReader.exe "%1"'
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
!undef Index
SectionEnd
;--------------------------------
; Uninstaller
Section "Uninstall"
;start of restore script
!define Index "Line${__LINE__}"
ReadRegStr $1 HKCR ".pes" ""
StrCmp $1 "EmbroideryDesign" 0 "${Index}-NoOwn" ; only do this if we own it
ReadRegStr $1 HKCR ".pes" "backup_val"
StrCmp $1 "" 0 "${Index}-Restore" ; if backup="" then delete the whole key
DeleteRegKey HKCR ".pes"
Goto "${Index}-NoOwn"
"${Index}-Restore:"
WriteRegStr HKCR ".pes" "" $1
DeleteRegValue HKCR ".pes" "backup_val"
DeleteRegKey HKCR "EmbroideryDesign" ;Delete key with association settings
System::Call 'Shell32::SHChangeNotify(i 0x8000000, i 0, i 0, i 0)'
"${Index}-NoOwn:"
!undef Index
; Remove registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Embroidery Reader"
DeleteRegKey HKLM "SOFTWARE\Embroidery Reader"
; Remove files and uninstaller
Delete $INSTDIR\embroideryReader.exe
Delete $INSTDIR\uninstall.exe
Delete $INSTDIR\PesFile.dll
Delete $INSTDIR\UpdateCheck.dll
Delete $INSTDIR\IniFile.dll
; Remove obsolete files from previous versions, if they exist
Delete $INSTDIR\UpdateInstaller.exe
RMDir "$INSTDIR\update"
Delete $INSTDIR\nc_settings.dll
Delete $INSTDIR\embroideryreader.ini
Delete $INSTDIR\nc_Updater.dll
; Remove shortcuts, if any
Delete "$SMPROGRAMS\Embroidery Reader\*.*"
; Remove directories used
RMDir "$SMPROGRAMS\Embroidery Reader"
RMDir "$INSTDIR"
SectionEnd

Wyświetl plik

@ -0,0 +1,12 @@
This folder contains the master file for all the translations (translations.ods)
as well as any loadable tranlations created from it.
Translations.ods is formatted with the language name in the first row, and all
translated strings for that language in the rows below. The first column
contains the ID for the strings in that row. Language ini files are generated
by concatenating the first column, an equals sign and the column under the
language name. (see "English (EN-US).ini" for an example) The string replacements
column gives some context for what the replacement will contain.
The TranslationBuilder project included with this source code can build all the
translations from the spreadsheet automatically.

Wyświetl plik

@ -0,0 +1,62 @@
update location posizione dell'aggiornamento
background color colore di sfondo
enabled abilitato
red rosso
green verde
blue blu
filter stitches filtra punti di ricamo
filter stitches threshold filtra soglia punti di ricamo
thread thickness spessore del filo
last open file folder cartella dell'ultimo file aperto
last save image location posizione dell'ultima immagine salvata
window width larghezza della finestra
window height altezza della finestra
yes sì
The format of this file is not completely supported Il formato di questo file non è pienamente supportato
Colors shown for this design may be inaccurate I colori mostrati per questo progetto potrebbero non essere precisi
An error occured while reading the file: Si è verificato un errore durante la lettura del file:
This file is either corrupt or not a valid PES file. Questo file è corrotto oppure non è un file PES valido.
Embroidery Files (*.pes)|*.pes|All Files (*.*)|*.* Files Embroidery (*.pes)|*.pes|Tutti i File (*.*)|*.*
EmbroideryReader version Versione EmbroideryReader
Encountered an error while checking for updates: Si è verificato un errore durante il controllo degli aggiornamenti:
Version Versione
An error occured while trying to open the webpage: Si è verificato un errore durante l'apertura della pagina web:
No updates are available right now. Nessun aggiornamento disponibile al momento.
There was an error while saving debug info: Si è verificato un errore durante il salvataggio delle informazioni di debug:
No design loaded. Nessun progetto caricato.
This file contains a class that is not yet supported Questo file contiene una classe che non è ancora supportata
Bitmap (*.bmp)|*.bmp|PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|All Files (*.*)|*.* Bitmap (*.bmp)|*.bmp|PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|Tutti i File (*.*)|*.*
Image saved Immagine salvata
Open... Apri...
Save as image... Salva come immagine...
Print... Stampa...
Print Preview... Anteprima di stampa...
Exit Esci
Edit Modifica
Copy Copia
Preferences... Preferenze...
View Visualizza
Rotate left Ruota a destra
Rotate right Ruota a sinistra
Reset Reimposta
Help Aiuto
Check for update Controlla aggiornamenti
Save design debug info Salva le informazioni di debug del progetto
Show design debug info Mostra le informazioni di debug del progetto
About Informazioni su...
Pick Color... Scegli colore...
Background Color Colore di sfondo
Reset Color Reimposta colore
Cancel Annulla
Thread thickness: Spessore del filo:
pixels pixel
Background Sfondo
Stitch drawing Tracciamento dei punti di ricamo
Remove \'ugly\' stitches Rimuovi i punti di ricamo \'orrendi\'
Ugly Length: Lunghezza di un punto orrendo:
Embroidery Reader Settings Impostazioni di Embroidery Reader
Latest versoin is L\'ultima versione è la
you have version stai utilizzando la versione
This program reads and displays embroidery designs from .PES files Questo programma legge e visualizza progetti di ricamo da files .PES
"Version " + updater.VersionAvailable() + " was released on " + updater.getReleaseDate().ToShortDateString() + "." + Environment.NewLine + "You have version " + currentVersion() + ". Would you like to go to the Embroidery Reader website to download or find out more about the new version?", "New version available", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) "Il " + updater.getReleaseDate().ToShortDateString() + " è stata rilasciata la versione " + updater.VersionAvailable() + "." + Environment.NewLine + "Stai utilizzando la versione " + currentVersion() + ". Vuoi andare al sito di Embroidery Reader per scaricare la nuova versione o per saperne di più?", "Nuova versione disponibile"

Wyświetl plik

@ -0,0 +1,67 @@
# Embroidery Reader language strings file. To translate Embroidery Reader to a new
# language, copy this file to a new name and translate each string.
# If you make a new translation, please contact me! I'd love to
# include your translation with Embroidery Reader.
# The best way to contact me is through http://www.njcrawford.com/contact/.
TRANSLATION_DISPLAY_NAME=English
UNSUPPORTED_FORMAT=The format of this file is not completely supported
COLOR_WARNING=Colors shown for this design may be inaccurate
ERROR_FILE=An error occurred while reading the file:
CORRUPT_FILE=This file is either corrupt or not a valid PES file.
FILE_TYPE_PES=Embroidery Files
FILE_TYPE_ALL=All Files
FILE_TYPE_BMP=Bitmap
FILE_TYPE_PNG=PNG
FILE_TYPE_JPG=JPEG
FILE_TYPE_GIF=GIF
FILE_TYPE_TIFF=TIFF
ABOUT_MESSAGE=Embroidery Reader version {0}. This program reads and displays embroidery designs from .PES files.
ERROR_UPDATE=Encountered an error while checking for updates:
VERSION=Version
ERROR_WEBPAGE=An error occurred while trying to open the webpage:
NO_UPDATE=No updates are available right now.
ERROR_DEBUG=There was an error while saving debug info:
NO_DESIGN=No design loaded.
UNSUPPORTED_CLASS=This file contains a class that is not yet supported
IMAGE_SAVED=Image saved
MENU_FILE=File
MENU_OPEN=Open...
MENU_SAVE_IMAGE=Save as image...
MENU_PRINT=Print...
MENU_PRINT_PREVIEW=Print Preview...
MENU_EXIT=Exit
MENU_EDIT=Edit
MENU_COPY=Copy
MENU_PREFS=Preferences...
MENU_VIEW=View
ROTATE_LEFT=Rotate left
ROTATE_RIGHT=Rotate right
MENU_RESET=Reset / Refresh
MENU_SCALE_ZOOM=Scale / Zoom
MENU_FIT_TO_WINDOW=Fit to window
MENU_HELP=Help
CHECK_UPDATE=Check for update
SAVE_DEBUG=Save design debug info
SHOW_DEBUG=Show design debug info
MENU_ABOUT=About
PICK_COLOR=Pick Color...
BACKGROUND_COLOR=Background Color
RESET_COLOR=Reset Color
CANCEL=Cancel
THREAD_THICKNESS=Thread thickness:
PIXELS=pixels
BACKGROUND=Background
STITCH_DRAW=Stitch drawing
REMOVE_UGLY_STITCHES=Remove 'ugly' stitches
UGLY_STITCH_LENGTH=Ugly Length:
SETTINGS=Embroidery Reader Settings
LATEST_VERSION=(Latest version is {0}, you have version {1})
NEW_VERSION_MESSAGE=Version {0} was released on {1}. You have version {2}.
NEW_VERSION_QUESTION=Would you like to go to the Embroidery Reader website to download or find out more about the new version?
NEW_VERSION_TITLE=New version available
DEBUG_INFO_SAVED=Debug info was saved to {0}
ENABLE_TRANSPARENCY_GRID=Enable transparency grid
LANGUAGE=Language
OK=OK
GRID_SIZE=Grid size:
TRANSLATION_INCOMPLETE=Translation is incomplete

Wyświetl plik

@ -0,0 +1,67 @@
# Embroidery Reader language strings file. To translate Embroidery Reader to a new
# language, copy this file to a new name and translate each string.
# If you make a new translation, please contact me! I'd love to
# include your translation with Embroidery Reader.
# The best way to contact me is through http://www.njcrawford.com/contact/.
TRANSLATION_DISPLAY_NAME=Español
UNSUPPORTED_FORMAT=El formato de este archivo no es soportado completamente
COLOR_WARNING=Los colores mostrados en este diseño pueden ser imprecisos
ERROR_FILE=Ha ocurrido un error cuando leia el archivo:
CORRUPT_FILE=Este archivo no es un archivo PES o esta dañado.
FILE_TYPE_PES=Archivos de bordado
FILE_TYPE_ALL=Todos los archivos
FILE_TYPE_BMP=BMP
FILE_TYPE_PNG=PNG
FILE_TYPE_JPG=JPEG
FILE_TYPE_GIF=GIF
FILE_TYPE_TIFF=TIFF
ABOUT_MESSAGE=Embroidery Reader version {0}. Este programa lee y muestra diseños de archivos .PES.
ERROR_UPDATE=Error encontrado cuando revisaba actualizaciones:
VERSION=Version
ERROR_WEBPAGE=Error cuando intentaba abrir la pagina web:
NO_UPDATE=No hay actualizaciones por ahora.
ERROR_DEBUG=hubo un error cuando intentaba guardar la informacion del depurador:
NO_DESIGN=No se puede cargar el diseño.
UNSUPPORTED_CLASS=Este archivo contiene clases que no son soportadas
IMAGE_SAVED=Imagen salvada
MENU_FILE=Archivo
MENU_OPEN=Abrir...
MENU_SAVE_IMAGE=Guardar imagen como...
MENU_PRINT=Imprimir...
MENU_PRINT_PREVIEW=Imprimir vista previa...
MENU_EXIT=Salir
MENU_EDIT=Editar
MENU_COPY=Copiar
MENU_PREFS=Preferencias...
MENU_VIEW=Ver
ROTATE_LEFT=Girar a la izquierda
ROTATE_RIGHT=Girar a la derecha
MENU_RESET=Reiniciar / Refrescar
MENU_SCALE_ZOOM=Escala / Ampliar
MENU_FIT_TO_WINDOW=Ampliar a la ventana
MENU_HELP=Ayuda
CHECK_UPDATE=Revisar actualizaciones
SAVE_DEBUG=Guardar ingormacion de depuracion de diseño
SHOW_DEBUG=Mostrar informacion de depuracion de diseño
MENU_ABOUT=Acerca
PICK_COLOR=Tomar Color...
BACKGROUND_COLOR=Color de fondo
RESET_COLOR=Restaurar color
CANCEL=Cancelar
THREAD_THICKNESS=Espesor del hilo:
PIXELS=pixeles
BACKGROUND=Fondo
STITCH_DRAW=Dibujo de puntada
REMOVE_UGLY_STITCHES=Quitar puntadas 'no deseadas'
UGLY_STITCH_LENGTH=Longitud no deseado:
SETTINGS=Configuracion Embroidery Reader
LATEST_VERSION=(Ultima version es {0}, esta es la version {1})
NEW_VERSION_MESSAGE=Version {0} fue lanzado el {1}. Tienes la version {2}.
NEW_VERSION_QUESTION=Quieres ir a la pagina de Embroidery a descargar o ver mas acerca de las nuevas versiones?
NEW_VERSION_TITLE=Nueva version disponible
DEBUG_INFO_SAVED=La informacion de depuracion fue salvada en {0}
ENABLE_TRANSPARENCY_GRID=Activar la malla transparente
LANGUAGE=Idioma
OK=Bien
GRID_SIZE=Tamaño de la malla:
TRANSLATION_INCOMPLETE=Traduccion incompleta

Some files were not shown because too many files have changed in this diff Show More