diff -Nru engauge-digitizer-5.0/.gitignore engauge-digitizer-5.2/.gitignore --- engauge-digitizer-5.0/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ engauge-digitizer-5.2/.gitignore 2013-10-10 18:55:48.000000000 +0000 @@ -0,0 +1,7 @@ +Makefile +src/.objs +bin/engauge +moc_* +.bookmarks +.history +digitizer.pro.user diff -Nru engauge-digitizer-5.0/INSTALL engauge-digitizer-5.2/INSTALL --- engauge-digitizer-5.0/INSTALL 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/INSTALL 2013-10-10 18:55:48.000000000 +0000 @@ -6,17 +6,11 @@ 1. REQUIREMENTS 1.1 Before installing a binary release 1.2 Before installing a source code release - 2. USER INSTALL - Linux Executable Release - 3. USER INSTALL - Mac OSX Executable Release - 4. USER INSTALL - MS Windows Executable Release - 5. USER INSTALL - Sun Forte Compiler - 6. USER INSTALL - Source Release - 7. DEVELOPER INSTALL - Linux Using Makefile - 8. DEVELOPER INSTALL - Mac OSX Using Makefile - 9. DEVELOPER INSTALL - MS Windows With Visual C++ 6.0 Using Makefile - 10. DEVELOPER INSTALL - MS Windows With Visual C++ 6.0 Using IDE - 11. DEVELOPER INSTALL - Linking problems - 12. INTERNATIONALIZATION + 2. USER INSTALL - Mac OSX Executable Release + 3. USER INSTALL - MS Windows Executable Release + 4. USER INSTALL - Source Release + 5. DEVELOPER INSTALL - Using Makefile + 6. INTERNATIONALIZATION 1. REQUIREMENTS --------------- @@ -32,11 +26,11 @@ If you are compiling Engauge Digitizer from source code, the following two packages must first be installed: - 1. Version 3 of Qt from www.trolltech.com + 1. Version 4 of Qt from qt.nokia.com ******************************************************************* * Comments and warnings: * - * 1. Do NOT install Version 4! You must install version 3 * + * 1. Do NOT install Version 3! You must install version 4 * * 2. You may download the open source version for free, although * * purchasing a commercial version entitles you to customer * * support from the wonderful staff at Trolltech, and to * @@ -44,7 +38,13 @@ * 3. The QTDIR environment variable must point to the Qt * * installation directory * * 4. The PATH environment variable must point to the qmake tool * - * of Qt * + * of Qt. Hint - if you have compilation problems on a computer * + * with multiple versions of Qt, then try 'qmake -v' to see if * + * you are using the wrong version of Qt. If so, then adjust * + * your PATH variable to use Qt version 4 * + * 5. In Microsoft Windows the preferred setup is using QtSDK from * + * qt.nokia.com with the optional MinGW package installed * + * during the QtSDK installation. Details are given below. * ******************************************************************* 2. Version 3.1.2 of FFTW from www.fftw.org @@ -53,22 +53,21 @@ * Comments and warnings: * * 1. Version 3.1.2 is guaranteed to work, although other versions * * will probably also work * - * 2. You may download the open source version for free, although * - * purchasing a commercial version allows you to include * - * Qt in commercial products * - * 3. The 'make install' installation step must be performed so * - * the FFTW include files and library are available to Engauge * + * 2. Linux users may be able to install a package for their * + * distribution using their standard package installer. This is * + * the preferred method. * + * 3. The FFTW source may be downloaded from www.fftw.org and * + * installed manually. In this case, the standard instalation * + * steps are followed: * + * 3a) ./configure * + * 3b) make * + * 3c) make install * ******************************************************************* Note that open source versions of both Qt and FFTW are freely available. -2. USER INSTALL - Linux Executable Release ------------------------------------------- - -Untar the executable release package. The executable name is digitizer. -The samples directory contains some sample image and document files -3. USER INSTALL - Mac OSX Executable Release +2. USER INSTALL - Mac OSX Executable Release -------------------------------------------- Untar the executable release package. The executable name is Engauge.app. @@ -77,36 +76,16 @@ open the bundle using 'Show contents', then click on the Contents directory, and then copy the samples directory. -4. USER INSTALL - MS Windows Executable Release + +3. USER INSTALL - MS Windows Executable Release ----------------------------------------------- Unzip the executable release package. The executable name is digitizer.exe. The samples directory contains some sample image and document files. -5. USER INSTALL - Sun Forte Compiler ------------------------------------------ - -1. Install Qt (see http://www.trolltech.com/developer/platforms/index.html) -2. Get a copy of the source code using anonymous cvs access by running - 'cvs -z3 -d:pserver:anonymous@digitizer.cvs.sourceforge.net:/cvsroot/digitizer - checkout -P digitizer' - -OR- - by downloading the source tarball from digitizer.sourceforge.net and running - 'tar xvfz digit-src-X_Y.tar.gz' - -OR- - by downloading the source zip file from digitizer.sourceforge.net and running - 'unzip digit-src-X_Y.zip' -3. 'cd digitizer/digitizer' -4. 'qmake digitizer.pro' -5. 'make' -6. If you have linking problems, see "DEVELOPER INSTALL - Linking problems" -7. You can now run the digitizer executable - -Comments for OSX: --Compiler macro __SUNPRO_CC should be set to get around 'const' problems -6. USER INSTALL - Source Release +4. USER INSTALL - Source Release -------------------------------- This installation method is much harder than installing one of the @@ -114,7 +93,7 @@ operating systems. Building your own executable is not too much of a problem if you have -already installed Qt from Trolltech (www.trolltech.com) installed, but +already installed Qt from Trolltech (qt.nokia.com) installed, but if you have yet to install the Qt toolkit, you may have much work ahead of you. @@ -122,226 +101,27 @@ the same contents, and both work under MS Windows, Mac OSX, Linux, and a wide variety of other platforms. -7. DEVELOPER INSTALL - Linux Using Makefile + +5. DEVELOPER INSTALL - Using Makefile ------------------------------------------- 1. See if Qt is installed. Some tricks are to try running 'qmake -v' and to look in '/usr/lib' for a directory like 'qt-3.3.3' 2. If Qt from Trolltech is not already installed, then - install Qt/X11 (see http://www.trolltech.com/developer/platforms/index.html) - with the following environment variables: - QTDIR=$HOME/qt-3.X.X - and the following command line options for "configure": - -no-xkb - -no-xshape - -no-sm - -no-xinerama - -no-xrandr - -no-xcursor - -qt-gif - -thread - -static - -xft - -xrender - where the last two are included so the best fonts are sharp, and - must agree with the options in digitizer.pro -3. Get a copy of the source code using anonymous cvs access by running - 'cvs -z3 -d:pserver:anonymous@digitizer.cvs.sourceforge.net:/cvsroot/digitizer - checkout -P digitizer' + install Qt/X11 (see http://qt.nokia.com/developer/platforms/index.html) +3. Get a copy of the source code using anonymous git + git clone http://git.code.sf.net/p/digitizer/code digitizer-code -OR- by downloading the source tarball from digitizer.sourceforge.net and running 'tar xvfz digit-src-X_Y.tar.gz' - -OR- - by downloading the source zip file from digitizer.sourceforge.net and running - 'unzip digit-src-X_Y.zip' 4. 'cd digitizer' 5. 'qmake -unix digitizer.pro' 6. 'make' 7. You can now run the digitizer executable -Comments for Linux: --The settings in digitizer.pro must agree with the Qt build settings --Kdevelop 3 works smoothly with the Makefile to compile and test Engauge --Use other command line options for "configure" at your own risk - -8. DEVELOPER INSTALL - Mac OSX Using Makefile ---------------------------------------------- -1. See if Qt is installed. Some tricks are to try running 'qmake -v' and to - look in '/usr/lib' for a directory like 'qt-3.3.3' -2. If Qt from Trolltech is not already installed, then - install Qt/Mac (see http://www.trolltech.com/developer/platforms/index.html) - with the following environment variables: - QTDIR=$HOME/qt-mac-free-3.X.X - QMAKESPEC=$QTDIR/mkspecs/macx-g++ - and the following command line options for "configure": - -fast - -platform macx-g++ - -shared - -qt-imgfmt-jpeg - -qt-imgfmt-mng - -qt-libpng - -qt-gif - -qt-zlib - -thread -3. Get a copy of the source code using anonymous cvs access by running - 'cvs -z3 -d:pserver:anonymous@digitizer.cvs.sourceforge.net:/cvsroot/digitizer - checkout -P digitizer' - -OR- - by downloading the source tarball from digitizer.sourceforge.net and running - 'tar xvfz digit-src-X_Y.tar.gz' - -OR- - by downloading the source zip file from digitizer.sourceforge.net and running - 'unzip digit-src-X_Y.zip' -4. 'cd digitizer' -5. 'qmake -macx digitizer.pro' -6. 'make' -7. If you have linking problems, see "DEVELOPER INSTALL - Linking problems" -8. You can now run the digitizer executable - -Comments for OSX: --The settings in digitizer.pro must agree with the Qt build settings --Mac version of Qt library (rather than the x11 version) is used, and - it is built using the threaded and shared options --Fink is not used so users do not need to install it first --ssh keys for sourceforge compile farm use rsa1 keys rather than dsa keys --Use other command line options for "configure" at your own risk - -9. DEVELOPER INSTALL - MS Windows With Visual C++ 6.0 Using Makefile --------------------------------------------------------------------- - -1. Install Qt/Windows 3 Enterprise since the open source Windows package - is incompatible because it is an ancient version, and the Professional - edition lacks Canvas support (see - http://www.trolltech.com/developer/platforms/index.html) - with the following environment variables: - QMAKESPEC=win32-msvc - and the following build options selected: - thread - release - gif - jpeg - mng - png - zlib -2. Set QTDIR environment variable to the qt directory (typically c:\qt) -3. Extract, but do not build, the complete source code package of FFTW 3.X.X from - http://www.fftw.org into its own directory. Only the header files from this - package will be used so no compilation is needed -4. Set the FFTW_HOME environment variable in Control Panel / System / - Environment Variables to point to the main FFTW source code directory -5. Get a copy of the source code using anonymous cvs access by running - 'cvs -z3 -d:pserver:anonymous@digitizer.cvs.sourceforge.net:/cvsroot/digitizer - checkout -P digitizer' - -OR- - by downloading the source tarball from digitizer.sourceforge.net and running - 'tar xvfz digit-src-X_Y.tar.gz' - -OR- - by downloading the source zip file from digitizer.sourceforge.net and running - 'unzip digit-src-X_Y.zip' -6. Extract the two files libfftw3-3.def and libfftw3-3.dll from the version 3.X.X - dll package at http://www.fftw.org/install/windows, into the digitizer/bin - directory created in the previous step -7. According to the directions at http://www.fftw.org/install/windows, create the - library file libfftw3-3.lib by running the Visual Studio 6 'lib' utility in the - digitizer/bin using - 'lib /machine:i386 /def:libfftw3-3.def' -8. Run the Qt makefile utility qmake as - 'qmake digitizer.pro' -9. Run MS make utility as 'nmake' -10. If you have linking problems, see "DEVELOPER INSTALL - Linking problems" -11. You can now run the digitizer.exe executable - -Comments for Windows: --The settings in digitizer.pro must agree with the Qt build settings --Use other build options at your own risk - -10. DEVELOPER INSTALL - MS Windows With Visual C++ 6.0 Using IDE ----------------------------------------------------------------- - -1. Install noncommercial Qt 3 using the settings from the same step in the previous - section. See http://www.trolltech.com/developer/platforms/index.html -2. Set QTDIR environment variable to the qt directory (typically c:\qt) -3. Extract, but do not build, the complete source code package of FFTW 3.X.X from - http://www.fftw.org into its own directory. Only the header files from this - package will be used so no compilation is needed -4. Set the FFTW_HOME environment variable in Control Panel / System / - Environment Variables to point to the main FFTW source code directory -6. Run 'cvs checkout digitizer' -7. Open project file digitizer.dsw (which refers to file digitizer.dsp) -8. Select the build type as either Release or Debug, using - 'Set Active Configuration' -9. Optionally add a console window for debugging, by changing the - "/subsystem:windows" linker option to "/subsystem:console" -10. Extract the two files libfftw3-3.def and libfftw3-3.dll from the version 3.X.X - dll package at http://www.fftw.org/install/windows, into the digitizer/bin - directory created in the previous step -11. According to the directions at http://www.fftw.org/install/windows, create the - library file libfftw3-3.lib by running the Visual Studio 6 'lib' utility in the - digitizer/bin using - 'lib /machine:i386 /def:libfftw3-3.def' -12. Run 'Project/Build' -13. If the moc files are not automatically built, see the next section for - an explanation and workaround -14. If you have linking problems, see "DEVELOPER INSTALL - Linking problems" -15. You can now run the digitizer.exe executable - -Comments for Windows: --The settings in digitizer.pro must agree with the Qt build settings --You may have problems building in Visual Studio: - - Symptom 1 - You check out the source files onto a Microsoft Windows - system, and then try to build the project. However, the moc files - are not generated so the build fails. - - Symptom 2 - The digitizer.dsp project file looks fine when you first - open it within an editor, but after saving the file with any changes - you notice the file has been condensed into a single, very long, line. - - Reason - The digitizer.dsp project file is corrupted. This file - is autogenerated by the VC++ IDE. Before it was committed to cvs, - it probably was copied to a Linux system, which changed the formatting. - Even though you probably cannot see the difference in an editor, the - formatting change confuses the VC++ IDE, which prevents the moc - files from getting generated. - - Good Solution - In Windows, open the file, before it is corrupted, in - Word, and then save it as a text file in MSDOS format with CR/LFs. This - solution is temporary. - - Better Solution - In Linux, make sure the file has only a NL (newline) - at the end of each line, rather than CR/NL, using - "od -a digitizer.dsp | more". If there are carriage returns, remove - them using "tr digitizer.fixed -d '\r'; - mv digitizer.fixed digitizer.dsp". Then immediately commit into cvs. - - Best Solution - Everybody stops using Windows. - -11. DEVELOPER INSTALL - Linking problems ----------------------------------------- - -Usually a problem linking involves a missing 'qt' or 'qt-mt' library. -If you have installed Qt, then make sure the QTDIR environment variable -is pointing to the Qt directory. Then, look at the 'lib' subdirectory -under the main Qt directory. In that subdirectory you will find -the Qt library. - -If Qt was built with multithreading (since the 'thread' option was chosen) -then the Qt library has 'qt-mt' in its name, otherwise that library -has just 'qt' in its name. - -By adding or removing 'thread' from the CONFIG line of digitizer.pro, -you can build Engauge Digitizer with or without, respectively, -multithreading so that it can link correctly. - -Another source of linking problems is the failure to link with -the Xft and Xrender libraries, on a system where the Qt library was -built with Xft and Xrender support so fonts would look professional. -To fix these linking problems, either rebuild Qt without that -support (and settle for ugly fonts), or add "-lXft -lfreetype" to -LIBS in digitizer.pro and then rebuilt Engauge. -12. INTERNATIONALIZATION +6. INTERNATIONALIZATION ------------------------ The following steps will create a translation file: diff -Nru engauge-digitizer-5.0/RELEASE engauge-digitizer-5.2/RELEASE --- engauge-digitizer-5.0/RELEASE 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/RELEASE 2013-10-10 18:55:48.000000000 +0000 @@ -6,10 +6,9 @@ to Sourceforge. See file INSTALL for instructions on installing a release package. -RELEASE - Linux +RELEASE - Source / Linux --------------- -This assumes Qt 3.x is already installed on the computer. For now, -the 'release' build will actually be a debug release +This assumes Qt 4.x is already installed on the computer. 1. Change the version number in digitdef.cpp and rebuild the executable @@ -22,120 +21,13 @@ 2. Run test cases using valgrind (http://valgrind.kde.org) to check for uninitialized variables and memory leaks - valgrind --leak-check=yes digitizer + valgrind --leak-check=yes engauge -3. Commit the current files into cvs +3. Create source tarball + git archive master --prefix engauge-VERSION/ -o /tmp/engauge_VERSION.tgz - cd ~ - cvs commit -m 'Official release...' digitizer +4. Test compilation and installation from source -4. Remove any existing digitizer directories - - rm -rf ~/digitizer - -5. Extract the sources, minus the CVS directories, using - - cvs export -kv -d '' digitizer - - Hint - to see what tag should be selected here, run - - cvs log digitizer/README - -6. Tar up the development directory and its subdirectories into the - platform-independent source release tarball package - - tar cvfz digit-src-1_0.tar.gz digitizer - -7. Perform the steps of the 'DEVELOPER INSTALL - Linux' - -8. run the release_linux.pl script to create the tarball - digit-exe-linux-X_Y.tar.gz - -9. Upload the two tarballs according to - http://sourceforge.net/docman/display_doc.php?docid=6445&group_id=1. - be sure to send out a notification to users who have subscribed - to this Engauge Digitizer - -RELEASE - Mac OSX 10.2 ----------------------- -1. Copy the source tarball to the Mac OSX 10.2 SourceForge compile farm. - -2. Perform the steps of the 'DEVELOPER INSTALL - Mac OSX' - -3. Run the release_linux.pl script to create the tarball - digit-exe-osx-X_Y.tar.gz - -4. Upload the tarball according to - http://sourceforge.net/docman/display_doc.php?docid=6445&group_id=1. - -RELEASE - MS Windows With Visual C++ 6.0 Using Makefile -------------------------------------------------------- - -1. Use Windows Explorer to remove c:\digitizer - -2. Obtain the newest source code by downloading from Sourceforge. Alternately, - use - - cvs -d:pserver:anonymous@cvs.sf.net:/cvsroot/digitizer export -kv digitizer - -3 Zip up the development directory and its subdirectories - (c:\digitizer) into the platform-independent source release zip - package. The development directory must be recursively copied into - another directory that is otherwise empty, so the zip file will unzip - nicely into the "digitizer" subdirectory. - - mkdir c:\tmp - (use Windows Explorer to copy c:\digitizer into c:\tmp) - (winzip c:\tmp into c:\digit-src-1_0.zip using 'add with wildcards' - and 'recursive') - (delete c:\tmp directory) - -4. Perform the steps of the 'DEVELOPER INSTALL - MS Windows With Visual C++ - 6.0 Using IDE' install, being sure to specify a Release build. - The IDE build is required rather than the qmake build, since the linking - is done statically so the dll files need not be included in the release, - and also because the IDE build adds a nice icon into the executable. - -5. Make sure all of the sample files in the samples directory - can be imported or opened. if not, quit this build and go back - to the linux system and run 'cvs admin -kb ' on all of - binary files so they can be correctly opened in windows - -6. Go up to your home directory - -7. Run the release_windows.bat command file to create the zip file - digit-exe-windows-X_Y.zip - -8. Zip up the install subdirectories into the executable release - package, from the directory above the install directory. The executable - directory must be recursively copied into another directory that is - otherwise empty, so the zip file will unzip nicely into the "digitizer" - subdirectory. - - mkdir c:\tmp - (use Windows Explorer to copy c:\engauge into c:\tmp) - (winzip c:\tmp into c:\digit-exe-windows-X_Y.zip using - 'add with wildcards' and 'recursive') - (delete c:\tmp directory) - -9. Upload the two zip files according to - http://sourceforge.net/docman/display_doc.php?docid=6445&group_id=1 - -RELEASE - Finishing up ----------------------- -1. Download the new release and test. - -2. Go to the project download page and get the release id of the - newest release. Log into digitizer.sourceforge.net and upload - newer versions of the following files: - - 1) /home/groups/d/di/digitizer/htdocs/index.php to replace the - previous release id by the new release id. This will point - web surfers to the newest release when they try to download. - 2) /home/groups/d/di/digitizer/htdocs/content1.php should have - an entry in the status section added for the new release - -3. Send out a release notification to subscribers at the sourceforge website - -4. If this is a big release, send a notification out at freshmeat.net +5. Tag git version +6. Upload the tarball to sourceforge diff -Nru engauge-digitizer-5.0/bin/README engauge-digitizer-5.2/bin/README --- engauge-digitizer-5.0/bin/README 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/bin/README 2013-10-10 18:55:48.000000000 +0000 @@ -3,12 +3,6 @@ This bin directory contains the executable that is built by successfully compiling and linking Engauge Digitizer (http://digitizer.sourceforge.net). -Engauge.exe.local -------------------- -This file is a hack for Microsoft Windows 2000. As long as this file is in the same -directory as engauge.exe, the Windows 2000 operating system will use the local dll files -rather than the dll files that belong to the operating system. - Licensing --------- All of the files in this directory were created by an Engauge Digitizer developer, and diff -Nru engauge-digitizer-5.0/bin/engauge.exe.local engauge-digitizer-5.2/bin/engauge.exe.local --- engauge-digitizer-5.0/bin/engauge.exe.local 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/bin/engauge.exe.local 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -This file is a patch for Microsoft Windows 2000. - -As long as this file is in the same directory as -Digitizer.exe, the operating system will use the -local dll files rather than the dll files that -belong to the operating system. - -The contents of this file are unimportant. diff -Nru engauge-digitizer-5.0/debian/changelog engauge-digitizer-5.2/debian/changelog --- engauge-digitizer-5.0/debian/changelog 2012-05-17 09:47:36.000000000 +0000 +++ engauge-digitizer-5.2/debian/changelog 2013-11-12 20:47:51.000000000 +0000 @@ -1,3 +1,21 @@ +engauge-digitizer (5.2-1) unstable; urgency=low + + * New upstream release (Closes: #716732) + - Makes patch Added-missing-include-fix-FTBFS-on-gcc-4.7 obsolete + - Makes patch fix_qreal_vs_double.patch obsolete + - Fixes segmentation fault in point match (Closes: #695858) + - Fixes segmentation fault when exporting certain curves (Closes: #725165) + * Minimum debian/rules files now using dh + * Updated to standards version 3.9.5 + * Updated to debhelper 9 + * Added patch from upstream allowing strict aliasing + * Fixed lintian warnings in dep-5 copyright formatting + * Added keywords to desktop file + * Added Vcs-git and Vcs-Browser fields to debian/control + * removed shlibs:Depends dependency for engauge-doc + + -- Tobias Winchen Thu, 10 Oct 2013 20:21:57 +0200 + engauge-digitizer (5.0-3) unstable; urgency=low * Added patch including mising header. Closes: #672068 (FTBFS with gcc-4.7) diff -Nru engauge-digitizer-5.0/debian/compat engauge-digitizer-5.2/debian/compat --- engauge-digitizer-5.0/debian/compat 2012-01-01 16:45:13.000000000 +0000 +++ engauge-digitizer-5.2/debian/compat 2013-11-12 20:12:26.000000000 +0000 @@ -1 +1 @@ -7 +9 diff -Nru engauge-digitizer-5.0/debian/control engauge-digitizer-5.2/debian/control --- engauge-digitizer-5.0/debian/control 2012-03-19 13:10:08.000000000 +0000 +++ engauge-digitizer-5.2/debian/control 2013-11-12 21:06:06.000000000 +0000 @@ -2,8 +2,10 @@ Section: science Priority: optional Maintainer: Tobias Winchen -Build-Depends: debhelper (>= 7), libqt4-dev, libfftw3-dev -Standards-Version: 3.9.3 +Build-Depends: dpkg-dev (>= 1.16.1~), debhelper (>= 9), libqt4-dev, libfftw3-dev +Standards-Version: 3.9.5 +Vcs-git: git://github.com/winchen/engauge_debian.git +Vcs-Browser: https://github.com/winchen/engauge_debian Homepage: http://digitizer.sourceforge.net/ Package: engauge-digitizer @@ -28,7 +30,7 @@ Package: engauge-digitizer-doc Section: doc Architecture: all -Depends: ${shlibs:Depends}, ${misc:Depends} +Depends: ${misc:Depends} Recommends: engauge-digitizer Description: engauge-digitizer user manual and tutorial engauge-digitizer converts an image file showing a graph or map into numbers. diff -Nru engauge-digitizer-5.0/debian/copyright engauge-digitizer-5.2/debian/copyright --- engauge-digitizer-5.0/debian/copyright 2012-03-19 13:03:13.000000000 +0000 +++ engauge-digitizer-5.2/debian/copyright 2013-11-09 09:29:57.000000000 +0000 @@ -3,17 +3,20 @@ Upstream-Contact: Mark Mitchell Source: http://sf.net/digitizer/ +Files: * Copyright: 2002-2012, Mark Mitchell - 2011-2012, Tobias Richter - 2011-2012, Tobias Winchen + 2011-2012, Tobias Richter + 2011-2012, Tobias Winchen License: GPL-2+ - On Debian systems, the complete text of the GNU General - Public License version 2 can be found in `/usr/share/common-licenses/GPL-2'. + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in `/usr/share/common-licenses/GPL-2'. Files: debian/* Copyright: 2006-2011 Tobias Stefan Richter - 2011-2012, Tobias Winchen + 2011-2012, Tobias Winchen License: GPL-2+ + On Debian systems, the complete text of the GNU General + Public License version 2 can be found in `/usr/share/common-licenses/GPL-2'. Files: src/helpwindow.h src/helpwindow.cpp Copyright: 1992-2000 Trolltech AS diff -Nru engauge-digitizer-5.0/debian/engauge-digitizer-doc.install engauge-digitizer-5.2/debian/engauge-digitizer-doc.install --- engauge-digitizer-5.0/debian/engauge-digitizer-doc.install 1970-01-01 00:00:00.000000000 +0000 +++ engauge-digitizer-5.2/debian/engauge-digitizer-doc.install 2013-10-10 19:48:10.000000000 +0000 @@ -0,0 +1 @@ +usermanual/* usr/share/doc/engauge-digitizer-doc/html/ diff -Nru engauge-digitizer-5.0/debian/engauge-digitizer.desktop engauge-digitizer-5.2/debian/engauge-digitizer.desktop --- engauge-digitizer-5.0/debian/engauge-digitizer.desktop 2012-01-29 12:35:54.000000000 +0000 +++ engauge-digitizer-5.2/debian/engauge-digitizer.desktop 2013-10-10 20:40:22.000000000 +0000 @@ -7,3 +7,4 @@ MimeType=text/plain Categories=Education;Science;DataVisualization Icon=/usr/share/pixmaps/engauge-digitizer.xpm +Keywords=Analog-Digital Converter; diff -Nru engauge-digitizer-5.0/debian/patches/Added-missing-include-fix-FTBFS-on-gcc-4.7.patch engauge-digitizer-5.2/debian/patches/Added-missing-include-fix-FTBFS-on-gcc-4.7.patch --- engauge-digitizer-5.0/debian/patches/Added-missing-include-fix-FTBFS-on-gcc-4.7.patch 2012-05-17 10:19:22.000000000 +0000 +++ engauge-digitizer-5.2/debian/patches/Added-missing-include-fix-FTBFS-on-gcc-4.7.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -Description: Add missing header include - In gcc 4.7, many of the standard C++ library include files have been - edited to no longer include to remove namespace pollution. - The missing include is added to fix FTBFS with gcc 4.7. -Author: Tobias Winchen -Last-Update: 2012-05-17 - - ---- a/src/pointmatch.cpp -+++ b/src/pointmatch.cpp -@@ -25,6 +25,7 @@ - - #include - #include -+#include - - #include "main.h" - #include "mmsubs.h" - diff -Nru engauge-digitizer-5.0/debian/patches/Use-buffer-variable-to-allow-strict-aliasing.patch engauge-digitizer-5.2/debian/patches/Use-buffer-variable-to-allow-strict-aliasing.patch --- engauge-digitizer-5.0/debian/patches/Use-buffer-variable-to-allow-strict-aliasing.patch 1970-01-01 00:00:00.000000000 +0000 +++ engauge-digitizer-5.2/debian/patches/Use-buffer-variable-to-allow-strict-aliasing.patch 2013-11-12 21:24:58.000000000 +0000 @@ -0,0 +1,487 @@ +Description: Use buffer variable to allow strict aliasing + The compiler warned "dereferencing type-punned pointer will break + strict- aliasing rules" as at several points in the (de)serialization + data was streamed into variables via casting to reference. Now a buffer + variable is used instead. The patch is only part of the upstream + commit listed as origin. +Origin: http://sourceforge.net/p/digitizer/code/ci/463a89ff29bff06bd2e2349cc3964e261846864d/ +Reviewed-By: Tobias Winchen , Mark Mitchell +Last-Update: 2013-11-12 + +diff --git a/src/digitdoc.cpp b/src/digitdoc.cpp +index 20d9f5b..97ee1c6 100644 +--- a/src/digitdoc.cpp ++++ b/src/digitdoc.cpp +@@ -349,6 +349,8 @@ bool DigitDoc::supportedVersionNumber(QString versionNumber) + + bool DigitDoc::openDocument(const QString &filename) + { ++ Q_INT32 extractionQInt32; // temp value ++ + QFile f(filename); + if (!f.open (QIODevice::ReadOnly)) + return false; +@@ -356,7 +358,8 @@ bool DigitDoc::openDocument(const QString &filename) + QDataStream str (&f); + + Q_INT32 magicNumber; +- str >> (Q_INT32 &) magicNumber; ++ str >> extractionQInt32; ++ magicNumber = extractionQInt32; + + if (magicNumber != MagicNumber) + { +@@ -382,7 +385,8 @@ bool DigitDoc::openDocument(const QString &filename) + return false; + } + +- str >> (Q_INT32 &) m_backgroundSelection; ++ str >> extractionQInt32; ++ m_backgroundSelection = (BackgroundSelection) extractionQInt32; + str >> m_originalPixmap; + + str >> m_title; +@@ -390,32 +394,47 @@ bool DigitDoc::openDocument(const QString &filename) + str >> m_curveCmbText; + str >> m_measureCmbText; + +- str >> (Q_INT32 &) m_coordSettings.frame; ++ str >> extractionQInt32; ++ m_coordSettings.frame = (ReferenceFrame) extractionQInt32; + if (versionNumber < 3) + m_coordSettings.originRadius = 0.0; + else + str >> (double &) m_coordSettings.originRadius; +- str >> (Q_INT32 &) m_coordSettings.thetaUnits; +- str >> (Q_INT32 &) m_coordSettings.xThetaScale; +- str >> (Q_INT32 &) m_coordSettings.yRScale; +- +- str >> (Q_INT32 &) m_exportSettings.delimiters; +- str >> (Q_INT32 &) m_exportSettings.layout; +- str >> (Q_INT32 &) m_exportSettings.pointsSelection; +- str >> (Q_INT32 &) m_exportSettings.header; ++ str >> extractionQInt32; ++ m_coordSettings.thetaUnits = (ThetaUnits) extractionQInt32; ++ str >> extractionQInt32; ++ m_coordSettings.xThetaScale = (Scale) extractionQInt32; ++ str >> extractionQInt32; ++ m_coordSettings.yRScale = (Scale) extractionQInt32; ++ ++ str >> extractionQInt32; ++ m_exportSettings.delimiters = (ExportDelimiters) extractionQInt32; ++ str >> extractionQInt32; ++ m_exportSettings.layout = (ExportLayout) extractionQInt32; ++ str >> extractionQInt32; ++ m_exportSettings.pointsSelection = (ExportPointsSelection) extractionQInt32; ++ str >> extractionQInt32; ++ m_exportSettings.header = (ExportHeader) extractionQInt32; + if (versionNumber >= 5.2) { + str >> m_exportSettings.xLabel; + str >> m_exportSettings.thetaLabel; + } + +- str >> (Q_INT32 &) m_gridRemovalSettings.removeThinLines; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.removeThinLines = extractionQInt32; + str >> (double &) m_gridRemovalSettings.thinThickness; +- str >> (Q_INT32 &) m_gridRemovalSettings.removeGridlines; +- str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.initialized; +- str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.countX; +- str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.countY; +- str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetX; +- str >> (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetY; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.removeGridlines = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.gridMesh.initialized = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.gridMesh.countX = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.gridMesh.countY = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.gridMesh.gridSetX = (GridSet) extractionQInt32; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.gridMesh.gridSetY = (GridSet) extractionQInt32; + str >> (double &) m_gridRemovalSettings.gridMesh.startX; + str >> (double &) m_gridRemovalSettings.gridMesh.startY; + str >> (double &) m_gridRemovalSettings.gridMesh.stepX; +@@ -423,7 +442,8 @@ bool DigitDoc::openDocument(const QString &filename) + str >> (double &) m_gridRemovalSettings.gridMesh.stopX; + str >> (double &) m_gridRemovalSettings.gridMesh.stopY; + str >> (double &) m_gridRemovalSettings.gridDistance; +- str >> (Q_INT32 &) m_gridRemovalSettings.removeColor; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.removeColor = extractionQInt32; + + if (versionNumber >= 5) + { +@@ -436,15 +456,22 @@ bool DigitDoc::openDocument(const QString &filename) + m_gridRemovalSettings.color.setRgb( p ); + } + +- str >> (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdLow; +- str >> (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdHigh; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.foregroundThresholdLow = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridRemovalSettings.foregroundThresholdHigh = extractionQInt32; + str >> (double &) m_gridRemovalSettings.gapSeparation; + +- str >> (Q_INT32 &) m_gridDisplaySettings.initialized; +- str >> (Q_INT32 &) m_gridDisplaySettings.countX; +- str >> (Q_INT32 &) m_gridDisplaySettings.countY; +- str >> (Q_INT32 &) m_gridDisplaySettings.gridSetX; +- str >> (Q_INT32 &) m_gridDisplaySettings.gridSetY; ++ str >> extractionQInt32; ++ m_gridDisplaySettings.initialized = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridDisplaySettings.countX = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridDisplaySettings.countY = extractionQInt32; ++ str >> extractionQInt32; ++ m_gridDisplaySettings.gridSetX = (GridSet) extractionQInt32; ++ str >> extractionQInt32; ++ m_gridDisplaySettings.gridSetY = (GridSet) extractionQInt32; + str >> (double &) m_gridDisplaySettings.startX; + str >> (double &) m_gridDisplaySettings.startY; + str >> (double &) m_gridDisplaySettings.stepX; +@@ -452,39 +479,62 @@ bool DigitDoc::openDocument(const QString &filename) + str >> (double &) m_gridDisplaySettings.stopX; + str >> (double &) m_gridDisplaySettings.stopY; + +- str >> (Q_INT32 &) m_segmentSettings.minPoints; +- str >> (Q_INT32 &) m_segmentSettings.pointSeparation; +- str >> (Q_INT32 &) m_segmentSettings.lineSize; +- str >> (Q_INT32 &) m_segmentSettings.lineColor; +- +- str >> (Q_INT32 &) m_pointMatchSettings.pointSeparation; +- str >> (Q_INT32 &) m_pointMatchSettings.pointSize; +- str >> (Q_INT32 &) m_pointMatchSettings.acceptedColor; +- str >> (Q_INT32 &) m_pointMatchSettings.rejectedColor; ++ str >> extractionQInt32; ++ m_segmentSettings.minPoints = extractionQInt32; ++ str >> extractionQInt32; ++ m_segmentSettings.pointSeparation = extractionQInt32; ++ str >> extractionQInt32; ++ m_segmentSettings.lineSize = (LineSize) extractionQInt32; ++ str >> extractionQInt32; ++ m_segmentSettings.lineColor = (Color) extractionQInt32; ++ ++ str >> extractionQInt32; ++ m_pointMatchSettings.pointSeparation = extractionQInt32; ++ str >> extractionQInt32; ++ m_pointMatchSettings.pointSize = extractionQInt32; ++ str >> extractionQInt32; ++ m_pointMatchSettings.acceptedColor = (Color) extractionQInt32; ++ str >> extractionQInt32; ++ m_pointMatchSettings.rejectedColor = (Color) extractionQInt32; + if (versionNumber < 4) + { + // synchronize with DefaultSettings::initializeSettingsToFactoryDefaults + m_pointMatchSettings.candidateColor = DigitBlue; + } + else +- str >> (Q_INT32 &) m_pointMatchSettings.candidateColor; +- +- str >> (Q_INT32 &) m_discretizeSettings.discretizeMethod; +- str >> (Q_INT32 &) m_discretizeSettings.intensityThresholdLow; +- str >> (Q_INT32 &) m_discretizeSettings.intensityThresholdHigh; +- str >> (Q_INT32 &) m_discretizeSettings.foregroundThresholdLow; +- str >> (Q_INT32 &) m_discretizeSettings.foregroundThresholdHigh; +- str >> (Q_INT32 &) m_discretizeSettings.hueThresholdLow; +- str >> (Q_INT32 &) m_discretizeSettings.hueThresholdHigh; +- str >> (Q_INT32 &) m_discretizeSettings.saturationThresholdLow; +- str >> (Q_INT32 &) m_discretizeSettings.saturationThresholdHigh; +- str >> (Q_INT32 &) m_discretizeSettings.valueThresholdLow; +- str >> (Q_INT32 &) m_discretizeSettings.valueThresholdHigh; ++ { ++ str >> extractionQInt32; ++ m_pointMatchSettings.candidateColor = (Color) extractionQInt32; ++ } ++ ++ str >> extractionQInt32; ++ m_discretizeSettings.discretizeMethod = (DiscretizeMethod) extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.intensityThresholdLow = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.intensityThresholdHigh = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.foregroundThresholdLow = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.foregroundThresholdHigh = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.hueThresholdLow = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.hueThresholdHigh = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.saturationThresholdLow = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.saturationThresholdHigh = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.valueThresholdLow = extractionQInt32; ++ str >> extractionQInt32; ++ m_discretizeSettings.valueThresholdHigh = extractionQInt32; + + ASSERT_ENGAUGE(m_pointSets != 0); + m_pointSets->serializeRead(str, canvas()); + +- str >> (Q_INT32 &) magicNumber; ++ str >> extractionQInt32; ++ magicNumber = extractionQInt32; + + if (magicNumber != MagicNumber) + { +@@ -523,15 +573,15 @@ bool DigitDoc::saveDocument(const QString &filename) + QDataStream str (&f); + + #ifdef __SUNPRO_CC +- str << (Q_INT32 &) MagicNumber; ++ str << (Q_INT32) MagicNumber; + #else +- str << (const Q_INT32 &) MagicNumber; ++ str << (const Q_INT32) MagicNumber; + #endif + + str << VersionNumber.toDouble(); // numeric value is ambiguous (2.1 or 2.10?) + str << VersionNumber; + +- str << (Q_INT32 &) m_backgroundSelection; ++ str << (Q_INT32) m_backgroundSelection; + str << m_originalPixmap; + + str << m_title; +@@ -539,82 +589,82 @@ bool DigitDoc::saveDocument(const QString &filename) + str << m_curveCmbText; + str << m_measureCmbText; + +- str << (Q_INT32 &) m_coordSettings.frame; +- str << (double &) m_coordSettings.originRadius; +- str << (Q_INT32 &) m_coordSettings.thetaUnits; +- str << (Q_INT32 &) m_coordSettings.xThetaScale; +- str << (Q_INT32 &) m_coordSettings.yRScale; ++ str << (Q_INT32) m_coordSettings.frame; ++ str << (double) m_coordSettings.originRadius; ++ str << (Q_INT32) m_coordSettings.thetaUnits; ++ str << (Q_INT32) m_coordSettings.xThetaScale; ++ str << (Q_INT32) m_coordSettings.yRScale; + +- str << (Q_INT32 &) m_exportSettings.delimiters; +- str << (Q_INT32 &) m_exportSettings.layout; +- str << (Q_INT32 &) m_exportSettings.pointsSelection; +- str << (Q_INT32 &) m_exportSettings.header; ++ str << (Q_INT32) m_exportSettings.delimiters; ++ str << (Q_INT32) m_exportSettings.layout; ++ str << (Q_INT32) m_exportSettings.pointsSelection; ++ str << (Q_INT32) m_exportSettings.header; + str << m_exportSettings.xLabel; + str << m_exportSettings.thetaLabel; + +- str << (Q_INT32 &) m_gridRemovalSettings.removeThinLines; +- str << (double &) m_gridRemovalSettings.thinThickness; +- str << (Q_INT32 &) m_gridRemovalSettings.removeGridlines; +- str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.initialized; +- str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.countX; +- str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.countY; +- str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetX; +- str << (Q_INT32 &) m_gridRemovalSettings.gridMesh.gridSetY; +- str << (double &) m_gridRemovalSettings.gridMesh.startX; +- str << (double &) m_gridRemovalSettings.gridMesh.startY; +- str << (double &) m_gridRemovalSettings.gridMesh.stepX; +- str << (double &) m_gridRemovalSettings.gridMesh.stepY; +- str << (double &) m_gridRemovalSettings.gridMesh.stopX; +- str << (double &) m_gridRemovalSettings.gridMesh.stopY; +- str << (double &) m_gridRemovalSettings.gridDistance; +- str << (Q_INT32 &) m_gridRemovalSettings.removeColor; ++ str << (Q_INT32) m_gridRemovalSettings.removeThinLines; ++ str << (double) m_gridRemovalSettings.thinThickness; ++ str << (Q_INT32) m_gridRemovalSettings.removeGridlines; ++ str << (Q_INT32) m_gridRemovalSettings.gridMesh.initialized; ++ str << (Q_INT32) m_gridRemovalSettings.gridMesh.countX; ++ str << (Q_INT32) m_gridRemovalSettings.gridMesh.countY; ++ str << (Q_INT32) m_gridRemovalSettings.gridMesh.gridSetX; ++ str << (Q_INT32) m_gridRemovalSettings.gridMesh.gridSetY; ++ str << (double) m_gridRemovalSettings.gridMesh.startX; ++ str << (double) m_gridRemovalSettings.gridMesh.startY; ++ str << (double) m_gridRemovalSettings.gridMesh.stepX; ++ str << (double) m_gridRemovalSettings.gridMesh.stepY; ++ str << (double) m_gridRemovalSettings.gridMesh.stopX; ++ str << (double) m_gridRemovalSettings.gridMesh.stopY; ++ str << (double) m_gridRemovalSettings.gridDistance; ++ str << (Q_INT32) m_gridRemovalSettings.removeColor; + str << m_gridRemovalSettings.color; +- str << (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdLow; +- str << (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdHigh; +- str << (double &) m_gridRemovalSettings.gapSeparation; +- +- str << (Q_INT32 &) m_gridDisplaySettings.initialized; +- str << (Q_INT32 &) m_gridDisplaySettings.countX; +- str << (Q_INT32 &) m_gridDisplaySettings.countY; +- str << (Q_INT32 &) m_gridDisplaySettings.gridSetX; +- str << (Q_INT32 &) m_gridDisplaySettings.gridSetY; +- str << (double &) m_gridDisplaySettings.startX; +- str << (double &) m_gridDisplaySettings.startY; +- str << (double &) m_gridDisplaySettings.stepX; +- str << (double &) m_gridDisplaySettings.stepY; +- str << (double &) m_gridDisplaySettings.stopX; +- str << (double &) m_gridDisplaySettings.stopY; +- +- str << (Q_INT32 &) m_segmentSettings.minPoints; +- str << (Q_INT32 &) m_segmentSettings.pointSeparation; +- str << (Q_INT32 &) m_segmentSettings.lineSize; +- str << (Q_INT32 &) m_segmentSettings.lineColor; +- +- str << (Q_INT32 &) m_pointMatchSettings.pointSeparation; +- str << (Q_INT32 &) m_pointMatchSettings.pointSize; +- str << (Q_INT32 &) m_pointMatchSettings.acceptedColor; +- str << (Q_INT32 &) m_pointMatchSettings.rejectedColor; +- str << (Q_INT32 &) m_pointMatchSettings.candidateColor; ++ str << (Q_INT32) m_gridRemovalSettings.foregroundThresholdLow; ++ str << (Q_INT32) m_gridRemovalSettings.foregroundThresholdHigh; ++ str << (double) m_gridRemovalSettings.gapSeparation; ++ ++ str << (Q_INT32) m_gridDisplaySettings.initialized; ++ str << (Q_INT32) m_gridDisplaySettings.countX; ++ str << (Q_INT32) m_gridDisplaySettings.countY; ++ str << (Q_INT32) m_gridDisplaySettings.gridSetX; ++ str << (Q_INT32) m_gridDisplaySettings.gridSetY; ++ str << (double) m_gridDisplaySettings.startX; ++ str << (double) m_gridDisplaySettings.startY; ++ str << (double) m_gridDisplaySettings.stepX; ++ str << (double) m_gridDisplaySettings.stepY; ++ str << (double) m_gridDisplaySettings.stopX; ++ str << (double) m_gridDisplaySettings.stopY; ++ ++ str << (Q_INT32) m_segmentSettings.minPoints; ++ str << (Q_INT32) m_segmentSettings.pointSeparation; ++ str << (Q_INT32) m_segmentSettings.lineSize; ++ str << (Q_INT32) m_segmentSettings.lineColor; ++ ++ str << (Q_INT32) m_pointMatchSettings.pointSeparation; ++ str << (Q_INT32) m_pointMatchSettings.pointSize; ++ str << (Q_INT32) m_pointMatchSettings.acceptedColor; ++ str << (Q_INT32) m_pointMatchSettings.rejectedColor; ++ str << (Q_INT32) m_pointMatchSettings.candidateColor; + +- str << (Q_INT32 &) m_discretizeSettings.discretizeMethod; +- str << (Q_INT32 &) m_discretizeSettings.intensityThresholdLow; +- str << (Q_INT32 &) m_discretizeSettings.intensityThresholdHigh; +- str << (Q_INT32 &) m_discretizeSettings.foregroundThresholdLow; +- str << (Q_INT32 &) m_discretizeSettings.foregroundThresholdHigh; +- str << (Q_INT32 &) m_discretizeSettings.hueThresholdLow; +- str << (Q_INT32 &) m_discretizeSettings.hueThresholdHigh; +- str << (Q_INT32 &) m_discretizeSettings.saturationThresholdLow; +- str << (Q_INT32 &) m_discretizeSettings.saturationThresholdHigh; +- str << (Q_INT32 &) m_discretizeSettings.valueThresholdLow; +- str << (Q_INT32 &) m_discretizeSettings.valueThresholdHigh; ++ str << (Q_INT32) m_discretizeSettings.discretizeMethod; ++ str << (Q_INT32) m_discretizeSettings.intensityThresholdLow; ++ str << (Q_INT32) m_discretizeSettings.intensityThresholdHigh; ++ str << (Q_INT32) m_discretizeSettings.foregroundThresholdLow; ++ str << (Q_INT32) m_discretizeSettings.foregroundThresholdHigh; ++ str << (Q_INT32) m_discretizeSettings.hueThresholdLow; ++ str << (Q_INT32) m_discretizeSettings.hueThresholdHigh; ++ str << (Q_INT32) m_discretizeSettings.saturationThresholdLow; ++ str << (Q_INT32) m_discretizeSettings.saturationThresholdHigh; ++ str << (Q_INT32) m_discretizeSettings.valueThresholdLow; ++ str << (Q_INT32) m_discretizeSettings.valueThresholdHigh; + + ASSERT_ENGAUGE(m_pointSets != 0); + m_pointSets->serializeWrite(str); + + #ifdef __SUNPRO_CC +- str << (Q_INT32 &) MagicNumber; ++ str << (Q_INT32) MagicNumber; + #else +- str << (const Q_INT32 &) MagicNumber; ++ str << (const Q_INT32) MagicNumber; + #endif + + f.close(); +diff --git a/src/pointset.cpp b/src/pointset.cpp +index 66f38f9..5a5a1c6 100644 +--- a/src/pointset.cpp ++++ b/src/pointset.cpp +@@ -25,6 +25,7 @@ + #include + #include + ++#include + #include + + #include "pointset.h" +@@ -536,7 +537,7 @@ bool PointSet::pointSetScreenLimits(double *xMin, double *xMax, double *yMin, do + } + + void PointSet::mergeUniqueXValues(QList* list, +- int xPrecision) ++ int /* xPrecision */) + { + ASSERT_ENGAUGE(list != 0); + +@@ -694,16 +695,16 @@ bool PointSet::adjustForLogScale(Scale scale, double* pointXY) + void PointSet::serializeWrite(QDataStream &s) const + { + s << m_name; +- s << (Q_INT32 &) m_style.pointShape; +- s << (Q_INT32 &) m_style.pointSize; +- s << (Q_INT32 &) m_style.pointLineSize; +- s << (Q_INT32 &) m_style.pointLineColor; +- s << (Q_INT32 &) m_style.pointInColor; +- s << (Q_INT32 &) m_style.lineSize; +- s << (Q_INT32 &) m_style.lineColor; +- s << (Q_INT32 &) m_style.lineConnectAs; +- +- s << (const Q_INT32 &) m_points.count(); ++ s << (Q_INT32) m_style.pointShape; ++ s << (Q_INT32) m_style.pointSize; ++ s << (Q_INT32) m_style.pointLineSize; ++ s << (Q_INT32) m_style.pointLineColor; ++ s << (Q_INT32) m_style.pointInColor; ++ s << (Q_INT32) m_style.lineSize; ++ s << (Q_INT32) m_style.lineColor; ++ s << (Q_INT32) m_style.lineConnectAs; ++ ++ s << (Q_INT32) m_points.count(); + PointListIterator itr(m_points); + Point* point; + while ((point = itr.current()) != 0) +@@ -720,18 +721,28 @@ void PointSet::serializeRead(QDataStream &s, Q3Canvas* canvas) + { + ASSERT_ENGAUGE(canvas != 0); + ++ Q_INT32 extractionQInt32; ++ + s >> m_name; +- s >> (Q_INT32 &) m_style.pointShape; +- s >> (Q_INT32 &) m_style.pointSize; +- s >> (Q_INT32 &) m_style.pointLineSize; +- s >> (Q_INT32 &) m_style.pointLineColor; +- s >> (Q_INT32 &) m_style.pointInColor; +- s >> (Q_INT32 &) m_style.lineSize; +- s >> (Q_INT32 &) m_style.lineColor; +- s >> (Q_INT32 &) m_style.lineConnectAs; +- +- int count; +- s >> (Q_INT32 &) count; ++ s >> extractionQInt32; ++ m_style.pointShape = (PointShape) extractionQInt32; ++ s >> extractionQInt32; ++ m_style.pointSize = (PointSize) extractionQInt32; ++ s >> extractionQInt32; ++ m_style.pointLineSize = (PointLineSize) extractionQInt32; ++ s >> extractionQInt32; ++ m_style.pointLineColor = (Color) extractionQInt32; ++ s >> extractionQInt32; ++ m_style.pointInColor = (Color) extractionQInt32; ++ s >> extractionQInt32; ++ m_style.lineSize = (LineSize) extractionQInt32; ++ s >> extractionQInt32; ++ m_style.lineColor = (Color) extractionQInt32; ++ s >> extractionQInt32; ++ m_style.lineConnectAs = (LineConnectAs) extractionQInt32; ++ ++ s >> extractionQInt32; ++ int count = extractionQInt32; + QList updateRectList; + for (int i = 0; i < count; i++) + { diff -Nru engauge-digitizer-5.0/debian/patches/fix_qreal_vs_double.patch engauge-digitizer-5.2/debian/patches/fix_qreal_vs_double.patch --- engauge-digitizer-5.0/debian/patches/fix_qreal_vs_double.patch 2012-05-17 09:40:34.000000000 +0000 +++ engauge-digitizer-5.2/debian/patches/fix_qreal_vs_double.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,31 +0,0 @@ -Description: Fix issues with double VS qreal - The code was attempting to pass double* to a function expecting qreal* - resulting in compile errors on arm (where qreal is defined as float) - this patch changes a couple of variable definitions so the types match - up. -Origin: http://bugs.debian.org/656943 -Author: Peter Green -Reviewed-By: Tobias Winchen -Last-Update: 2012-03-21 - - ---- engauge-digitizer-5.0.orig/src/digitview.cpp -+++ engauge-digitizer-5.0/src/digitview.cpp -@@ -288,7 +288,7 @@ void DigitView::keyReleaseEvent(QKeyEven - - QPoint DigitView::convertZoom(QPoint p, bool to) - { -- double x, y; -+ qreal x, y; - if (to) - worldMatrix().map((double) p.x(), (double) p.y(), &x, &y); - else -@@ -299,7 +299,7 @@ QPoint DigitView::convertZoom(QPoint p, - - QRect DigitView::convertZoom(QRect r, bool to) - { -- double xTL, yTL, xBR, yBR; -+ qreal xTL, yTL, xBR, yBR; - if (to) - { - worldMatrix().map((double) r.left(), (double) r.top(), &xTL, &yTL); diff -Nru engauge-digitizer-5.0/debian/patches/series engauge-digitizer-5.2/debian/patches/series --- engauge-digitizer-5.0/debian/patches/series 2012-05-17 09:46:04.000000000 +0000 +++ engauge-digitizer-5.2/debian/patches/series 2013-11-12 20:42:22.000000000 +0000 @@ -1,2 +1 @@ -fix_qreal_vs_double.patch -Added-missing-include-fix-FTBFS-on-gcc-4.7.patch +Use-buffer-variable-to-allow-strict-aliasing.patch diff -Nru engauge-digitizer-5.0/debian/rules engauge-digitizer-5.2/debian/rules --- engauge-digitizer-5.0/debian/rules 2012-01-01 16:45:13.000000000 +0000 +++ engauge-digitizer-5.2/debian/rules 2013-11-10 12:08:23.000000000 +0000 @@ -1,84 +1,13 @@ #!/usr/bin/make -f # -*- makefile -*- +DPKG_EXPORT_BUILDFLAGS = 1 -# Uncomment this to turn on verbose mode. -#export DH_VERBOSE=1 -export DH_ALWAYS_EXCLUDE=CVS:.git:.swp +%: + dh $@ --parallel -CFLAGS = -Wall -g - -ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -else - CFLAGS += -O2 -endif - -configure: configure-stamp -configure-stamp: - dh_testdir - qmake 'DEFINES+=DEBIAN_PACKAGE' digitizer.pro - touch configure-stamp - -build: build-arch build-indep -build-arch: build-stamp -build-indep: build-stamp - -build-stamp: configure-stamp - dh_testdir - $(MAKE) - touch $@ - -clean: configure-stamp - dh_testdir - dh_testroot - rm -f build-stamp configure-stamp - $(MAKE) clean - -rm Makefile - -rm bin/engauge - dh_clean - -install: build - dh_testdir - dh_testroot - dh_prep - dh_installdirs +override_dh_install: + mkdir -p debian/engauge-digitizer/usr/share/pixmaps/ + install -m644 src/img/bannerapp.xpm debian/engauge-digitizer/usr/share/pixmaps/engauge-digitizer.xpm dh_install -# Build architecture-independent files here. -binary-indep: build install - dh_testdir -i - dh_testroot -i - dh_installchangelogs -i - dh_installdocs -i - dh_installdirs -i usr/share/doc/engauge-digitizer-doc/html - install -m644 $$( find usermanual/* -prune -type f -print ) debian/engauge-digitizer-doc/usr/share/doc/engauge-digitizer-doc/html - dh_link -i - dh_compress -i -X.js - dh_fixperms -i - dh_installdeb -i - dh_gencontrol -i - dh_md5sums -i - dh_builddeb -i - -# Build architecture-dependent files here. -binary-arch: build install - dh_testdir -a - dh_testroot -a - dh_installchangelogs -a - dh_installdocs -a - dh_installdirs -a usr/share/pixmaps - install -m644 src/img/bannerapp.xpm debian/engauge-digitizer/usr/share/pixmaps/engauge-digitizer.xpm - dh_installmenu -a - dh_installman -a - dh_link -a - dh_strip -a - dh_compress -a - dh_fixperms -a - dh_installdeb -a - dh_shlibdeps -a - dh_gencontrol -a - dh_md5sums -a - dh_builddeb -a -binary: binary-indep binary-arch -.PHONY: build clean binary-indep binary-arch binary install configure diff -Nru engauge-digitizer-5.0/digitizer.pro engauge-digitizer-5.2/digitizer.pro --- engauge-digitizer-5.0/digitizer.pro 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/digitizer.pro 2013-10-10 18:55:48.000000000 +0000 @@ -20,8 +20,8 @@ } win32 { DEFINES += WIN32 -INCLUDEPATH = $$(FFTW_HOME)/api -LIBS = -Lbin -llibfftw3-3 +INCLUDEPATH = $$(FFTW_HOME)/include +LIBS += -L$$(FFTW_HOME)/lib -lfftw3 OBJECTS_DIR = src/.objs } HEADERS = src/axispointdlg.h \ @@ -127,5 +127,6 @@ # tr is turkish TRANSLATIONS = engauge_pt_br.ts \ engauge_tr.ts +MOC_DIR = src/.moc #qt3support was inserted by qt3to4. qt3support in turn requires network QT += qt3support network diff -Nru engauge-digitizer-5.0/release_linux.pl engauge-digitizer-5.2/release_linux.pl --- engauge-digitizer-5.0/release_linux.pl 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/release_linux.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,101 +0,0 @@ -#!/usr/bin/perl - -# this script builds Engauge Digitizer binary release for linux platforms -# usage: release_linux.pl version_number [build_directory] -# author: mark mitchell - -my($versionPrefix); -my($versionSuffix); -# release directory $releaseDir must in current directory so the release -# directory ends up in the user's current directory when he/she untars. -# this means no '..' or slashes! -my($releaseDir) = "engauge"; -my($tarball); - -# parse optional command line argument to override directory defaults -my($numArgs) = $#ARGV + 1; -my($okLine) = ((1 <= $numArgs) && ($numArgs <= 3)); -if ($okLine) { - @fields = split(/\./, $ARGV[0]); - $versionPrefix = $fields [0]; - $versionSuffix = $fields [1]; - $tarball = "../digit-exe-linux-$versionPrefix\_$versionSuffix.tar.gz"; - - $okLine = ((isNumber($versionPrefix) == 1) && - (isNumber($versionSuffix) == 1)); - - if ($numArgs > 1) { - $releaseDir = $ARGV[1]; - } -} -if ((index($releaseDir, '..') >=0) || (index($releaseDir, '/') >= 0)) { - print "Release directory must be in the local directory!\n"; - exit; -} -if (! $okLine) { - print "Usage: release_linux.pl version_number [build_directory]\n"; - exit; -} -print "\nVersion number: $versionPrefix.$versionSuffix\n"; -print "Building binary release in directory: $releaseDir\n"; -print "Writing to tarball: $tarball\n\n"; - -# clean up release directory -print "Deleting existing release directory...\n"; -if (-d $releaseDir) { - use File::Find; - finddepth (sub { - if (-f $_) { - unlink $_; - } else { - rmdir $_; - } - }, $releaseDir); -} - -# make directory tree -print "Recreating binary release directory...\n"; -mkdir "$releaseDir"; -mkdir "$releaseDir/samples"; -mkdir "$releaseDir/usermanual"; - -# copy files. note that all wildcard copies are performed with file suffixes -# so the CVS subdirectory is not copied, which fails and causes the script to die -print "Copying files...\n"; -system("cp -v bin/engauge $releaseDir") == 0 or - die "Failed to copy: $?"; -system("cp -v src/img/lo32-app-digitizer.png $releaseDir") == 0 or - die "Failed to copy: $?"; -system("cp -v LICENSE $releaseDir") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.bmp $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.gif $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.jpg $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.png $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.gif $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.html $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.jpg $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.png $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; - -# we made it this far, so finish up by tarring up the binary release -print "Writing binary tarball...\n"; -system("tar cvfz $tarball --exclude='*CVS*' --exclude='*cvs*' --exclude='*debian*' $releaseDir") == 0 or - die "Failed to create tarball: $?"; - -sub isNumber { - # return 1 if input is a number, else return 0 - my $n = shift; - local $noError = 1; - local $^W = 1; - local $SIG{__WARN__} = sub { $noError = undef }; - eval { my $x = $n + 0 }; - return ($noError); -} diff -Nru engauge-digitizer-5.0/release_linux_src.pl engauge-digitizer-5.2/release_linux_src.pl --- engauge-digitizer-5.0/release_linux_src.pl 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/release_linux_src.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,78 +0,0 @@ -#!/usr/bin/perl - -# this script builds Engauge Digitizer source release for linux platforms -# usage: release_linux_src.pl version_number [build_directory] -# author: mark mitchell - -my($versionPrefix); -my($versionSuffix); -# release directory $releaseDir must in current directory so the release -# directory ends up in the user's current directory when he/she untars. -# this means no '..' or slashes! -my($releaseDir) = "engauge"; -my($tarball); - -# parse optional command line argument to override directory defaults -my($numArgs) = $#ARGV + 1; -my($okLine) = ((1 <= $numArgs) && ($numArgs <= 3)); -if ($okLine) { - @fields = split(/\./, $ARGV[0]); - $versionPrefix = $fields [0]; - $versionSuffix = $fields [1]; - $tarball = "../digit-src-$versionPrefix\_$versionSuffix.tar.gz"; - - $okLine = ((isNumber($versionPrefix) == 1) && - (isNumber($versionSuffix) == 1)); - - if ($numArgs > 1) { - $releaseDir = $ARGV[1]; - } -} -if ((index($releaseDir, '..') >=0) || (index($releaseDir, '/') >= 0)) { - print "Release directory must be in the local directory!\n"; - exit; -} -if (! $okLine) { - print "Usage: release_linux_src.pl version_number [build_directory]\n"; - exit; -} -print "\nVersion number: $versionPrefix.$versionSuffix\n"; -print "Building binary release in directory: $releaseDir\n"; -print "Writing to tarball: $tarball\n\n"; - -# clean up release directory -print "Deleting existing release directory...\n"; -if (-d $releaseDir) { - use File::Find; - finddepth (sub { - if (-f $_) { - unlink $_; - } else { - rmdir $_; - } - }, $releaseDir); -} - -# make directory tree -print "Recreating source release directory...\n"; -mkdir "$releaseDir"; - -# copy files. do not add die to the copy since a warning is produced when recursive copy is -# attempted -print "Copying files...\n"; -system("cp -r * $releaseDir 2>/dev/null"); - -# we made it this far, so finish up by tarring up the source release -print "Writing source tarball...\n"; -system("tar cvfz $tarball --exclude='*CVS*' --exclude='*cvs*' --exclude='*debian*' $releaseDir") == 0 or - die "Failed to create tarball: $?"; - -sub isNumber { - # return 1 if input is a number, else return 0 - my $n = shift; - local $noError = 1; - local $^W = 1; - local $SIG{__WARN__} = sub { $noError = undef }; - eval { my $x = $n + 0 }; - return ($noError); -} diff -Nru engauge-digitizer-5.0/release_osx.pl engauge-digitizer-5.2/release_osx.pl --- engauge-digitizer-5.0/release_osx.pl 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/release_osx.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -#!/usr/bin/perl - -# this script builds Engauge Digitizer for osx platforms -# usage: release_osx.pl version_number [build_directory] [qt_library_directory] -# author: mark mitchell - -my($versionPrefix); -my($versionSuffix); -# release directory $releaseDir must in current directory so the release -# directory ends up in the user's current directory when he/she untars. -# this means no '..' or slashes! -my($releaseDir) = "Engauge.app"; -my($qtLibDir) = "$ENV{QTDIR}/lib"; -my($tarball); - -# parse optional command line argument to override directory defaults -my($numArgs) = $#ARGV + 1; -my($okLine) = ((1 <= $numArgs) && ($numArgs <= 3)); -if ($okLine) { - @fields = split(/\./, $ARGV[0]); - $versionPrefix = $fields [0]; - $versionSuffix = $fields [1]; - $tarball = "../digit-exe-osx-$versionPrefix\_$versionSuffix.tar.gz"; - - $okLine = ((isNumber($versionPrefix) == 1) && - (isNumber($versionSuffix) == 1)); - - if ($numArgs > 1) { - $releaseDir = $ARGV[1]; - if ($numArgs > 2) { - $qtLibDir = $ARGV[2]; - } - } -} -if ((index($releaseDir, '..') >=0) || (index($releaseDir, '/') >= 0)) { - print "Release directory must be in the local directory!\n"; - exit; -} -if (! $okLine) { - print "Usage: release_osx.pl version_number [build_directory] [qt_library_directory]\n"; - exit; -} -print "\nVersion number: $versionPrefix.$versionSuffix\n"; -print "Building release in directory: $releaseDir\n"; -print "Using Qt library directory: $qtLibDir\n"; -print "Writing to tarball: $tarball\n\n"; - -# clean up release directory -print "Deleting existing release directory...\n"; -if (-d $releaseDir) { - use File::Find; - finddepth (sub { - if (-f $_) { - unlink $_; - } else { - rmdir $_; - } - }, $releaseDir); -} - -# make directory tree -print "Recreating release directory...\n"; -mkdir "$releaseDir"; -mkdir "$releaseDir/Contents"; -mkdir "$releaseDir/Contents/Frameworks"; -mkdir "$releaseDir/Contents/MacOS"; -mkdir "$releaseDir/Contents/Resources"; -mkdir "$releaseDir/Contents/Resources/samples"; -mkdir "$releaseDir/Contents/Resources/usermanual"; - -# copy files. note that all wildcard copies are performed with file suffixes -# so the CVS subdirectory is not copied, which fails and causes the script to die -print "Copying files...\n"; -system("cp -v osx/Info.plist $releaseDir/Contents") == 0 or - die "Failed to copy: $?"; -system("cp -v osx/PkgInfo $releaseDir/Contents") == 0 or - die "Failed to copy: $?"; -system("cp -v $qtLibDir/libqt-mt.3.dylib $releaseDir/Contents/Frameworks") == 0 or - die "Failed to copy: $?"; -system("cp -v bin/engauge $releaseDir/Contents/MacOS") == 0 or - die "Failed to copy: $?"; -system("cp -v LICENSE $releaseDir/Contents/Resources") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.bmp $releaseDir/Contents/Resources/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.gif $releaseDir/Contents/Resources/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.jpg $releaseDir/Contents/Resources/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.png $releaseDir/Contents/Resources/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.gif $releaseDir/Contents/Resources/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.html $releaseDir/Contents/Resources/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.jpg $releaseDir/Contents/Resources/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.png $releaseDir/Contents/Resources/usermanual") == 0 or - die "Failed to copy: $?"; - -# osx requires that executable be told where library is found. to see -# where the executable believes the library is found use -# "otool -L Engauge.app/Contents/MacOS/digitizer" -# as documented at http://doc.trolltech.com/qq/qq09-mac-deployment.html -print "Connecting bundled Qt libraries...\n"; -system("install_name_tool -id \@executable_path/../Frameworks/libqt-mt.3.dylib Engauge.app/Contents/Frameworks/libqt-mt.3.dylib") == 0 or - die "Failed to change identification name: $?"; -system("install_name_tool -change libqt-mt.3.dylib \@executable_path/../Frameworks/libqt-mt.3.dylib Engauge.app/Contents/MacOS/engauge") == 0 or - die "Failed to attach executable to library: $?"; - -# we made it this far, so finish up by tarring up the release -print "Writing tarball...\n"; -system("tar cvfz $tarball $releaseDir") == 0 or - die "Failed to create tarball: $?"; - -sub isNumber { - # return 1 if input is a number, else return 0 - my $n = shift; - local $noError = 1; - local $^W = 1; - local $SIG{__WARN__} = sub { $noError = undef }; - eval { my $x = $n + 0 }; - return ($noError); -} diff -Nru engauge-digitizer-5.0/release_solaris.pl engauge-digitizer-5.2/release_solaris.pl --- engauge-digitizer-5.0/release_solaris.pl 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/release_solaris.pl 1970-01-01 00:00:00.000000000 +0000 @@ -1,103 +0,0 @@ -#!/usr/bin/perl - -# this script builds Engauge Digitizer for solaris x386 platforms -# usage: release_solaris.pl version_number [build_directory] -# author: mark mitchell - -my($versionPrefix); -my($versionSuffix); -# release directory $releaseDir must in current directory so the release -# directory ends up in the user's current directory when he/she untars. -# this means no '..' or slashes! -my($releaseDir) = "engauge"; -my($tarball); - -# parse optional command line argument to override directory defaults -my($numArgs) = $#ARGV + 1; -my($okLine) = ((1 <= $numArgs) && ($numArgs <= 3)); -if ($okLine) { - @fields = split(/\./, $ARGV[0]); - $versionPrefix = $fields [0]; - $versionSuffix = $fields [1]; - $tarball = "../digit-exe-solaris-x386-$versionPrefix\_$versionSuffix.tar"; - - $okLine = ((isNumber($versionPrefix) == 1) && - (isNumber($versionSuffix) == 1)); - - if ($numArgs > 1) { - $releaseDir = $ARGV[1]; - } -} -if ((index($releaseDir, '..') >=0) || (index($releaseDir, '/') >= 0)) { - print "Release directory must be in the local directory!\n"; - exit; -} -if (! $okLine) { - print "Usage: release_solaris.pl version_number [build_directory]\n"; - exit; -} -print "\nVersion number: $versionPrefix.$versionSuffix\n"; -print "Building release in directory: $releaseDir\n"; -print "Writing to compressed file: $tarball.bz2\n\n"; - -# clean up release directory -print "Deleting existing release directory...\n"; -if (-d $releaseDir) { - use File::Find; - finddepth (sub { - if (-f $_) { - unlink $_; - } else { - rmdir $_; - } - }, $releaseDir); -} - -# make directory tree -print "Recreating release directory...\n"; -mkdir "$releaseDir"; -mkdir "$releaseDir/samples"; -mkdir "$releaseDir/usermanual"; - -# copy files. note that all wildcard copies are performed with file suffixes -# so the CVS subdirectory is not copied, which fails and causes the script to die -print "Copying files...\n"; -system("cp -v bin/engauge $releaseDir") == 0 or - die "Failed to copy: $?"; -system("cp -v src/img/lo32-app-digitizer.png $releaseDir") == 0 or - die "Failed to copy: $?"; -system("cp -v LICENSE $releaseDir") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.bmp $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.gif $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.jpg $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v samples/*.png $releaseDir/samples") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.gif $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.html $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.jpg $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; -system("cp -v usermanual/*.png $releaseDir/usermanual") == 0 or - die "Failed to copy: $?"; - -# we made it this far, so finish up by tarring up the release -print "Writing tarball...\n"; -system("tar cvf $tarball $releaseDir") == 0 or - die "Failed to create tarball: $?"; -system("bzip2 -f $tarball") == 0 or - die "Failed to perform bzip2 compression: $?"; - -sub isNumber { - # return 1 if input is a number, else return 0 - my $n = shift; - local $noError = 1; - local $^W = 1; - local $SIG{__WARN__} = sub { $noError = undef }; - eval { my $x = $n + 0 }; - return ($noError); -} diff -Nru engauge-digitizer-5.0/release_windows.bat engauge-digitizer-5.2/release_windows.bat --- engauge-digitizer-5.0/release_windows.bat 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/release_windows.bat 2013-10-10 18:55:48.000000000 +0000 @@ -1,75 +1,68 @@ -@echo off - -rem this script builds Engauge Digitizer for MS Windows platforms -rem usage: release_windows.bat version_number_prefix version_number_suffix [build_directory] -rem author: mark mitchell - -rem release directory %releaseDir% is one level below the %releaseRootDir% directory, to be -rem consistent with the linux and osx environments where the release directory ends up in -rem the user's current directory when he/she untars! -set releaseRootDir=releaseRoot - -rem parse optional command line argument to override directory defaults -if "%1" == "" goto usage -if "%2" == "" goto usage -set version=%1_%2 -if "%3" == "" goto noDirectory - set releaseRootDir=%3% -:noDirectory -set releaseDir=%releaseRootDir%\engauge - -rem make sure executable and fftw dll both exist in bin directory -if not exist bin\engauge.exe goto missingExe -if not exist bin\libfftw3-3.dll goto missingDll - -set zipFile=..\digit-exe-windows-%version%.zip - -echo -echo Version number: %version% -echo Building release in directory: %releaseDir% -echo Writing to zip file: %zipFile% - -rem clean up release directory. use prompt since empty entry would delete drive -del /s /q %releaseDir% - -rem make directory tree -echo Recreating release directory... -mkdir %releaseDir% -mkdir %releaseDir%\samples -mkdir %releaseDir%\usermanual - -rem copy files. note that all wildcard copies are performed with file suffixes -rem so the CVS subdirectory is not copied -echo Copying files... -copy bin\engauge.exe %releaseDir% -copy bin\engauge.exe.local %releaseDir% -copy bin\libfftw3-3.dll %releaseDir% -copy LICENSE %releaseDir% -copy samples\*.bmp %releaseDir%\samples -copy samples\*.gif %releaseDir%\samples -copy samples\*.jpg %releaseDir%\samples -copy samples\*.png %releaseDir%\samples -copy usermanual\*.gif %releaseDir%\usermanual -copy usermanual\*.html %releaseDir%\usermanual -copy usermanual\*.jpg %releaseDir%\usermanual -copy usermanual\*.png %releaseDir%\usermanual - -rem we made it this far, so finish up by zipping up the release -echo Writing zip file... -"\program files\winzip\winzip32.exe" -a -r %zipFile% %releaseRootDir% - -goto end - -:usage -echo Usage: release_windows.bat version_number_prefix version_number_suffix [build_directory] -goto end - -:missingExe -echo executable has not been created. see RELEASE file -goto end - -:missingDll -echo fftw dll has not been copied to the bin directory. see INSTALL file -goto end - -:end +@echo off + +rem this script builds Engauge Digitizer for MS Windows platforms +rem usage: release_windows.bat version_number_prefix version_number_suffix [build_directory] +rem author: mark mitchell + +rem release directory %releaseDir% is one level below the %releaseRootDir% directory, to be +rem consistent with the linux and osx environments where the release directory ends up in +rem the user's current directory when he/she untars! +set releaseRootDir=releaseRoot + +rem parse optional command line argument to override directory defaults +if "%1" == "" goto usage +if "%2" == "" goto usage +set version=%1_%2 +if "%3" == "" goto noDirectory + set releaseRootDir=%3% +:noDirectory +set releaseDir=%releaseRootDir%\engauge + +rem make sure executable exists in bin directory +if not exist bin\engauge.exe goto missingExe + +set zipFile=..\digit-exe-windows-%version%.zip + +echo +echo Version number: %version% +echo Building release in directory: %releaseDir% +echo Writing to zip file: %zipFile% + +rem clean up release directory. use prompt since empty entry would delete drive +del /s /q %releaseDir% + +rem make directory tree +echo Recreating release directory... +mkdir %releaseDir% +mkdir %releaseDir%\samples +mkdir %releaseDir%\usermanual + +rem copy files. note that all wildcard copies are performed with file suffixes +rem so the CVS subdirectory is not copied +echo Copying files... +copy bin\engauge.exe %releaseDir% +copy LICENSE %releaseDir% +copy samples\*.bmp %releaseDir%\samples +copy samples\*.gif %releaseDir%\samples +copy samples\*.jpg %releaseDir%\samples +copy samples\*.png %releaseDir%\samples +copy usermanual\*.gif %releaseDir%\usermanual +copy usermanual\*.html %releaseDir%\usermanual +copy usermanual\*.jpg %releaseDir%\usermanual +copy usermanual\*.png %releaseDir%\usermanual + +rem we made it this far, so finish up by zipping up the release +echo Writing zip file... +"\program files\winzip\winzip64.exe" -a -r %zipFile% %releaseRootDir% + +goto end + +:usage +echo Usage: release_windows.bat version_number_prefix version_number_suffix [build_directory] +goto end + +:missingExe +echo executable has not been created. see RELEASE file +goto end + +:end diff -Nru engauge-digitizer-5.0/src/axispointdlg.cpp engauge-digitizer-5.2/src/axispointdlg.cpp --- engauge-digitizer-5.0/src/axispointdlg.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/axispointdlg.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -83,14 +83,22 @@ double AxisPointDlg::x(void) { double value; +#ifdef VISUALSTUDIO + sscanf_s(editX->text(), "%lg", &value); +#else sscanf(editX->text(), "%lg", &value); +#endif return value; } double AxisPointDlg::y(void) { double value; +#ifdef VISUALSTUDIO + sscanf_s(editY->text(), "%lg", &value); +#else sscanf(editY->text(), "%lg", &value); +#endif return value; } diff -Nru engauge-digitizer-5.0/src/colorchooser.cpp engauge-digitizer-5.2/src/colorchooser.cpp --- engauge-digitizer-5.0/src/colorchooser.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/colorchooser.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -301,7 +301,7 @@ int binCount = bins [i]; if (binCount < 1) binCount = 1; - yNew = (int) ((m_chooserHeight - 1.0) * (1.0 - log(binCount) / log(pixelCount)) + 0.5); + yNew = (int) ((m_chooserHeight - 1.0) * (1.0 - log((double) binCount) / log(pixelCount)) + 0.5); if (yNew < 0) yNew = 0; diff -Nru engauge-digitizer-5.0/src/defaultsettings.cpp engauge-digitizer-5.2/src/defaultsettings.cpp --- engauge-digitizer-5.0/src/defaultsettings.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/defaultsettings.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -57,6 +57,8 @@ const QString EXPORT_LAYOUT(EXPORT_GROUP + "/layout"); const QString EXPORT_DELIMITERS(EXPORT_GROUP + "/delimiters"); const QString EXPORT_HEADER(EXPORT_GROUP + "/header"); +const QString EXPORT_XLABEL(EXPORT_GROUP + "/xlabel"); +const QString EXPORT_THETALABEL(EXPORT_GROUP + "/thetalabel"); const QString VIEW_GROUP(ENGAUGE_GROUP_PREFIX + "/view"); // group prefix for view selections const QString VIEW_TOOLBARS(VIEW_GROUP + "/toolbars"); // subgroup prefix for view toolbars selections @@ -235,7 +237,8 @@ // windows any calls to insertSearchPath or setPath either cancel cmdSettingsText, // or they cause multiple files to be written out (one per group) //QSettings archiver(cmdSettingsText ? QSettings::Ini : QSettings::Native); - QSettings archiver; + QString organization ("engauge"); // in linux systems a .ini file with this prefix is put into home directory + QSettings archiver (organization); archiver.writeEntry(SESSIONS_SESSIONS, m_sessionsSettings.sessions); archiver.writeEntry(SESSIONS_COORDINATES, m_sessionsSettings.coordinates); @@ -262,6 +265,8 @@ archiver.writeEntry(EXPORT_LAYOUT, m_exportSettings.layout); archiver.writeEntry(EXPORT_DELIMITERS, m_exportSettings.delimiters); archiver.writeEntry(EXPORT_HEADER, m_exportSettings.header); + archiver.writeEntry(EXPORT_XLABEL, m_exportSettings.xLabel); + archiver.writeEntry(EXPORT_THETALABEL, m_exportSettings.thetaLabel); archiver.writeEntry(VIEW_FILETOOLBAR, m_viewFileToolbar); archiver.writeEntry(VIEW_SELECTTOOLBAR, m_viewSelectToolbar); @@ -741,6 +746,8 @@ m_exportSettings.layout = AllCurvesOnEachLine; m_exportSettings.delimiters = Commas; m_exportSettings.header = HeaderSimple; + m_exportSettings.xLabel = "x"; + m_exportSettings.thetaLabel = "theta"; m_viewFileToolbar = true; m_viewSelectToolbar = true; @@ -939,6 +946,10 @@ m_exportSettings.delimiters); m_exportSettings.header = (ExportHeader) archiver.readNumEntry(EXPORT_HEADER, m_exportSettings.header); + m_exportSettings.xLabel = archiver.readEntry(EXPORT_XLABEL, + m_exportSettings.xLabel); + m_exportSettings.thetaLabel = archiver.readEntry(EXPORT_THETALABEL, + m_exportSettings.thetaLabel); } if (m_sessionsSettings.sessions && m_sessionsSettings.viewSelections) @@ -1316,6 +1327,8 @@ m_exportSettings.layout = exportSettings.layout; m_exportSettings.delimiters = exportSettings.delimiters; m_exportSettings.header = exportSettings.header; + m_exportSettings.xLabel = exportSettings.xLabel; + m_exportSettings.thetaLabel = exportSettings.thetaLabel; } void DefaultSettings::setGridRemovalSettings(GridRemovalSettings grid) diff -Nru engauge-digitizer-5.0/src/digitdef.cpp engauge-digitizer-5.2/src/digitdef.cpp --- engauge-digitizer-5.0/src/digitdef.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/digitdef.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -62,12 +62,12 @@ ASSERT_ENGAUGE(GridSetStrings.findIndex("Step") == AllButStep); ASSERT_ENGAUGE(GridSetStrings.findIndex("Stop") == AllButStop); - VersionNumber = QString("5.0"); + VersionNumber = QString("5.2"); VersionNumbersSupported << "2.0" << "2.1" << "2.2" << "2.3" << "2.4" << "2.5" << "2.6" << "2.7" << "2.8" << "2.9" << "2.10" << "2.11" << "2.12" << "2.13" << "2.14" << "2.15" << "3.0" << "4.0" << "4.1" << - "5.0"; + "5.0" << "5.1" << "5.2"; } mmUnits mmUnitize(CoordSettings coord) diff -Nru engauge-digitizer-5.0/src/digitdef.h engauge-digitizer-5.2/src/digitdef.h --- engauge-digitizer-5.0/src/digitdef.h 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/digitdef.h 2013-10-10 18:55:48.000000000 +0000 @@ -258,6 +258,8 @@ ExportLayout layout; ExportDelimiters delimiters; ExportHeader header; + QString xLabel; + QString thetaLabel; }; // of the four grid mesh parameters (count, increment, start, stop), only diff -Nru engauge-digitizer-5.0/src/digitdoc.cpp engauge-digitizer-5.2/src/digitdoc.cpp --- engauge-digitizer-5.0/src/digitdoc.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/digitdoc.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -403,6 +403,10 @@ str >> (Q_INT32 &) m_exportSettings.layout; str >> (Q_INT32 &) m_exportSettings.pointsSelection; str >> (Q_INT32 &) m_exportSettings.header; + if (versionNumber >= 5.2) { + str >> m_exportSettings.xLabel; + str >> m_exportSettings.thetaLabel; + } str >> (Q_INT32 &) m_gridRemovalSettings.removeThinLines; str >> (double &) m_gridRemovalSettings.thinThickness; @@ -420,7 +424,18 @@ str >> (double &) m_gridRemovalSettings.gridMesh.stopY; str >> (double &) m_gridRemovalSettings.gridDistance; str >> (Q_INT32 &) m_gridRemovalSettings.removeColor; - str >> m_gridRemovalSettings.color; + + if (versionNumber >= 5) + { + str >> m_gridRemovalSettings.color; + } + else + { + Q_UINT32 p; + str >> p; + m_gridRemovalSettings.color.setRgb( p ); + } + str >> (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdLow; str >> (Q_INT32 &) m_gridRemovalSettings.foregroundThresholdHigh; str >> (double &) m_gridRemovalSettings.gapSeparation; @@ -534,6 +549,8 @@ str << (Q_INT32 &) m_exportSettings.layout; str << (Q_INT32 &) m_exportSettings.pointsSelection; str << (Q_INT32 &) m_exportSettings.header; + str << m_exportSettings.xLabel; + str << m_exportSettings.thetaLabel; str << (Q_INT32 &) m_gridRemovalSettings.removeThinLines; str << (double &) m_gridRemovalSettings.thinThickness; @@ -612,7 +629,7 @@ { QFile file(filename); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) return false; Q3TextStream str(&file); @@ -873,7 +890,7 @@ (DefaultSettings::instance().getPowerMostSigMin() > powerMostSigX)) { ASSERT_ENGAUGE(m_canvas.width() > 1); - precisionX = (int) (1 + log10(m_canvas.width())); + precisionX = (int) (1 + log10((double) m_canvas.width())); roundedX = xTheta; roundedXRes = xThetaRes; xFormat = "%.*e"; // use e since g does not have trailing zeros, causing flicker during mouse moves @@ -882,7 +899,7 @@ (DefaultSettings::instance().getPowerMostSigMin() > powerMostSigY)) { ASSERT_ENGAUGE(m_canvas.height() > 1); - precisionY = (int) (1 + log10(m_canvas.height())); + precisionY = (int) (1 + log10((double) m_canvas.height())); roundedY = yR; roundedYRes = yRRes; yFormat = "%.*e"; // use e since g does not have trailing zeros, causing flicker during mouse moves @@ -1389,7 +1406,7 @@ QString DigitDoc::filterImport() { - QString filter(tr("Images (*.bmp *.gif *.jpg *.png *.pnm *.pbm *.xpm);;All Files (*.*)")); + QString filter(tr("Images (*.bmp *.gif *.jpg *.jpeg *.png *.pnm *.pbm *.xpm);;All Files (*.*)")); if (cmdOnlyBmp) filter = tr("Images (*.bmp);;All Files (*.*)"); @@ -1620,7 +1637,7 @@ PointMatch pointMatch; pointMatch.isolateSampleMatchPoint(&m_samplePointPixels, m_processedImage, m_pointMatchSettings, - p.x(), p.y(), p.x(), p.y()); + p.x(), p.y()); addSampleMatchPointToViews(); QApplication::restoreOverrideCursor(); diff -Nru engauge-digitizer-5.0/src/digitmain.cpp engauge-digitizer-5.2/src/digitmain.cpp --- engauge-digitizer-5.0/src/digitmain.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/digitmain.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -92,7 +92,7 @@ QAction *f = new QAction(name, parent); return f; } -QAction* createAction(const QString & menuText, QKeySequence accel, QObject * parent, const char * name = 0 ) +QAction* createAction(const QString & menuText, QKeySequence accel, QObject * parent, const char * ) { QAction *f = createAction(parent, menuText); f->setShortcut(accel); @@ -220,7 +220,7 @@ fileImport->setWhatsThis(tr("New File\n\nCreates a new document by importing an image")); connect(fileImport, SIGNAL(activated()), this, SLOT(slotFileImport())); - fileOpen = createAction(tr("&Open Document"), openIcon, tr("&Open..."), 0, this); + fileOpen = createAction(tr("&Open Document"), openIcon, tr("&Open..."), tr("Ctrl+O"), this); CHECK_PTR_ENGAUGE(fileOpen); fileOpen->setStatusTip(tr("Opens an existing document")); fileOpen->setWhatsThis(tr("Open Document\n\nOpens an existing document")); @@ -438,13 +438,13 @@ "information window. Lengths and areas of the active measure are displayed")); connect(viewMeasureGeometry, SIGNAL(toggled(bool)), this, SLOT(slotViewMeasureGeometry(bool))); - digitizeSelect = createAction(tr("&Select"), selectIcons, tr("&Select"), tr("Ctrl+S"), this, 0, true); + digitizeSelect = createAction(tr("Selec&t"), selectIcons, tr("Select"), tr("Ctrl+T"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeSelect); digitizeSelect->setStatusTip(tr("Select one or more points on screen")); digitizeSelect->setWhatsThis(tr("Select\n\nSelect one or more points on screen")); connect(digitizeSelect, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeSelect(bool))); - digitizeAxis = createAction(tr("&Axis Point"), axisIcons, tr("&Axis Point"), 0, this, 0, true); + digitizeAxis = createAction(tr("&Axis Point"), axisIcons, tr("Axis Point"), 0, this, 0, true); CHECK_PTR_ENGAUGE(digitizeAxis); digitizeAxis->setStatusTip(tr("Digitizes an axis point")); digitizeAxis->setWhatsThis(tr("Digitize Axis Point\n\nDigitizes an axis point by placing a new point " @@ -452,7 +452,7 @@ "required to define the coordinates")); connect(digitizeAxis, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeAxis(bool))); - digitizeScale = createAction(tr("&Scale Bar"), scaleIcons, tr("&Scale Bar"), 0, this, 0, true); + digitizeScale = createAction(tr("Scale &Bar"), scaleIcons, tr("Scale Bar"), 0, this, 0, true); CHECK_PTR_ENGAUGE(digitizeScale); digitizeScale->setStatusTip(tr("Digitizes a scale bar")); digitizeScale->setWhatsThis(tr("Digitize Scale Bar\n\nDigitizes a scale bar by placing a new point " @@ -461,14 +461,14 @@ "will be unavailable if log and/or polar coordinates have been selected")); connect(digitizeScale, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeScale(bool))); - digitizeCurve = createAction(tr("&Curve Point"), curveIcons, tr("&Curve Point"), 0, this, 0, true); + digitizeCurve = createAction(tr("Cu&rve Point"), curveIcons, tr("Curve Point"), tr("Ctrl+R"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeCurve); digitizeCurve->setStatusTip(tr("Digitizes a curve point")); digitizeCurve->setWhatsThis(tr("Digitize Curve Point\n\nDigitizes a single curve point under the cursor\n\n" "New points will be assigned to the currently active curve")); connect(digitizeCurve, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeCurve(bool))); - digitizeSegment = createAction(tr("&Segment Fill"), segmentIcons, tr("&Segment Fill"), 0, this, 0, true); + digitizeSegment = createAction(tr("Se&gment Fill"), segmentIcons, tr("Segment Fill"), tr("Ctrl+G"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeSegment); digitizeSegment->setStatusTip(tr("Digitizes curve points along a curve segment")); digitizeSegment->setWhatsThis(tr("Digitize Segment Fill\n\nDigitizes a curve segment by placing curve points " @@ -476,7 +476,7 @@ "New points will be assigned to the currently active curve")); connect(digitizeSegment, SIGNAL(toggled(bool)), this, SLOT(slotDigitizeSegment(bool))); - digitizePointMatch = createAction(tr("&Point Match"), matchIcons, tr("&Point Match"), 0, this, 0, true); + digitizePointMatch = createAction(tr("Point Matc&h"), matchIcons, tr("Point Match"), tr("Ctrl+H"), this, 0, true); CHECK_PTR_ENGAUGE(digitizePointMatch); digitizePointMatch->setStatusTip(tr("Digitizes curve points in a point plot by matching a point")); digitizePointMatch->setWhatsThis(tr("Digitize Curve Points by Point Matching\n\nDigitizes curve points in a " @@ -484,7 +484,7 @@ "New points will be assigned to the currently active curve")); connect(digitizePointMatch, SIGNAL(toggled(bool)), this, SLOT(slotDigitizePointMatch(bool))); - digitizeMeasure = createAction(tr("&Measure Point"), measureIcons, tr("&Measure Point"), 0, this, 0, true); + digitizeMeasure = createAction(tr("&Measure Point"), measureIcons, tr("Measure Point"), tr("Ctrl+M"), this, 0, true); CHECK_PTR_ENGAUGE(digitizeMeasure); digitizeMeasure->setStatusTip(tr("Digitizes a measure point for measuring length and area")); digitizeMeasure->setWhatsThis(tr("Digitize Measure Point\n\nDigitizes a measure point by placing a new point " @@ -1976,7 +1976,8 @@ if (doc) { QString filename = QFileDialog::getSaveFileName(this, tr("Save"), - doc->savePath(), DigitDoc::filterOpenSave()); + doc->savePath(), DigitDoc::filterOpenSave(), + 0, QFileDialog::DontConfirmOverwrite); if (!filename.isEmpty()) { bool save = true; @@ -2133,8 +2134,9 @@ DigitDoc* doc = activeDocument(); if (doc) { - QString filename = QFileDialog::getSaveFileName(doc->exportPath(), 0, this, "export as", - QString(tr("Export"))); + QString filename = QFileDialog::getSaveFileName (this, QString(tr("Export")), doc->exportPath (), + tr("Excel (*.csv *.tsv *.txt);; All files (*.*)"), + 0, QFileDialog::DontConfirmOverwrite); if (!filename.isEmpty()) { bool save = true; @@ -2896,8 +2898,9 @@ .arg(tr("\n(c) 2002 by Tobias Winchen, Tobias Richter, Mark Mitchell\n" "Engauge Digitizer comes with ABSOLUTELY NO WARRANTY.\n\n" "This is free software, and you are welcome to redistribute it under\n" - "certain conditions according to the GNU General Public License Version 2;\n" - "read the included LICENSE file for details.\n\n" + "certain conditions according to the GNU General Public License Version 2," + "or (at your option) any later version.\n" + "Read the included LICENSE file for details.\n\n" "Author\nContact: mmdigitizer@gmail.com\n" "(All messages are welcome, and your privacy will be respected)\n\n" "Engauge Digitizer\n" diff -Nru engauge-digitizer-5.0/src/digitview.cpp engauge-digitizer-5.2/src/digitview.cpp --- engauge-digitizer-5.0/src/digitview.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/digitview.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -288,7 +288,7 @@ QPoint DigitView::convertZoom(QPoint p, bool to) { - double x, y; + qreal x, y; if (to) worldMatrix().map((double) p.x(), (double) p.y(), &x, &y); else @@ -299,7 +299,7 @@ QRect DigitView::convertZoom(QRect r, bool to) { - double xTL, yTL, xBR, yBR; + qreal xTL, yTL, xBR, yBR; if (to) { worldMatrix().map((double) r.left(), (double) r.top(), &xTL, &yTL); diff -Nru engauge-digitizer-5.0/src/discretize.cpp engauge-digitizer-5.2/src/discretize.cpp --- engauge-digitizer-5.0/src/discretize.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/discretize.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -152,8 +152,8 @@ int r, g, b; double distance; color.rgb(&r, &g, &b); - distance = sqrt ((r - rBg) * (r - rBg) + (g - gBg) * (g - gBg) + (b - bBg) * (b - bBg)); - int value = (int) (distance * DiscretizeForegroundMax / sqrt(255 * 255 + 255 * 255 + 255 * 255) + 0.5); + distance = sqrt ((double) ((r - rBg) * (r - rBg) + (g - gBg) * (g - gBg) + (b - bBg) * (b - bBg))); + int value = (int) (distance * DiscretizeForegroundMax / sqrt((double) (255 * 255 + 255 * 255 + 255 * 255)) + 0.5); if (value < 0) value = 0; @@ -182,8 +182,8 @@ break; case DiscretizeIntensity: color.rgb(&r, &g, &b); - intensity = sqrt (r * r + g * g + b * b); - value = (int) (intensity * DiscretizeIntensityMax / sqrt(255 * 255 + 255 * 255 + 255 * 255) + 0.5); + intensity = sqrt ((double) (r * r + g * g + b * b)); + value = (int) (intensity * DiscretizeIntensityMax / sqrt((double) (255 * 255 + 255 * 255 + 255 * 255)) + 0.5); break; case DiscretizeForeground: break; diff -Nru engauge-digitizer-5.0/src/exportdlg.cpp engauge-digitizer-5.2/src/exportdlg.cpp --- engauge-digitizer-5.0/src/exportdlg.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/exportdlg.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -141,7 +141,7 @@ // delimiters groupDelimiters = new Q3ButtonGroup(QString(tr("Delimiters")), this); CHECK_PTR_ENGAUGE(groupDelimiters); - groupDelimiters->setGeometry(10, 370, 175, 90); + groupDelimiters->setGeometry(10, 370, 113, 90); buttonCommas = new QRadioButton(QString(tr("Commas")), groupDelimiters); CHECK_PTR_ENGAUGE(buttonCommas); @@ -164,7 +164,7 @@ // header groupHeader = new Q3ButtonGroup(QString(tr("Header")), this); CHECK_PTR_ENGAUGE(groupHeader); - groupHeader->setGeometry(195, 370, 175, 90); + groupHeader->setGeometry(133, 370, 113, 90); buttonNone = new QRadioButton(QString(tr("None")), groupHeader); CHECK_PTR_ENGAUGE(buttonNone); @@ -184,6 +184,23 @@ QWhatsThis::add(buttonGnuplot, QString(tr("Exported file will have gnuplot header line"))); connect(buttonGnuplot, SIGNAL(toggled(bool)), this, SLOT(slotGnuplot(bool))); + // x label for header + if (coord->frame == Cartesian) + labelXThetaLabel = new QLabel(QString(tr("Header X Label")), this); + else + labelXThetaLabel = new QLabel(QString(tr("Header Theta Label")), this); + CHECK_PTR_ENGAUGE(labelXThetaLabel); + labelXThetaLabel->setGeometry(256, 390, 114, 20); + + editXThetaLabel = new QLineEdit(this); + CHECK_PTR_ENGAUGE(editXThetaLabel); + editXThetaLabel->setGeometry(256, 410, 110, 20); + if (coord->frame == Cartesian) + QWhatsThis::add(editXThetaLabel, QString(tr("Label in the header for x values"))); + else + QWhatsThis::add(editXThetaLabel, QString(tr("Label in the header for theta values"))); + connect(editXThetaLabel, SIGNAL(textEdited(const QString&)), this, SLOT(slotXThetaLabel(const QString&))); + // preview labelPreview = new QLabel(QString(tr("Preview")), this); CHECK_PTR_ENGAUGE(labelPreview); @@ -297,14 +314,22 @@ { case HeaderNone: buttonNone->setChecked(true); + editXThetaLabel->setEnabled(false); break; case HeaderSimple: buttonSimple->setChecked(true); + editXThetaLabel->setEnabled(true); break; case HeaderGnuplot: buttonGnuplot->setChecked(true); + editXThetaLabel->setEnabled(true); break; } + + if (coord->frame == Cartesian) + editXThetaLabel->setText(xport->xLabel); + else + editXThetaLabel->setText(xport->thetaLabel); } void ExportDlg::updatePreview() @@ -507,3 +532,12 @@ { QWhatsThis::enterWhatsThisMode(); } + +void ExportDlg::slotXThetaLabel (const QString &text) +{ + ASSERT_ENGAUGE(xport != 0); + if (coord->frame == Cartesian) + xport->xLabel = text; + else + xport->thetaLabel = text; +} diff -Nru engauge-digitizer-5.0/src/exportdlg.h engauge-digitizer-5.2/src/exportdlg.h --- engauge-digitizer-5.0/src/exportdlg.h 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/exportdlg.h 2013-10-10 18:55:48.000000000 +0000 @@ -20,6 +20,7 @@ #define EXPORTDLG_H #include +#include #include #include #include @@ -61,6 +62,7 @@ void slotNone(bool toggle); void slotSimple(bool toggle); void slotGnuplot(bool toggle); + void slotXThetaLabel(const QString& xThetaLabel); void slotWhat(void); private: @@ -104,6 +106,9 @@ QRadioButton* buttonSimple; QRadioButton* buttonGnuplot; + QLabel* labelXThetaLabel; + QLineEdit* editXThetaLabel; + // immediately update the preview screen after each setting change, so user can // see the effects. if it turns out the user is blocked for an unacceptably long // time, then the update calculations should have processEvents calls inserted. if diff -Nru engauge-digitizer-5.0/src/gridremoval.cpp engauge-digitizer-5.2/src/gridremoval.cpp --- engauge-digitizer-5.0/src/gridremoval.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/gridremoval.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -217,7 +217,7 @@ if (distancetoline(x, y, 0.0, 0.0, xBasis, yBasis) <= 0.5) { // add new search point - SearchPoint *p = new SearchPoint(i, j, sqrt(i * i + j * j)); + SearchPoint *p = new SearchPoint(i, j, sqrt((double) (i * i + j * j))); CHECK_PTR_ENGAUGE(p); searchPattern->append(p); @@ -291,8 +291,8 @@ Synapse *s = m_synapseDict [i]; int xDestination = s->xCenterOfMass(); int yDestination = s->yCenterOfMass(); - double separation = sqrt((xDestination - xSource) * (xDestination - xSource) + - (yDestination - ySource) * (yDestination - ySource)); + double separation = sqrt((double) ((xDestination - xSource) * (xDestination - xSource) + + (yDestination - ySource) * (yDestination - ySource))); if (separation <= gapSeparation) { // draw a line from the source to the destination. we sacrifice efficiency for diff -Nru engauge-digitizer-5.0/src/mrudocuments.cpp engauge-digitizer-5.2/src/mrudocuments.cpp --- engauge-digitizer-5.0/src/mrudocuments.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/mrudocuments.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -77,8 +77,6 @@ void MruDocuments::mergeDocument(QString doc) { - bool success = true; - // if this document is already the first in the list, then nothing needs to be done if (!m_mruDocuments.isEmpty()) if (doc == m_mruDocuments.first()->text()) @@ -88,13 +86,13 @@ // first and there is no way to move entries around in the popup menu QAction* pAction; for (pAction = m_mruDocuments.first(); pAction; pAction = m_mruDocuments.next()) - success = pAction->removeFrom(m_pPopup); + pAction->removeFrom(m_pPopup); // remove duplicate entry from list if it exists for (pAction = m_mruDocuments.first(); pAction; pAction = m_mruDocuments.next()) if (doc == pAction->text()) { - success = m_mruDocuments.remove(pAction); // autodelete is off + m_mruDocuments.remove(pAction); // autodelete is off delete pAction; break; } diff -Nru engauge-digitizer-5.0/src/pointmatch.cpp engauge-digitizer-5.2/src/pointmatch.cpp --- engauge-digitizer-5.0/src/pointmatch.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/pointmatch.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -21,10 +21,17 @@ #include #include //Added by qt3to4: +#include #include +#include #include #include +#include + +#ifdef WIN32 +#include +#endif #include "main.h" #include "mmsubs.h" @@ -33,6 +40,20 @@ #include "pointmatch.h" #include "pointmatchthread.h" +// Directions for isolateSampleMatchPoint. Since that algorithm goes in a counterclockwise pattern these +// are in clockwise order +enum Direction { + DIR_LEFT, // First try going right up (which is to the back right in the reference frame of a left vector) + DIR_LEFT_DOWN, // First try going up (which is to the back right in the reference frame of a left/down vector) + DIR_DOWN, // First try going left up (which is to the back right in the reference frame of a down vector) + DIR_RIGHT_DOWN,// First try going left (which is to the back right in the reference frame of a right/down vector) + DIR_RIGHT, // First try going left down (which is to the back right in the reference frame of a right vector) + DIR_RIGHT_UP, // First try going down (which is to the back right in the reference frame of a right/up vector) + DIR_UP, // First try going right down (which is to the back right in the reference frame of a up vector) + DIR_LEFT_UP, // First try going right (which is to the back right in the reference frame of a left/right vector) + NUMBER_DIRECTIONS +}; + PointMatch::PointMatch() { DigitDebug::ctor(QString("pointmatch ") + QString::number((ulong) this, 16)); @@ -45,8 +66,25 @@ bool PointMatch::isolateSampleMatchPoint(QPolygon* samplePointPixels, const QImage &image, PointMatchSettings settings, - int xStart, int yStart, int x, int y) + int x, int y) { +#ifdef LOG_MATCH_POINT + QFile data ("dbg.log"); + QTextStream *out; + if (data.open (QFile::WriteOnly | QFile::Truncate)) { + out = new QTextStream (&data); + } + const char *directions [] = { + "left ", + "left/down ", + "down ", + "right/down", + "right ", + "right/up ", + "up ", + "left/up "}; +#endif + if ((x < 0) || (y < 0) || (image.width() <= x) || (image.height() <= y)) return false; // out of bounds @@ -54,44 +92,99 @@ if (!discretize.processedPixelIsOn(image, x, y)) return false; // pixel is off - if (dabs (x - xStart) > settings.pointSize / 2) - return false; // point is too far from start - if (dabs (y - yStart) > settings.pointSize / 2) - return false; // point is too far from start + int xCenter = x, yCenter = y; + int xLeft = xCenter - settings.pointSize / 2; + int yTop = yCenter - settings.pointSize / 2; + int xRight = xCenter + settings.pointSize / 2; + int yBottom = yCenter + settings.pointSize / 2; + int xMin = (xLeft > 0 ) ? xLeft : 0; + int yMin = (yTop > 0 ) ? yTop : 0; + int xMax = (xRight < image.width () ) ? xRight : image.width (); + int yMax = (yBottom < image.height ()) ? yBottom : image.height (); + + // Go to the right until just after edge or the right side, whichever comes first + do { + if (discretize.processedPixelIsOn(image, x, y)) { + ++x; + } else { + break; + } + } while (x < xMax); + --x; // Now jump from the outside back to the inside of the right side + + int xStart = x, yStart = y; + // Go counterclockwise around (xCenter,yCenter), along the edge of the selected points or the + // settings.pointSize boundary, until we reach (xStart,yStart) again ASSERT_ENGAUGE(samplePointPixels != 0); - bool found = (samplePointPixels->size() > 0); - if (found) - found = samplePointPixels->containsPoint(QPoint(x, y), Qt::OddEvenFill); - //(samplePointPixels->find(QPoint(x, y)) >= 0); // n-squared search happening here - if (found) - return true; // already in list - - // add this point - int newSize = samplePointPixels->size() + 1; - //bool resized = samplePointPixels->resize(newSize); - samplePointPixels->resize(newSize); - //ASSERT_ENGAUGE(resized); - samplePointPixels->setPoint(newSize - 1, x, y); - - // recurse. diagonal points are included so single-pixel wide polygonal outlines will be traversed, - // but for a 2x speed increase we only go diagonal if the adjacent nondiagonal pixels are off - bool right = - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x + 1, y); - bool up = - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x, y + 1); - bool left = - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x - 1, y); - bool down = - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x, y - 1); - if (!right && !up) - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x + 1, y + 1); - if (!up && !left) - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x - 1, y + 1); - if (!left && !down) - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x - 1, y - 1); - if (!down && !right) - isolateSampleMatchPoint(samplePointPixels, image, settings, xStart, yStart, x + 1, y - 1); + Direction previousDirection = DIR_LEFT; // Start with this to get first try going up right + while ((samplePointPixels->size () == 0) ||(x != xStart) || (y != yStart)) { + +#ifdef LOG_MATCH_POINT + *out << " direction=" << directions [previousDirection] << " x=" << x << " y=" << y << endl; +#endif + + // Try the directions other than previousDirection until we find the first that has an on-pixel + for (int directionOffset = 5; directionOffset < 5 + NUMBER_DIRECTIONS; directionOffset++) { + + // Compute next direction from previous direction and offset + Direction nextDirection = (Direction) ((previousDirection + directionOffset) % NUMBER_DIRECTIONS); + + int xNext = x, yNext = y; + switch (nextDirection) { + case DIR_LEFT: + xNext = x - 1; + break; + case DIR_LEFT_DOWN: + xNext = x - 1; + yNext = y + 1; + break; + case DIR_DOWN: + yNext = y + 1; + break; + case DIR_RIGHT_DOWN: + xNext = x + 1; + yNext = y + 1; + break; + case DIR_RIGHT: + xNext = x + 1; + break; + case DIR_RIGHT_UP: + xNext = x + 1; + yNext = y - 1; + break; + case DIR_UP: + yNext = y - 1; + break; + case DIR_LEFT_UP: + xNext = x - 1; + yNext = y - 1; + break; + case NUMBER_DIRECTIONS: + break; + } + + if ((xMin <= xNext) && (xNext < xMax) && + (yMin <= yNext) && (yNext < yMax)) { + + if (discretize.processedPixelIsOn(image, xNext, yNext)) { + + // We just found the first on-pixel. Save it and exit the inner loop + int newSize = samplePointPixels->size() + 1; + samplePointPixels->resize(newSize); + samplePointPixels->setPoint(newSize - 1, xNext, yNext); + x = xNext; + y = yNext; + previousDirection = nextDirection; + break; + } + } + } + } + +#ifdef LOG_MATCH_POINT + data.close (); +#endif return true; } @@ -125,7 +218,8 @@ qApp->processEvents(); #ifdef WIN32 - _sleep(SLEEP_IN_SECONDS); +// _sleep(SLEEP_IN_SECONDS); + Sleep(SLEEP_IN_SECONDS); #else sleep(SLEEP_IN_SECONDS); #endif diff -Nru engauge-digitizer-5.0/src/pointmatch.h engauge-digitizer-5.2/src/pointmatch.h --- engauge-digitizer-5.0/src/pointmatch.h 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/pointmatch.h 2013-10-10 18:55:48.000000000 +0000 @@ -74,7 +74,7 @@ // recursively isolate the "on" pixels around (x,y). return true if pixel at (x,y) was on bool isolateSampleMatchPoint(QPolygon * samplePointPixels, const QImage &image, PointMatchSettings settings, - int xStart, int yStart, int x, int y); + int x, int y); // create document points that match the sample point under the cursor static void matchSamplePoint(const QImage &imageProcessed, diff -Nru engauge-digitizer-5.0/src/pointmatchthread.cpp engauge-digitizer-5.2/src/pointmatchthread.cpp --- engauge-digitizer-5.0/src/pointmatchthread.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/pointmatchthread.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -431,7 +431,7 @@ int radical = pointSeparation * pointSeparation - (y - yPoint) * (y - yPoint); if (0 < radical) { - int xMin = (int) (xPoint - sqrt(radical)); + int xMin = (int) (xPoint - sqrt((double) radical)); if (xMin < 0) xMin = 0; int xMax = xPoint + (xPoint - xMin); diff -Nru engauge-digitizer-5.0/src/pointset.cpp engauge-digitizer-5.2/src/pointset.cpp --- engauge-digitizer-5.0/src/pointset.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/pointset.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -555,16 +555,9 @@ // remove duplicate entries caused by two or more curves having points with identical // exported x coordinates, since these duplicates are useless and cause problems (i.e. sql // insert will crash) - QString xLast, xNew; - for (itr = list->begin(); itr != list->end(); ++itr) - { - xNew.setNum(*itr, 'g', xPrecision); - - if (xLast == xNew) - itr = list->remove(itr); - - xLast = xNew; - } + qSort(list->begin(), list->end()); + itr = std::unique (list->begin(), list->end()); + list->erase(itr, list->end()); } QString PointSet::exportCurveAll(ExportSettings xport, int xPrecision, int yPrecision) diff -Nru engauge-digitizer-5.0/src/pointsets.cpp engauge-digitizer-5.2/src/pointsets.cpp --- engauge-digitizer-5.0/src/pointsets.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/pointsets.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -709,9 +709,9 @@ prefix += "#"; if (coord.frame == Cartesian) - prefix += "x"; + prefix += xport.xLabel; else - prefix += "theta"; + prefix += xport.thetaLabel; return prefix; } diff -Nru engauge-digitizer-5.0/src/zoomcmb.cpp engauge-digitizer-5.2/src/zoomcmb.cpp --- engauge-digitizer-5.0/src/zoomcmb.cpp 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/src/zoomcmb.cpp 2013-10-10 18:55:48.000000000 +0000 @@ -26,7 +26,7 @@ #include "main.h" // default zoom settings as percentages -static int zoomDefaults [] = {500, 400, 300, 200, 100, 75, 50, 33, 25, 10}; +static int zoomDefaults [] = {2000, 1000, 500, 400, 300, 200, 100, 75, 50, 33, 25, 10}; ZoomCmb::ZoomCmb(QWidget* parent) : QComboBox(true, parent, "zoom factor") diff -Nru engauge-digitizer-5.0/usermanual/betteraccuracy.html engauge-digitizer-5.2/usermanual/betteraccuracy.html --- engauge-digitizer-5.0/usermanual/betteraccuracy.html 1970-01-01 00:00:00.000000000 +0000 +++ engauge-digitizer-5.2/usermanual/betteraccuracy.html 2013-10-10 18:55:48.000000000 +0000 @@ -0,0 +1,36 @@ + + + +Engauge Digitizer - Better Accuracy + + + + +

+ + + Engauge Digitizer - Better Accuracy

+
+

+To get better accuracy in the digitized output data exported from Engauge Digitizer, it is helpful to understand +that all points are only as accurate as the pixel size (you can see that accuracy in the status bar). If the +distance in graph units from one pixel to the next is D, then theoretically the best possible accuracy is also D. +

+

+It is not possible to define points that are 'between' pixels, even by zooming in closer. That is a constraint +imposed by the graphics library that is used in Engauge Digitizer. +

+

+Fortunately, there are some tricks to improve the accuracy. In order of increasing difficulty: +

+
    +
  • If the axis points are not correctly defined then fix them
  • +
  • Turn on the grid lines by selecting View/Gridlines Display and compare them to grid lines in the +original image to see if the axis points can be slightly adjusted so the grid lines better match each other.
  • +
  • Use a graphics application like Microsoft Paint (Windows) or GIMP (Linux) to scale the original up in size +so each pixel is smaller, and therefore the accuracy of each point is correspondingly better. The larger image +is then imported into Engauge Digitizer. This step can be performed using just the command line using the +powerful ImageMagick tool.
  • +
+ + diff -Nru engauge-digitizer-5.0/usermanual/contextmenukonqueror.html engauge-digitizer-5.2/usermanual/contextmenukonqueror.html --- engauge-digitizer-5.0/usermanual/contextmenukonqueror.html 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/usermanual/contextmenukonqueror.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ - - - -Engauge Digitizer - Adding To Konqueror Service Menu - - - - -

- - - Engauge Digitizer - Adding To Konqueror Service Menu

-
-

Introduction

-

In Konqueror a simple right-click on an image file will bring up - a service (or context) menu that lists some software applications. Clicking on one - of those applications starts that application, and loads the image - file.

-

Engauge Digitizer can be inserted into that service menu, where it - is easily available for processing image file formats such as BMP, - GIF, JPEG, PNG and XPM.

-

Frequent users of Engauge Digitizer will appreciate the speed of - service menus.

-

Steps

-

Follow these three steps to add Engauge Digitizer to the Konqueror - service menu:

-
    -
  1. Determine where the service menu should be created by running - 'kde-config --localprefix'. Typically, this directory is $HOME/.kde
  2. -
  3. Go to the share/apps/konqueror/servicemenus subdirectory - underneath the directory found in the previous step. You will have to - create this subdirectory if it does not already exist
  4. -
  5. Create a text file named 'engauge.desktop', with the following lines:
  6. -
-
-
[Desktop Entry]
-ServiceTypes=image/png,image/jpeg,image/gif,image/bmp
-Actions=engauge
-
-[Desktop Action engauge]
-Name=Engauge Digitizer
-Icon=/home/mark/engauge/lo32-app-digitizer.png
-Exec=/home/mark/engauge/digitizer -import %u
-
-
- - diff -Nru engauge-digitizer-5.0/usermanual/dlgcoordsys.html engauge-digitizer-5.2/usermanual/dlgcoordsys.html --- engauge-digitizer-5.0/usermanual/dlgcoordsys.html 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/usermanual/dlgcoordsys.html 2013-10-10 18:55:48.000000000 +0000 @@ -44,9 +44,7 @@

Normally, the radius at the origin of a polar plot is zero. However, a nonzero value may be -applied if the radial units are decibels. Warning - in version 2 of -Engauge Digitizer, the origin radius value is not saved into the document file, so the value will be -changed to zero when the document is read later (but you can reset the value). +appropriate if the radial units are decibels, and in some other cases.

Dialog

diff -Nru engauge-digitizer-5.0/usermanual/fixingaxispoints.html engauge-digitizer-5.2/usermanual/fixingaxispoints.html --- engauge-digitizer-5.0/usermanual/fixingaxispoints.html 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/usermanual/fixingaxispoints.html 2013-10-10 18:55:48.000000000 +0000 @@ -17,7 +17,8 @@

  • An axis point was placed at the wrong location on the graph
  • The X or Y coordinate of an axis point was entered incorrectly
  • -
  • In a polar plot, the origin has a nonzero radius
  • +
  • In a polar plot, the origin has a nonzero radius (so the default value of zero +in the Coordinates Dialog does not apply)

The trick for identifying the problem is to turn on Grid Display (in the View menu). Once diff -Nru engauge-digitizer-5.0/usermanual/index.html engauge-digitizer-5.2/usermanual/index.html --- engauge-digitizer-5.0/usermanual/index.html 2012-01-01 14:06:48.000000000 +0000 +++ engauge-digitizer-5.2/usermanual/index.html 2013-10-10 18:55:48.000000000 +0000 @@ -36,8 +36,8 @@

  • How do I measure angles, distances and areas?
  • How do I use the date/time converter to work with dates and times?
  • How do I get information out of Engauge Digitizer?
  • +
  • How do I get better accuracy in the numbers coming out of Engauge Digitizer?>
  • How do I add Engauge Digitizer to the Windows Explorer context menu?
  • -
  • How do I add Engauge Digitizer to the Konqueror service menu?
  • What are the command line options?
  • What other help options are available?