diff -Nru qtiplot-0.9.8/3rdparty/qwt/src/qwt_abstract_scale_draw.cpp qtiplot-0.9.8.2/3rdparty/qwt/src/qwt_abstract_scale_draw.cpp --- qtiplot-0.9.8/3rdparty/qwt/src/qwt_abstract_scale_draw.cpp 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/3rdparty/qwt/src/qwt_abstract_scale_draw.cpp 2010-12-01 21:48:35.000000000 +0000 @@ -182,8 +182,8 @@ for (int i = 0; i < (int)majorTicks.count(); i++) { const double v = majorTicks[i]; - if ( d_data->scldiv.contains(v) ) - drawLabel(painter, majorTicks[i]); + if ( d_data->scldiv.contains(v) ) + drawLabel(painter, v); } painter->restore(); @@ -208,7 +208,7 @@ for (int i = 0; i < (int)ticks.count(); i++) { const double v = ticks[i]; - if ( d_data->scldiv.contains(v) ) + if ( d_data->scldiv.contains(v) ) drawTick(painter, v, d_data->tickLength[tickType]); } } diff -Nru qtiplot-0.9.8/3rdparty/qwt/src/qwt_plot_curve.cpp qtiplot-0.9.8.2/3rdparty/qwt/src/qwt_plot_curve.cpp --- qtiplot-0.9.8/3rdparty/qwt/src/qwt_plot_curve.cpp 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/3rdparty/qwt/src/qwt_plot_curve.cpp 2010-12-01 21:48:35.000000000 +0000 @@ -219,6 +219,8 @@ int paintAttributes; QwtGuardedPainter guardedPainter; + + QRect canvasRect; // temporary, while painting }; //! Constructor @@ -515,9 +517,11 @@ */ void QwtPlotCurve::draw(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, - const QRect &) const + const QRect &canvasRect) const { - draw(painter, xMap, yMap, 0, -1); + d_data->canvasRect = canvasRect; + draw(painter, xMap, yMap, 0, -1); + d_data->canvasRect = QRect(); } /*! @@ -814,8 +818,8 @@ } } - if ( d_data->paintAttributes & ClipPolygons ) - polyline = QwtClipper::clipPolygonF(painter->window(), polyline); + if ( d_data->canvasRect.isValid() && d_data->paintAttributes & ClipPolygons ) + polyline = QwtClipper::clipPolygonF(d_data->canvasRect, polyline); QwtPainter::drawPolyline(painter, polyline); @@ -868,10 +872,6 @@ const QwtScaleMap &xMap, const QwtScaleMap &yMap, int from, int to) const { - const QRect window = painter->window(); - if ( window.isEmpty() ) - return; - const bool doFill = d_data->brush.style() != Qt::NoBrush; QwtPolygonF polyline; @@ -880,7 +880,7 @@ if ( to > from && d_data->paintAttributes & PaintFiltered ) { - if ( doFill ) + if ( doFill || d_data->canvasRect.isEmpty() ) { QPointF pp( xMap.xTransform(x(from)), yMap.xTransform(y(from)) ); @@ -909,7 +909,7 @@ // if we don't need to fill, we can sort out // duplicates independent from the order - PrivateData::PixelMatrix pixelMatrix(window); + PrivateData::PixelMatrix pixelMatrix(d_data->canvasRect); for (int i = from; i <= to; i++) { @@ -935,8 +935,8 @@ if ( doFill ) { - if ( d_data->paintAttributes & ClipPolygons ) - polyline = QwtClipper::clipPolygonF(painter->window(), polyline); + if ( d_data->canvasRect.isValid() && (d_data->paintAttributes & ClipPolygons) ) + polyline = QwtClipper::clipPolygonF(d_data->canvasRect, polyline); fillCurve(painter, xMap, yMap, polyline); } @@ -983,8 +983,8 @@ polyline[ip] = QPointF(xi, yi); } - if ( d_data->paintAttributes & ClipPolygons ) - polyline = QwtClipper::clipPolygonF(painter->window(), polyline); + if ( d_data->canvasRect.isValid() && (d_data->paintAttributes & ClipPolygons) ) + polyline = QwtClipper::clipPolygonF(d_data->canvasRect, polyline); QwtPainter::drawPolyline(painter, polyline); @@ -1131,8 +1131,8 @@ } else { - pa[sz] = QPointF(pa[sz - 1].x(), yMap.transform(d_data->reference)); - pa[pa.size() - 1] = QPointF(pa[0].x(), yMap.transform(d_data->reference)); + pa[sz] = QPointF(pa[sz - 1].x(), yMap.transform(d_data->reference)); + pa[pa.size() - 1] = QPointF(pa[0].x(), yMap.transform(d_data->reference)); } } @@ -1159,13 +1159,10 @@ QRect rect; rect.setSize(metricsMap.screenToLayout(symbol.size())); - if ( to > from && d_data->paintAttributes & PaintFiltered ) + if ( (to > from) && (d_data->paintAttributes & PaintFiltered) && + d_data->canvasRect.isValid() ) { - const QRect window = painter->window(); - if ( window.isEmpty() ) - return; - - PrivateData::PixelMatrix pixelMatrix(window); + PrivateData::PixelMatrix pixelMatrix(d_data->canvasRect); for (int i = from; i <= to; i++) { diff -Nru qtiplot-0.9.8/3rdparty/qwt/src/qwt_scale_engine.cpp qtiplot-0.9.8.2/3rdparty/qwt/src/qwt_scale_engine.cpp --- qtiplot-0.9.8/3rdparty/qwt/src/qwt_scale_engine.cpp 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/3rdparty/qwt/src/qwt_scale_engine.cpp 2010-12-01 21:48:35.000000000 +0000 @@ -10,6 +10,7 @@ #include "qwt_math.h" #include "qwt_scale_map.h" #include "qwt_scale_engine.h" +#include "QDebug" static const double _eps = 1.0e-6; @@ -284,17 +285,12 @@ if ( !interval.isValid() || ticks.count() == 0 ) return QwtValueList(); - if ( contains(interval, ticks.first()) - && contains(interval, ticks.last()) ) - { - return ticks; - } - QwtValueList strippedTicks; for ( int i = 0; i < (int)ticks.count(); i++ ) { - if ( contains(interval, ticks[i]) ) - strippedTicks += ticks[i]; + double v = ticks[i]; + if ( contains(interval, v) && !strippedTicks.contains(v)) + strippedTicks += v; } return strippedTicks; } @@ -481,8 +477,7 @@ const QwtDoubleInterval& interval, double stepSize, int maxMinSteps, QwtValueList ticks[QwtScaleDiv::NTickTypes]) const { - const QwtDoubleInterval boundingInterval = - align(interval, stepSize); + const QwtDoubleInterval boundingInterval = align(interval, stepSize); ticks[QwtScaleDiv::MajorTick] = buildMajorTicks(boundingInterval, stepSize); @@ -585,10 +580,13 @@ QwtDoubleInterval QwtLinearScaleEngine::align( const QwtDoubleInterval &interval, double stepSize) const { - const double x1 = - QwtScaleArithmetic::floorEps(interval.minValue(), stepSize); - const double x2 = - QwtScaleArithmetic::ceilEps(interval.maxValue(), stepSize); + double x1 = QwtScaleArithmetic::floorEps(interval.minValue(), stepSize); + if ( QwtScaleArithmetic::compareEps(interval.minValue(), x1, stepSize) == 0 ) + x1 = interval.minValue(); + + double x2 = QwtScaleArithmetic::ceilEps(interval.maxValue(), stepSize); + if ( QwtScaleArithmetic::compareEps(interval.maxValue(), x2, stepSize) == 0 ) + x2 = interval.maxValue(); return QwtDoubleInterval(x1, x2); } @@ -620,6 +618,21 @@ QwtDoubleInterval interval(x1 / pow(10.0, lowerMargin()), x2 * pow(10.0, upperMargin()) ); + if (interval.maxValue() / interval.minValue() < 10.0) + { + // scale width is less than one decade -> build linear scale + + QwtLinearScaleEngine linearScaler; + linearScaler.setAttributes(attributes()); + linearScaler.setReference(reference()); + linearScaler.setMargins(lowerMargin(), upperMargin()); + + linearScaler.autoScale(maxNumSteps, x1, x2, stepSize); + stepSize = ::log10(stepSize); + + return; + } + double logRef = 1.0; if (reference() > LOG_MIN / 2) logRef = qwtMin(reference(), LOG_MAX / 2); @@ -686,6 +699,9 @@ linearScaler.setReference(reference()); linearScaler.setMargins(lowerMargin(), upperMargin()); + if ( stepSize != 0.0 ) + stepSize = ::pow(10.0, stepSize); + return linearScaler.divideScale(x1, x2, maxMajSteps, maxMinSteps, stepSize); } @@ -720,8 +736,7 @@ const QwtDoubleInterval& interval, double stepSize, int maxMinSteps, QwtValueList ticks[QwtScaleDiv::NTickTypes]) const { - const QwtDoubleInterval boundingInterval = - align(interval, stepSize); + const QwtDoubleInterval boundingInterval = align(interval, stepSize); ticks[QwtScaleDiv::MajorTick] = buildMajorTicks(boundingInterval, stepSize); @@ -864,8 +879,13 @@ { const QwtDoubleInterval intv = log10(interval); - const double x1 = QwtScaleArithmetic::floorEps(intv.minValue(), stepSize); - const double x2 = QwtScaleArithmetic::ceilEps(intv.maxValue(), stepSize); + double x1 = QwtScaleArithmetic::floorEps(intv.minValue(), stepSize); + if ( QwtScaleArithmetic::compareEps(interval.minValue(), x1, stepSize) == 0 ) + x1 = interval.minValue(); + + double x2 = QwtScaleArithmetic::ceilEps(intv.maxValue(), stepSize); + if ( QwtScaleArithmetic::compareEps(interval.maxValue(), x2, stepSize) == 0 ) + x2 = interval.maxValue(); return pow10(QwtDoubleInterval(x1, x2)); } diff -Nru qtiplot-0.9.8/debian/build.conf qtiplot-0.9.8.2/debian/build.conf --- qtiplot-0.9.8/debian/build.conf 2010-10-07 08:47:22.000000000 +0000 +++ qtiplot-0.9.8.2/debian/build.conf 2010-12-06 20:11:39.000000000 +0000 @@ -3,7 +3,7 @@ } ########################################################## -## System specific configuration +## System specific configuration ########################################################## # Global include path which is always added at the end of the INCLUDEPATH @@ -12,6 +12,13 @@ SYS_LIBS = -L/usr/lib ########################################################## +## zlib (http://www.zlib.net/) +########################################################## + +# include path. leave it blank to use SYS_INCLUDE +#ZLIB_INCLUDEPATH = $$QTI_ROOT/3rdparty/zlib/ + +########################################################## ## muParser (http://muparser.sourceforge.net/) ########################################################## @@ -23,7 +30,7 @@ MUPARSER_LIBS = -lmuparser ########################################################## -## GNU Sientific Library (http://www.gnu.org/software/gsl/) +## GNU Sientific Library (http://www.gnu.org/software/gsl/) ########################################################## # include path. leave it blank to use SYS_INCLUDE @@ -35,25 +42,11 @@ GSL_LIBS = -lgsl -lgslcblas ########################################################## -## Boost libraries (http://www.boost.org/) -########################################################## - -# include path. leave it blank to use SYS_INCLUDE -#BOOST_INCLUDEPATH = $$QTI_ROOT/3rdparty/boost -# link statically against a copy in 3rdparty/ -#unix: BOOST_LIBS = $$QTI_ROOT/3rdparty/boost/lib/libboost_date_time-gcc43-mt-1_38.a \ -# $$QTI_ROOT/3rdparty/boost/lib/libboost_thread-gcc43-mt-1_38.a -#win32:BOOST_LIBS = $$QTI_ROOT/3rdparty/boost/lib/libboost_date_time-mgw34-mt.lib \ -# $$QTI_ROOT/3rdparty/boost/lib/libboost_thread-mgw34-mt.lib -# or dynamically against a system-wide installation -#BOOST_LIBS = -lboost_date_time-mt -lboost_thread-mt - -########################################################## ## QWT - use local copy till upstream catches up # http://qwt.sourceforge.net/index.html ########################################################## -# include path. +# include path. QWT_INCLUDEPATH = $$QTI_ROOT/3rdparty/qwt/src # link locally against a copy in 3rdparty/ QWT_LIBS = $$QTI_ROOT/3rdparty/qwt/lib/libqwt.a @@ -70,6 +63,52 @@ unix:QWT3D_LIBS = $$QTI_ROOT/3rdparty/qwtplot3d/lib/libqwtplot3d.a ########################################################## +## Boost libraries (http://www.boost.org/) - optional +########################################################## + +# include path. leave it blank to use SYS_INCLUDE +#BOOST_INCLUDEPATH = $$QTI_ROOT/3rdparty/boost +# link statically against a copy in 3rdparty/ +#unix: BOOST_LIBS = $$QTI_ROOT/3rdparty/boost/lib/libboost_date_time.a \ +# $$QTI_ROOT/3rdparty/boost/lib/libboost_thread.a +#win32:BOOST_LIBS = $$QTI_ROOT/3rdparty/boost/lib/libboost_date_time-mgw34-mt.lib \ +# $$QTI_ROOT/3rdparty/boost/lib/libboost_thread-mgw34-mt.lib +# or dynamically against a system-wide installation +BOOST_LIBS = -lboost_date_time-mt -lboost_thread-mt + +########################################################## +## liborigin2 - optional. you don't have to set these variables +# http://soft.proindependent.com/liborigin2/ +########################################################## + +# include path. leave it blank to use SYS_INCLUDE +LIBORIGIN_INCLUDEPATH = /usr/include/liborigin +# link statically against a copy in 3rdparty/ +LIBORIGIN_LIBS = -lorigin2 + +########################################################### +## libxls - optional. you don't have to set these variables +# http://libxls.sourceforge.net/ +########################################################### + +# include path. +#XLS_INCLUDEPATH = $$QTI_ROOT/3rdparty/libxls/include/ +#XLS_INCLUDEPATH = $$QTI_ROOT/3rdparty/ExcelFormat/ +# link locally against a copy in 3rdparty/ +#XLS_LIBS = $$QTI_ROOT/3rdparty/libxls/lib/libxlsreader.a +#XLS_LIBS = $$QTI_ROOT/3rdparty/ExcelFormat/lib/libExcelFormat.a + +########################################################### +## QuaZIP - optional. you don't have to set these variables +# http://quazip.sourceforge.net/ +########################################################### + +# include path. +#QUAZIP_INCLUDEPATH = $$QTI_ROOT/3rdparty/quazip/quazip/ +# link locally against a copy in 3rdparty/ +#QUAZIP_LIBS = $$QTI_ROOT/3rdparty/quazip/lib/libquazip.a + +########################################################## ## libpng - optional. you don't have to set these variables ########################################################## @@ -85,11 +124,46 @@ # http://soft.proindependent.com/emf/index.html ########################################################## -# include path. +# include path. #EMF_ENGINE_INCLUDEPATH = $$QTI_ROOT/3rdparty/EmfEngine/src # link locally against a copy in 3rdparty/ #EMF_ENGINE_LIBS = $$QTI_ROOT/3rdparty/EmfEngine/libEmfEngine.a +########################################################## +## QTeXEngine - optional. you don't have to set these variables +# http://soft.proindependent.com/qtexengine/ +########################################################## + +# include path. +#TEX_ENGINE_INCLUDEPATH = $$QTI_ROOT/3rdparty/QTeXEngine/src +# link locally against a copy in 3rdparty/ +#TEX_ENGINE_LIBS = $$QTI_ROOT/3rdparty/QTeXEngine/libQTeXEngine.a + +########################################################## +## ALGLIB (2.6) - optional. you don't have to set these variables +# http://www.alglib.net/ +########################################################## + +# include path. +#ALGLIB_INCLUDEPATH = $$QTI_ROOT/3rdparty/alglib/ +# link locally against a copy in 3rdparty/ +#ALGLIB_LIBS = $$QTI_ROOT/3rdparty/alglib/libalglib.a + +########################################################## +## python - only used if python is needed +########################################################## + +# the python interpreter to use +# (unix only, windows will use what ever is configured to execute .py files!) +PYTHON = python + +########################################################## +## Qt tools - allows to use specific versions +########################################################## + +LUPDATE = lupdate +LRELEASE = lrelease + ############################################################ ## Target specific configuration: configure Qtiplot itself ############################################################ @@ -103,17 +177,14 @@ # where running QtiPlot from a terminal is inconvenient DEFINES += SCRIPTING_CONSOLE - # a dialog for selecting the scripting language on a per-project basis - DEFINES += SCRIPTING_DIALOG - #DEFINES += QTIPLOT_DEMO - # Comment the following lines to disable donations start-up message. - #DEFINES += QTIPLOT_SUPPORT - # Uncomment the following line if you want to perform a custom installation using the *.path variables defined in ./qtiplot.pro. CONFIG += CustomInstall + # Uncomment the following line if you want to build QtiPlot as a browser plugin (not working on Internet Explorer). + #CONFIG += BrowserPlugin + CONFIG += release #CONFIG += debug #win32: CONFIG += console diff -Nru qtiplot-0.9.8/debian/changelog qtiplot-0.9.8.2/debian/changelog --- qtiplot-0.9.8/debian/changelog 2010-10-19 15:37:00.000000000 +0000 +++ qtiplot-0.9.8.2/debian/changelog 2010-12-08 10:35:27.000000000 +0000 @@ -1,29 +1,33 @@ -qtiplot (0.9.8-2ubuntu1~ppa4) natty; urgency=low +qtiplot (0.9.8.2-1ubuntu1) natty; urgency=low - * Rebuild for natty - - -- Alexander Valavanis Tue, 19 Oct 2010 16:36:43 +0100 - -qtiplot (0.9.8-2ubuntu1~ppa3) natty; urgency=low - - * 01_build_system.diff: Added -lz linkage (LP: #663332) + * Merge from debian unstable (LP: #685807). Remaining changes: + - Drop 03_binutils-gold-fix.diff. Now merged into 01_build_system.diff + - Build-Depends on libqtassistantclient-dev + Recommends qt-assistant-compat to fix a FTBFS since qtassistant + is removed in qt > 4.6 (LP: #598826) - -- Alexander Valavanis Tue, 19 Oct 2010 16:31:46 +0100 + -- Alex Valavanis Wed, 08 Dec 2010 10:32:48 +0000 -qtiplot (0.9.8-2ubuntu1~ppa2) natty; urgency=low +qtiplot (0.9.8.2-1) unstable; urgency=low - * Rebuild for natty + * New upstream release + * Remove quilt dependency + * Depend on liborigin2 (>=1:13092010) + * Re-enable liborigin2 (Closes: #604819) + * Added -lz to qtiplot.pro (Closes: #600736) + * Add Dependency on libboost-thread-dev - -- Alexander Valavanis Tue, 19 Oct 2010 14:33:21 +0100 + -- Gudjon I. Gudjonsson Sun, 05 Dec 2010 10:08:58 +0100 -qtiplot (0.9.8-2ubuntu1~ppa1) maverick; urgency=low +qtiplot (0.9.8-2ubuntu1) natty; urgency=low - * Merge with Debian unstable (LP: #656046). Remaining changes: + * Merge with debian unstable (LP: #656046). Remaining changes: - Build-Depends on libqtassistantclient-dev Recommends qt-assistant-compat to fix a FTBFS since qtassistant is removed in qt > 4.6 (LP: #598826) + * Added 03_binutils-gold-fix.diff: Fix FTBFS with binutils-gold (LP: #663332) - -- Alexander Valavanis Thu, 07 Oct 2010 09:47:44 +0100 + -- Alexander Valavanis Fri, 22 Oct 2010 14:15:27 +0200 qtiplot (0.9.8-2) unstable; urgency=low diff -Nru qtiplot-0.9.8/debian/control qtiplot-0.9.8.2/debian/control --- qtiplot-0.9.8/debian/control 2010-10-07 08:47:22.000000000 +0000 +++ qtiplot-0.9.8.2/debian/control 2010-12-08 10:33:51.000000000 +0000 @@ -5,11 +5,11 @@ XSBC-Original-Maintainer: Debian Science Team Uploaders: Gudjon I. Gudjonsson , Andreas Tille -Build-Depends: debhelper (>= 7), quilt, dblatex, docbook-utils, doxygen, +Build-Depends: debhelper (>= 7), dblatex, docbook-utils, doxygen, libgsl0-dev, zlib1g-dev, libpng12-dev, - liborigin2-dev (>=1:06042009+svn1724), libmuparser-dev (>=1.32), python-all-dev (>= 2.4.4), + liborigin2-dev (>=1:13092010), libmuparser-dev (>=1.32), python-all-dev (>= 2.4.4), python-qt4, python-qt4-dev, python-sip4-dev, sip4, libqt4-opengl-dev, - libqtassistantclient-dev + libboost-thread-dev, libqtassistantclient-dev Standards-Version: 3.9.1 Homepage: http://soft.proindependent.com/qtiplot.html Vcs-Svn: svn://svn.debian.org/svn/debian-science/packages/qtiplot/trunk/ diff -Nru qtiplot-0.9.8/debian/patches/01_build_system.diff qtiplot-0.9.8.2/debian/patches/01_build_system.diff --- qtiplot-0.9.8/debian/patches/01_build_system.diff 2010-10-07 08:47:22.000000000 +0000 +++ qtiplot-0.9.8.2/debian/patches/01_build_system.diff 2010-12-06 20:11:39.000000000 +0000 @@ -13,15 +13,16 @@ qtiplot --- a/qtiplot/qtiplot.pro +++ b/qtiplot/qtiplot.pro -@@ -23,6 +23,7 @@ +@@ -23,6 +23,8 @@ LIBS += $$QWT_LIBS LIBS += $$QWT3D_LIBS LIBS += $$GSL_LIBS +LIBS += -lorigin2 ++LIBS += -lz ############################################################################# ###################### BASIC PROJECT PROPERTIES ############################# -@@ -106,17 +107,16 @@ +@@ -106,17 +108,16 @@ translations/qtiplot_sv.qm isEmpty(LUPDATE): LUPDATE = lupdate @@ -42,7 +43,7 @@ unix: man.files += ../qtiplot.1 -@@ -124,7 +124,7 @@ +@@ -124,7 +125,7 @@ ##################### Compression (zlib-1.2.3) ################ ############################################################### @@ -51,7 +52,7 @@ ############################################################### ################# Default Modules ############################# -@@ -159,18 +159,18 @@ +@@ -159,18 +160,18 @@ qtiUtil.py \ qti_wordlist.txt \ @@ -74,7 +75,7 @@ } win32 { -@@ -218,7 +218,7 @@ +@@ -220,7 +221,7 @@ !isEmpty(BOOST_LIBS) { DEFINES += OPJ_IMPORT INCLUDEPATH += $$BOOST_INCLUDEPATH diff -Nru qtiplot-0.9.8/debian/patches/debian-changes-0.9.8-2ubuntu1~ppa3 qtiplot-0.9.8.2/debian/patches/debian-changes-0.9.8-2ubuntu1~ppa3 --- qtiplot-0.9.8/debian/patches/debian-changes-0.9.8-2ubuntu1~ppa3 2010-10-19 15:31:13.000000000 +0000 +++ qtiplot-0.9.8.2/debian/patches/debian-changes-0.9.8-2ubuntu1~ppa3 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -Description: Upstream changes introduced in version 0.9.8-2ubuntu1~ppa3 - This patch has been created by dpkg-source during the package build. - Here's the last changelog entry, hopefully it gives details on why - those changes were made: - . - qtiplot (0.9.8-2ubuntu1~ppa3) maverick; urgency=low - . - * 01_build_system.diff: Added -lz linkage (LP: #663332) - . - The person named in the Author field signed this changelog entry. -Author: Alexander Valavanis -Bug-Ubuntu: https://bugs.launchpad.net/bugs/663332 - ---- -The information above should follow the Patch Tagging Guidelines, please -checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here -are templates for supplementary fields that you might want to add: - -Origin: , -Bug: -Bug-Debian: http://bugs.debian.org/ -Bug-Ubuntu: https://launchpad.net/bugs/ -Forwarded: -Reviewed-By: -Last-Update: - ---- qtiplot-0.9.8.orig/qtiplot/qtiplot.pro -+++ qtiplot-0.9.8/qtiplot/qtiplot.pro -@@ -24,6 +24,7 @@ LIBS += $$QWT_LIBS - LIBS += $$QWT3D_LIBS - LIBS += $$GSL_LIBS - LIBS += -lorigin2 -+LIBS += -lz - - ############################################################################# - ###################### BASIC PROJECT PROPERTIES ############################# diff -Nru qtiplot-0.9.8/debian/patches/series qtiplot-0.9.8.2/debian/patches/series --- qtiplot-0.9.8/debian/patches/series 2010-10-19 15:31:13.000000000 +0000 +++ qtiplot-0.9.8.2/debian/patches/series 2010-12-08 10:35:13.000000000 +0000 @@ -1,3 +1,2 @@ 01_build_system.diff 02_fix_paths.diff -debian-changes-0.9.8-2ubuntu1~ppa3 diff -Nru qtiplot-0.9.8/manual/docbook-en/dialogs.docbook qtiplot-0.9.8.2/manual/docbook-en/dialogs.docbook --- qtiplot-0.9.8/manual/docbook-en/dialogs.docbook 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/manual/docbook-en/dialogs.docbook 2010-12-01 21:48:37.000000000 +0000 @@ -1066,7 +1066,16 @@ - The fifth tab named Geometry defines the default size for the drawing area of a plot layer. + The Grid tab defines the default aspect of plot layer grids. + + + + + + + + + The sixth tab named Geometry defines the default size for the drawing area of a plot layer. @@ -1075,7 +1084,19 @@ - The sixth tab named Fonts defines the default fonts used when you create a new plot. + The seventh tab named Speed lets the user enable/disable antialiasing for 2D plots. + Since antialiasing is a major source of slow-down in rendering 2D plots, + here you have the possibility to disable it for curves displaying large data sets. + This is essential in order to keep the application responsive. + + + + + + + + + The eighth tab named Fonts defines the default fonts used when you create a new plot. diff -Nru qtiplot-0.9.8/manual/docbook-en/introduction.docbook qtiplot-0.9.8.2/manual/docbook-en/introduction.docbook --- qtiplot-0.9.8/manual/docbook-en/introduction.docbook 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/manual/docbook-en/introduction.docbook 2010-12-01 21:48:37.000000000 +0000 @@ -9,26 +9,21 @@ What &appname; does -&appname; is a program for two- and three-dimensional graphical presentation of data sets and for data analysis. The plots can be produced from data sets stored in tables or from analytical functions. -The projet has been created by &ion; in 2000, and he was the only programmer between 2000 and 2005. Since 2006, new contributors have joined Ion and the project is hosted by BerliOS Developper. The software aims to be a tool for analysis and graphical representation of data in the way of commercial software like Origin. +&appname; is a program for two- and three-dimensional graphical presentation of data sets and for data analysis. Plots can be produced from data sets stored in tables or from analytical functions. +The project was created by &ion; in 2000. Ion was the only programmer from 2000 until 2005. Since 2006, new contributors have joined Ion, and the project is hosted by BerliOS Developer. The software aims to be a tool for analysis and graphical representation of data in the way of commercial software like Origin. -&appname; is a dynamic tool, the plots created from data sets and the spreadsheets owing the data are interconected. When the spreadsheets are modified, all the objects in the depending plots (curves, axes scales, legends) are automatically updated. For example, deleting a spreadsheet or only some columns will automatically remove all the corresponding curves from the depending plots. +&appname; is a dynamic tool: Plots created from data sets, and the tables owning that data, are interconnected. When any table is modified, all objects in dependent plots (curves, axes scales, legends) are automatically updated. For example, deleting a table, or perhaps only some of the columns, will automatically remove all the corresponding curves from dependent plots. Plots can be exported in several graphic formats (eg: jpeg, png, bmp, pdf, etc) and inserted as images in documents or presentations. -All settings of a complete set of tables, matrix and plots can be saved in project files, having the extention ".qti". These project files may be opened using the command line, or using the File menu, or by using the Open project icon from the File toolbar. +All settings for a complete set of tables, matrices and plots can be saved in a project file having the extension ".qti". These project files may be opened using the command line, the File menu, or by using the Open project icon from the File toolbar. -The plots can be exported to several graphic formats such as JPEG or png and inserted as images in documents or presentations. - -Data analysis operations (integration, interpolation, FFT, curve fitting, etc...) can be performed on the curves in a 2D plot via the Analysis menu. The results of all these operations are also stored in the project files. They can be visualized at any moment using the &results-log-lnk; and can be deleted from the project file via the &clear-log-lnk;. +Data analysis operations (integration, interpolation, FFT, curve fitting, etc.) can be performed on the curves in a 2D plot via the Analysis menu. The results of all these operations are also stored in the project file. They can be visualized at any time using the &results-log-lnk; and can be deleted from the project file via the &clear-log-lnk;. When the application is launched, a new untitled project file is created consisting of a grey main window -(the workspace) which may contains an empty window, depending on your preferences. The type of the initial -window can be customized using the Preferences dialog. It may be a table, a matrix, -a note or an empty 2D graph window. In order to be operational, the workspace must -be populated with tables storing data sets, either by creating empty tables/matrices first (&new-table-lnk;) -and then filling them with data, or by importing ASCII files (&import-ascii-lnk;), -which automatically creates new tables. +(the workspace) which may contain an empty child window, depending on your preferences. The type of this initial +child window can be customized using the Preferences dialog. It may be a table, a matrix, +a note or an empty 2D graph window. In order to be operational, the workspace must be populated with at least one data container. Either empty tables or matrices may be created manually (&new-table-lnk;) and then filled with data, or they may created by importing ASCII files (&import-ascii-lnk;), which automatically creates new tables. -The user can easily navigate through the objects of a project file using the project explorer or the Windows menu. The project explorer also allows the user to perform various operations on the windows (tables and plots) in the workspace: hiding, minimazing, closing, renaming, printing, etc... +The user can easily navigate through the objects of a project file by using either the project explorer or the Windows menu. The project explorer also allows the user to perform various operations on the windows (tables and plots) in the workspace: hiding, minimizing, closing, renaming, printing, etc. @@ -51,14 +46,13 @@ qtiplot ASCII_file_name - In this latter case a new "untitled" project will be created, containing a spreadsheet with the ASCII data in the file and a 2D plot of all columns as a function of the first column in the file. -You must take care of the format of the ASCII file because it will be read with the current values of the &import-ascii-lnk; dialog. These default values are: + In this latter case, a new "untitled" project will be created, containing a table with the ASCII data from the file, and a 2D plot of all columns as a function of the first column in the file. The user is responsible for properly formatting the ASCII file. The file will be read and interpreted using the current settings from the &import-ascii-lnk; dialog. The default values of these settings are: the default field separator is ; but it can be changed in the &preferences-lnk; dialog, all lines are read, the first line is used to name the columns, - the spaces at the end of the lines are not removed, - the spaces are not simplified. + spaces at the end of the lines are not removed, + spaces are not simplified. @@ -78,14 +72,14 @@ -v or --version: print &appname; version and release date -x or --execute: execute the script file given as argument -X: execute the script file given as argument without displaying the user interface. -Warning: 2D plots are not correctly handled in this functioning mode! +Warning: 2D plots are not correctly handled in this mode! General Concepts and Terms -Several plots and all the data related to these plots can be save in a project file, the project is therefore the main container of &appname;. The following screenshot gives an example of a typical session. This example shows the log panel at the top of the workspace, the project explorer at the bottom, a table and a plot window are shown while other are docked or hidden. +Several plots and all the data related to these plots can be saved in a project file. The project is therefore the main container of &appname;. The following screenshot gives an example of a typical session. This example shows the log panel at the top of the workspace, the project explorer at the bottom, plus a table and a plot window. Other windows are either docked or hidden.
A typical &appname; session @@ -96,7 +90,7 @@
-There are numerous commands available in &appname; depending on the element which is selected. Therefore, the main menu bar changes when you select a particular element of the project. Moreover, you can access to the set of commands relevant of an element by activating the context menu with the right button of the mouse. +There are numerous commands available in &appname;. The specific subset of commands available depends on the element which is selected. Therefore, the main menu bar changes when you select a particular element of the project. Moreover, you can access the set of commands relevant to a given element by activating the context menu with the right button of the mouse when the mouse pointer is floating over the chosen element. In a project, the containers which can be used are: @@ -104,12 +98,11 @@ A Table table - A table is a spreadsheet which can be used to store the datas you are entering. - It can also be used to do some calculations and statistical analysis of datas. - In each table, columns can be labelled as X-values or Y-values for 2D-plotting, or Z-values if you plan to build a + A table is a spreadsheet like object which can be used to store the data you are entering. The table is contained in its own window (the Table Window). It can be used to perform some calculations and statistical analysis of that data. + In each table, columns can be labeled as X-values or Y-values for 2D-plotting, or Z-values if you plan to build a 3D-plot. - A table can be created by the &new-table-lnk;. Then there are several ways to fill the table with your data. - If you want to read a table from an ASCII file, you can import the data from the file to a table with the &import-ascii-lnk;. You can also enter each value from the keyboard. The last way to enter your data is to fill the table with the results of a mathematical function (&set-column-values-lnk; from the &table-menu-lnk;) + A table can be created using the &new-table-lnk;. There are then several ways to fill the table with data. + If you want to read your data from an ASCII file, you can import it from the file into a table using the &import-ascii-lnk;. You can also manually enter each value from the keyboard. Finally, you can fill the table with the results of evaluating a mathematical function using the (&set-column-values-lnk; from the &table-menu-lnk;) @@ -117,7 +110,7 @@ matrix A matrix is a special table which is used to store the data points for surface 3D plots. It contains Z-values and doesn't include any column or row which could be designed as X-values or Y-values. Nevertheless, you can specify the X-values and the Y-values with the &set-dimensions-lnk; command from the &matrix-menu-lnk;. - A matrix can be created by the &new-matrix-lnk;. If you want to read a matrix from an ASCII file, you can import the data of the file to a table with the &import-ascii-lnk; and then convert this table to a matrix with the &convert-to-matrix-lnk;. In the same way as for tables, you can also fill matrix with the results of a function z=(i,j) in which i and j are row and column numbers (&set-values-lnk; from the &matrix-menu-lnk;) + A matrix is created using the &new-matrix-lnk;. If you want to read matrix data from an ASCII file, you can import the data from the file into a table using the &import-ascii-lnk;, and then convert this table to a matrix with the &convert-to-matrix-lnk;. In the same way as for tables, you can also fill a matrix with the results of evaluating a function z=(i,j) in which i and j are row and column numbers (&set-values-lnk; from the &matrix-menu-lnk;) @@ -126,31 +119,31 @@ graph - A graph can contain one or several plots. Each of these plots is contained in a different layer, these layers can be arranged in many ways to build matrix of plots. - A new layer can be added to an existing graph with the &add-layer-lnk; from the &graph-menu-lnk;. you can also remove an existing layer with the &remove-layer-lnk;, but if you remove a layer, the plot will be deleted. You can also copy a layer from one graph to another. You can also copy an existing graph into another, the window will be added as a new layer (see the section on Multilayer Plots for more details). - Plots can be created in several ways. You can select data in tables or matrix and build a plot, or create new plots from functions of one or two variables (see sections 2D plots and 3D plots). + A graph can contain one or several plots. Each of these plots is contained in a different layer. These layers can be arranged in many ways to build matrix of plots. + A new layer can be added to an existing graph with the &add-layer-lnk; from the &graph-menu-lnk;. you can also remove an existing layer with the &remove-layer-lnk;, but if you remove a layer, any plots on that layer will also be deleted. You can also copy a layer from one graph to another or copy an existing graph into another (the window will be added as a new layer - see the section on Multilayer Plots for more details). + Plots can be created in several ways. You can select data in tables or matrices, and build a plot, or create new plots from functions of one or two variables (see sections 2D plots and 3D plots). A Note This window is a text container which can simply be used to insert comments - into a project, but is really far more powerfull than that. - It can be used as a calculator, for executing single commands and for writing scripts. + into a project, but is really far more powerful than that. + It can be used as a calculator, for executing single commands, and for writing scripts. The Log Window - This window is used to store the results of all the calculations which have been done. If this window is not visible, you can find it with the Project Explorer or with the &results-log-lnk;. - The text in the log window is also saved in the project file, so that when you load a previously saved project, the results-log panel is re-filled with the results of the calculations. + This window is used to store the results of all calculations which have been done. If this window is not visible, you can find it with the Project Explorer or with the &results-log-lnk;. + The text in the log window is also saved in the project file, so that when you load a previously saved project, the results-log panel is re-filled with the results of previous calculations. The Project Explorer - This window is used to list all the windows contained in a projet. The Project Explorer gives a quick access to all elements of a project, hidden or visibles. It can be used to do some operations on the windows related to these items such as hidding a window, renaming windows, etc. - Since the version 0.8.5, a project file can include several independant projects. In this case, the containers of each project are stored in different folders. + This window is used to list all the windows contained in a project. The Project Explorer gives quick access to all elements of a project, hidden or visible. It can be used to perform some operations on the listed windows such as hiding a window, renaming a window, etc. + Since version 0.8.5, a project file can include several independent projects. In this case, the containers of each project are stored in different folders. @@ -164,7 +157,7 @@ table -The table is the main part of QtiPlot when working with data. For controlling and converting data the spreadsheet contains a highly customizable table: all colors and font preferences can be set using the &preferences-lnk; of the &view-menu-lnk;. You can resize a table in terms of rows and columns using the &table-menu-lnk; with &rows-lnk; or &columns-lnk;. +When working with data, tables become the main focus of QtiPlot. Fundamentally, a table is simplified spreadsheet contained in a Window which can be used to control, edit, and convert data. Tables are also highly customizable: all colors and font preferences can be set using the &preferences-lnk; of the &view-menu-lnk;, and you can resize a table in terms of rows and columns using the &table-menu-lnk; with &rows-lnk; or &columns-lnk;.
@@ -176,17 +169,17 @@
- Every column of the table has a label and can be assigned a format: numeric, text, date or time. In a spreadsheet, columns can have the following flags: X, Y, Z, X-error, Y-error or can be simple columns without any special flag. The X columns are abscissae columns while the Y columns are ordinates columns used when creating a 2D plot from data. The X-error and Y-error columns can be used in order to add error bars to 2D plots. These flags can be changed using the Column options dialog. To reach this dialog you simply have to double-click on the column label or to use the &column-options-lnk; of the &table-menu-lnk;. + Every column of a table has a label, and can be assigned a format: numeric, text, date or time. Each column can also have one of the following flags set: X, Y, Z, X-error, Y-error, label, or none (i.e., a simple column without any special flag). X flagged columns are the abscissae while Y flagged columns are the ordinates used when creating a 2D plot from data. A column must have either the X or Y flag set to be available for use in a 2D plot. The X-error and Y-error columns can be used to add error bars to 2D plots. Flags can be changed using the Column options dialog. To reach this dialog, simply double-click on the column label or use the &column-options-lnk; from the &table-menu-lnk;. - You can select all the columns of the spreadsheet (Ctrl+A) or only some of them by clicking on the column label while keeping the Ctrl key pressed, or by moving the mouse over the column label. This also allows you to deselect columns. + A table column is selected by left clicking on it's label. Multiple columns are selected in one of 2 ways. First, if the columns are adjacent, it is most convenient to left click on the first desired column's label and, while holding the left mouse button down, drag the mouse pointer over the labels of the column you wish to select. Second, in the case where desired columns are not adjacent, you can select additional columns by keeping the Ctrl key pressed while left clicking on the desired column's label. This also allows you to deselect specific columns. You can select all the columns of a selected table by pressing (Ctrl+A). - On the selected columns you can perform various operations: fill with data, normalize, sort, view statistics and finally make plots out of your data. All these functions can be reached by right clicking on the column label or by using the &table-menu-lnk;. + You can perform various operations on selected columns : fill with data, normalize, sort, view statistics and finally, make plots out of your data. All these functions can be reached by right clicking on the column label or by using the &table-menu-lnk;. - Any other spreadsheet function: rename, duplicate, export, print, close can be reached via the context menu (right click anywhere in the table outside the column labels area). + All other table functions: rename, duplicate, export, print, close can be reached via the context menu (right click anywhere in the table outside the column labels area). - You can cut, copy and paste data between spreadsheets or between a spreadsheet and another application (Excel, Gnumeric, etc...). + You can cut, copy and paste data between tables or between a table and another application (Excel, Gnumeric, etc.). - You can import single or multiple ASCII files using the &import-ascii-lnk; from the &file-menu-lnk;. Of course you can export the data from the spreadsheet to a text file using the &export-ascii-lnk;. + You can import single or multiple ASCII files using the &import-ascii-lnk; from the &file-menu-lnk;. Of course you can export the data from the table to a text file using the &export-ascii-lnk;. @@ -198,20 +191,19 @@ Matrix matrix -The matrix is a special table which is used for data depending on two variables. +The matrix is a special table which is used for data which depends on two variables. This special table can be used to create 3D plots as well as 2D image/contour plots via the &plot3d-menu-lnk; and the &plot3d-toolbar-lnk;. The difference between a table and a matrix is that matrices have a dual functioning mode: -they can display data in a table form or they can display an image. - -Therefore matrices can be used as a basic image viewer and also as an image editor, -since they implement some image manipulation funcions like: 90 degrees rotation, horizontal -and vertical mirroring, etc... +they can display data in a table form or they can display an image. Therefore matrices can be +used as a basic image viewer and also as an image editor, +since they implement some image manipulation functions like: 90 degrees rotation, horizontal +and vertical mirroring, etc. -In matrices there is no special column +In a matrix there is no special column nor special row for X or Y labels or values. Nevertheless, -you can specify an X-scale and an Y-scale with the &set-dimensions-lnk;. +you can specify an X-scale and a Y-scale with the &set-dimensions-lnk;.
The &appname; matrix @@ -224,7 +216,7 @@ The values which are stored in a matrix can be obtained from a function of the form z=f(i, j, x, y) with the &set-values-lnk;, -i and j beeing the column and row numbers and x and y the corresponding coordinates. +i and j being the column and row numbers and x and y the corresponding coordinates. They can also be read directly from an ASCII file with the &import-ascii-lnk; or from an image file. @@ -237,7 +229,7 @@ Plot Window -The plot window is the one in which the graphic is plotted. It contains at least one layer, which is the main container of the plot window. Each new plot can be inserted in a new layer of this plot window, it has its own geometry and graphic properties (background color, frame, etc). The example presented below shows a graph with two layers which have different geometries. +The plot window provides a container for plotting graphs. It contains at least one layer, which is the main container of the plot window. Each new plot is inserted in a new layer of the plot window. Each layer has its own geometry and graphic properties (background color, frame, etc). The example presented below shows a graph with two layers which have different geometries.
An example of &appname; 2D graph @@ -250,7 +242,7 @@ Each layer can be activated by clicking on the corresponding gray button in the top-left corner of the window. -The elements which can be accessed by a double click in a layer are: +Some graph elements can be accessed by a double click on an element in a layer. These are: @@ -260,7 +252,7 @@ The axes or the axes labels: this will open the General Plot Options Dialog. It is used to customize the axes, the numbers and labels of the axes, and the grid. -Text items, including the legend of the plot: this will open the Text Options Dialog which allows to customize the font of the label and the frame in which it is drawn. +Text items, including the legend of the plot: this will open the Text Options Dialog which allows customizing the font of the label and the frame in which it is drawn. Arrow/Line items: this will open the Line Options Dialog. @@ -270,7 +262,7 @@ -A left click on a plot element selects it. You can deselect any element by presing the Escape key. +A left click on a plot element selects it. You can deselect any element by pressing the Escape key. A right click on a plot element pops-up a context menu allowing fast access to its properties dialog. Last but not least, you should know that QtiPlot provides multiple selection for objects in a plot layer. In order to add an object to an existing selection keep the Shift @@ -287,10 +279,10 @@ Note A note can simply be used to insert text (comments, notes, etc) into a project, - but is really far more powerfull than that. It can be used as a calculator, + but is really far more powerful than that. It can be used as a calculator, for executing single commands and for writing scripts. Evaluation of mathematical expressions and execution of code is done via a note's context menu, - the Scripting menu or the convenient keyboard shortcuts. + the Scripting menu or convenient keyboard shortcuts. For information on expression syntax, supported mathematical functions and how to write scripts, see here. @@ -304,9 +296,9 @@
Note windows provide powerful text editor functionalities, particularly helpful -when writing scripts: customizable Python syntax highlighting, line numbers display, find and replace text, -autocompletion suggestions for words that have more than two characters. -You can trigger autocompletion using Ctrl+U. The colors used for syntax highlighting can be customized +when writing scripts: customizable Python syntax highlighting, line number display, find and replace text, +and autocompletion suggestions for words having more than two characters. +You can manually trigger autocompletion by using Ctrl+U. The colors used for syntax highlighting can be customized via the Notes tab in the Preferences dialog.
@@ -317,7 +309,7 @@ Log Window -This window keeps a history of all analysis which have been done in the project. This panel contains the results of all the correlations, fittings, etc. +This window keeps a history of all analysis which has been done in the project. It panel contains the results of all the correlations, fittings, etc.
The &appname; Log window @@ -347,9 +339,9 @@
-It gives an overview of the structure of a project and allows the user to perform various operations on the windows (tables and plots) in the workspace: hiding, minimazing, closing, renaming, printing, etc... These functions can be reached via the context menu, by right-clicking on an item in the explorer. +It gives an overview of the structure of a project and allows the user to perform various operations on the windows (tables and plots) in the workspace: hiding, minimizing, closing, renaming, printing, etc. These functions can be reached via the context menu, obtained by right-clicking on an item in the explorer. By double-clicking on an item, the corresponding window is shown maximized in the workspace, even if it was hidden before. -You can organize the differents objects in folders. When selecting a folder, the default policy is that only the objects contained in it will be showed in the workspace window. You can also display all the objects in the subfolders if you change this policy with the "View Windows" command to "Windows in Active Folder and Subfolders". +From the project explorer window, different objects can be organized into folders. When selecting a folder, the default policy is that only the objects contained in it will be shown in the workspace window. You can also display all the objects in subfolders if you change this policy with the "View Windows" command to "Windows in Active Folder and Subfolders".
diff -Nru qtiplot-0.9.8/manual/docbook-en/scripting.docbook qtiplot-0.9.8.2/manual/docbook-en/scripting.docbook --- qtiplot-0.9.8/manual/docbook-en/scripting.docbook 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/manual/docbook-en/scripting.docbook 2010-12-01 21:48:37.000000000 +0000 @@ -853,6 +853,8 @@ n = note("Notes1") # get a pointer to the QTextEdit object used to display information in the results log window: log = resultsLog() +# display some information in the data display toolbar: +displayInfo(text) as is creating new objects: # create an empty table named "tony" with 5 rows and 2 columns: t = newTable("tony", 5, 2) Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/add-remove-curve.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/add-remove-curve.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog12.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog12.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog15.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog15.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog17.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog17.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog18.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog18.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog19.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog19.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog1.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog1.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog5.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog5.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog6.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog6.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog7.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog7.png differ Binary files /tmp/Q5AKIbR2wf/qtiplot-0.9.8/manual/html/pics/preferences-dialog8.png and /tmp/Cfk8Jj1H9N/qtiplot-0.9.8.2/manual/html/pics/preferences-dialog8.png differ diff -Nru qtiplot-0.9.8/manual/html/qtiplot.adp qtiplot-0.9.8.2/manual/html/qtiplot.adp --- qtiplot-0.9.8/manual/html/qtiplot.adp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/manual/html/qtiplot.adp 2010-12-01 21:48:37.000000000 +0000 @@ -1,476 +1,476 @@ QtiPlot_manual_enQtiPlot Help Browser./common/qtiplot_logo.png./index.htmlHandbook./index.html
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix +Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
-
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
-
+
-
+
-
+
-
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
-
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-Command line parameters -Command line options -table -matrix -graph -table -matrix -table -table -matrix -table -matrix -
+
+Command line parameters +Command line options +table +matrix +graph +table +matrix +table +table +matrix +table +matrix +
-
+
-
-
+
+
-
+
-
+
-
+
diff -Nru qtiplot-0.9.8/qtiplot/qtiplot.pro qtiplot-0.9.8.2/qtiplot/qtiplot.pro --- qtiplot-0.9.8/qtiplot/qtiplot.pro 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/qtiplot.pro 2010-12-01 21:48:37.000000000 +0000 @@ -195,9 +195,11 @@ !isEmpty(EMF_ENGINE_LIBS) { DEFINES += EMF_OUTPUT INCLUDEPATH += $$EMF_ENGINE_INCLUDEPATH + INCLUDEPATH += /usr/local/include/libEMF + LIBS += $$EMF_ENGINE_LIBS - win32:LIBS += -lgdiplus - unix:LIBS += -lEMF + win32:LIBS += -lgdiplus + unix:LIBS += /usr/local/lib/libEMF.a } # check if we have libxls @@ -233,8 +235,8 @@ ############################################################### # At the very end: add global include- and lib path -unix:INCLUDEPATH += $$SYS_INCLUDEPATH -unix:LIBS += $$SYS_LIBS +#unix:INCLUDEPATH += $$SYS_INCLUDEPATH +#unix:LIBS += $$SYS_LIBS ############################################################### ############### Building QtiPlot as a browser plugin ########## diff -Nru qtiplot-0.9.8/qtiplot/qtiplotrc.py qtiplot-0.9.8.2/qtiplot/qtiplotrc.py --- qtiplot-0.9.8/qtiplot/qtiplotrc.py 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/qtiplotrc.py 2010-12-01 21:48:36.000000000 +0000 @@ -163,7 +163,7 @@ "addFolder", "deleteFolder", "changeFolder", "copyFolder", "saveFolder", "appendProject", "saveProjectAs", "currentTable","currentMatrix","currentGraph","currentNote", - "resultsLog", "workspace" + "resultsLog", "workspace", "displayInfo" ) for name in appImports: setattr(__main__,name,getattr(qti.app,name)) diff -Nru qtiplot-0.9.8/qtiplot/qti_wordlist.txt qtiplot-0.9.8.2/qtiplot/qti_wordlist.txt --- qtiplot-0.9.8/qtiplot/qti_wordlist.txt 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/qti_wordlist.txt 2010-12-01 21:48:35.000000000 +0000 @@ -724,3 +724,4 @@ Polar setMinorTicksType setMajorTicksType +displayInfo diff -Nru qtiplot-0.9.8/qtiplot/src/analysis/dialogs/BaselineDialog.cpp qtiplot-0.9.8.2/qtiplot/src/analysis/dialogs/BaselineDialog.cpp --- qtiplot-0.9.8/qtiplot/src/analysis/dialogs/BaselineDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/analysis/dialogs/BaselineDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -61,7 +61,7 @@ setAttribute(Qt::WA_DeleteOnClose); setSizeGripEnabled( true ); - QGroupBox *gb1 = new QGroupBox(tr("Create Baseline")); + QGroupBox *gb1 = new QGroupBox(); QGridLayout *gl1 = new QGridLayout(gb1); gl1->addWidget(new QLabel(tr("Curve")), 0, 0); @@ -73,30 +73,27 @@ boxPoints->setMinimum(2); boxPoints->setMaximum(INT_MAX); - QHBoxLayout *hb1 = new QHBoxLayout(); - hb1->addStretch(); - hb1->addWidget(new QLabel(tr("Points"))); - hb1->addWidget(boxPoints); - gl1->addLayout(hb1, 0, 2); + gl1->addWidget(new QLabel(tr("Points")), 1, 0); + gl1->addWidget(boxPoints, 1, 1); btnAutomatic = new QRadioButton(tr("&Interpolation")); btnAutomatic->setChecked(true); - gl1->addWidget(btnAutomatic, 1, 0); + gl1->addWidget(btnAutomatic, 2, 0); boxInterpolationMethod = new QComboBox(); boxInterpolationMethod->addItems(QStringList() << tr("Linear") << tr("Cubic") << tr("Non-rounded Akima")); - gl1->addWidget(boxInterpolationMethod, 1, 1); + gl1->addWidget(boxInterpolationMethod, 2, 1); btnEquation = new QRadioButton(tr("User Defined &Equation Y =")); btnEquation->setChecked(false); - gl1->addWidget(btnEquation, 2, 0); + gl1->addWidget(btnEquation, 3, 0); boxEquation = new QLineEdit(); - gl1->addWidget(boxEquation, 2, 1); + gl1->addWidget(boxEquation, 3, 1); btnDataset = new QRadioButton(tr("Existing &Dataset")); btnDataset->setChecked(false); - gl1->addWidget(btnDataset, 3, 0); + gl1->addWidget(btnDataset, 4, 0); boxTableName = new QComboBox(); boxColumnName = new QComboBox(); @@ -104,10 +101,10 @@ QHBoxLayout *hb0 = new QHBoxLayout(); hb0->addWidget(boxTableName); hb0->addWidget(boxColumnName); - gl1->addLayout(hb0, 3, 1); + gl1->addLayout(hb0, 4, 1); gl1->setColumnStretch(1, 1); - gl1->setRowStretch(4, 1); + gl1->setRowStretch(5, 1); ApplicationWindow *app = (ApplicationWindow *)parent; boxTableName->addItems(app->tableNames()); @@ -408,6 +405,22 @@ boxInputName->setCurrentIndex(boxInputName->findText(selectedCurve)); connect (graph, SIGNAL(destroyed()), this, SLOT(close())); + connect (graph, SIGNAL(modifiedGraph()), this, SLOT(updateGraphCurves())); +} + +void BaselineDialog::updateGraphCurves() +{ + QStringList lst = graph->analysableCurvesList(); + if (d_baseline) + lst.removeAll(d_baseline->title().text()); + + if (lst.isEmpty()){ + close(); + return; + } + + boxInputName->clear(); + boxInputName->addItems(lst); } void BaselineDialog::closeEvent(QCloseEvent* e) diff -Nru qtiplot-0.9.8/qtiplot/src/analysis/dialogs/BaselineDialog.h qtiplot-0.9.8.2/qtiplot/src/analysis/dialogs/BaselineDialog.h --- qtiplot-0.9.8/qtiplot/src/analysis/dialogs/BaselineDialog.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/analysis/dialogs/BaselineDialog.h 2010-12-01 21:48:36.000000000 +0000 @@ -52,6 +52,7 @@ void setGraph(Graph *g); private slots: + void updateGraphCurves(); void updateTableColumns(int tabnr); void createBaseline(); void subtractBaseline(bool add = false); diff -Nru qtiplot-0.9.8/qtiplot/src/analysis/Differentiation.cpp qtiplot-0.9.8.2/qtiplot/src/analysis/Differentiation.cpp --- qtiplot-0.9.8/qtiplot/src/analysis/Differentiation.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/analysis/Differentiation.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -28,6 +28,7 @@ ***************************************************************************/ #include "Differentiation.h" #include +#include #include @@ -107,18 +108,33 @@ dataSet = d_y_col_name; int prec = app->d_decimal_digits; - d_result_table = app->newHiddenTable(tableName, tr("Derivative") + " " + tr("of","Derivative of") + " " + dataSet, d_n-2, 2); - for (int i = 1; i < d_n-1; i++) { - int aux = i - 1; - d_result_table->setText(aux, 0, locale.toString(d_x[i], 'g', prec)); - d_result_table->setText(aux, 1, locale.toString(result[i], 'g', prec)); + int rows = d_n - 2; + int col = 1; + if (!d_result_table || d_result_table->numRows() < rows){ + d_result_table = app->newHiddenTable(tableName, tr("Derivative") + " " + tr("of", "Derivative of") + " " + dataSet, rows, 2); + for (int i = 1; i < d_n-1; i++) { + int aux = i - 1; + d_result_table->setText(aux, 0, locale.toString(d_x[i], 'g', prec)); + d_result_table->setText(aux, 1, locale.toString(result[i], 'g', prec)); + } + } else { + col = d_result_table->numCols(); + d_result_table->addCol(); + for (int i = 1; i < d_n-1; i++) + d_result_table->setText(i - 1, col, locale.toString(result[i], 'g', prec)); } + d_result_table->setColName(col, d_y_col_name); + delete[] result; if (d_graphics_display){ - if (!d_output_graph) + if (!d_output_graph){ createOutputGraph(); - d_output_graph->insertCurve(d_result_table, tableName + "_2", 0); - d_output_graph->updatePlot(); + d_output_graph->removeLegend(); + } + + d_output_graph->insertCurve(d_result_table, d_result_table->colName(col), 0); + if (d_update_output_graph) + d_output_graph->updatePlot(); } } diff -Nru qtiplot-0.9.8/qtiplot/src/analysis/Filter.cpp qtiplot-0.9.8.2/qtiplot/src/analysis/Filter.cpp --- qtiplot-0.9.8/qtiplot/src/analysis/Filter.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/analysis/Filter.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -85,6 +85,7 @@ d_result_table = 0; d_output_graph = 0; d_graphics_display = true; + d_update_output_graph = true; d_y_col_name = QString::null; } @@ -461,7 +462,8 @@ createOutputGraph(); d_output_graph->insertPlotItem(c, Graph::Line); - d_output_graph->updatePlot(); + if (d_update_output_graph) + d_output_graph->updatePlot(); } return (QwtPlotCurve*)c; } diff -Nru qtiplot-0.9.8/qtiplot/src/analysis/Filter.h qtiplot-0.9.8.2/qtiplot/src/analysis/Filter.h --- qtiplot-0.9.8/qtiplot/src/analysis/Filter.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/analysis/Filter.h 2010-12-01 21:48:36.000000000 +0000 @@ -103,6 +103,8 @@ virtual void enableGraphicsDisplay(bool on = true, Graph *g = 0); + void setUpdateOutputGraph(bool update = true) {d_update_output_graph = update;}; + protected: void init(); void memoryErrorMessage(); @@ -191,6 +193,9 @@ //! Specifies if the filter should display a result curve bool d_graphics_display; + //! Specifies if the filter should update the output graph + bool d_update_output_graph; + QString d_y_col_name; }; diff -Nru qtiplot-0.9.8/qtiplot/src/analysis/Fit.cpp qtiplot-0.9.8.2/qtiplot/src/analysis/Fit.cpp --- qtiplot-0.9.8/qtiplot/src/analysis/Fit.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/analysis/Fit.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -555,15 +555,12 @@ d_param_table = app->table(tableName); if (!d_param_table || d_param_table->objectName() != tableName){ d_param_table = app->newTable(app->generateUniqueName(tableName, false), d_p, 3); + d_param_table->setHeader(QStringList() << tr("Parameter") << tr("Value") << tr ("Error")); + d_param_table->setColumnType(0, Table::Text); + d_param_table->setColPlotDesignation(0, Table::None); + d_param_table->setColPlotDesignation(2, Table::yErr); } - d_param_table->setHeader(QStringList() << tr("Parameter") << tr("Value") << tr ("Error")); - - d_param_table->setColumnType(0, Table::Text); - d_param_table->setColPlotDesignation(0, Table::None); - d_param_table->setColPlotDesignation(2, Table::yErr); - d_param_table->setHeaderColType(); - writeParametersToTable(d_param_table); d_param_table->showNormal(); @@ -1012,7 +1009,8 @@ if (d_gen_function){ insertFitFunctionCurve(QString(objectName()) + tr("Fit")); - d_output_graph->replot(); + if (d_update_output_graph) + d_output_graph->replot(); } else { d_output_graph->addFitCurve(addResultCurve(X, Y)); free(X); diff -Nru qtiplot-0.9.8/qtiplot/src/core/ApplicationWindow.cpp qtiplot-0.9.8.2/qtiplot/src/core/ApplicationWindow.cpp --- qtiplot-0.9.8/qtiplot/src/core/ApplicationWindow.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/core/ApplicationWindow.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -223,7 +223,7 @@ { setWindowTitle(tr("QtiPlot - untitled")); setObjectName(tr("QtiPlot")); - initGlobalConstants(); + setDefaultOptions(); QPixmapCache::setCacheLimit(20*QPixmapCache::cacheLimit ()); tablesDepend = new QMenu(this); @@ -336,6 +336,8 @@ scriptWindow = 0; d_text_editor = NULL; + d_default_2D_grid = new Grid(); + renamedTables = QStringList(); if (!factorySettings) readSettings(); @@ -434,8 +436,10 @@ savedProject(); } -void ApplicationWindow::initGlobalConstants() +void ApplicationWindow::setDefaultOptions() { + d_ask_web_connection = true; + d_open_last_project = true; d_force_muParser = true; d_indexed_colors = ColorBox::defaultColors(); d_indexed_color_names = ColorBox::defaultColorNames(); @@ -618,6 +622,9 @@ d_indexed_symbols = true; d_keep_aspect_ration = true; + d_disable_curve_antialiasing = true; + d_curve_max_antialising_size = 1000; + majTicksStyle = int(ScaleDraw::Out); minTicksStyle = int(ScaleDraw::Out); minTicksLength = 5; @@ -2706,9 +2713,10 @@ setPreferences(ag); ag->addCurves(w, colList, style, defaultCurveLineWidth, defaultSymbolSize, startRow, endRow); - ag->newLegend(); g->arrangeLayers(false, true); + ag->newLegend(); + QApplication::restoreOverrideCursor(); return g; } @@ -2891,6 +2899,8 @@ } } + g->grid()->copy(this->d_default_2D_grid); + g->updateSecondaryAxis(QwtPlot::xTop); g->updateSecondaryAxis(QwtPlot::yRight); @@ -2918,6 +2928,7 @@ g->enableAutoscaling(autoscale2DPlots); g->setAutoscaleFonts(autoScaleFonts); g->setAntialiasing(antialiasing2DPlots); + g->disableCurveAntialiasing(d_disable_curve_antialiasing, d_curve_max_antialising_size); g->setFrame(d_graph_border_width, d_graph_border_color); QColor c = d_graph_background_color; @@ -4230,8 +4241,8 @@ QTime t1(0, 0); QDate d1(1899, 12, 30);//start date in Excel files see(http://sc.openoffice.org/excelfileformat.pdf) double daySeconds = 24*60*60; - for(size_t i = 0; i < rows; i++){ - for(size_t j = 0; j < cols; j++){ + for(int i = 0; i < rows; i++){ + for(int j = 0; j < cols; j++){ BasicExcelCell* cell = sh->Cell(i, j); if (!cell) continue; @@ -4370,6 +4381,7 @@ t->setText(i, j, QString::number(ch)); } aux++; + if (aux>rows) break; } } else if (bitsPerSample == 16){ int size = sizeof(short); @@ -4382,6 +4394,7 @@ t->setText(i, j, QString::number(ch)); } aux++; + if (aux>rows) break; } } @@ -4390,11 +4403,15 @@ return t; } -void ApplicationWindow::importASCII() +void ApplicationWindow::importASCII(const QString& fileName) { ImportASCIIDialog *import_dialog = new ImportASCIIDialog(!activeWindow(TableWindow) && !activeWindow(MatrixWindow), this, d_extended_import_ASCII_dialog); import_dialog->setDirectory(asciiDirPath); import_dialog->selectFilter(d_ASCII_file_filter); + if (!fileName.isEmpty()){ + import_dialog->selectFile(fileName); + import_dialog->setCurrentPath(fileName); + } if (d_import_ASCII_dialog_size.isValid()) import_dialog->resize(d_import_ASCII_dialog_size); if (import_dialog->exec() != QDialog::Accepted) @@ -4796,8 +4813,7 @@ QString s = t.readLine(); QStringList list=s.split("\t", QString::SkipEmptyParts); - if (list[0] == "") - { + if (list[0] == ""){ if (!app->setScriptingLanguage(list[1])) QMessageBox::warning(app, tr("QtiPlot - File opening error"), tr("The file \"%1\" was created using \"%2\" as scripting language.\n\n"\ @@ -4830,7 +4846,7 @@ item->folder()->setObjectName(fi.baseName()); //process tables and matrix information - while ( !t.atEnd() && !progress.wasCanceled()){ + while (!t.atEnd() && !progress.wasCanceled()){ s = t.readLine(); list.clear(); if (s.left(8) == ""){ @@ -4852,8 +4868,8 @@ title = titleBase + QString::number(++aux)+"/"+QString::number(widgets); progress.setLabelText(title); QStringList lst; - while ( s!="" ){ - s=t.readLine(); + while (!t.atEnd() && s!=""){ + s = t.readLine(); lst<"){ list = s.split("\t"); if (app->current_folder && list.size() >= 2) @@ -4971,6 +4987,8 @@ plot->linkXLayerAxes(s.trimmed().remove("").remove("").toInt()); else if (s.contains("")) plot->setAlignPolicy((MultiLayer::AlignPolicy)s.trimmed().remove("").remove("").toInt()); + else if (s.contains("")) + plot->setCommonAxesLayout(s.trimmed().remove("").remove("").toInt()); } plot->blockSignals(false); progress.setValue(aux); @@ -4989,7 +5007,7 @@ else if (s == ""){//process analysis information s = t.readLine(); QString log = s + "\n"; - while(s != ""){ + while(!s.contains("")){ s = t.readLine(); log += s + "\n"; } @@ -5272,6 +5290,7 @@ d_backup_files = settings.value("/BackupProjects", true).toBool(); d_init_window_type = (WindowType)settings.value("/InitWindow", TableWindow).toInt(); d_completion = settings.value("/Completion", true).toBool(); + d_open_last_project = settings.value("/OpenLastProject", d_open_last_project).toBool(); defaultScriptingLang = settings.value("/ScriptingLang","muParser").toString(); bool thousandsSep = settings.value("/ThousandsSeparator", true).toBool(); @@ -5392,6 +5411,7 @@ confirmCloseNotes = settings.value("/Note", true).toBool(); d_inform_rename_table = settings.value("/RenameTable", true).toBool(); d_confirm_overwrite = settings.value("/Overwrite", true).toBool(); + d_ask_web_connection = settings.value("/WebConnection", d_ask_web_connection).toBool(); settings.endGroup(); // Confirmations @@ -5474,6 +5494,8 @@ d_indexed_symbols = settings.value("/IndexedSymbols", d_indexed_symbols).toBool(); defaultCurveBrush = settings.value("/BrushStyle", defaultCurveBrush).toInt(); defaultCurveAlpha = settings.value("/BrushAlpha", defaultCurveAlpha).toInt(); + d_disable_curve_antialiasing = settings.value("/DisableAntialiasing", d_disable_curve_antialiasing).toBool(); + d_curve_max_antialising_size = settings.value("/MaxCurveAntialisingSize", d_curve_max_antialising_size).toInt(); settings.endGroup(); // Curves settings.beginGroup("/Ticks"); @@ -5512,6 +5534,39 @@ d_rect_default_brush.setColor(settings.value("/BrushColor", d_rect_default_brush).value()); d_rect_default_brush.setStyle(PatternBox::brushStyle(settings.value("/Pattern", 0).toInt())); settings.endGroup(); // Rectangle + + settings.beginGroup("/Grid"); + d_default_2D_grid->setRenderHint(QwtPlotItem::RenderAntialiased, settings.value("/Antialiased", false).toBool()); + + d_default_2D_grid->enableX(settings.value("/MajorX", d_default_2D_grid->xEnabled()).toBool()); + QPen pen = d_default_2D_grid->majPenX(); + pen.setColor(settings.value("/MajorXColor", pen.color()).value()); + pen.setStyle(PenStyleBox::penStyle(settings.value("/MajorXStyle", PenStyleBox::styleIndex(pen.style())).toInt())); + pen.setWidthF(settings.value("/MajorXThickness", pen.widthF()).toDouble()); + d_default_2D_grid->setMajPenX(pen); + + d_default_2D_grid->enableXMin(settings.value("/MinorX", d_default_2D_grid->xMinEnabled()).toBool()); + pen = d_default_2D_grid->minPenX(); + pen.setColor(settings.value("/MinorXColor", pen.color()).value()); + pen.setStyle(PenStyleBox::penStyle(settings.value("/MinorXStyle", PenStyleBox::styleIndex(pen.style())).toInt())); + pen.setWidthF(settings.value("/MinorXThickness", pen.widthF()).toDouble()); + d_default_2D_grid->setMinPenX(pen); + + pen = d_default_2D_grid->majPenY(); + d_default_2D_grid->enableY(settings.value("/MajorY", d_default_2D_grid->yEnabled()).toBool()); + pen.setColor(settings.value("/MajorYColor", pen.color()).value()); + pen.setStyle(PenStyleBox::penStyle(settings.value("/MajorYStyle", PenStyleBox::styleIndex(pen.style())).toInt())); + pen.setWidthF(settings.value("/MajorYThickness", pen.widthF()).toDouble()); + d_default_2D_grid->setMajPenY(pen); + + d_default_2D_grid->enableYMin(settings.value("/MinorY", d_default_2D_grid->yMinEnabled()).toBool()); + pen = d_default_2D_grid->minPenY(); + pen.setColor(settings.value("/MinorYColor", pen.color()).value()); + pen.setStyle(PenStyleBox::penStyle(settings.value("/MinorYStyle", PenStyleBox::styleIndex(pen.style())).toInt())); + pen.setWidthF(settings.value("/MinorYThickness", pen.widthF()).toDouble()); + d_default_2D_grid->setMinPenY(pen); + settings.endGroup(); // Grid + settings.endGroup(); /* ----------------- end group 2D Plots --------------------------- */ @@ -5709,6 +5764,7 @@ settings.setValue("/BackupProjects", d_backup_files); settings.setValue("/InitWindow", int(d_init_window_type)); settings.setValue("/Completion", d_completion); + settings.setValue("/OpenLastProject", d_open_last_project); settings.setValue("/ScriptingLang", defaultScriptingLang); bool thousandsSep = (locale().numberOptions() & QLocale::OmitGroupSeparator) ? false : true; @@ -5799,6 +5855,7 @@ settings.setValue("/Note", confirmCloseNotes); settings.setValue("/RenameTable", d_inform_rename_table); settings.setValue("/Overwrite", d_confirm_overwrite); + settings.setValue("/WebConnection", d_ask_web_connection); settings.endGroup(); // Confirmations /* ----------------- group Tables -------------- */ @@ -5898,6 +5955,8 @@ settings.setValue("/IndexedSymbols", d_indexed_symbols); settings.setValue("/BrushStyle", defaultCurveBrush); settings.setValue("/BrushAlpha", defaultCurveAlpha); + settings.setValue("/DisableAntialiasing", d_disable_curve_antialiasing); + settings.setValue("/MaxCurveAntialisingSize", d_curve_max_antialising_size); settings.endGroup(); // Curves settings.beginGroup("/Ticks"); @@ -5934,6 +5993,26 @@ settings.setValue("/BrushColor", d_rect_default_brush.color()); settings.setValue("/Pattern", PatternBox::patternIndex(d_rect_default_brush.style())); settings.endGroup(); // Rectangle + + settings.beginGroup("/Grid"); + settings.setValue("/Antialiased", d_default_2D_grid->testRenderHint(QwtPlotItem::RenderAntialiased)); + settings.setValue("/MajorX", d_default_2D_grid->xEnabled()); + settings.setValue("/MajorXColor", d_default_2D_grid->majPenX().color()); + settings.setValue("/MajorXStyle", PenStyleBox::styleIndex(d_default_2D_grid->majPenX().style())); + settings.setValue("/MajorXThickness", d_default_2D_grid->majPenX().widthF()); + settings.setValue("/MinorX", d_default_2D_grid->xMinEnabled()); + settings.setValue("/MinorXColor", d_default_2D_grid->minPenX().color()); + settings.setValue("/MinorXStyle", PenStyleBox::styleIndex(d_default_2D_grid->minPenX().style())); + settings.setValue("/MinorXThickness", d_default_2D_grid->minPenX().widthF()); + settings.setValue("/MajorY", d_default_2D_grid->yEnabled()); + settings.setValue("/MajorYColor", d_default_2D_grid->majPenY().color()); + settings.setValue("/MajorYStyle", PenStyleBox::styleIndex(d_default_2D_grid->majPenY().style())); + settings.setValue("/MajorYThickness", d_default_2D_grid->majPenY().widthF()); + settings.setValue("/MinorY", d_default_2D_grid->yMinEnabled()); + settings.setValue("/MinorYColor", d_default_2D_grid->minPenY().color()); + settings.setValue("/MinorYStyle", PenStyleBox::styleIndex(d_default_2D_grid->minPenY().style())); + settings.setValue("/MinorYThickness", d_default_2D_grid->minPenY().widthF()); + settings.endGroup(); // Grid settings.endGroup(); /* ----------------- end group 2D Plots -------- */ @@ -6547,12 +6626,12 @@ QString * selectedFilter, bool save, bool confirmOverwrite) { QFileDialog fd(parent, caption, dir, filter); - if (save){ + if (save) fd.setAcceptMode(QFileDialog::AcceptSave); - fd.setConfirmOverwrite(confirmOverwrite); - } else + else fd.setAcceptMode(QFileDialog::AcceptOpen); + fd.setConfirmOverwrite(false); fd.setFileMode(QFileDialog::AnyFile); if (fd.exec() != QDialog::Accepted ) @@ -6563,16 +6642,36 @@ if (selectedFilter) *selectedFilter = fd.selectedNameFilter(); + + if (save){ + QString file_name = fd.selectedFiles()[0]; + QString selected_filter = fd.selectedNameFilter(); + int pos1 = selected_filter.indexOf("*"); + selected_filter = selected_filter.mid(pos1 + 1, selected_filter.length() - pos1 - 2); + if(!file_name.endsWith(selected_filter, Qt::CaseInsensitive)) + file_name.append(selected_filter); + + if (confirmOverwrite && QFileInfo(file_name).exists() && + QMessageBox::warning(parent, tr("QtiPlot") + " - " + tr("Overwrite file?"), + tr("%1 already exists.").arg(file_name) + "\n" + tr("Do you want to replace it?"), + QMessageBox::Yes|QMessageBox::No) == QMessageBox::No) + return QString(); + + QFile file(file_name); + if(!file.open(QIODevice::WriteOnly)){ + QMessageBox::critical(parent, tr("QtiPlot - Export error"), + tr("Could not write to file:

%1

Please verify that you have the right to write to this location!").arg(file_name)); + return QString(); + } + file.close(); + file.remove(); + } + return fd.selectedFiles()[0]; } -void ApplicationWindow::saveProjectAs(const QString& fileName, bool compress) +QString ApplicationWindow::getSaveProjectName(const QString& fileName, bool *compress) { -#ifdef QTIPLOT_DEMO - showDemoVersionMessage(); - return; -#endif - QString fn = fileName; if (fileName.isEmpty()){ QString filter = tr("QtiPlot project") + " (*.qti);;"; @@ -6581,21 +6680,34 @@ QString selectedFilter; fn = getFileName(this, tr("Save Project As"), workingDir, filter, &selectedFilter, true, d_confirm_overwrite); if (selectedFilter.contains(".gz")) - compress = true; + *compress = true; } - if ( !fn.isEmpty() ){ + if (!fn.isEmpty()){ QFileInfo fi(fn); workingDir = fi.dirPath(true); + if (fn.endsWith(".qti.gz", Qt::CaseInsensitive)) + fn.remove(".gz"); if (!fn.endsWith(".qti", Qt::CaseInsensitive)) fn.append(".qti"); + } + return fn; +} +void ApplicationWindow::saveProjectAs(const QString& fileName, bool compress) +{ +#ifdef QTIPLOT_DEMO + showDemoVersionMessage(); + return; +#endif + + QString fn = getSaveProjectName(fileName, &compress); + if (!fn.isEmpty()){ projectname = fn; if (saveProject(compress)){ updateRecentProjectsList(projectname); - QFileInfo fi(fn); - QString baseName = fi.baseName(); + QString baseName = QFileInfo(fn).baseName(); FolderListItem *item = (FolderListItem *)folders->firstChild(); item->setText(0, baseName); item->folder()->setObjectName(baseName); @@ -6614,23 +6726,8 @@ if (!w) return; - QString fn = fileName; - if (fileName.isEmpty()){ - QString filter = tr("QtiPlot project") + " (*.qti);;"; - filter += tr("Compressed QtiPlot project") + " (*.qti.gz)"; - - QString selectedFilter; - fn = getFileName(this, tr("Save Window As"), workingDir, filter, &selectedFilter, true, d_confirm_overwrite); - if (selectedFilter.contains(".gz")) - compress = true; - } - + QString fn = getSaveProjectName(fileName, &compress); if (!fn.isEmpty()){ - QFileInfo fi(fn); - workingDir = fi.dirPath(true); - if (!fn.endsWith(".qti", Qt::CaseInsensitive)) - fn.append(".qti"); - if (saveWindow(w, fn, compress)) updateRecentProjectsList(fn); } @@ -6689,7 +6786,7 @@ f.close(); if (compress) - file_compress((char *)fn.ascii(), "wb9"); + file_compress(fn.toAscii().data(), "wb9"); QApplication::restoreOverrideCursor(); return true; @@ -8248,8 +8345,7 @@ MultiLayer *plot = (MultiLayer *)activeWindow(MultiLayerWindow); if (!plot) return; - if (plot->isEmpty()) - { + if (plot->isEmpty()){ QMessageBox::warning(this,tr("QtiPlot - Warning"), tr("

There are no plot layers available in this window.

" "

Please add a layer and try again!

")); @@ -8258,25 +8354,20 @@ } Graph* g = (Graph*)plot->activeLayer(); - if (!g || !g->validCurvesDataSize()) - { + if (!g || !g->validCurvesDataSize()){ btnPointer->setChecked(true); return; } - if (g->isPiePlot()) - { + if (g->isPiePlot()){ QMessageBox::warning(this,tr("QtiPlot - Warning"), tr("This functionality is not available for pie plots!")); btnPointer->setChecked(true); return; - } - else - { + } else { switch(QMessageBox::warning (this,tr("QtiPlot"), tr("This will modify the data in the worksheets!\nAre you sure you want to continue?"), - tr("Continue"),tr("Cancel"),0,1)) - { + tr("Continue"), tr("Cancel"), 0, 1)){ case 0: g->setActiveTool(new DataPickerTool(g, this, DataPickerTool::Remove, info, SLOT(setText(const QString&)))); displayBar->show(); @@ -9017,7 +9108,7 @@ else if (qobject_cast(g->activeEnrichment())) wt = EnrichmentDialog::Ellipse; - EnrichmentDialog *ed = new EnrichmentDialog(wt, g, this); + EnrichmentDialog *ed = new EnrichmentDialog(wt, g, this, this); ed->setWidget(g->activeEnrichment()); ed->exec(); @@ -9411,7 +9502,7 @@ if (!w) return; - EnrichmentDialog *ed = new EnrichmentDialog(EnrichmentDialog::MDIWindow, NULL, this); + EnrichmentDialog *ed = new EnrichmentDialog(EnrichmentDialog::MDIWindow, NULL, this, this); ed->setWidget(w); ed->exec(); } @@ -9425,7 +9516,7 @@ d_workspace->setActiveSubWindow(w); - EnrichmentDialog *ed = new EnrichmentDialog(EnrichmentDialog::MDIWindow, NULL, this); + EnrichmentDialog *ed = new EnrichmentDialog(EnrichmentDialog::MDIWindow, NULL, this, this); ed->setWidget(w); ed->exec(); } @@ -9958,7 +10049,7 @@ windowsMenu->addAction(actionResizeActiveWindow); windowsMenu->addAction(actionHideActiveWindow); - windowsMenu->insertItem(QPixmap(":/close.png"), tr("Close &Window"), this, SLOT(closeActiveWindow()), Qt::CTRL + Qt::Key_W); + windowsMenu->addAction(actionCloseWindow); if (n > 0) windowsMenu->insertSeparator(); @@ -10062,13 +10153,18 @@ QList windows = current_folder->windowsList(); MdiSubWindow* w = windows.at( id ); if ( w ){ - w->showNormal(); + MdiSubWindow* aw = (MdiSubWindow*)d_workspace->activeSubWindow(); + bool maximize = aw && aw->isMaximized(); + + d_workspace->setActiveSubWindow(w); + if (maximize) + w->showMaximized(); + else + w->showNormal(); w->setFocus(); - if(hidden(w)){ + + if(hidden(w)) hiddenWindows->takeAt(hiddenWindows->indexOf(w)); - setListView(w->objectName(), tr("Normal")); - } - d_workspace->setActiveSubWindow(w); } } @@ -10237,9 +10333,12 @@ asciiFiles << fn; } - importASCII(asciiFiles, ImportASCIIDialog::NewTables, columnSeparator, ignoredLines, - renameColumns, strip_spaces, simplify_spaces, d_ASCII_import_comments, - d_ASCII_import_locale, d_ASCII_comment_string, d_ASCII_import_read_only, d_ASCII_end_line); + if (asciiFiles.count() == 1) + return importASCII(asciiFiles[0]); + else + importASCII(asciiFiles, ImportASCIIDialog::NewTables, columnSeparator, ignoredLines, + renameColumns, strip_spaces, simplify_spaces, d_ASCII_import_comments, + d_ASCII_import_locale, d_ASCII_comment_string, d_ASCII_import_read_only, d_ASCII_end_line); } } @@ -10530,6 +10629,7 @@ w->setSelectedCol(colIndex); w->table()->clearSelection(); w->table()->selectColumn(colIndex); + w->table()->ensureCellVisible(0, colIndex); w->showMaximized(); Q3ListViewItem *it = lv->findItem (w->objectName(), 0, Q3ListView::ExactMatch | Qt::CaseSensitive ); if (it) @@ -11002,7 +11102,6 @@ return 0; CurveRangeDialog* crd = new CurveRangeDialog(this); - crd->setAttribute(Qt::WA_DeleteOnClose); crd->setCurveToModify(g, curve); crd->exec(); return crd; @@ -12033,8 +12132,7 @@ QApplication::setOverrideCursor(Qt::WaitCursor); w->table()->blockSignals(true); - for (line++; line!=flist.end() && *line != ""; line++) - {//read and set table values + for (line++; line!=flist.end() && *line != ""; line++){//read and set table values QStringList fields = (*line).split("\t"); int row = fields[0].toInt(); for (int col=0; col")){ QwtBarCurve *b = (QwtBarCurve *)ag->curve(curveID - 1); if (b) - b->setWhiteOut(); + b->setStacked(); } else if (s == ""){//version 0.9.5 curveID++; QStringList lst; @@ -12794,6 +12892,7 @@ } } if (ag){ + ag->disableCurveAntialiasing(app->d_disable_curve_antialiasing, app->d_curve_max_antialising_size); ag->updateAxesTitles(); ag->updateLayout(); ag->enableAutoscaling(autoscale2DPlots); @@ -12991,6 +13090,7 @@ } Differentiation *diff = new Differentiation(this, NULL, "", ""); + diff->setUpdateOutputGraph(false); int aux = 0; foreach (QString yCol, lst){ int xCol = t->colX(t->colIndex(yCol)); @@ -13002,12 +13102,21 @@ QwtPlotCurve *c = g->curve(aux); if (c){ - QPen pen = c->pen(); - pen.setColor(d_indexed_colors[aux]); - c->setPen(pen); + if (aux < d_indexed_colors.size()){ + QPen pen = c->pen(); + pen.setColor(d_indexed_colors[aux]); + c->setPen(pen); + } aux++; } } + + Graph *g = diff->outputGraph(); + if (g){ + g->newLegend(); + g->updatePlot(); + } + delete diff; } } @@ -13036,6 +13145,8 @@ QString legend = tr("Linear Regression of %1").arg(t->objectName()); g->setWindowLabel(legend); + QApplication::setOverrideCursor(Qt::WaitCursor); + Table *result = newTable(cols, 5, "", legend); result->setColName(0, tr("Column")); result->setColName(1, tr("Slope")); @@ -13044,6 +13155,7 @@ result->setColName(4, tr("R^2")); LinearFit *lf = new LinearFit (this, g->activeLayer()); + lf->setUpdateOutputGraph(false); if (d_2_linear_fit_points) lf->generateFunction(generateUniformFitPoints, 2); lf->setOutputPrecision(fit_output_precision); @@ -13066,7 +13178,13 @@ for (int i = 0; i < result->numCols(); i++) result->table()->adjustColumn(i); result->show(); + + Graph *og = lf->outputGraph(); + if (og) + og->updatePlot(); delete lf; + + QApplication::restoreOverrideCursor(); } } @@ -13091,6 +13209,8 @@ if (!g) return; + QApplication::setOverrideCursor(Qt::WaitCursor); + QString legend = tr("Linear Regression of %1").arg(t->objectName()); g->setWindowLabel(legend); @@ -13101,6 +13221,7 @@ result->setColName(3, tr("R^2")); LinearSlopeFit *lf = new LinearSlopeFit (this, g->activeLayer()); + lf->setUpdateOutputGraph(false); if (d_2_linear_fit_points) lf->generateFunction(generateUniformFitPoints, 2); lf->setOutputPrecision(fit_output_precision); @@ -13122,7 +13243,13 @@ for (int i = 0; i < result->numCols(); i++) result->table()->adjustColumn(i); result->show(); + + Graph *og = lf->outputGraph(); + if (og) + og->updatePlot(); delete lf; + + QApplication::restoreOverrideCursor(); } } @@ -13904,7 +14031,6 @@ connect(actionRename, SIGNAL(activated()), this, SLOT(rename())); actionCloseWindow = new QAction(QIcon(":/close.png"), tr("Close &Window"), this); - actionCloseWindow->setShortcut( tr("Ctrl+W") ); connect(actionCloseWindow, SIGNAL(activated()), this, SLOT(closeActiveWindow())); actionAddColToTable = new QAction(QIcon(":/addCol.png"), tr("Add Column"), this); @@ -14757,7 +14883,6 @@ actionRename->setMenuText(tr("&Rename Window")); actionCloseWindow->setMenuText(tr("Close &Window")); - actionCloseWindow->setShortcut(tr("Ctrl+W")); actionAddColToTable->setMenuText(tr("Add Column")); actionAddColToTable->setToolTip(tr("Add Column")); @@ -15636,7 +15761,14 @@ { int num_args = args.count(); if(num_args == 0){ - initWindow(); + if (d_open_last_project && !recentProjects.isEmpty()){ + ApplicationWindow *app = open(recentProjects[0]); + if (app && app != this){ + savedProject(); + close(); + } + } else + initWindow(); return; } @@ -15717,7 +15849,15 @@ if (console) return; - initWindow(); + if (d_open_last_project && !recentProjects.isEmpty()){ + ApplicationWindow *app = open(recentProjects[0], default_settings); + if (app && app != this){ + savedProject(); + close(); + } + } + else + initWindow(); return; } @@ -16224,7 +16364,7 @@ f.close(); if (compress) - file_compress((char *)fn.ascii(), "wb9"); + file_compress(fn.toAscii().data(), "wb9"); QApplication::restoreOverrideCursor(); } @@ -16240,20 +16380,11 @@ showDemoVersionMessage(); return; #endif - QString filter = tr("QtiPlot project")+" (*.qti);;"; - filter += tr("Compressed QtiPlot project")+" (*.qti.gz)"; - - QString selectedFilter; - QString fn = getFileName(this, tr("Save project as"), workingDir, filter, &selectedFilter, true, d_confirm_overwrite); - if ( !fn.isEmpty() ){ - QFileInfo fi(fn); - workingDir = fi.dirPath(true); - QString baseName = fi.fileName(); - if (!baseName.contains(".")) - fn.append(".qti"); - saveFolder(f, fn, selectedFilter.contains(".gz")); - } + bool compress = false; + QString fn = getSaveProjectName("", &compress); + if (!fn.isEmpty()) + saveFolder(f, fn, compress); } void ApplicationWindow::showFolderPopupMenu(Q3ListViewItem *it, const QPoint &p, int) @@ -17111,23 +17242,36 @@ void ApplicationWindow::searchForUpdates() { - int choice = QMessageBox::question(this, tr("QtiPlot"), - tr("QtiPlot will try to download necessary information about the last available updates. Please modify your firewall settings in order to allow QtiPlot to connect to the internet!") + "\n" + - tr("Do you wish to continue?"), - QMessageBox::Yes|QMessageBox::Default, QMessageBox::No|QMessageBox::Escape); + if (d_ask_web_connection){ + QMessageBox msgBox(QMessageBox::Question, tr("QtiPlot"), + tr("QtiPlot will try to download necessary information about the last available updates. Please modify your firewall settings in order to allow QtiPlot to connect to the internet!")); + msgBox.setInformativeText(tr("Do you wish to continue?")); + QPushButton *yesButton = msgBox.addButton(tr("Yes, don't ask me again"), QMessageBox::YesRole); + msgBox.addButton(QMessageBox::Cancel); + msgBox.setDefaultButton(yesButton); + msgBox.setEscapeButton(QMessageBox::Cancel); + msgBox.setWindowIcon(this->windowIcon()); + msgBox.exec(); + if (msgBox.clickedButton() == yesButton){ + initSearchForUpdates(); + d_ask_web_connection = false; + } + } else + initSearchForUpdates(); +} - if (choice == QMessageBox::Yes){ - version_buffer.open(IO_WriteOnly); - http = new QHttp(this); - connect(http, SIGNAL(done(bool)), this, SLOT(receivedVersionFile(bool))); - - QNetworkProxy proxy = QNetworkProxy::applicationProxy(); - if (!proxy.hostName().isEmpty()) - http->setProxy(proxy.hostName(), proxy.port(), proxy.user(), proxy.password()); +void ApplicationWindow::initSearchForUpdates() +{ + version_buffer.open(IO_WriteOnly); + http = new QHttp(this); + connect(http, SIGNAL(done(bool)), this, SLOT(receivedVersionFile(bool))); - http->setHost("soft.proindependent.com"); - http->get("/version.txt", &version_buffer); - } + QNetworkProxy proxy = QNetworkProxy::applicationProxy(); + if (!proxy.hostName().isEmpty()) + http->setProxy(proxy.hostName(), proxy.port(), proxy.user(), proxy.password()); + + http->setHost("soft.proindependent.com"); + http->get("/version.txt", &version_buffer); } void ApplicationWindow::receivedVersionFile(bool error) diff -Nru qtiplot-0.9.8/qtiplot/src/core/ApplicationWindow.h qtiplot-0.9.8.2/qtiplot/src/core/ApplicationWindow.h --- qtiplot-0.9.8/qtiplot/src/core/ApplicationWindow.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/core/ApplicationWindow.h 2010-12-01 21:48:36.000000000 +0000 @@ -102,6 +102,7 @@ class AssociationsDialog; class ScriptEdit; class ExportDialog; +class Grid; /** * \brief QtiPlot's main window. @@ -289,6 +290,7 @@ //! \name Settings //@{ + void setDefaultOptions(); void readSettings(); void saveSettings(); void setSaveSettings(bool autoSaving, int min); @@ -482,7 +484,7 @@ #endif Table* importWaveFile(); - void importASCII(); + void importASCII(const QString& fileName = QString::null); void importASCII(const QStringList& files, int import_mode, const QString& local_column_separator, int local_ignored_lines, bool local_rename_columns, bool local_strip_spaces, bool local_simplify_spaces, bool local_import_comments, QLocale local_separators, const QString& local_comment_string, bool import_read_only, int endLineChar, @@ -1099,7 +1101,6 @@ //@{ void init(bool factorySettings = false); void initCompleter(); - void initGlobalConstants(); void createActions(); void initMainMenu(); void initToolBars(); @@ -1111,8 +1112,10 @@ virtual QMenu * createPopupMenu(){return NULL;}; void updateCompleter(const QString& windowName, bool remove = false, const QString& newName = QString::null); QMessageBox::StandardButton showSaveProjectMessage(); + QString getSaveProjectName(const QString& fileName, bool *compress = 0); void goToParentFolder(); bool isProjectFile(const QString& fn); + void initSearchForUpdates(); private slots: void disableActions(); @@ -1166,6 +1169,10 @@ // TODO: a lot of this stuff should be private public: + bool d_ask_web_connection; + bool d_open_last_project; + int d_curve_max_antialising_size; + bool d_disable_curve_antialiasing; bool d_force_muParser; bool d_keep_aspect_ration; QPrinter::PaperSize d_print_paper_size; @@ -1275,6 +1282,8 @@ //! File version code used when opening project files (= maj * 100 + min * 10 + patch) int d_file_version; + Grid *d_default_2D_grid; + QColor d_rect_default_background; QBrush d_rect_default_brush; QColor workspaceColor, panelsColor, panelsTextColor; diff -Nru qtiplot-0.9.8/qtiplot/src/core/ConfigDialog.cpp qtiplot-0.9.8.2/qtiplot/src/core/ConfigDialog.cpp --- qtiplot-0.9.8/qtiplot/src/core/ConfigDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/core/ConfigDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -136,6 +137,11 @@ QHBoxLayout * bottomButtons = new QHBoxLayout(); bottomButtons->addStretch(); + + btnDefaultSettings = new QPushButton(); + btnDefaultSettings->setAutoDefault( false ); + bottomButtons->addWidget( btnDefaultSettings ); + buttonApply = new QPushButton(); buttonApply->setAutoDefault( true ); bottomButtons->addWidget( buttonApply ); @@ -160,6 +166,7 @@ connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) ); connect( buttonApply, SIGNAL( clicked() ), this, SLOT( apply() ) ); connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); + connect( btnDefaultSettings, SIGNAL( clicked() ), this, SLOT( resetDefaultSettings() ) ); connect( buttonTextFont, SIGNAL( clicked() ), this, SLOT( pickTextFont() ) ); connect( buttonHeaderFont, SIGNAL( clicked() ), this, SLOT( pickHeaderFont() ) ); @@ -262,17 +269,13 @@ boxScaleFonts->setChecked(app->autoScaleFonts); optionsLayout->addWidget( boxScaleFonts, 0, 1); - boxAntialiasing = new QCheckBox(); - boxAntialiasing->setChecked(app->antialiasing2DPlots); - optionsLayout->addWidget( boxAntialiasing, 1, 1); - boxTitle = new QCheckBox(); boxTitle->setChecked(app->titleOn); optionsLayout->addWidget(boxTitle, 1, 0); boxFrame = new QCheckBox(); boxFrame->setChecked(app->canvasFrameWidth > 0); - optionsLayout->addWidget(boxFrame, 3, 0 ); + optionsLayout->addWidget(boxFrame, 1, 1); labelFrameWidth = new QLabel(); optionsLayout->addWidget(labelFrameWidth, 4, 0); @@ -404,9 +407,15 @@ plotsTabWidget->addTab( plotTicks, QString() ); + initGridPage(); + plotsTabWidget->addTab(gridPage, QString()); + initLayerGeometryPage(); plotsTabWidget->addTab(plotGeometryPage, QString()); + initLayerSpeedPage(); + plotsTabWidget->addTab(plotSpeedPage, QString()); + plotFonts = new QWidget(); QVBoxLayout * plotFontsLayout = new QVBoxLayout( plotFonts ); @@ -692,7 +701,11 @@ completionBox->setChecked(app->d_completion); topBoxLayout->addWidget(completionBox, 10, 0); - topBoxLayout->setRowStretch(11, 1); + openLastProjectBox = new QCheckBox(); + openLastProjectBox->setChecked(app->d_open_last_project); + topBoxLayout->addWidget(openLastProjectBox, 11, 0); + + topBoxLayout->setRowStretch(12, 1); appTabWidget->addTab(application, QString()); @@ -980,6 +993,41 @@ connect(generatePointsBtn, SIGNAL(toggled(bool)), this, SLOT(showPointsBox(bool))); } +void ConfigDialog::initLayerSpeedPage() +{ + ApplicationWindow *app = (ApplicationWindow *)parentWidget(); + + plotSpeedPage = new QWidget(); + + antialiasingGroupBox = new QGroupBox(); + antialiasingGroupBox->setCheckable(true); + antialiasingGroupBox->setChecked(app->antialiasing2DPlots); + + disableAntialiasingBox = new QCheckBox(); + disableAntialiasingBox->setChecked(app->d_disable_curve_antialiasing); + + curveSizeBox = new QSpinBox(); + curveSizeBox->setMinimum(2); + curveSizeBox->setMaximum(INT_MAX); + curveSizeBox->setValue(app->d_curve_max_antialising_size); + + connect(disableAntialiasingBox, SIGNAL(toggled(bool)), curveSizeBox, SLOT(setEnabled(bool))); + connect(antialiasingGroupBox, SIGNAL(toggled(bool)), this, SLOT(enableCurveAntialiasingSizeBox(bool))); + + QGridLayout * gl = new QGridLayout(antialiasingGroupBox); + gl->addWidget(disableAntialiasingBox, 0, 0); + gl->addWidget(curveSizeBox, 0, 1); + gl->setRowStretch(1, 1); + + QHBoxLayout * hl = new QHBoxLayout(plotSpeedPage); + hl->addWidget(antialiasingGroupBox); +} + +void ConfigDialog::enableCurveAntialiasingSizeBox(bool on) +{ + curveSizeBox->setEnabled(on && disableAntialiasingBox->isChecked()); +} + void ConfigDialog::initLayerGeometryPage() { ApplicationWindow *app = (ApplicationWindow *)parentWidget(); @@ -1461,6 +1509,94 @@ axesPageLayout->addWidget(enabledAxesGroupBox); } +void ConfigDialog::initGridPage() +{ + gridPage = new QWidget(); + + QGroupBox * rightBox = new QGroupBox(QString()); + QGridLayout * rightLayout = new QGridLayout(rightBox); + + boxMajorGrid = new QCheckBox(); + boxMajorGrid->setChecked(true); + rightLayout->addWidget( boxMajorGrid, 0, 1); + + boxMinorGrid = new QCheckBox(); + boxMinorGrid->setChecked(false); + rightLayout->addWidget( boxMinorGrid, 0, 2); + + gridLineColorLbl = new QLabel(); + rightLayout->addWidget(gridLineColorLbl, 1, 0 ); + + boxColorMajor = new ColorButton(); + rightLayout->addWidget( boxColorMajor, 1, 1); + + boxColorMinor = new ColorButton(); + boxColorMinor->setDisabled(true); + rightLayout->addWidget( boxColorMinor, 1, 2); + + gridLineTypeLbl = new QLabel(); + rightLayout->addWidget(gridLineTypeLbl, 2, 0 ); + + boxTypeMajor = new PenStyleBox(); + rightLayout->addWidget( boxTypeMajor, 2, 1); + + boxTypeMinor = new PenStyleBox(); + rightLayout->addWidget( boxTypeMinor, 2, 2); + + gridLineWidthLbl = new QLabel(); + rightLayout->addWidget(gridLineWidthLbl, 3, 0); + + boxWidthMajor = new DoubleSpinBox('f'); + boxWidthMajor->setLocale(((ApplicationWindow *)parent())->locale()); + boxWidthMajor->setSingleStep(0.1); + boxWidthMajor->setRange(0.1, 20); + boxWidthMajor->setValue(1); + rightLayout->addWidget( boxWidthMajor, 3, 1); + + boxWidthMinor = new DoubleSpinBox('f'); + boxWidthMinor->setLocale(((ApplicationWindow *)parent())->locale()); + boxWidthMinor->setSingleStep(0.1); + boxWidthMinor->setRange(0.1, 20); + boxWidthMinor->setValue(1); + boxWidthMinor->setDisabled(true); + rightLayout->addWidget( boxWidthMinor, 3, 2); + + gridAxesLbl = new QLabel(); + rightLayout->addWidget(gridAxesLbl, 4, 0 ); + + boxGridXAxis = new QComboBox(); + rightLayout->addWidget( boxGridXAxis, 4, 1); + + boxGridYAxis = new QComboBox(); + rightLayout->addWidget(boxGridYAxis, 4, 2); + + boxAntialiseGrid = new QCheckBox(); + rightLayout->addWidget(boxAntialiseGrid, 5, 0); + + rightLayout->setRowStretch(6, 1); + rightLayout->setColumnStretch(4, 1); + + axesGridList = new QListWidget(); + + QHBoxLayout* mainLayout2 = new QHBoxLayout(gridPage); + mainLayout2->addWidget(axesGridList); + mainLayout2->addWidget(rightBox); + + showGridOptions(0); + + //grid page slot connections + connect(axesGridList, SIGNAL(currentRowChanged(int)), this, SLOT(showGridOptions(int))); + connect(boxMajorGrid,SIGNAL(toggled(bool)), this, SLOT(majorGridEnabled(bool))); + connect(boxMinorGrid,SIGNAL(toggled(bool)), this, SLOT(minorGridEnabled(bool))); + connect(boxAntialiseGrid,SIGNAL(toggled(bool)), this, SLOT(updateGrid())); + connect(boxColorMajor, SIGNAL(colorChanged(const QColor &)),this, SLOT(updateGrid())); + connect(boxColorMinor, SIGNAL(colorChanged(const QColor &)),this, SLOT(updateGrid())); + connect(boxTypeMajor,SIGNAL(activated(int)),this, SLOT(updateGrid())); + connect(boxTypeMinor,SIGNAL(activated(int)),this, SLOT(updateGrid())); + connect(boxWidthMajor,SIGNAL(valueChanged(double)),this, SLOT(updateGrid())); + connect(boxWidthMinor,SIGNAL(valueChanged(double)),this, SLOT(updateGrid())); +} + void ConfigDialog::initConfirmationsPage() { ApplicationWindow *app = (ApplicationWindow *)parentWidget(); @@ -1589,6 +1725,7 @@ { setWindowTitle( tr( "QtiPlot - Choose default settings" ) ); ApplicationWindow *app = (ApplicationWindow *)parentWidget(); + btnDefaultSettings->setText(tr("&Default options")); // pages list itemsList->clear(); @@ -1611,7 +1748,9 @@ plotsTabWidget->setTabText(plotsTabWidget->indexOf(curves), tr("Curves")); plotsTabWidget->setTabText(plotsTabWidget->indexOf(axesPage), tr("Axes")); plotsTabWidget->setTabText(plotsTabWidget->indexOf(plotTicks), tr("Ticks")); + plotsTabWidget->setTabText(plotsTabWidget->indexOf(gridPage), tr("Grid")); plotsTabWidget->setTabText(plotsTabWidget->indexOf(plotGeometryPage), tr("Geometry")); + plotsTabWidget->setTabText(plotsTabWidget->indexOf(plotSpeedPage), tr("Speed")); plotsTabWidget->setTabText(plotsTabWidget->indexOf(plotFonts), tr("Fonts")); boxResize->setText(tr("Do not &resize layers when window size changes")); @@ -1632,7 +1771,6 @@ boxTitle->setText(tr("Show &Title")); boxScaleFonts->setText(tr("Scale &Fonts")); boxAutoscaling->setText(tr("Auto&scaling")); - boxAntialiasing->setText(tr("Antia&liasing")); legendDisplayLabel->setText(tr("Legend display" )); legendDisplayBox->clear(); @@ -1706,6 +1844,48 @@ boxPrintCropmarks->setText(tr("Print Crop&marks")); boxScaleLayersOnPrint->setText(tr("&Scale layers to paper size")); + //grid page + boxMajorGrid->setText( tr( "Major Grids" ) ); + boxMinorGrid->setText( tr( "Minor Grids" ) ); + boxAntialiseGrid->setText(tr("An&tialised")); + + gridLineColorLbl->setText(tr( "Line Color" )); + gridLineWidthLbl->setText(tr( "Thickness" )); + gridAxesLbl->setText(tr( "Axes" )); + gridLineTypeLbl->setText(tr( "Line Type" )); + + boxGridXAxis->clear(); + boxGridXAxis->insertItem(tr("Bottom")); + boxGridXAxis->insertItem(tr("Top")); + + boxGridYAxis->clear(); + boxGridYAxis->insertItem(tr("Left")); + boxGridYAxis->insertItem(tr("Right")); + + QPixmap image2(":/vertical_grid.png"); + QPixmap image3(":/horizontal_grid.png"); + axesGridList->clear(); + axesGridList->addItem( new QListWidgetItem(image3, tr( "Horizontal" )) ); + axesGridList->addItem( new QListWidgetItem(image2, tr( "Vertical" )) ); + axesGridList->setIconSize(image3.size()); + // calculate a sensible width for the items list + // (default QListWidget size is 256 which looks too big) + QFontMetrics fm(axesGridList->font()); + int width = 32,i; + for(i=0 ; icount() ; i++) + if( fm.width(axesGridList->item(i)->text()) > width) + width = fm.width(axesGridList->item(i)->text()); + + axesGridList->setMaximumWidth( axesGridList->iconSize().width() + width + 50 ); + // resize the list to the maximum width + axesGridList->resize(axesGridList->maximumWidth(),axesGridList->height()); + axesGridList->setCurrentRow(0); + + //speed page + antialiasingGroupBox->setTitle(tr("Antia&liasing")); + disableAntialiasingBox->setText(tr("&Disable for curves with more than")); + curveSizeBox->setSuffix(" " + tr("data points")); + //confirmations page groupBoxConfirm->setTitle(tr("Prompt on closing")); boxFolders->setText(tr("Folders")); @@ -1758,6 +1938,7 @@ boxInitWindow->addItem(tr("Note")); boxInitWindow->setCurrentIndex((int)app->d_init_window_type); completionBox->setText(tr("&Enable autocompletion (Ctrl+U)")); + openLastProjectBox->setText(tr("Open &last project at startup")); lblAppPrecision->setText(tr("Number of Decimal Digits")); lblDecimalSeparator->setText(tr("Decimal Separators")); @@ -2056,7 +2237,7 @@ app->d_graph_legend_display = (Graph::LegendDisplayMode)legendDisplayBox->currentIndex(); app->d_graph_axis_labeling = (Graph::AxisTitlePolicy)axisLabelingBox->currentIndex(); app->setGraphDefaultSettings(boxAutoscaling->isChecked(), boxScaleFonts->isChecked(), - boxResize->isChecked(), boxAntialiasing->isChecked()); + boxResize->isChecked(), antialiasingGroupBox->isChecked()); // 2D plots page: curves tab app->defaultCurveStyle = curveStyle(); app->defaultCurveLineWidth = boxCurveLineWidth->value(); @@ -2113,6 +2294,10 @@ // 2D plots page: print tab app->d_print_cropmarks = boxPrintCropmarks->isChecked(); app->d_scale_plots_on_print = boxScaleLayersOnPrint->isChecked(); + //2D plots page: speed tab + app->d_curve_max_antialising_size = curveSizeBox->value(); + app->d_disable_curve_antialiasing = disableAntialiasingBox->isChecked(); + foreach(MdiSubWindow *w, windows){ MultiLayer *ml = qobject_cast(w); if (ml){ @@ -2121,6 +2306,7 @@ foreach(Graph *g, ml->layersList()){ g->setSynchronizedScaleDivisions(app->d_synchronize_graph_scales); g->setAxisTitlePolicy(app->d_graph_axis_labeling); + g->disableCurveAntialiasing(app->d_disable_curve_antialiasing, app->d_curve_max_antialising_size); } } } @@ -2136,6 +2322,7 @@ app->setMatrixUndoStackSize(undoStackSizeBox->value()); app->d_eol = (ApplicationWindow::EndLineChar)boxEndLine->currentIndex(); app->enableCompletion(completionBox->isChecked()); + app->d_open_last_project = openLastProjectBox->isChecked(); // general page: numeric format tab app->d_decimal_digits = boxAppPrecision->value(); @@ -2887,3 +3074,360 @@ } else aspect_ratio = boxCanvasWidth->value()/height; } + +void ConfigDialog::showGridOptions(int axis) +{ + ApplicationWindow *app = (ApplicationWindow *)parentWidget(); + if (!app) + return; + + Grid *grd = app->d_default_2D_grid; + if (!grd) + return; + + boxMajorGrid->blockSignals(true); + boxMinorGrid->blockSignals(true); + boxWidthMajor->blockSignals(true); + boxWidthMinor->blockSignals(true); + boxColorMajor->blockSignals(true); + boxColorMinor->blockSignals(true); + boxTypeMajor->blockSignals(true); + boxTypeMinor->blockSignals(true); + boxAntialiseGrid->blockSignals(true); + + if (axis == 1) { + boxMajorGrid->setChecked(grd->xEnabled()); + boxMinorGrid->setChecked(grd->xMinEnabled()); + + boxGridXAxis->setEnabled(true); + boxGridYAxis->setDisabled(true); + + QPen majPenX = grd->majPenX(); + boxTypeMajor->setStyle(majPenX.style()); + boxColorMajor->setColor(majPenX.color()); + boxWidthMajor->setValue(majPenX.widthF()); + + QPen minPenX = grd->minPenX(); + boxTypeMinor->setStyle(minPenX.style()); + boxColorMinor->setColor(minPenX.color()); + boxWidthMinor->setValue(minPenX.widthF()); + } else if (axis == 0) { + boxMajorGrid->setChecked(grd->yEnabled()); + boxMinorGrid->setChecked(grd->yMinEnabled()); + + boxGridXAxis->setDisabled(true); + boxGridYAxis->setEnabled(true); + + QPen majPenY = grd->majPenY(); + boxTypeMajor->setCurrentIndex(majPenY.style() - 1); + boxColorMajor->setColor(majPenY.color()); + boxWidthMajor->setValue(majPenY.widthF()); + + QPen minPenY = grd->minPenY(); + boxTypeMinor->setCurrentItem(minPenY.style() - 1); + boxColorMinor->setColor(minPenY.color()); + boxWidthMinor->setValue(minPenY.widthF()); + } + + bool majorOn = boxMajorGrid->isChecked(); + boxTypeMajor->setEnabled(majorOn); + boxColorMajor->setEnabled(majorOn); + boxWidthMajor->setEnabled(majorOn); + + bool minorOn = boxMinorGrid->isChecked(); + boxTypeMinor->setEnabled(minorOn); + boxColorMinor->setEnabled(minorOn); + boxWidthMinor->setEnabled(minorOn); + + boxGridXAxis->setCurrentIndex(grd->xAxis() - 2); + boxGridYAxis->setCurrentIndex(grd->yAxis()); + + boxAntialiseGrid->setChecked(grd->testRenderHint(QwtPlotItem::RenderAntialiased)); + + boxAntialiseGrid->blockSignals(false); + boxWidthMajor->blockSignals(false); + boxWidthMinor->blockSignals(false); + boxColorMajor->blockSignals(false); + boxColorMinor->blockSignals(false); + boxTypeMajor->blockSignals(false); + boxTypeMinor->blockSignals(false); + boxMajorGrid->blockSignals(false); + boxMinorGrid->blockSignals(false); +} + +void ConfigDialog::majorGridEnabled(bool on) +{ + boxTypeMajor->setEnabled(on); + boxColorMajor->setEnabled(on); + boxWidthMajor->setEnabled(on); + + updateGrid(); +} + +void ConfigDialog::minorGridEnabled(bool on) +{ + boxTypeMinor->setEnabled(on); + boxColorMinor->setEnabled(on); + boxWidthMinor->setEnabled(on); + + updateGrid(); +} + +void ConfigDialog::updateGrid() +{ + ApplicationWindow *app = (ApplicationWindow *)parentWidget(); + if (!app) + return; + + Grid *grid = app->d_default_2D_grid; + if (!grid) + return; + + if (axesGridList->currentRow() == 1){ + grid->enableX(boxMajorGrid->isChecked()); + grid->enableXMin(boxMinorGrid->isChecked()); + + grid->setMajPenX(QPen(boxColorMajor->color(), boxWidthMajor->value(), boxTypeMajor->style())); + grid->setMinPenX(QPen(boxColorMinor->color(), boxWidthMinor->value(), boxTypeMinor->style())); + } else { + grid->enableY(boxMajorGrid->isChecked()); + grid->enableYMin(boxMinorGrid->isChecked()); + + grid->setMajPenY(QPen(boxColorMajor->color(), boxWidthMajor->value(), boxTypeMajor->style())); + grid->setMinPenY(QPen(boxColorMinor->color(), boxWidthMinor->value(), boxTypeMinor->style())); + } + + grid->setAxis(boxGridXAxis->currentIndex() + 2, boxGridYAxis->currentIndex()); + grid->setRenderHint(QwtPlotItem::RenderAntialiased, boxAntialiseGrid->isChecked()); +} + +void ConfigDialog::resetDefaultSettings() +{ + ApplicationWindow *app = (ApplicationWindow *)parentWidget(); + if (!app) + return; + + app->setDefaultOptions(); + setApplication(app); + + QString msg = tr("You need to restart QtiPlot before your changes become effective, would you like to do it now?"); + if (QMessageBox::question(this, tr("QtiPlot"), msg, QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok) + app->newProject(); +} + +void ConfigDialog::setApplication(ApplicationWindow *app) +{ + if (!app) + return; + + blockSignals(true); + + d_3D_title_font = app->d_3D_title_font; + d_3D_numbers_font = app->d_3D_numbers_font; + d_3D_axes_font = app->d_3D_axes_font; + textFont = app->tableTextFont; + headerFont = app->tableHeaderFont; + appFont = app->appFont; + axesFont = app->plotAxesFont; + numbersFont = app->plotNumbersFont; + legendFont = app->plotLegendFont; + titleFont = app->plotTitleFont; + + //app page + QStringList styles = QStyleFactory::keys(); + styles.sort(); + boxStyle->clear(); + boxStyle->addItems(styles); + boxStyle->setCurrentIndex(boxStyle->findText(app->appStyle,Qt::MatchWildcard)); + + QStringList llist = ScriptingLangManager::languages(); + boxScriptingLanguage->clear(); + boxScriptingLanguage->insertStringList(llist); + boxScriptingLanguage->setCurrentItem(llist.findIndex(app->defaultScriptingLang)); + + undoStackSizeBox->setValue(app->matrixUndoStackSize()); + boxEndLine->setCurrentIndex((int)app->d_eol); + boxSave->setChecked(app->autoSave); + boxMinutes->setValue(app->autoSaveTime); + boxMinutes->setEnabled(app->autoSave); + boxBackupProject->setChecked(app->d_backup_files); + boxSearchUpdates->setChecked(app->autoSearchUpdates); + completionBox->setChecked(app->d_completion); + openLastProjectBox->setChecked(app->d_open_last_project); + + //confirmations page + boxFolders->setChecked(app->confirmCloseFolder); + boxTables->setChecked(app->confirmCloseTable); + boxMatrices->setChecked(app->confirmCloseMatrix); + boxPlots2D->setChecked(app->confirmClosePlot2D); + boxPlots3D->setChecked(app->confirmClosePlot3D); + boxNotes->setChecked(app->confirmCloseNotes); + boxPromptRenameTables->setChecked(app->d_inform_rename_table); + boxConfirmOverwrite->setChecked(app->d_confirm_overwrite); + + btnWorkspace->setColor(app->workspaceColor); + btnPanels->setColor(app->panelsColor); + btnPanelsText->setColor(app->panelsTextColor); + boxAppPrecision->setValue(app->d_decimal_digits); + boxThousandsSeparator->setChecked(app->locale().numberOptions() & QLocale::OmitGroupSeparator); + boxMuParserCLocale->setChecked(app->d_muparser_c_locale); + + //file locations page + translationsPathLine->setText(QDir::toNativeSeparators(app->d_translations_folder)); + helpPathLine->setText(QDir::toNativeSeparators(QFileInfo(app->helpFilePath).dir().absolutePath())); + texCompilerPathBox->setText(QDir::toNativeSeparators(app->d_latex_compiler_path)); +#ifdef SCRIPTING_PYTHON + pythonConfigDirLine->setText(QDir::toNativeSeparators(app->d_python_config_folder)); +#endif + + //proxy page + QNetworkProxy proxy = QNetworkProxy::applicationProxy(); + proxyGroupBox->setChecked(!proxy.hostName().isEmpty()); + proxyHostLine->setText(proxy.hostName ()); + proxyPortBox->setValue(proxy.port()); + proxyUserNameLine->setText(proxy.user()); + + //tables page + buttonBackground->setColor(app->tableBkgdColor); + buttonText->setColor(app->tableTextColor); + buttonHeader->setColor(app->tableHeaderColor); + boxTableComments->setChecked(app->d_show_table_comments); + boxUpdateTableValues->setChecked(app->autoUpdateTableValues()); + + //plots page + boxAutoscaling->setChecked(app->autoscale2DPlots); + boxScaleFonts->setChecked(app->autoScaleFonts); + boxTitle->setChecked(app->titleOn); + boxFrame->setChecked(app->canvasFrameWidth > 0); + boxFrameWidth->setValue(app->canvasFrameWidth); + if (!app->canvasFrameWidth){ + labelFrameWidth->hide(); + boxFrameWidth->hide(); + } + + boxMargin->setValue(app->defaultPlotMargin); + boxBackgroundColor->setColor(app->d_graph_background_color); + boxBackgroundTransparency->setValue(app->d_graph_background_opacity); + boxCanvasColor->setColor(app->d_graph_canvas_color); + boxCanvasTransparency->setValue(app->d_graph_canvas_opacity); + boxBorderColor->setColor(app->d_graph_border_color); + boxBorderWidth->setValue(app->d_graph_border_width); + boxResize->setChecked(!app->autoResizeLayers); + boxLabelsEditing->setChecked(!app->d_in_place_editing); + + //curves page + boxCurveLineWidth->setLocale(app->locale()); + boxCurveLineWidth->setValue(app->defaultCurveLineWidth); + lineStyleBox->setCurrentIndex(app->d_curve_line_style); + patternBox->setCurrentIndex(app->defaultCurveBrush); + curveAlphaBox->setValue(app->defaultCurveAlpha); + symbolBox->setCurrentIndex(app->d_symbol_style); + symbolBox->setDisabled(app->d_indexed_symbols); + boxSymbolSize->setValue(app->defaultSymbolSize/2); + symbolEdgeBox->setValue(app->defaultSymbolEdge); + fillSymbolsBox->setChecked(app->d_fill_symbols); + + d_indexed_colors = app->indexedColors(); + d_indexed_color_names = app->indexedColorNames(); + setColorsList(d_indexed_colors, d_indexed_color_names); + + d_indexed_symbols = app->indexedSymbols(); + setSymbolsList(d_indexed_symbols); + groupIndexedSymbols->setChecked(app->d_indexed_symbols); + + //axes page + boxBackbones->setChecked(app->drawBackbones); + boxSynchronizeScales->setChecked(app->d_synchronize_graph_scales); + boxLineWidth->setValue(app->axesLineWidth); + boxAxesLabelsDist->setValue(app->d_graph_axes_labels_dist); + boxTickLabelsDist->setValue(app->d_graph_tick_labels_dist); + + for (int i = 0; i < QwtPlot::axisCnt; i++){ + int row = i + 1; + bool enabledAxis = app->d_show_axes[i]; + + QLayoutItem *item = enabledAxesGrid->itemAtPosition(row, 2); + if (item && item->widget()) + ((QCheckBox *)item->widget())->setChecked(enabledAxis); + + item = enabledAxesGrid->itemAtPosition(row, 3); + if (item && item->widget()){ + QCheckBox *box = qobject_cast(item->widget()); + box->setChecked(app->d_show_axes_labels[i]); + box->setEnabled(enabledAxis); + } + } + + showGridOptions(0); + + //layer speed page + antialiasingGroupBox->setChecked(app->antialiasing2DPlots); + disableAntialiasingBox->setChecked(app->d_disable_curve_antialiasing); + curveSizeBox->setValue(app->d_curve_max_antialising_size); + + //layer geometry page + keepRatioBox->setChecked(app->d_keep_aspect_ration); + updateCanvasSize((FrameWidget::Unit)app->d_layer_geometry_unit); + + boxMajTicksLength->setValue(app->majTicksLength); + boxMinTicksLength->setValue(app->minTicksLength); + boxScaleLayersOnPrint->setChecked(app->d_scale_plots_on_print); + boxPrintCropmarks->setChecked(app->d_print_cropmarks); + + //3D plots page + boxResolution->setValue(app->d_3D_resolution); + boxProjection->setCurrentIndex(app->d_3D_projection); + boxShowLegend->setChecked(app->d_3D_legend); + boxSmoothMesh->setChecked(app->d_3D_smooth_mesh); + boxOrthogonal->setChecked(app->d_3D_orthogonal); + boxAutoscale3DPlots->setChecked(app->d_3D_autoscale); + colorMapEditor = new ColorMapEditor(app->locale()); + colorMapEditor->setColorMap(app->d_3D_color_map); + btnAxes->setColor(app->d_3D_axes_color); + btnLabels->setColor(app->d_3D_labels_color); + btnNumbers->setColor(app->d_3D_numbers_color); + btnMesh->setColor(app->d_3D_mesh_color); + btnBackground3D->setColor(app->d_3D_background_color); + boxMajorGrids->setChecked(app->d_3D_major_grids); + boxMinorGrids->setChecked(app->d_3D_minor_grids); + btnGrid->setColor(app->d_3D_grid_color); + btnGridMinor->setColor(app->d_3D_minor_grid_color); + boxMajorGridWidth->setLocale(app->locale()); + boxMajorGridWidth->setValue(app->d_3D_major_width); + boxMinorGridWidth->setLocale(app->locale()); + boxMinorGridWidth->setValue(app->d_3D_minor_width); + enableMajorGrids(app->d_3D_major_grids); + enableMinorGrids(app->d_3D_minor_grids); + + //notes page + boxTabLength->setValue(app->d_notes_tab_length); + boxFontFamily->setCurrentFont(app->d_notes_font); + boxFontSize->setValue(app->d_notes_font.pointSize()); + buttonBoldFont->setChecked(app->d_notes_font.bold()); + buttonItalicFont->setChecked(app->d_notes_font.italic()); + lineNumbersBox->setChecked(app->d_note_line_numbers); + buttonCommentColor->setColor(app->d_comment_highlight_color); + buttonKeywordColor->setColor(app->d_keyword_highlight_color); + buttonQuotationColor->setColor(app->d_quotation_highlight_color); + buttonNumericColor->setColor(app->d_numeric_highlight_color); + buttonFunctionColor->setColor(app->d_function_highlight_color); + buttonClassColor->setColor(app->d_class_highlight_color); + + //fits page + generatePointsBtn->setChecked(app->generateUniformFitPoints); + generatePointsBox->setValue(app->fitPoints); + linearFit2PointsBox->setChecked(app->d_2_linear_fit_points); + showPointsBox(!app->generateUniformFitPoints); + samePointsBtn->setChecked(!app->generateUniformFitPoints); + groupBoxMultiPeak->setChecked(app->generatePeakCurves); + boxPeaksColor->setColor(app->peakCurvesColor); + boxPrecision->setValue(app->fit_output_precision); + logBox->setChecked(app->writeFitResultsToLog); + plotLabelBox->setChecked(app->pasteFitResultsToPlot); + scaleErrorsBox->setChecked(app->fit_scale_errors); + boxMultiPeakMsgs->setChecked(app->d_multi_peak_messages); + + languageChange(); + + blockSignals(false); +} diff -Nru qtiplot-0.9.8/qtiplot/src/core/ConfigDialog.h qtiplot-0.9.8.2/qtiplot/src/core/ConfigDialog.h --- qtiplot-0.9.8/qtiplot/src/core/ConfigDialog.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/core/ConfigDialog.h 2010-12-01 21:48:36.000000000 +0000 @@ -55,6 +55,7 @@ class SymbolBox; class PatternBox; class PenStyleBox; +class ApplicationWindow; //! Preferences dialog class ConfigDialog : public QDialog @@ -76,6 +77,7 @@ void accept(); void apply(); + void resetDefaultSettings(); void setCurrentPage(int index); @@ -134,14 +136,21 @@ void loadDefaultSymbols(); void moveSymbol(bool up = true); void moveSymbolDown(){moveSymbol(false);}; + void showGridOptions(int axis); + void updateGrid(); + void majorGridEnabled(bool); + void minorGridEnabled(bool); + void enableCurveAntialiasingSizeBox(bool); private: + void setApplication(ApplicationWindow *app); void setSymbolsList(const QList& symbList); void setColorsList(const QList& colList, const QStringList& colNames); void initPlotsPage(); void initAppPage(); void initCurvesPage(); void initAxesPage(); + void initGridPage(); void initPlots3DPage(); void initTablesPage(); void initConfirmationsPage(); @@ -150,6 +159,7 @@ void initNotesPage(); void initProxyPage(); void initLayerGeometryPage(); + void initLayerSpeedPage(); //! Calculates a sensible width for the items list void updateMenuList(); bool validFolderPath(const QString& path); @@ -171,7 +181,7 @@ QPushButton* buttonTextFont, *buttonHeaderFont; QStackedWidget * generalDialog; QWidget *appColors, *tables, *plotOptions, *plotTicks, *plotFonts, *confirm, *plotPrint; - QWidget *application, *curves, *axesPage, *plots3D, *fitPage, *numericFormatPage, *notesPage, *plotGeometryPage; + QWidget *application, *curves, *axesPage, *plots3D, *fitPage, *numericFormatPage, *notesPage, *plotGeometryPage, *plotSpeedPage; QPushButton* buttonAxesFont, *buttonNumbersFont, *buttonLegendFont, *buttonTitleFont, *fontsBtn; QCheckBox *boxSearchUpdates, *boxOrthogonal, *logBox, *plotLabelBox, *scaleErrorsBox; QCheckBox *boxTitle, *boxFrame, *boxPlots3D, *boxPlots2D, *boxTables, *boxNotes, *boxFolders; @@ -199,7 +209,7 @@ ColorButton *boxPeaksColor; QLabel *lblScriptingLanguage, *lblInitWindow; QComboBox *boxScriptingLanguage, *boxInitWindow; - QCheckBox *boxAntialiasing, *boxAutoscale3DPlots, *boxTableComments, *boxThousandsSeparator; + QCheckBox *boxAutoscale3DPlots, *boxTableComments, *boxThousandsSeparator; QCheckBox *boxPromptRenameTables, *boxBackupProject, *boxLabelsEditing; QWidget *fileLocationsPage; QLabel *lblTranslationsPath, *lblHelpPath, *lblUndoStackSize, *lblEndOfLine; @@ -282,6 +292,20 @@ QLabel *lblAxisLabeling; QComboBox *axisLabelingBox; QCheckBox *boxSynchronizeScales; + + QWidget *gridPage; + QCheckBox *boxMinorGrid, *boxMajorGrid; + ColorButton *boxColorMinor, *boxColorMajor; + PenStyleBox *boxTypeMinor, *boxTypeMajor; + DoubleSpinBox *boxWidthMinor, *boxWidthMajor; + QComboBox *boxGridYAxis, *boxGridXAxis; + QCheckBox *boxAntialiseGrid; + QListWidget *axesGridList; + QLabel *gridLineColorLbl, *gridLineWidthLbl, *gridLineTypeLbl, *gridAxesLbl; + QGroupBox * antialiasingGroupBox; + QCheckBox *disableAntialiasingBox, *openLastProjectBox; + QSpinBox *curveSizeBox; + QPushButton *btnDefaultSettings; }; #endif // CONFIGDIALOG_H diff -Nru qtiplot-0.9.8/qtiplot/src/core/globals.h qtiplot-0.9.8.2/qtiplot/src/core/globals.h --- qtiplot-0.9.8/qtiplot/src/core/globals.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/core/globals.h 2010-12-01 21:48:36.000000000 +0000 @@ -34,8 +34,8 @@ //! Patch version number (0..9) const int patch_version = 8; //! Extra version information string (like "alpha", "-2", etc...) -const char * extra_version = ""; +const char * extra_version = ".2"; //! Copyright string containing the author names const char * copyright_string = "Copyright (C) 2004-2010 Ion Vasilief"; //! Release date as a string -const char * release_date = " 2010/06/29"; +const char * release_date = " 2010/09/02"; diff -Nru qtiplot-0.9.8/qtiplot/src/core/ImportASCIIDialog.cpp qtiplot-0.9.8.2/qtiplot/src/core/ImportASCIIDialog.cpp --- qtiplot-0.9.8/qtiplot/src/core/ImportASCIIDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/core/ImportASCIIDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -505,6 +505,12 @@ d_preview_matrix->resizeColumnsToContents(); } +void ImportASCIIDialog::setCurrentPath(const QString& path) +{ + d_current_path = path; + changePreviewFile(path); +} + void ImportASCIIDialog::changePreviewFile(const QString& path) { if (path.isEmpty()) diff -Nru qtiplot-0.9.8/qtiplot/src/core/ImportASCIIDialog.h qtiplot-0.9.8.2/qtiplot/src/core/ImportASCIIDialog.h --- qtiplot-0.9.8/qtiplot/src/core/ImportASCIIDialog.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/core/ImportASCIIDialog.h 2010-12-01 21:48:36.000000000 +0000 @@ -174,6 +174,8 @@ QList columnTypes(){if (d_preview_table) return d_preview_table->columnTypes(); return QList();}; QStringList columnFormats(){if (d_preview_table) return d_preview_table->columnFormats(); return QStringList();}; + void setCurrentPath(const QString& path); + private slots: //! Display help for advanced options. void displayHelp(); diff -Nru qtiplot-0.9.8/qtiplot/src/origin/importOPJ.cpp qtiplot-0.9.8.2/qtiplot/src/origin/importOPJ.cpp --- qtiplot-0.9.8/qtiplot/src/origin/importOPJ.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/origin/importOPJ.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -2159,11 +2159,13 @@ line.replace("&lbracket;", "("); line.replace("&rbracket;", ")"); - while (line.contains("\\p")){ - int pos1 = line.indexOf("\\p"); - pos1 = line.indexOf("(", pos1 + 2) + 1; - int pos2 = line.indexOf(")", pos1); - line = line.mid(pos1, pos2 - pos1); + QRegExp fontModifier("\p(\\d)+\\(.*\\)");//remove \p163(...) like tags + int index = line.indexOf(fontModifier); + while (index >= 0){ + int pos1 = line.indexOf("(", index + 2) + 1; + int length = fontModifier.matchedLength(); + line = line.mid(pos1, length - pos1); + index = line.indexOf(fontModifier, index + length); } return line; diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurveRangeDialog.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurveRangeDialog.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurveRangeDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurveRangeDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -27,10 +27,11 @@ * * ***************************************************************************/ #include "CurveRangeDialog.h" -#include "../PlotCurve.h" -#include "../Graph.h" -#include "../../table/Table.h" +#include "PlotCurve.h" +#include "Graph.h" +#include "Table.h" +#include #include #include #include @@ -42,10 +43,11 @@ : QDialog( parent, fl ) { setWindowTitle(tr("QtiPlot - Plot range")); - setName( "CurveRangeDialog" ); + setName( "CurveRangeDialog" ); + setAttribute(Qt::WA_DeleteOnClose); - QGroupBox *gb1 = new QGroupBox(); - QGridLayout *gl1 = new QGridLayout(gb1); + QGroupBox *gb1 = new QGroupBox(); + QGridLayout *gl1 = new QGridLayout(gb1); gl1->addWidget(new QLabel(tr("Data set: ")), 0, 0); boxName = new QLabel(); @@ -59,34 +61,48 @@ gl1->addWidget(new QLabel(tr("To row number")), 2, 0); boxEnd = new QSpinBox(); boxEnd->setMinValue(1); - gl1->addWidget(boxEnd, 2, 1); - gl1->setRowStretch(3, 1); + gl1->addWidget(boxEnd, 2, 1); + + boxApplyToAll = new QCheckBox(tr("Apply to &all layer curves")); + gl1->addWidget(boxApplyToAll, 3, 0); + gl1->setRowStretch(4, 1); buttonOK = new QPushButton(tr( "&OK" )); - buttonOK->setDefault( true ); - buttonCancel = new QPushButton(tr( "&Close" )); + buttonOK->setDefault( true ); + buttonCancel = new QPushButton(tr( "&Close" )); - QHBoxLayout *hl = new QHBoxLayout(); + QHBoxLayout *hl = new QHBoxLayout(); hl->addStretch(); - hl->addWidget(buttonOK); + hl->addWidget(buttonOK); hl->addWidget(buttonCancel); - QVBoxLayout *vb = new QVBoxLayout(this); - vb->addWidget(gb1); - vb->addLayout(hl); + QVBoxLayout *vb = new QVBoxLayout(this); + vb->addWidget(gb1); + vb->addLayout(hl); connect( buttonOK, SIGNAL( clicked() ), this, SLOT( accept() ) ); - connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); + connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); } void CurveRangeDialog::accept() { - if (!d_curve) + if (!d_graph) return; int start = boxStart->value() - 1; int end = boxEnd->value() - 1; - d_curve->setRowRange(QMIN(start, end), QMAX(start, end)); + + if (boxApplyToAll->isChecked()){ + for (int i = 0; i < d_graph->curveCount(); i++){ + DataCurve *c = d_graph->dataCurve(i); + if (c) + c->setRowRange(QMIN(start, end), QMAX(start, end)); + } + } else if (!d_curves.isEmpty()){ + foreach(DataCurve *c, d_curves) + c->setRowRange(QMIN(start, end), QMAX(start, end)); + } + d_graph->updatePlot(); d_graph->notifyChanges(); close(); @@ -98,13 +114,14 @@ return; d_graph = g; - d_curve = (DataCurve *)d_graph->curve(curve); + DataCurve *d_curve = (DataCurve *)d_graph->curve(curve); if (!d_curve) return; - Table *t = d_curve->table(); - if (t) - { + d_curves << d_curve; + + Table *t = d_curve->table(); + if (t){ boxStart->setMaxValue(t->numRows()); boxEnd->setMaxValue(t->numRows()); } @@ -113,3 +130,34 @@ boxStart->setValue(d_curve->startRow() + 1); boxEnd->setValue(d_curve->endRow() + 1); } + +void CurveRangeDialog::setCurvesToModify(Graph *g, const QList& indexes) +{ + if (!g || indexes.isEmpty()) + return; + + d_graph = g; + + QStringList curveNames; + foreach(int i, indexes){ + DataCurve *c = (DataCurve *)d_graph->curve(i); + if (c){ + d_curves << c; + curveNames << c->title().text(); + } + } + + if (d_curves.isEmpty()) + return; + + DataCurve *d_curve = d_curves[0]; + Table *t = d_curve->table(); + if (t){ + boxStart->setMaxValue(t->numRows()); + boxEnd->setMaxValue(t->numRows()); + } + + boxName->setText(curveNames.join("\n")); + boxStart->setValue(d_curve->startRow() + 1); + boxEnd->setValue(d_curve->endRow() + 1); +} diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurveRangeDialog.h qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurveRangeDialog.h --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurveRangeDialog.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurveRangeDialog.h 2010-12-01 21:48:36.000000000 +0000 @@ -33,6 +33,7 @@ class QPushButton; class QLabel; +class QCheckBox; class QSpinBox; class Graph; class DataCurve; @@ -47,10 +48,11 @@ public slots: void setCurveToModify(Graph *g, int curve); + void setCurvesToModify(Graph *g, const QList& indexes); void accept(); private: - DataCurve *d_curve; + QList d_curves; Graph *d_graph; QPushButton* buttonOK; @@ -58,6 +60,7 @@ QLabel* boxName; QSpinBox* boxStart; QSpinBox* boxEnd; + QCheckBox* boxApplyToAll; }; #endif diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurvesDialog.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurvesDialog.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurvesDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurvesDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -28,6 +28,7 @@ ***************************************************************************/ #include "CurvesDialog.h" #include "QwtHistogram.h" +#include "Spectrogram.h" #include #include #include @@ -36,6 +37,8 @@ #include #include #include +#include +#include #include #include @@ -48,9 +51,6 @@ #include #include #include -#include - -#include CurvesDialog::CurvesDialog( QWidget* parent, Qt::WFlags fl ) : QDialog( parent, fl ) @@ -60,9 +60,9 @@ setSizeGripEnabled(true); setFocus(); - QHBoxLayout *hl = new QHBoxLayout(); + QGridLayout *hl = new QGridLayout(); - hl->addWidget(new QLabel(tr("New curves style"))); + hl->addWidget(new QLabel(tr("New curves style")), 0, 0); boxStyle = new QComboBox(); boxStyle->addItem( QPixmap(":/lPlot.png"), tr( " Line" ) ); boxStyle->addItem( QPixmap(":/pPlot.png"), tr( " Scatter" ) ); @@ -75,15 +75,26 @@ boxStyle->addItem( QPixmap(":/vertBars.png"), tr( " Vertical Bars" ) ); boxStyle->addItem( QPixmap(":/hBars.png"), tr( " Horizontal Bars" ) ); boxStyle->addItem( QPixmap(":/histogram.png"), tr( " Histogram" ) ); - hl->addWidget(boxStyle); + hl->addWidget(boxStyle, 0, 1); boxMatrixStyle = new QComboBox(); boxMatrixStyle->addItem( QPixmap(":/color_map.png"), tr("Contour - Color Fill")); boxMatrixStyle->addItem( QPixmap(":/contour_map.png"), tr("Contour Lines")); boxMatrixStyle->addItem( QPixmap(":/gray_map.png"), tr("Gray Scale Map")); boxMatrixStyle->addItem( QPixmap(":/histogram.png"), tr("Histogram")); - hl->addWidget(boxMatrixStyle); - hl->addStretch(); + hl->addWidget(boxMatrixStyle, 0, 2); + hl->setColumnStretch(3, 1); + + hl->addWidget(new QLabel(tr("Axes")), 1, 0); + boxXAxis = new QComboBox(); + boxXAxis->addItem(tr("Bottom")); + boxXAxis->addItem(tr("Top")); + hl->addWidget(boxXAxis, 1, 1); + + boxYAxis = new QComboBox(); + boxYAxis->addItem(tr("Left")); + boxYAxis->addItem(tr("Right")); + hl->addWidget(boxYAxis, 1, 2); QGridLayout *gl = new QGridLayout(); gl->addWidget(new QLabel( tr( "Available data" )), 0, 0); @@ -210,16 +221,16 @@ void CurvesDialog::showCurveRangeDialog() { - int curve = contents->currentRow(); - if (curve < 0) - curve = 0; + QList lst = contents->selectedItems(); + QList indexes; + foreach(QListWidgetItem *it, lst) + indexes << contents->row(it); + + CurveRangeDialog* crd = new CurveRangeDialog(this); + crd->setCurvesToModify(d_graph, indexes); + crd->exec(); - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - if (app) - { - app->showCurveRangeDialog(d_graph, curve); - updateCurveRange(); - } + updateCurveRange(); } void CurvesDialog::showPlotAssociations() @@ -337,78 +348,108 @@ void CurvesDialog::addCurves() { - QStringList emptyColumns; - QList lst = available->selectedItems (); - foreach (QTreeWidgetItem *item, lst){ - if (item->type() == FolderItem) - continue; + ApplicationWindow *app = (ApplicationWindow *)this->parent(); + if (!app) + return; + QApplication::setOverrideCursor(Qt::WaitCursor); + + int curves = d_graph->curveCount(); + bool updateLegend = false; + LegendWidget *legend = d_graph->legend(); + if (legend){ + updateLegend = legend->isAutoUpdateEnabled(); + legend->setAutoUpdate(false); + } + + QStringList emptyColumns; + QList lst = available->selectedItems(); + foreach (QTreeWidgetItem *item, lst){ QString text = item->text(0); - if (item->type() == TableItem){ - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - Table *t = app->table(text); - if (!t) - continue; + switch(item->type()){ + case ColumnItem: + if (contents->findItems(text, Qt::MatchExactly).isEmpty()){ + Table *t = app->table(text); + if (t && !addCurveFromTable(app, t, text)) + emptyColumns << text; + } + break; - QStringList lst = t->YColumns(); - for(int i = 0; i < lst.size(); i++){ - QString s = lst[i]; - if (contents->findItems(s, Qt::MatchExactly ).isEmpty ()){ - if (!addCurve(s)) - emptyColumns << s; + case TableItem:{ + Table *t = app->table(text); + if (!t) + continue; + + QStringList lst = t->YColumns(); + for(int i = 0; i < lst.size(); i++){ + QString s = lst[i]; + if (contents->findItems(s, Qt::MatchExactly ).isEmpty ()){ + if (!addCurveFromTable(app, t, s)) + emptyColumns << s; + } } } - continue; - } + break; + + case MatrixItem: + if (contents->findItems(text, Qt::MatchExactly).isEmpty()){ + if (!addCurveFromMatrix(app->matrix(text), text)) + emptyColumns << text; + } + break; - if (contents->findItems(text, Qt::MatchExactly ).isEmpty ()){ - if (!addCurve(text)) - emptyColumns << text; + case FolderItem: + break; } - } + } d_graph->updateAxesTitles(); + + if (legend){ + QString s = legend->text().trimmed(); + if (!s.isEmpty()) + s.append("\n"); + legend->setText(s + d_graph->legendText(false, curves)); + legend->setAutoUpdate(updateLegend); + } + d_graph->updatePlot(); Graph::showPlotErrorMessage(this, emptyColumns); showCurveRange(boxShowRange->isChecked()); + + QApplication::restoreOverrideCursor(); } -bool CurvesDialog::addCurve(const QString& name) +bool CurvesDialog::addCurveFromMatrix(Matrix *m, const QString& name) { - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - if (!app) - return false; + if (!m) + return false; - QStringList matrices = app->matrixNames(); - if (matrices.contains(name)){ - Matrix *m = app->matrix(name); - if (!m) - return false; - - switch (boxMatrixStyle->currentIndex()){ - case 0: - d_graph->plotSpectrogram(m, Graph::ColorMap); - break; - case 1: - d_graph->plotSpectrogram(m, Graph::Contour); - break; - case 2: - d_graph->plotSpectrogram(m, Graph::GrayScale); - break; - case 3: - d_graph->addHistogram(m); - break; - } + QwtPlotItem* it = NULL; + switch (boxMatrixStyle->currentIndex()){ + case 0: + it = d_graph->plotSpectrogram(m, Graph::ColorMap); + break; + case 1: + it = d_graph->plotSpectrogram(m, Graph::Contour); + break; + case 2: + it = d_graph->plotSpectrogram(m, Graph::GrayScale); + break; + case 3: + it = d_graph->addHistogram(m); + break; + } - contents->addItem(name); - return true; - } + if (it) + it->setAxis(boxXAxis->currentIndex() + 2, boxYAxis->currentIndex()); - Table* t = app->table(name); - if (!t) - return false; + return true; +} +bool CurvesDialog::addCurveFromTable(ApplicationWindow *app, Table *t, const QString& name) +{ int style = curveStyle(); DataCurve *c = NULL; if (style == Graph::Histogram){ @@ -424,6 +465,8 @@ if (!c) return false; + c->setAxis(boxXAxis->currentIndex() + 2, boxYAxis->currentIndex()); + CurveLayout cl = Graph::initCurveLayout(); int cIndex, sIndex; d_graph->guessUniqueCurveLayout(cIndex, sIndex); @@ -477,7 +520,6 @@ cl.connectType = 5; d_graph->updateCurveLayout(c, &cl); - contents->addItem(name); return true; } @@ -556,30 +598,37 @@ return style; } -void CurvesDialog::showCurveRange(bool on ) +void CurvesDialog::showCurveRange(bool on) { - int row = contents->currentRow(); - contents->clear(); - if (on){ - QStringList lst = QStringList(); - for (int i=0; icurveCount(); i++){ - QwtPlotItem *it = d_graph->plotItem(i); - if (!it) - continue; - - if (it->rtti() == QwtPlotItem::Rtti_PlotCurve && ((PlotCurve *)it)->type() != Graph::Function){ - DataCurve *c = (DataCurve *)it; - lst << c->title().text() + "[" + QString::number(c->startRow()+1) + ":" + QString::number(c->endRow()+1) + "]"; - } else - lst << it->title().text(); - } - contents->addItems(lst); - } - else - contents->addItems(d_graph->plotItemsList()); + QList selectedRows; + foreach(QListWidgetItem *it, contents->selectedItems()) + selectedRows << contents->row(it); + + contents->clear(); + if (on){ + QStringList lst = QStringList(); + for (int i= 0; i < d_graph->curveCount(); i++){ + QwtPlotItem *it = d_graph->plotItem(i); + if (!it) + continue; - contents->setCurrentRow(row); - enableContentsBtns(); + if (it->rtti() == QwtPlotItem::Rtti_PlotCurve && ((PlotCurve *)it)->type() != Graph::Function){ + DataCurve *c = (DataCurve *)it; + lst << c->title().text() + "[" + QString::number(c->startRow() + 1) + ":" + QString::number(c->endRow() + 1) + "]"; + } else + lst << it->title().text(); + } + contents->addItems(lst); + } else + contents->addItems(d_graph->plotItemsList()); + + foreach(int row, selectedRows){//restore selection + QListWidgetItem *it = contents->item(row); + if (it) + it->setSelected(true); + } + + enableContentsBtns(); } void CurvesDialog::updateCurveRange() @@ -605,20 +654,25 @@ addFolderItems(f); f = f->folderBelow(); - QTreeWidgetItem *folderItem = NULL; - int depth = 0; + TreeWidgetFolderItem *folderItem = NULL; while (f){ - if (folderItem && f->depth() > depth) - folderItem = new QTreeWidgetItem(folderItem, QStringList(f->objectName()), FolderItem); - else - folderItem = new QTreeWidgetItem(available, QStringList(f->objectName()), FolderItem); + if (f->depth() > 1){ + Folder *parentFolder = (Folder *)f->parent(); + QTreeWidgetItemIterator it(available); + while (*it) { + TreeWidgetFolderItem *fi = (TreeWidgetFolderItem *)(*it); + if (fi->folder() == parentFolder){ + folderItem = new TreeWidgetFolderItem(fi, f); + break; + } + ++it; + } + } else + folderItem = new TreeWidgetFolderItem(available, f); - folderItem->setIcon(0, QIcon(":/folder_open.png")); - folderItem->setExpanded(true); available->addTopLevelItem(folderItem); - addFolderItems(f, folderItem); - depth = f->depth(); + f = f->folderBelow(); } } @@ -689,3 +743,21 @@ contents->addItems(d_graph->plotItemsList()); contents->setCurrentRow(row + offset); } + +TreeWidgetFolderItem::TreeWidgetFolderItem( QTreeWidget *parent, Folder *f ) + : QTreeWidgetItem( parent, QStringList(f->objectName()), CurvesDialog::FolderItem) +{ + myFolder = f; + + setIcon(0, QIcon(":/folder_open.png")); + setExpanded(true); +} + +TreeWidgetFolderItem::TreeWidgetFolderItem( QTreeWidgetItem *parent, Folder *f ) + : QTreeWidgetItem ( parent, QStringList(f->objectName()), CurvesDialog::FolderItem) +{ + myFolder = f; + + setIcon(0, QIcon(":/folder_open.png")); + setExpanded(true); +} diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurvesDialog.h qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurvesDialog.h --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/CurvesDialog.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/CurvesDialog.h 2010-12-01 21:48:36.000000000 +0000 @@ -30,15 +30,19 @@ #define CURVESDIALOG_H #include +#include class QComboBox; class QListWidget; class QPushButton; class QCheckBox; class QTreeWidget; -class QTreeWidgetItem; +class TreeWidgetFolderItem; class Graph; class Folder; +class Matrix; +class Table; +class ApplicationWindow; //! Add/remove curves dialog class CurvesDialog : public QDialog @@ -46,6 +50,7 @@ Q_OBJECT public: + enum TreeItemType{FolderItem, ColumnItem, TableItem, MatrixItem}; CurvesDialog( QWidget* parent = 0, Qt::WFlags fl = 0 ); void setGraph(Graph *graph); @@ -67,13 +72,14 @@ void shiftCurveBy(int offset = 1); private: - enum TreeItemType{FolderItem, ColumnItem, TableItem, MatrixItem}; - void closeEvent(QCloseEvent*); void addFolderItems(Folder *f, QTreeWidgetItem* parent = 0); void init(); - bool addCurve(const QString& name); + + bool addCurveFromMatrix(Matrix *m, const QString& name); + bool addCurveFromTable(ApplicationWindow *app, Table *t, const QString& name); + QSize sizeHint() const; void contextMenuEvent(QContextMenuEvent *); @@ -94,6 +100,26 @@ QCheckBox* boxShowCurrentFolder; QPushButton* btnUp; QPushButton* btnDown; + QComboBox* boxXAxis; + QComboBox* boxYAxis; +}; + +/***************************************************************************** + * + * Class TreeWidgetFolderItem + * + *****************************************************************************/ +//! Folders list item class +class TreeWidgetFolderItem : public QTreeWidgetItem +{ +public: + TreeWidgetFolderItem( QTreeWidget *parent, Folder *f ); + TreeWidgetFolderItem( QTreeWidgetItem *parent, Folder *f ); + + Folder *folder() { return myFolder; }; + +protected: + Folder *myFolder; }; #endif // CurvesDialog_H diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/EnrichmentDialog.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/EnrichmentDialog.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/EnrichmentDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/EnrichmentDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -49,10 +49,13 @@ #include #include -EnrichmentDialog::EnrichmentDialog(WidgetType wt, Graph *g, QWidget *parent) - : QDialog(parent), d_plot(g), d_widget(NULL), d_widget_type(wt) +EnrichmentDialog::EnrichmentDialog(WidgetType wt, Graph *g, ApplicationWindow *app, QWidget *parent) + : QDialog(parent), d_plot(g), d_widget(NULL), d_widget_type(wt), d_app(app) { - setSizeGripEnabled( true ); + bool standAlone = qobject_cast(parent); + if (standAlone) + setSizeGripEnabled(true); + setAttribute(Qt::WA_DeleteOnClose); QDialogButtonBox *buttonBox = new QDialogButtonBox; @@ -94,7 +97,8 @@ QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(tabWidget); - layout->addWidget(buttonBox); + if (standAlone) + layout->addWidget(buttonBox); setLayout(layout); connect(tabWidget, SIGNAL(currentChanged (QWidget *)), this, SLOT(customButtons(QWidget *))); @@ -121,7 +125,8 @@ texCompilerBox = new QComboBox; texCompilerBox->addItem(tr("MathTran (http://www.mathtran.org/)")); texCompilerBox->addItem(tr("locally installed")); - texCompilerBox->setCurrentIndex(((ApplicationWindow *)parentWidget())->d_latex_compiler); + if (d_app) + texCompilerBox->setCurrentIndex(d_app->d_latex_compiler); connect(texCompilerBox, SIGNAL(activated(int)), this, SLOT(updateCompilerInterface(int))); QHBoxLayout *hl = new QHBoxLayout; @@ -290,7 +295,8 @@ boxFrameWidth = new DoubleSpinBox(); if(d_widget_type == Ellipse){ boxFrameWidth->setDecimals(2); - boxFrameWidth->setLocale(((ApplicationWindow *)parent())->locale()); + if (d_app) + boxFrameWidth->setLocale(d_app->locale()); boxFrameWidth->setSingleStep(0.1); boxFrameWidth->setRange(0.1, 100); } else { @@ -421,10 +427,9 @@ bl1->addWidget(new QLabel(tr( "Unit" )), 1, 0); bl1->addWidget(unitBox, 1, 1); - ApplicationWindow *app = (ApplicationWindow *)parent(); QLocale locale = QLocale(); - if (app) - locale = app->locale(); + if (d_app) + locale = d_app->locale(); QGroupBox *gb1 = new QGroupBox(tr("Position")); xBox = new DoubleSpinBox(); @@ -460,7 +465,8 @@ gl2->addWidget(heightBox, 1, 1); keepAspectBox = new QCheckBox(tr("&Keep aspect ratio")); - keepAspectBox->setChecked(app->d_keep_aspect_ration); + if (d_app) + keepAspectBox->setChecked(d_app->d_keep_aspect_ration); gl2->addWidget(keepAspectBox, 2, 1); bestSizeButton = new QPushButton(tr("&Best size")); @@ -507,8 +513,7 @@ if (!w) return; - ApplicationWindow *app = (ApplicationWindow *)parent(); - if (!app) + if (!d_app) return; d_widget = w; @@ -534,9 +539,9 @@ boxFrameWidth->setValue(fw->framePen().width()); boxFrameWidth->blockSignals(false); - unitBox->setCurrentIndex(app->d_frame_geometry_unit); + unitBox->setCurrentIndex(d_app->d_frame_geometry_unit); attachToBox->setCurrentIndex((int)fw->attachPolicy()); - displayCoordinates(app->d_frame_geometry_unit); + displayCoordinates(d_app->d_frame_geometry_unit); } else { unitBox->setCurrentIndex(FrameWidget::Pixel); displayCoordinates(FrameWidget::Pixel); @@ -648,9 +653,8 @@ if (fw) fw->setAttachPolicy((FrameWidget::AttachPolicy)attachToBox->currentIndex()); - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - if (app) - app->d_keep_aspect_ration = keepAspectBox->isChecked(); + if (d_app) + d_app->d_keep_aspect_ration = keepAspectBox->isChecked(); } else if (patternPage && tabWidget->currentPage() == patternPage) patternApplyTo(); else if (textPage && tabWidget->currentPage() == textPage){ @@ -659,9 +663,8 @@ l->setText(textEditBox->text()); textFormatApplyTo(); - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - if (app) - app->setFormatBarFont(textFont); + if (d_app) + d_app->setFormatBarFont(textFont); } } @@ -713,7 +716,9 @@ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - QString program = ((ApplicationWindow *)parentWidget())->d_latex_compiler_path; + QString program; + if (d_app) + program = d_app->d_latex_compiler_path; QStringList arguments; arguments << createTempTexFile(); @@ -762,8 +767,7 @@ void EnrichmentDialog::chooseImageFile(const QString& fn) { - ApplicationWindow *app = (ApplicationWindow *)parentWidget(); - if (!app) + if (!d_app) return; ImageWidget *i = qobject_cast(d_widget); @@ -779,8 +783,8 @@ if (i->load(path)){ imagePathBox->setText(path); QFileInfo fi(path); - app->imagesDirPath = fi.dirPath(true); - app->modifiedProject(); + d_app->imagesDirPath = fi.dirPath(true); + d_app->modifiedProject(); } } } @@ -798,7 +802,7 @@ QString fn = imagePathBox->text(); if (fn.isEmpty() || !QFile::exists(fn)){ - QMessageBox::warning((ApplicationWindow *)parentWidget(), tr("QtiPlot - Warning"), + QMessageBox::warning(d_app, tr("QtiPlot - Warning"), tr("The file %1 doesn't exist. The image cannot be restored when reloading the project file!").arg(fn)); chooseImageFile(); } @@ -822,9 +826,8 @@ if (d_plot) d_plot->multiLayer()->notifyChanges(); - ApplicationWindow *app = (ApplicationWindow *)parentWidget(); - if (app) - app->d_frame_geometry_unit = unit; + if (d_app) + d_app->d_frame_geometry_unit = unit; } void EnrichmentDialog::displayCoordinates(int unit) @@ -894,7 +897,9 @@ void EnrichmentDialog::frameApplyTo() { - ApplicationWindow *app = (ApplicationWindow *)this->parent(); + if (!d_app) + return; + switch(frameApplyToBox->currentIndex()){ case 0://this layer { @@ -925,7 +930,7 @@ case 3://all windows { - QList windows = app->windowsList(); + QList windows = d_app->windowsList(); foreach(MdiSubWindow *w, windows){ MultiLayer *ml = qobject_cast(w); if (!ml) @@ -943,7 +948,7 @@ default: break; } - app->modifiedProject(); + d_app->modifiedProject(); } void EnrichmentDialog::setFrameTo(FrameWidget *fw) @@ -957,7 +962,9 @@ void EnrichmentDialog::patternApplyTo() { - ApplicationWindow *app = (ApplicationWindow *)this->parent(); + if (!d_app) + return; + switch(patternApplyToBox->currentIndex()){ case 0://this object { @@ -988,7 +995,7 @@ case 3://all windows { - QList windows = app->windowsList(); + QList windows = d_app->windowsList(); foreach(MdiSubWindow *w, windows){ MultiLayer *ml = qobject_cast(w); if (!ml) @@ -1006,7 +1013,7 @@ default: break; } - app->modifiedProject(); + d_app->modifiedProject(); } void EnrichmentDialog::setPatternTo(FrameWidget *r) @@ -1066,7 +1073,9 @@ void EnrichmentDialog::textFormatApplyTo() { - ApplicationWindow *app = (ApplicationWindow *)this->parent(); + if (!d_app) + return; + switch(textApplyToBox->currentIndex()){ case 0://this object { @@ -1103,7 +1112,7 @@ case 3://all windows { - QList windows = app->windowsList(); + QList windows = d_app->windowsList(); foreach(MdiSubWindow *w, windows){ MultiLayer *ml = qobject_cast(w); if (!ml) @@ -1124,7 +1133,7 @@ default: break; } - app->modifiedProject(); + d_app->modifiedProject(); } void EnrichmentDialog::setTextFormatTo(LegendWidget *l) @@ -1142,47 +1151,44 @@ void EnrichmentDialog::setTextDefaultValues() { - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - if (!app) + if (!d_app) return; - app->legendTextColor = textColorBtn->color(); - app->plotLegendFont = textFont; + d_app->legendTextColor = textColorBtn->color(); + d_app->plotLegendFont = textFont; QColor c = textBackgroundBtn->color(); c.setAlpha(boxBackgroundTransparency->value()); - app->legendBackground = c; - app->d_legend_default_angle = boxTextAngle->value(); - app->saveSettings(); + d_app->legendBackground = c; + d_app->d_legend_default_angle = boxTextAngle->value(); + d_app->saveSettings(); } void EnrichmentDialog::setFrameDefaultValues() { - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - if (!app) + if (!d_app) return; - app->legendFrameStyle = frameBox->currentIndex(); - app->d_frame_widget_pen = QPen(frameColorBtn->color(), boxFrameWidth->value(), boxFrameLineStyle->style()); - app->saveSettings(); + d_app->legendFrameStyle = frameBox->currentIndex(); + d_app->d_frame_widget_pen = QPen(frameColorBtn->color(), boxFrameWidth->value(), boxFrameLineStyle->style()); + d_app->saveSettings(); } void EnrichmentDialog::setRectangleDefaultValues() { - ApplicationWindow *app = (ApplicationWindow *)this->parent(); - if (!app) + if (!d_app) return; QColor c = backgroundColorBtn->color(); c.setAlpha(boxTransparency->value()); - app->d_rect_default_background = c; + d_app->d_rect_default_background = c; QColor patternColor = patternColorBtn->color(); if (useFrameColorBox->isChecked()) patternColor = frameColorBtn->color(); - app->d_rect_default_brush = QBrush(patternColor, patternBox->getSelectedPattern()); - app->saveSettings(); + d_app->d_rect_default_brush = QBrush(patternColor, patternBox->getSelectedPattern()); + d_app->saveSettings(); } void EnrichmentDialog::createImage() @@ -1226,7 +1232,9 @@ return; } - QString compiler = ((ApplicationWindow *)parentWidget())->d_latex_compiler_path; + QString compiler; + if (d_app) + compiler = d_app->d_latex_compiler_path; QFileInfo fi(compiler); QString dir = fi.dir().absolutePath(); @@ -1313,7 +1321,8 @@ void EnrichmentDialog::updateCompilerInterface(int compiler) { - ((ApplicationWindow *)parentWidget())->d_latex_compiler = compiler; + if (d_app) + d_app->d_latex_compiler = compiler; } void EnrichmentDialog::updateButtons() diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/EnrichmentDialog.h qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/EnrichmentDialog.h --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/EnrichmentDialog.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/EnrichmentDialog.h 2010-12-01 21:48:36.000000000 +0000 @@ -56,6 +56,7 @@ class PenStyleBox; class RectangleWidget; class TextFormatButtons; +class ApplicationWindow; class EnrichmentDialog : public QDialog { @@ -64,10 +65,11 @@ public: enum WidgetType{Frame, Text, Image, Tex, MDIWindow, Ellipse}; - EnrichmentDialog(WidgetType wt, Graph *g, QWidget *parent = 0); + EnrichmentDialog(WidgetType wt, Graph *g, ApplicationWindow *app, QWidget *parent = 0); ~EnrichmentDialog(); void setWidget(QWidget *w); + void accept (){return apply();}; private slots: void clearForm(); @@ -109,6 +111,7 @@ void setText(QTextEdit *editor, const QString & t); QString createTempTexFile(); + ApplicationWindow *d_app; QHttp *http; QProcess *compileProcess, *dvipngProcess; diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/LayerDialog.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/LayerDialog.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/LayerDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/LayerDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -264,6 +264,7 @@ boxY->setValue(g->getRows()); linkXAxesBox->setChecked(g->hasLinkedXLayerAxes()); + commonAxesBox->setChecked(g->hasCommonAxes()); alignPolicyBox->setCurrentIndex(g->alignPolicy()); boxColsGap->setValue(g->colsSpacing()); @@ -354,6 +355,7 @@ multi_layer->setLayerCanvasSize(convertToPixels(boxCanvasWidth->value(), unit, 0), convertToPixels(boxCanvasHeight->value(), unit, 1)); } + multi_layer->setCommonAxesLayout(commonAxesBox->isEnabled() && commonAxesBox->isChecked()); if (commonAxesBox->isEnabled() && commonAxesBox->isChecked()) multi_layer->setCommonLayerAxes(boxColsGap->value() == 0, boxRowsGap->value() == 0); diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/PlotDialog.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/PlotDialog.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/PlotDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/PlotDialog.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -47,6 +47,11 @@ #include #include #include +#include +#include +#include +#include +#include #include #include @@ -69,6 +74,7 @@ #include #include #include +#include #include @@ -99,6 +105,22 @@ boxPlotType = new QComboBox(); boxPlotType->setEditable(false); hb1->addWidget(boxPlotType); + + btnUp = new QPushButton(); + btnUp->setIcon(QPixmap(":/arrow_up.png")); + btnUp->setToolTip(tr("Move upward")); + btnUp->setMaximumWidth(20); + btnUp->setEnabled(false); + hb1->addWidget(btnUp); + + btnDown = new QPushButton(); + btnDown->setIcon(QPixmap(":/arrow_down.png")); + btnDown->setToolTip(tr("Move downward")); + btnDown->setMaximumWidth(20); + btnDown->setEnabled(false); + hb1->addWidget(btnDown); + hb1->addStretch(); + gl->addWidget(curvePlotTypeBox, 1, 0); initAxesPage(); @@ -125,6 +147,8 @@ initLabelsPage(); initFunctionPage(); initPlotGeometryPage(); + + enrichmentDialog = NULL; clearTabWidget(); QHBoxLayout* hb2 = new QHBoxLayout(); @@ -149,6 +173,8 @@ gl->addLayout(hb2, 1, 1); connect(btnMore, SIGNAL(toggled(bool)), this, SLOT(showAll(bool))); + connect(btnUp, SIGNAL(clicked()), this, SLOT(raiseCurve())); + connect(btnDown, SIGNAL(clicked()), this, SLOT(shiftCurveBy())); connect( buttonOk, SIGNAL(clicked()), this, SLOT(quit())); connect( buttonCancel, SIGNAL(clicked()), this, SLOT(close())); @@ -164,7 +190,7 @@ connect(boxPlotType, SIGNAL(currentIndexChanged(int)), this, SLOT(changePlotType(int))); QShortcut *shortcut = new QShortcut(QKeySequence(Qt::Key_Delete), this); - connect(shortcut, SIGNAL(activated()), this, SLOT(removeSelectedCurve())); + connect(shortcut, SIGNAL(activated()), this, SLOT(removeSelectedObject())); } void PlotDialog::showAll(bool all) @@ -1741,65 +1767,101 @@ QTreeWidgetItem *item = listBox->currentItem(); if (!item) return; - if (item->type() != CurveTreeItem::PlotCurveTreeItem) - return; - QwtPlotItem *it = (QwtPlotItem *)((CurveTreeItem *)item)->plotItem(); - if (!it) + + if (item->type() != CurveTreeItem::PlotCurveTreeItem && + item->type() != FrameWidgetTreeItem::FrameWidgetItem) return; QPoint pos = listBox->viewport()->mapFromGlobal(QCursor::pos()); QRect rect = listBox->visualItemRect(listBox->currentItem()); if (rect.contains(pos)){ - QMenu contextMenu(this); - contextMenu.insertItem(tr("&Delete"), this, SLOT(removeSelectedCurve())); - if (it->rtti() == QwtPlotItem::Rtti_PlotCurve && ((PlotCurve *)it)->type() != Graph::Function) - contextMenu.insertItem(tr("&Plot Associations..."), this, SLOT(editCurve())); - contextMenu.exec(QCursor::pos()); - } - e->accept(); + QMenu contextMenu(this); + if (item->type() == CurveTreeItem::PlotCurveTreeItem){ + QwtPlotItem *it = (QwtPlotItem *)((CurveTreeItem *)item)->plotItem(); + if (it){ + int index = ((CurveTreeItem *)item)->plotItemIndex(); + if (index) + contextMenu.insertItem(QPixmap(":/arrow_up.png"), tr("Move &upward"), this, SLOT(raiseCurve())); + + Graph *graph = ((CurveTreeItem *)item)->graph(); + if (graph && index < graph->curveCount() - 1) + contextMenu.insertItem(QPixmap(":/arrow_down.png"), tr("Move do&wnward"), this, SLOT(shiftCurveBy())); + contextMenu.insertSeparator(); + } + + if (it && it->rtti() == QwtPlotItem::Rtti_PlotCurve && ((PlotCurve *)it)->type() != Graph::Function){ + contextMenu.insertItem(tr("&Plot Associations..."), this, SLOT(editCurve())); + contextMenu.insertSeparator(); + } + } + contextMenu.insertItem(QPixmap(":/delete.png"), tr("&Delete"), this, SLOT(removeSelectedObject())); + contextMenu.exec(QCursor::pos()); + } + e->accept(); } -void PlotDialog::removeSelectedCurve() +void PlotDialog::removeSelectedObject() { - CurveTreeItem *item = (CurveTreeItem *)listBox->currentItem(); - if (!item) - return; - if (item->type() != CurveTreeItem::PlotCurveTreeItem) - return; + QTreeWidgetItem *item = listBox->currentItem(); + if (!item) + return; - Graph *graph = item->graph(); - if (graph){ - graph->removeCurve(item->plotItemIndex()); - graph->updatePlot(); - - LayerItem *layerItem = (LayerItem *)item->parent(); - QTreeWidgetItem *rootItem = layerItem->parent(); - - int index = rootItem->indexOfChild (layerItem); - rootItem->takeChild(index); - delete layerItem; - - layerItem = new LayerItem(graph, rootItem, tr("Layer") + QString::number(d_ml->layerIndex(graph) + 1)); - rootItem->addChild(layerItem); - if (graph->curveCount() > 0){ - layerItem->setExpanded(true); - CurveTreeItem *it = (CurveTreeItem *)layerItem->child(0); - if (it){ - listBox->setCurrentItem(it); - setActiveCurve(it); - } - } else { - listBox->setCurrentItem(layerItem); + Graph *graph = NULL; + switch (item->type()){ + case FrameWidgetTreeItem::FrameWidgetItem: + enrichmentDialog->close(); + enrichmentDialog = NULL; + graph = ((FrameWidgetTreeItem *)item)->graph(); + if (graph) + graph->remove(((FrameWidgetTreeItem *)item)->frameWidget()); + break; + case CurveTreeItem::PlotCurveTreeItem: + graph = ((CurveTreeItem *)item)->graph(); + if (graph) + graph->removeCurve(((CurveTreeItem *)item)->plotItemIndex()); + break; + default: + return; + } - clearTabWidget(); - privateTabWidget->addTab (layerPage, tr("Layer")); - privateTabWidget->addTab (layerGeometryPage, tr("Geometry")); - privateTabWidget->addTab (speedPage, tr("Speed")); - privateTabWidget->showPage(layerPage); + if (!graph) + return; + + graph->updatePlot(); - setActiveLayer(layerItem); + LayerItem *layerItem = (LayerItem *)item->parent(); + QTreeWidgetItem *rootItem = layerItem->parent(); + + int index = rootItem->indexOfChild (layerItem); + rootItem->takeChild(index); + delete layerItem; + + layerItem = new LayerItem(graph, rootItem, tr("Layer") + QString::number(d_ml->layerIndex(graph) + 1)); + rootItem->addChild(layerItem); + + if (graph->curveCount() > 0){ + layerItem->setExpanded(true); + CurveTreeItem *it = (CurveTreeItem *)layerItem->child(0); + if (it){ + listBox->setCurrentItem(it); + setActiveCurve(it); } - } + } else if (!graph->enrichmentsList().isEmpty()){ + layerItem->setExpanded(true); + FrameWidgetTreeItem *it = (FrameWidgetTreeItem *)layerItem->child(0); + if (it) + listBox->setCurrentItem(it); + } else { + listBox->setCurrentItem(layerItem); + + clearTabWidget(); + privateTabWidget->addTab (layerPage, tr("Layer")); + privateTabWidget->addTab (layerGeometryPage, tr("Geometry")); + privateTabWidget->addTab (speedPage, tr("Speed")); + privateTabWidget->showPage(layerPage); + + setActiveLayer(layerItem); + } } void PlotDialog::pickErrorBarsColor() @@ -1840,6 +1902,8 @@ ((CurveTreeItem *)previousItem)->setActive(false); else if (previousItem->type() == LayerItem::LayerTreeItem) ((LayerItem *)previousItem)->setActive(false); + else if (previousItem->type() == FrameWidgetTreeItem::FrameWidgetItem) + ((FrameWidgetTreeItem *)previousItem)->setActive(false); boxPlotType->blockSignals(true); @@ -1866,7 +1930,34 @@ privateTabWidget->showPage(layerPage); } setActiveLayer((LayerItem *)currentItem); - } else { + } else if (currentItem->type() == FrameWidgetTreeItem::FrameWidgetItem){ + clearTabWidget(); + + FrameWidgetTreeItem *it = (FrameWidgetTreeItem *)currentItem; + it->setActive(true); + FrameWidget *w = it->frameWidget(); + + EnrichmentDialog::WidgetType wt = EnrichmentDialog::Text; + if (qobject_cast(w)) + wt = EnrichmentDialog::Frame; + else if (qobject_cast(w)) + wt = EnrichmentDialog::Ellipse; + else if (qobject_cast(w)) + wt = EnrichmentDialog::Image; + else if (qobject_cast(w)) + wt = EnrichmentDialog::Tex; + + if (!enrichmentDialog) + enrichmentDialog = new EnrichmentDialog(wt, it->graph(), (ApplicationWindow *)this->parent(), privateTabWidget); + enrichmentDialog->setWidget(w); + + privateTabWidget->hide(); + ((QGridLayout*)this->layout())->addWidget(enrichmentDialog, 0, 1); + + curvePlotTypeBox->hide(); + btnWorksheet->hide(); + btnEditCurve->hide(); + } else { clearTabWidget(); privateTabWidget->addTab(plotGeometryPage, tr("Dimensions")); privateTabWidget->addTab(printPage, tr("Print")); @@ -1966,7 +2057,7 @@ void PlotDialog::clearTabWidget() { - privateTabWidget->removeTab(privateTabWidget->indexOf(labelsPage)); + privateTabWidget->removeTab(privateTabWidget->indexOf(labelsPage)); privateTabWidget->removeTab(privateTabWidget->indexOf(axesPage)); privateTabWidget->removeTab(privateTabWidget->indexOf(linePage)); privateTabWidget->removeTab(privateTabWidget->indexOf(symbolPage)); @@ -1990,6 +2081,13 @@ privateTabWidget->removeTab(privateTabWidget->indexOf(miscPage)); privateTabWidget->removeTab(privateTabWidget->indexOf(functionPage)); privateTabWidget->removeTab(privateTabWidget->indexOf(plotGeometryPage)); + + if (enrichmentDialog){ + enrichmentDialog->close(); + enrichmentDialog = NULL; + } + + privateTabWidget->show(); } void PlotDialog::quit() @@ -2157,6 +2255,13 @@ if (!i) return; + Graph *g = item->graph(); + if (g){ + int index = item->plotItemIndex(); + btnUp->setEnabled(index > 0); + btnDown->setEnabled(index < g->curveCount() - 1); + } + item->setActive(true); listBox->scrollToItem(item); btnWorksheet->show(); @@ -2613,6 +2718,11 @@ bool PlotDialog::acceptParams() { + if (enrichmentDialog && privateTabWidget->isHidden()){ + enrichmentDialog->accept(); + return true; + } + if (privateTabWidget->currentWidget() == plotGeometryPage){ FrameWidget::setRect(d_ml, boxPlotX->value(), boxPlotY->value(), boxPlotWidth->value(), boxPlotHeight->value(), (FrameWidget::Unit)plotUnitBox->currentIndex()); @@ -3711,6 +3821,45 @@ return QRect(qRound(x), qRound(y), qRound(w), qRound(h)); } +void PlotDialog::raiseCurve() +{ + shiftCurveBy(-1); +} + +void PlotDialog::shiftCurveBy(int offset) +{ + QTreeWidgetItem *item = listBox->currentItem(); + if (!item || item->type() != CurveTreeItem::PlotCurveTreeItem) + return; + + Graph *graph = ((CurveTreeItem *)item)->graph(); + if (!graph) + return; + + int index = ((CurveTreeItem *)item)->plotItemIndex(); + int newIndex = index + offset; + graph->changeCurveIndex(index, newIndex); + + LayerItem *layerItem = (LayerItem *)item->parent(); + QTreeWidgetItem *rootItem = layerItem->parent(); + + rootItem->takeChild(rootItem->indexOfChild (layerItem)); + delete layerItem; + + layerItem = new LayerItem(graph, rootItem, tr("Layer") + QString::number(d_ml->layerIndex(graph) + 1)); + rootItem->addChild(layerItem); + + layerItem->setExpanded(true); + CurveTreeItem *it = (CurveTreeItem *)layerItem->child(newIndex); + if (it){ + listBox->setCurrentItem(it); + setActiveCurve(it); + } + + btnUp->setEnabled(newIndex > 0); + btnDown->setEnabled(newIndex < graph->curveCount() - 1); +} + /***************************************************************************** * * Class LayerItem @@ -3722,8 +3871,10 @@ d_graph(g) { setIcon(0, QPixmap(":/layer_disabled.png")); - if (g) + if (g){ insertCurvesList(); + insertEnrichmentsList(); + } } void LayerItem::setActive(bool on) @@ -3757,6 +3908,14 @@ } } +void LayerItem::insertEnrichmentsList() +{ + QList lst = d_graph->enrichmentsList(); + foreach (FrameWidget *w, lst){ + addChild(new FrameWidgetTreeItem(w, this, w->objectName())); + } +} + /***************************************************************************** * * Class CurveTreeItem @@ -3807,3 +3966,57 @@ return -1; } + +/***************************************************************************** + * + * Class FrameWidgetTreeItem + * + *****************************************************************************/ +FrameWidgetTreeItem::FrameWidgetTreeItem(FrameWidget *w, LayerItem *parent, const QString& s) + : QTreeWidgetItem(parent, QStringList(s), FrameWidgetItem), + d_widget(w) +{ + setActive(false); +} + +void FrameWidgetTreeItem::setActive(bool on) +{ + QPixmap pix = frameWidgetPixmap(); + if (on) + setIcon(0, pix); + else + setIcon(0, QIcon(pix).pixmap(pix.size(), QIcon::Disabled)); +} + +QPixmap FrameWidgetTreeItem::frameWidgetPixmap() +{ + if (!d_widget) + return QPixmap(); + + if (qobject_cast(d_widget)) + return QPixmap(":/legend.png"); + else if (qobject_cast(d_widget)){ + QPixmap pix = QPixmap(16, 16); + pix.fill(Qt::transparent); + QPainter p; + p.begin(&pix); + p.setPen(QPen(Qt::blue)); + p.setBrush(Qt::lightGray); + p.drawRect(QRect(1, 2, 12, 10)); + return pix; + } else if (qobject_cast(d_widget)){ + QPixmap pix = QPixmap(16, 16); + pix.fill(Qt::transparent); + QPainter p; + p.begin(&pix); + p.setPen(QPen(Qt::blue)); + p.setBrush(Qt::lightGray); + p.drawEllipse(QRect(0, 2, 15, 12)); + return pix; + } else if (qobject_cast(d_widget)) + return QPixmap(":/monalisa.png"); + else if (qobject_cast(d_widget)) + return QPixmap(":/equation.png"); + + return QPixmap(); +} diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/PlotDialog.h qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/PlotDialog.h --- qtiplot-0.9.8/qtiplot/src/plot2D/dialogs/PlotDialog.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/dialogs/PlotDialog.h 2010-12-01 21:48:36.000000000 +0000 @@ -64,6 +64,7 @@ class QwtErrorPlotCurve; class ContourLinesEditor; class FunctionDialog; +class EnrichmentDialog; //! Custom plot/curves dialog class PlotDialog : public QDialog @@ -95,11 +96,14 @@ void changePlotType(int plotType); void setActiveCurve(CurveTreeItem *item); + void raiseCurve(); + void shiftCurveBy(int offset = 1); + void insertTabs(int plot_type); void updateTabWindow(QTreeWidgetItem *currentItem, QTreeWidgetItem *previousItem); void showAreaColor(bool show); - void removeSelectedCurve(); + void removeSelectedObject(); void pickErrorBarsColor(); @@ -313,6 +317,8 @@ DoubleSpinBox *boxPlotX, *boxPlotY, *boxPlotWidth, *boxPlotHeight; QComboBox *plotUnitBox; QCheckBox *boxResizeLayers, *keepPlotRatioBox, *layerScaleFonts; + EnrichmentDialog *enrichmentDialog; + QPushButton *btnUp, *btnDown; }; /***************************************************************************** @@ -332,6 +338,7 @@ protected: void insertCurvesList(); + void insertEnrichmentsList(); Graph *d_graph; }; @@ -359,4 +366,26 @@ QwtPlotItem *d_curve; }; +/***************************************************************************** + * + * Class FrameWidgetTreeItem + * + *****************************************************************************/ +//! FrameWidgetTreeItem tree widget item class +class FrameWidgetTreeItem : public QTreeWidgetItem +{ +public: + enum {FrameWidgetItem = 1003}; + FrameWidgetTreeItem(FrameWidget *w, LayerItem *parent, const QString& s); + + Graph* graph(){return ((LayerItem *)parent())->graph();}; + FrameWidget *frameWidget(){return d_widget;}; + + void setActive(bool on); + +protected: + QPixmap frameWidgetPixmap(); + + FrameWidget *d_widget; +}; #endif diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/EllipseWidget.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/EllipseWidget.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/EllipseWidget.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/EllipseWidget.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -40,6 +40,7 @@ EllipseWidget::EllipseWidget(Graph *plot):FrameWidget(plot) { setFrameStyle(Line); + setObjectName(tr("Ellipse")); } void EllipseWidget::clone(EllipseWidget* r) diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/Graph.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/Graph.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/Graph.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/Graph.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -242,7 +242,7 @@ connect (d_zoomer[0],SIGNAL(zoomed (const QwtDoubleRect &)),this,SLOT(zoomed (const QwtDoubleRect &))); } -MultiLayer* Graph::multiLayer() +MultiLayer* Graph::multiLayer() const { if (!parent()) return NULL; @@ -1229,13 +1229,17 @@ return QString::null; } -void Graph::setAxisTitle(int axis, const QString& text) +void Graph::setAxisTitleString(int axis, const QString& text) { if (axis >= 0 && axis < d_axis_titles.size()) d_axis_titles[axis] = text; ((QwtPlot *)this)->setAxisTitle(axis, parseAxisTitle(axis)); +} +void Graph::setAxisTitle(int axis, const QString& text) +{ + setAxisTitleString(axis, text); replot(); emit modifiedGraph(); } @@ -1438,25 +1442,24 @@ void Graph::copyImage() { -#ifndef Q_OS_WIN - QApplication::clipboard()->setPixmap(graphPixmap(), QClipboard::Clipboard); - return; -#endif - -#ifdef EMF_OUTPUT - if (OpenClipboard(0)){ - EmptyClipboard(); - - QString path = QDir::tempPath(); - QString name = path + "/" + "qtiplot_clipboard.emf"; - name = QDir::cleanPath(name); - exportEMF(name); - HENHMETAFILE handle = GetEnhMetaFile(name.toStdWString().c_str()); - - SetClipboardData(CF_ENHMETAFILE, handle); - CloseClipboard(); - QFile::remove(name); - } +#ifdef Q_OS_WIN + #ifdef EMF_OUTPUT + if (OpenClipboard(0)){ + EmptyClipboard(); + + QString path = QDir::tempPath(); + QString name = path + "/" + "qtiplot_clipboard.emf"; + name = QDir::cleanPath(name); + exportEMF(name); + HENHMETAFILE handle = GetEnhMetaFile(name.toStdWString().c_str()); + + SetClipboardData(CF_ENHMETAFILE, handle); + CloseClipboard(); + QFile::remove(name); + } + #else + QApplication::clipboard()->setPixmap(graphPixmap(), QClipboard::Clipboard); + #endif #else QApplication::clipboard()->setPixmap(graphPixmap(), QClipboard::Clipboard); #endif @@ -1464,20 +1467,28 @@ QPixmap Graph::graphPixmap(const QSize& size, double scaleFontsFactor, bool transparent) { + QRect r = rect(); + QRect br = boundingRect(); if (!size.isValid()){ - QPixmap pixmap(boundingRect().size()); + QPixmap pixmap(br.size()); if (transparent) pixmap.fill(Qt::transparent); else pixmap.fill(); QPainter p(&pixmap); - print(&p, rect()); + r.setTopLeft(br.topLeft());//hack arround bug in Qwt: last axis labels are partially cut-off + print(&p, r); p.end(); return pixmap; } - QRect r = rect(); - QRect br = boundingRect(); + QSize sz = size; + if (r.topLeft() != br.topLeft()){//hack arround bug in Qwt: last axis labels are partially cut-off + r.setTopLeft(br.topLeft()); + sz.setWidth(sz.width() + r.x()); + sz.setHeight(sz.height() + r.y()); + } + if (br.width() != width() || br.height() != height()){ double wfactor = (double)br.width()/(double)width(); double hfactor = (double)br.height()/(double)height(); @@ -1490,7 +1501,7 @@ scaleFonts(scaleFontsFactor); - QPixmap pixmap(size); + QPixmap pixmap(sz); if (transparent) pixmap.fill(Qt::transparent); else @@ -1602,8 +1613,7 @@ if (br.width() != width() || br.height() != height()){ double wfactor = (double)br.width()/(double)width(); double hfactor = (double)br.height()/(double)height(); - r.setSize(QSize(qRound(size.width()/(wfactor*1.3)), - qRound(size.height()/hfactor))); + r.setSize(QSize(qRound(size.width()/wfactor), qRound(size.height()/hfactor))); } else r.setSize(size); } else if (res && res != printer.resolution()){ @@ -1619,6 +1629,9 @@ } else printer.setPaperSize (QSizeF(br.size()), QPrinter::DevicePixel); + if (r.topLeft() != br.topLeft())//hack arround bug in Qwt: last axis labels are partially cut-off + r.setTopLeft(br.topLeft()); + printer.setOutputFileName(fileName); if (fileName.contains(".eps")) printer.setOutputFormat(QPrinter::PostScriptFormat); @@ -1741,6 +1754,9 @@ scaleFonts(fontsFactor); + if (r.topLeft() != br.topLeft())//hack arround bug in Qwt: last axis labels are partially cut-off + r.setTopLeft(br.topLeft()); + QPainter p(device); print(&p, r); p.end(); @@ -1948,10 +1964,9 @@ } } -QString Graph::legendText(bool layerSpec) +QString Graph::legendText(bool layerSpec, int fromIndex) { QString text = QString(); - int i = 0; if (layerSpec){ int layerIndex = 1; @@ -1959,11 +1974,12 @@ if (ml) layerIndex = ml->layerIndex(this); - foreach (QwtPlotItem *it, d_curves){ - if (it->rtti() == QwtPlotItem::Rtti_PlotSpectrogram) + for (int i = fromIndex; i < d_curves.size(); i++){ + PlotCurve* c = curve(i); + if (!c) continue; - if (((PlotCurve *)it)->type() != ErrorBars ){ + if (c->type() != ErrorBars){ text += "\\l("; text += QString::number(layerIndex + 1); text += "."; @@ -1977,21 +1993,22 @@ } } } else { - foreach (QwtPlotItem *it, d_curves){ - if (it->rtti() == QwtPlotItem::Rtti_PlotSpectrogram) + for (int i = fromIndex; i < d_curves.size(); i++){ + PlotCurve* c = curve(i); + if (!c) continue; - if (((PlotCurve *)it)->type() == Function){ + int type = c->type(); + if (type == Function){ text += "\\l("; text += QString::number(i + 1); text += ")%("; text += QString::number(i + 1); text += ")\n"; - i++; continue; } - if (((PlotCurve *)it)->type() != ErrorBars ){ + if (type != ErrorBars){ text += "\\l("; text += QString::number(i + 1); text += ")%("; @@ -2017,7 +2034,6 @@ } text += ")\n"; - i++; } } } @@ -3196,8 +3212,7 @@ } } -bool Graph::addCurves(Table* w, const QStringList& names, int style, double lWidth, - int sSize, int startRow, int endRow) +bool Graph::addCurves(Table* w, const QStringList& names, int style, double lWidth, int sSize, int startRow, int endRow) { if (!w) return false; @@ -3235,7 +3250,7 @@ lst.prepend(names[i]); } - for (int i = 0; i < curves; i++){ + for (int i = 0; i < curves; i++){ int j = w->colIndex(names[i]); PlotCurve *c = NULL; if (w->colPlotDesignation(j) == Table::xErr || w->colPlotDesignation(j) == Table::yErr){ @@ -3329,8 +3344,6 @@ return NULL; int xColType = w->columnType(xcol); - int yColType = w->columnType(ycol); - int size = 0; QString date_time_fmt = w->columnFormat(xcol); QTime time0; QDateTime date0; @@ -3372,11 +3385,12 @@ } } - for (int i = startRow; i<=endRow; i++ ){ - QString xval=w->text(i,xcol); - QString yval=w->text(i,ycol); - if (!xval.isEmpty() && !yval.isEmpty()) + int size = 0; + for (int i = startRow; i <= endRow; i++ ){ + if (!w->text(i, xcol).isEmpty() && !w->text(i, ycol).isEmpty()){ size++; + break; + } } if (!size) return NULL; @@ -3386,20 +3400,19 @@ c = new QwtBarCurve(QwtBarCurve::Vertical, w, xColName, yColName, startRow, endRow); if (style == StackColumn){ style = VerticalBars; - ((QwtBarCurve*)c)->setWhiteOut(); + ((QwtBarCurve*)c)->setStacked(); } } else if (style == HorizontalBars || style == StackBar){ c = new QwtBarCurve(QwtBarCurve::Horizontal, w, xColName, yColName, startRow, endRow); if (style == StackBar){ style = HorizontalBars; - ((QwtBarCurve*)c)->setWhiteOut(); + ((QwtBarCurve*)c)->setStacked(); } } else c = new DataCurve(w, xColName, yColName, startRow, endRow); insertCurve(c); c->setPlotStyle(style); - c->setPen(QPen(Qt::black, 1.0)); CurveLayout cl = initCurveLayout(style, 0, false); updateCurveLayout(c, &cl); @@ -3678,7 +3691,7 @@ if (index >= (int) items.count()) continue; - QStringList lst = items.grep( "\\l(" + QString::number(index+1) + ")" ); + QStringList lst = items.grep( "\\l(" + QString::number(index + 1) + ")" ); if (lst.isEmpty()) continue; @@ -3698,7 +3711,10 @@ item.replace(pos, n, QString::number(id)); } pos1 = item.indexOf("%(", pos2); - pos2 = item.indexOf(")", pos1); + if (item.contains(",")) + pos2 = item.indexOf(",", pos1); + else + pos2 = item.indexOf(")", pos1); pos = pos1 + 2; n = pos2 - pos; cv = item.mid(pos, n).toInt(); @@ -3706,7 +3722,7 @@ int id = cv - 1; if (!id) id = 1; - item.replace(pos, n, QString::number(id)); + item.replace(pos, n, QString::number(id)); } items[i] = item; } @@ -5284,13 +5300,46 @@ if (update){ foreach(QwtPlotItem *it, d_curves) - it->setRenderHint(QwtPlotItem::RenderAntialiased, d_antialiasing); + it->setRenderHint(QwtPlotItem::RenderAntialiased, isCurveAntialiasingEnabled(it)); foreach (QwtPlotMarker *i, d_lines) i->setRenderHint(QwtPlotItem::RenderAntialiased, d_antialiasing); replot(); } } +bool Graph::isCurveAntialiasingEnabled(QwtPlotItem *it) +{ + if (!it || it->rtti() == QwtPlotItem::Rtti_PlotSpectrogram) + return false; + + if (!d_antialiasing) + return false; + + if (d_disable_curve_antialiasing && ((PlotCurve *)it)->dataSize() > d_max_antialising_size) + return false; + + return true; +} + +void Graph::disableCurveAntialiasing(bool disable, int maxPoints) +{ + if (!d_antialiasing) + return; + + if (d_disable_curve_antialiasing == disable && d_max_antialising_size == maxPoints) + return; + + d_disable_curve_antialiasing = disable; + d_max_antialising_size = maxPoints; + + if (d_curves.isEmpty()) + return; + + foreach(QwtPlotItem *it, d_curves) + it->setRenderHint(QwtPlotItem::RenderAntialiased, isCurveAntialiasingEnabled(it)); + replot(); +} + bool Graph::focusNextPrevChild ( bool ) { /*int markers = d_lines.size(); @@ -5692,16 +5741,10 @@ { painter->save(); - QRect rect = canvasRect; const QwtPlotCanvas* plotCanvas = canvas(); int lw = qRound((double)painter->device()->logicalDpiX()/(double)logicalDpiX()*plotCanvas->lineWidth()); - int lw2 = lw/2; - if (lw % 2) - rect = rect.adjusted(-lw2, -lw2, (lw2 + 1), (lw2 + 1)); - else - rect = rect.adjusted(-lw2, -lw2, lw2, lw2); - QRect fillRect = rect.adjusted(1, 1, -1, -1); + QRect fillRect = canvasRect.adjusted(0, 0, -1, -1); QwtPainter::fillRect(painter, fillRect, canvasBackground()); painter->setClipping(true); @@ -5713,7 +5756,7 @@ painter->save(); QColor color = plotCanvas->palette().color(QPalette::Active, QColorGroup::Foreground); painter->setPen (QPen(color, lw, Qt::SolidLine, Qt::SquareCap, Qt::MiterJoin)); - painter->drawRect(rect.adjusted(0, 0, -2, -2)); + painter->drawRect(fillRect); painter->restore(); } } @@ -6024,49 +6067,62 @@ QwtPlotItem* Graph::closestCurve(int xpos, int ypos, int &dist, int &point) { QwtScaleMap map[QwtPlot::axisCnt]; - for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ ) + for (int axis = 0; axis < QwtPlot::axisCnt; axis++) map[axis] = canvasMap(axis); - double dmin = 1.0e10; + double dmin = DBL_MAX; + double dxpos = double(xpos); + double dypos = double(ypos); + QPoint p = QPoint(xpos, ypos); QwtPlotItem *curve = NULL; foreach (QwtPlotItem *item, d_curves){ if(item->rtti() == QwtPlotItem::Rtti_PlotSpectrogram) continue; PlotCurve *c = (PlotCurve *)item; - if (c->type() != Graph::Function && ((DataCurve *)c)->hasLabels() && - ((DataCurve *)c)->selectedLabels(QPoint(xpos, ypos))){ - dist = 0; - return item; - } else - ((DataCurve *)c)->setLabelsSelected(false); + if (c->type() == Graph::ErrorBars) + continue; - for (int i=0; idataSize(); i++){ - double cx = map[c->xAxis()].xTransform(c->x(i)) - double(xpos); - double cy = map[c->yAxis()].xTransform(c->y(i)) - double(ypos); + if (c->type() != Graph::Function){ + DataCurve *dc = (DataCurve *)c; + if (dc->hasLabels() && dc->selectedLabels(p)){ + dist = 0; + return item; + } + } + + double dx = map[c->xAxis()].invTransform(dxpos); + double dy = map[c->yAxis()].invTransform(dypos); + for (int i = 0; i < c->dataSize(); i++){ + double cx = c->x(i) - dx; + double cy = c->y(i) - dy; double f = qwtSqr(cx) + qwtSqr(cy); - if (f < dmin && c->type() != Graph::ErrorBars){ + if (f < dmin){ dmin = f; curve = c; - point = i; } } } - dist = qRound(sqrt(dmin)); - if (curve && dist <= 10) - return curve; + + if (curve){ + point = ((PlotCurve *)curve)->closestPoint(p, &dmin); + if (dmin <= 10){ + dist = qRound(dmin); + return curve; + } + } foreach (QwtPlotItem *item, d_curves){ if(item->rtti() != QwtPlotItem::Rtti_PlotSpectrogram) continue; Spectrogram *c = (Spectrogram *)item; - if (c->selectedLabels(QPoint(xpos, ypos))){ + if (c->selectedLabels(p)){ dist = 0; return item; } else { c->selectLabel(false); - if (c->transform(map[c->xAxis()], map[c->yAxis()], c->boundingRect()).contains(QPoint(xpos, ypos))){ + if (c->transform(map[c->xAxis()], map[c->yAxis()], c->boundingRect()).contains(p)){ dist = 0; return item; } @@ -6303,8 +6359,6 @@ // reset the widget attributes again. This way we produce a lot of // useless layout events ... - pfilter.apply((QwtPlot *)this); - int baseLineDists[QwtPlot::axisCnt]; if (pfilter.options() & QwtPlotPrintFilter::PrintFrameWithScales){ // In case of no background we set the backbone of @@ -6318,6 +6372,7 @@ } } } + // Calculate the layout for the print. int layoutOptions = QwtPlotLayout::IgnoreScrollbars; @@ -6327,7 +6382,7 @@ layoutOptions |= QwtPlotLayout::IgnoreLegend; int bw = lineWidth(); - ((QwtPlot *)this)->plotLayout()->activate(this, + plotLayout()->activate(this, QwtPainter::metricsMap().deviceToLayout(plotRect.adjusted(bw, bw, -bw, -bw)), layoutOptions); QRect canvasRect = plotLayout()->canvasRect(); @@ -6501,25 +6556,24 @@ break; } } - printScale(painter, axisId, startDist, endDist, baseDist, scaleRect); + printScale(painter, axisId, startDist, endDist, baseDist, scaleRect); } } QwtPainter::resetMetricsMap(); - ((QwtPlot *)this)->plotLayout()->invalidate(); + plotLayout()->invalidate(); // reset all widgets with their original attributes. - if ( pfilter.options() & QwtPlotPrintFilter::PrintFrameWithScales ){ + if ( pfilter.options() & QwtPlotPrintFilter::PrintFrameWithScales ){ // restore the previous base line dists for (axisId = 0; axisId < QwtPlot::axisCnt; axisId++ ){ QwtScaleWidget *scaleWidget = (QwtScaleWidget *)axisWidget(axisId); if ( scaleWidget ) scaleWidget->setMargin(baseLineDists[axisId]); } - } + } QwtPainter::setMetricsMap(painter->device(), painter->device()); - //QList enrichments = stackingOrderEnrichmentsList(); foreach(FrameWidget *f, enrichments){ if (f->isOnTop()) f->print(painter, map); @@ -6529,7 +6583,7 @@ painter->restore(); d_is_printing = false; - setTitle(t);//hack used to avoid bug in Qwt::printTitle(): the title attributes are overwritten + setTitle(t);//hack used to avoid bug in Qwt::printTitle(): the title attributes are overwritten } TexWidget* Graph::addTexFormula(const QString& s, const QPixmap& pix) @@ -6621,7 +6675,56 @@ QRect Graph::boundingRect() { - QRect r = this->geometry(); + QRect r = rect(); + + for (int axis = 0; axis < QwtPlot::axisCnt; axis++){//hack arround bug in Qwt: last axis labels are partially cut-off + if (!axisEnabled(axis)) + continue; + QwtScaleWidget *sw = (QwtScaleWidget *)axisWidget(axis); + if(!sw) + continue; + const QwtScaleDraw *scDraw = sw->scaleDraw(); + if(!scDraw) + continue; + + if (sw->title().text().isEmpty() && !scDraw->hasComponent(QwtAbstractScaleDraw::Labels)){ + int offset1 = 0, offset2 = 0; + if (axis == xBottom || axis == xTop){ + sw = (QwtScaleWidget *)axisWidget(yLeft); + if(sw && sw->scaleDraw()) + offset1 = sw->scaleDraw()->maxLabelHeight(sw->font())/2; + sw = (QwtScaleWidget *)axisWidget(yRight); + if(sw && sw->scaleDraw()) + offset2 = sw->scaleDraw()->maxLabelHeight(sw->font())/2; + } else { + sw = (QwtScaleWidget *)axisWidget(xTop); + if(sw && sw->scaleDraw()) + offset1 = sw->scaleDraw()->maxLabelWidth(sw->font())/2; + sw = (QwtScaleWidget *)axisWidget(xBottom); + if(sw && sw->scaleDraw()) + offset2 = sw->scaleDraw()->maxLabelWidth(sw->font())/2; + } + + int offset = QMAX(offset1, offset2); + switch(axis){ + case xBottom: + r.setHeight(r.height() + offset); + break; + case xTop: + r.setY(r.y() + offset); + r.setHeight(r.height() + offset); + break; + case yLeft: + r.setX(r.x() + offset); + r.setWidth(r.width() + offset); + break; + case yRight: + r.setWidth(r.width() + offset); + break; + } + } + } + foreach(FrameWidget *fw, d_enrichments){ if (fw->isHidden())//pie labels can be hidden continue; @@ -6786,7 +6889,7 @@ QPalette palette = scaleWidget->palette(); palette.setCurrentColorGroup(QPalette::Active); - sd->draw(painter, palette); + sd->draw(painter, palette); // reset previous values sd->move(sdPos); @@ -6917,7 +7020,7 @@ replot(); } -QList Graph::stackingOrderEnrichmentsList() +QList Graph::stackingOrderEnrichmentsList() const { MultiLayer *ml = multiLayer(); if (!ml) diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/Graph.h qtiplot-0.9.8.2/qtiplot/src/plot2D/Graph.h --- qtiplot-0.9.8/qtiplot/src/plot2D/Graph.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/Graph.h 2010-12-01 21:48:36.000000000 +0000 @@ -139,7 +139,7 @@ enum AxisTitlePolicy{Default, ColName, ColComment, NameAndComment}; //! Returns a pointer to the parent MultiLayer object. - MultiLayer *multiLayer(); + MultiLayer *multiLayer() const; //! Change the active tool, deleting the old one if it exists. void setActiveTool(PlotToolInterface *tool); @@ -195,7 +195,7 @@ QColor frameColor(); const QColor & paletteBackgroundColor() const; - void print(QPainter *, const QRect &rect, const QwtPlotPrintFilter & = QwtPlotPrintFilter()); + void print(QPainter *, const QRect &rect, const QwtPlotPrintFilter & = QwtPlotPrintFilter()); void updateLayout(); void setCanvasGeometry(const QRect &canvasRect); //!Convenience function for scripts @@ -445,7 +445,7 @@ LegendWidget* newLegend(const QString& text = QString()); //! Creates a new legend text using the curves titles - QString legendText(bool layerSpec = false); + QString legendText(bool layerSpec = false, int fromIndex = 0); //@} //! \name Obsolete functions provided to keep existing Python scripts working @@ -516,6 +516,7 @@ void setTopAxisTitle(const QString& text); QString axisTitleString(int axis); + void setAxisTitleString(int axis, const QString& text); void setAxisTitle(int axis, const QString& text); void updateAxesTitles(); //! TODO: eliminate this function in version 0.9.1 (used only when restoring project files) @@ -738,6 +739,9 @@ //! Enables/Disables antialiasing of plot items. void setAntialiasing(bool on = true, bool update = true); + void disableCurveAntialiasing(bool disable, int maxPoints); + bool isCurveAntialiasingEnabled(QwtPlotItem *it); + void setCurrentFont(const QFont& f); void notifyFontChange(const QFont& f){emit currentFontChanged(f);}; void enableTextEditor(); @@ -776,7 +780,7 @@ private: QString parseAxisTitle(int axis); - QList stackingOrderEnrichmentsList(); + QList stackingOrderEnrichmentsList() const; //! Finds bounding interval of the plot data. QwtDoubleInterval axisBoundingInterval(int axis); void deselectCurves(); @@ -808,6 +812,8 @@ QListd_fit_curves; //! Render hint for plot items. bool d_antialiasing; + bool d_disable_curve_antialiasing; + int d_max_antialising_size; bool autoScaleFonts; bool drawLineOn, drawArrowOn, drawAxesBackbone; //! Flag telling if we are performing a print operation diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/ImageWidget.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/ImageWidget.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/ImageWidget.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/ImageWidget.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -60,6 +60,7 @@ setSize(picSize); } move(plot->mapToParent(plot->canvas()->pos())); + setObjectName(tr("Image")); } ImageWidget::ImageWidget(Graph *plot, const QImage& image):FrameWidget(plot), @@ -79,6 +80,7 @@ setSize(picSize); move(plot->mapToParent(plot->canvas()->pos())); + setObjectName(tr("Image")); } bool ImageWidget::load(const QString& fn, bool update) diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/LegendWidget.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/LegendWidget.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/LegendWidget.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/LegendWidget.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -62,6 +62,7 @@ d_tex_output(false) { setAttribute(Qt::WA_DeleteOnClose); + setObjectName(tr("Legend")); d_text = new QwtText(QString::null); d_text->setFont(QFont("Arial", 12, QFont::Normal, false)); @@ -837,11 +838,16 @@ */ QSize LegendWidget::textSize(QPainter *p, const QwtText& text) { - QSize size = text.textSize(); - QString s = text.text(); - if (s.contains("") || s.contains("")){ - int width = size.width() + QFontMetrics(text.font(), p->device()).boundingRect(" ").width(); - size = QSize(width, size.height()); + QSize size = text.textSize(text.font()); + QwtMetricsMap map; + map.setMetrics(this, p->device()); + if (!map.isIdentity()){ + QString s = text.text(); + if (s.contains("") || s.contains("")){ + int width = size.width() + QFontMetrics(text.font(), p->device()).boundingRect(" ").width(); + size = QSize(width, size.height()); + } else + size = QFontMetrics(text.font(), p->device()).boundingRect(s + " ").size(); } return size; } diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/MultiLayer.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/MultiLayer.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/MultiLayer.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/MultiLayer.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -126,7 +126,8 @@ d_canvas_size(QSize()), d_align_policy(AlignLayers), d_size_policy(UserSize), -d_link_x_axes(false) +d_link_x_axes(false), +d_common_axes_layout(false) { layerButtonsBox = new QHBoxLayout(); waterfallBox = new QHBoxLayout(); @@ -330,13 +331,19 @@ double w_ratio = (double)size.width()/(double)oldSize.width(); double h_ratio = (double)(size.height())/(double)(oldSize.height()); - foreach (Graph *g, graphsList){ - int gx = qRound(g->x()*w_ratio); - int gy = qRound(g->y()*h_ratio); - int gw = qRound(g->width()*w_ratio); - int gh = qRound(g->height()*h_ratio); - g->setGeometry(gx, gy, gw, gh); + if (d_common_axes_layout) + arrangeLayers(false, false); + else { + foreach (Graph *g, graphsList){ + int gx = qRound(g->x()*w_ratio); + int gy = qRound(g->y()*h_ratio); + int gw = qRound(g->width()*w_ratio); + int gh = qRound(g->height()*h_ratio); + g->setGeometry(gx, gy, gw, gh); + } + } + foreach (Graph *g, graphsList){ if (g->autoscaleFonts()) g->scaleFonts(h_ratio); } @@ -660,7 +667,7 @@ if (aux){ QwtScaleWidget *scale = aux->axisWidget(QwtPlot::yRight); if (scale){ - scale->setTitle(QString::null); + aux->setAxisTitleString(QwtPlot::yRight, QString::null); QwtScaleDraw *sd = aux->axisScaleDraw(QwtPlot::yRight); if (sd) sd->enableComponent(QwtAbstractScaleDraw::Labels, false); @@ -674,7 +681,7 @@ if (aux){ QwtScaleWidget *scale = aux->axisWidget(QwtPlot::xBottom); if (scale){ - scale->setTitle(QString::null); + aux->setAxisTitleString(QwtPlot::xBottom, QString::null); QwtScaleDraw *sd = aux->axisScaleDraw(QwtPlot::xBottom); if (sd) sd->enableComponent(QwtAbstractScaleDraw::Labels, false); @@ -697,7 +704,7 @@ if (verticalAxis && col){ QwtScaleWidget *scale = g->axisWidget(QwtPlot::yLeft); if (scale){ - scale->setTitle(QString::null); + g->setAxisTitleString(QwtPlot::yLeft, QString::null); QwtScaleDraw *sd = g->axisScaleDraw(QwtPlot::yLeft); if (sd) sd->enableComponent(QwtAbstractScaleDraw::Labels, false); @@ -707,7 +714,7 @@ if (horizontalAxis && row){ QwtScaleWidget *scale = g->axisWidget(QwtPlot::xTop); if (scale){ - scale->setTitle(QString::null); + g->setAxisTitleString(QwtPlot::xTop, QString::null); QwtScaleDraw *sd = g->axisScaleDraw(QwtPlot::xTop); if (sd) sd->enableComponent(QwtAbstractScaleDraw::Labels, false); @@ -925,7 +932,7 @@ image.save(fileName, 0, quality); } -void MultiLayer::exportImage(QTextDocument *document, int quality, bool transparent, +void MultiLayer::exportImage(QTextDocument *document, int, bool transparent, int dpi, const QSizeF& customSize, int unit, double fontsFactor) { if (!document) @@ -1036,7 +1043,7 @@ QRect r = g->geometry(); r.setSize(QSize(int(r.width()*wfactor), int(r.height()*hfactor))); r.moveTo(int(r.x()*wfactor), int(r.y()*hfactor)); - g->print(&paint, r); + g->print(&paint, r); } } else { printer.setPaperSize(QSizeF(d_canvas->width(), d_canvas->height()), QPrinter::DevicePixel); @@ -1150,25 +1157,27 @@ foreach (Graph* g, graphsList) g->deselectMarker(); -#ifdef EMF_OUTPUT - if (OpenClipboard(0)){ - EmptyClipboard(); - - QString path = QDir::tempPath(); - QString name = path + "/" + "qtiplot_clipboard.emf"; - name = QDir::cleanPath(name); - - exportEMF(name); - HENHMETAFILE handle = GetEnhMetaFile(name.toStdWString().c_str()); - - SetClipboardData(CF_ENHMETAFILE, handle); - CloseClipboard(); - QFile::remove(name); - } +#ifdef Q_OS_WIN + #ifdef EMF_OUTPUT + if (OpenClipboard(0)){ + EmptyClipboard(); + + QString path = QDir::tempPath(); + QString name = path + "/" + "qtiplot_clipboard.emf"; + name = QDir::cleanPath(name); + + exportEMF(name); + HENHMETAFILE handle = GetEnhMetaFile(name.toStdWString().c_str()); + + SetClipboardData(CF_ENHMETAFILE, handle); + CloseClipboard(); + QFile::remove(name); + } + #else + QApplication::clipboard()->setImage(canvasPixmap().convertToImage()); + #endif #else - QPixmap pic = canvasPixmap(); - QImage image = pic.convertToImage(); - QApplication::clipboard()->setImage(image); + QApplication::clipboard()->setImage(canvasPixmap().convertToImage()); #endif if (selectionOn) @@ -1343,7 +1352,7 @@ d_canvas_size = d_canvas->size(); } else if (e->type() == QEvent::MouseButtonPress && object == (QObject *)d_canvas){ const QMouseEvent *me = (const QMouseEvent *)e; - if (me->button() == Qt::RightButton) + if (me->button() == Qt::RightButton || me->button() == Qt::MidButton) return QMdiSubWindow::eventFilter(object, e); if (d_is_waterfall_plot) @@ -1513,6 +1522,7 @@ t << "LayerCanvasSize\t"+QString::number(l_canvas_width)+"\t"+QString::number(l_canvas_height)+"\n"; t << "Alignement\t"+QString::number(hor_align)+"\t"+QString::number(vert_align)+"\n"; t << "" + QString::number(d_align_policy) + "\n"; + t << "" + QString::number(d_common_axes_layout) + "\n"; foreach (Graph *g, graphsList) t << g->saveToString(saveAsTemplate); diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/MultiLayer.h qtiplot-0.9.8.2/qtiplot/src/plot2D/MultiLayer.h --- qtiplot-0.9.8/qtiplot/src/plot2D/MultiLayer.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/MultiLayer.h 2010-12-01 21:48:36.000000000 +0000 @@ -121,6 +121,8 @@ void setCommonLayerAxes(bool verticalAxis = true, bool horizontalAxis = true); void linkXLayerAxes(bool link = true); bool hasLinkedXLayerAxes(){return d_link_x_axes;}; + bool hasCommonAxes(){return d_common_axes_layout;}; + void setCommonAxesLayout(bool on){d_common_axes_layout = on;}; public slots: Graph* addLayer(int x = 0, int y = 0, int width = 0, int height = 0, bool = false); @@ -277,6 +279,7 @@ AlignPolicy d_align_policy; SizePolicy d_size_policy; bool d_link_x_axes; + bool d_common_axes_layout; }; //! Button with layer number diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/PlotCurve.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/PlotCurve.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/PlotCurve.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/PlotCurve.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -676,11 +676,17 @@ range.from = from; range.to = size - 1; d_data_ranges.push_back(range); - from = size; } } + if (d_data_ranges.size() && from < size){ + DataRange range; + range.from = from; + range.to = size - 1; + d_data_ranges.push_back(range); + } + X.resize(size); Y.resize(size); @@ -716,6 +722,8 @@ enableSpeedMode(); + setRenderHint(QwtPlotItem::RenderAntialiased, g->isCurveAntialiasingEnabled(this)); + if (!d_labels_list.isEmpty()){ ((Graph*)plot())->updatePlot(); loadLabels(); diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/QwtBarCurve.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/QwtBarCurve.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/QwtBarCurve.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/QwtBarCurve.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -30,12 +30,13 @@ #include "Graph.h" #include #include +#include QwtBarCurve::QwtBarCurve(BarStyle style, Table *t, const QString& xColName, const QString& name, int startRow, int endRow): DataCurve(t, xColName, name, startRow, endRow), bar_offset(0), bar_gap(20), - d_white_out(false) + d_is_stacked(false) { bar_style = style; @@ -78,9 +79,9 @@ double bar_width = 0; if (bar_style == Vertical) - ref= yMap.transform(1e-100); //smalest positive value for log scales + ref = yMap.transform(1e-100); //smalest positive value for log scales else - ref= xMap.transform(1e-100); + ref = xMap.transform(1e-100); if (bar_style == Vertical) { @@ -105,52 +106,122 @@ bar_width = dy*(1-bar_gap*0.01); } + QList stack = stackedCurvesList(); + const int half_width = int((0.5-bar_offset*0.01)*bar_width); int bw1 = int(bar_width) + 1; for (int i = from; i <= to; i++) { const int px = xMap.transform(x(i)); - const int py = yMap.transform(y(i)); + const int py = yMap.transform(y(i)); QRect rect = QRect(); if (bar_style == Vertical){ if (y(i) < 0) - rect = QRect(px-half_width, ref, bw1, (py-ref)); - else - rect = QRect(px-half_width, py, bw1, (ref-py+1)); + rect = QRect(px - half_width, ref, bw1, (py - ref)); + else { + if (stack.isEmpty()) + rect = QRect(px - half_width, py, bw1, (ref - py + 1)); + else { + double sOffset = stackOffset(i, stack); + rect = QRect(px - half_width, yMap.transform(y(i) + sOffset), bw1, 1); + rect.setBottom(yMap.transform(sOffset)); + } + } } else { if (x(i) < 0) - rect = QRect(px, py-half_width, (ref-px), bw1); - else - rect = QRect(ref, py-half_width, (px-ref), bw1); + rect = QRect(px, py - half_width, (ref - px), bw1); + else { + if (stack.isEmpty()) + rect = QRect(ref, py - half_width, (px - ref), bw1); + else { + double sOffset = stackOffset(i, stack); + rect = QRect(xMap.transform(sOffset), py - half_width, 1, bw1); + rect.setRight(xMap.transform(x(i) + sOffset)); + } + } } - if (d_white_out) + if (d_is_stacked) painter->fillRect(rect, Qt::white); painter->drawRect(rect); } painter->restore(); } -QwtDoubleRect QwtBarCurve::boundingRect() const +QList QwtBarCurve::stackedCurvesList() const +{ + QList stack; + Graph *g = (Graph *)plot(); + if (!g) + return stack; + + for (int i = 0; i < g->curveCount(); i++){ + DataCurve *c = g->dataCurve(i); + if (!c || c == this) + continue; + + if (c->type() != Graph::VerticalBars && c->type() != Graph::HorizontalBars) + continue; + + QwtBarCurve *bc = (QwtBarCurve *)c; + if (bc->isStacked() && bc->orientation() == bar_style && + g->curveIndex((QwtPlotItem *)bc) < g->curveIndex((QwtPlotItem *)this)) + stack << bc; + } + return stack; +} + +double QwtBarCurve::stackOffset(int i, QList stack) const { -QwtDoubleRect rect = QwtPlotCurve::boundingRect(); -double n= (double)dataSize(); + double n = (double)dataSize(); + if (i < 0 || i >= n) + return 0.0; -if (bar_style == Vertical) - { - double dx=(rect.right()-rect.left())/n; - rect.setLeft(rect.left()-dx); - rect.setRight(rect.right()+dx); + double stackOffset = 0.0; + if (bar_style == Vertical){ + foreach(QwtBarCurve *bc, stack) + stackOffset += bc->y(i); + } else { + foreach(QwtBarCurve *bc, stack) + stackOffset += bc->x(i); } -else - { - double dy=(rect.bottom()-rect.top())/n; - rect.setTop(rect.top()-dy); - rect.setBottom(rect.bottom()+dy); + return stackOffset; +} + +QwtDoubleRect QwtBarCurve::boundingRect() const +{ + QwtDoubleRect rect = QwtPlotCurve::boundingRect(); + + double n = (double)dataSize(); + + if (bar_style == Vertical){ + double dx = (rect.right() - rect.left())/n; + rect.setLeft(rect.left() - dx); + rect.setRight(rect.right() + dx); + } else { + double dy = (rect.bottom() - rect.top())/n; + rect.setTop(rect.top() - dy); + rect.setBottom(rect.bottom() + dy); } -return rect; + if (!d_is_stacked) + return rect; + + QList stack = stackedCurvesList(); + if (!stack.isEmpty()){ + double maxStackOffset = 0.0; + for (int i = 0; i < n; i++){ + const double soffset = stackOffset(i, stack); + if (soffset > maxStackOffset) + maxStackOffset = soffset; + } + if (bar_style == Vertical) + rect.setBottom(rect.bottom() + maxStackOffset); + else + rect.setRight(rect.right() + maxStackOffset); + } + return rect; } void QwtBarCurve::setGap (int gap) @@ -215,7 +286,7 @@ QString QwtBarCurve::saveToString() { - if (d_white_out) + if (d_is_stacked) return "1\n"; return QString::null; } diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/QwtBarCurve.h qtiplot-0.9.8.2/qtiplot/src/plot2D/QwtBarCurve.h --- qtiplot-0.9.8/qtiplot/src/plot2D/QwtBarCurve.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/QwtBarCurve.h 2010-12-01 21:48:36.000000000 +0000 @@ -52,7 +52,9 @@ int offset() const {return bar_offset;}; double dataOffset(); - void setWhiteOut(bool on = true){d_white_out = on;}; + + bool isStacked(){return d_is_stacked;}; + void setStacked(bool on = true){d_is_stacked = on;}; virtual QString saveToString(); @@ -60,9 +62,12 @@ virtual void draw(QPainter *painter,const QwtScaleMap &xMap, const QwtScaleMap &yMap, int from, int to) const; + QList stackedCurvesList() const; + double stackOffset(int i, QList stack) const; + int bar_offset; int bar_gap; - bool d_white_out; + bool d_is_stacked; BarStyle bar_style; }; diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/RectangleWidget.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/RectangleWidget.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/RectangleWidget.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/RectangleWidget.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -41,6 +41,7 @@ { setFrameStyle(Line); setSize(100, 50); + setObjectName(tr("Rectangle")); } void RectangleWidget::clone(RectangleWidget* r) diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/ScaleDraw.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/ScaleDraw.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/ScaleDraw.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/ScaleDraw.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -147,7 +147,7 @@ if (list[0] == "1") return "10" + s + ""; - else{ + else { if (d_numeric_format == SuperscriptsGER) return list[0] + "10" + s + ""; else diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/ScaleEngine.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/ScaleEngine.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/ScaleEngine.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/ScaleEngine.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -41,12 +41,12 @@ double ScaleTransformation::invXForm(double p, double p1, double p2, double s1, double s2) const { - if (!d_engine->hasBreak()){ - QwtScaleTransformation *tr = newScaleTransformation(); - double res = tr->invXForm(p, p1, p2, s1, s2); - delete tr; - return res; - } + if (!d_engine->hasBreak()){ + QwtScaleTransformation *tr = newScaleTransformation(); + double res = tr->invXForm(p, p1, p2, s1, s2); + delete tr; + return res; + } const int d_break_space = d_engine->breakWidth(); const double lb = d_engine->axisBreakLeft(); @@ -103,7 +103,8 @@ double ScaleTransformation::xForm(double s, double s1, double s2, double p1, double p2) const { - if (d_engine->type() == ScaleTransformation::Log10 && s <= 0.0){ + if ((d_engine->type() == ScaleTransformation::Log10 || d_engine->type() == ScaleTransformation::Ln || + d_engine->type() == ScaleTransformation::Log2) && s <= 0.0){ if (p1 < p2){ if (d_engine->testAttribute(QwtScaleEngine::Inverted)) return INT_MAX; diff -Nru qtiplot-0.9.8/qtiplot/src/plot2D/TexWidget.cpp qtiplot-0.9.8.2/qtiplot/src/plot2D/TexWidget.cpp --- qtiplot-0.9.8/qtiplot/src/plot2D/TexWidget.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot2D/TexWidget.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -40,6 +40,7 @@ d_formula(s), d_margin(5) { + setObjectName(tr("Equation")); if (!d_pix.isNull()) setSize(QSize(pix.width() + 2*d_margin, pix.height() + 2*d_margin)); } diff -Nru qtiplot-0.9.8/qtiplot/src/plot3D/Graph3D.cpp qtiplot-0.9.8.2/qtiplot/src/plot3D/Graph3D.cpp --- qtiplot-0.9.8/qtiplot/src/plot3D/Graph3D.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot3D/Graph3D.cpp 2010-12-01 21:48:36.000000000 +0000 @@ -607,7 +607,7 @@ } void Graph3D::loadData(Table* table, int xCol, int yCol, int zCol, - double xl, double xr, double yl, double yr, double zl, double zr) + double xl, double xr, double yl, double yr, double zl, double zr, int axis) { if (!table || xCol < 0 || yCol < 0 || zCol < 0) return; @@ -632,14 +632,16 @@ double y = table->cell(i, yCol); double z = table->cell(i, zCol); - if (check_limits && (x < xl || x > xr || y < yl || y > yr || z < zl || z > zr)) + if (check_limits && + ((axis < 0 && (x < xl || x > xr || y < yl || y > yr || z < zl || z > zr)) || + (axis == 0 && (x < xl || x > xr)) || (axis == 1 && (y < yl || y > yr)) || (axis == 2 && (z < zl || z > zr)))) continue; data.push_back (Triple(x, y, z)); Qwt3D::Cell cell; cell.push_back(index); if (index > 0) - cell.push_back(index-1); + cell.push_back(index - 1); cells.push_back (cell); index ++; } @@ -1325,30 +1327,26 @@ double majorTicLength, minorTicLength; sp->coordinates()->axes[axis].ticLength(majorTicLength, minorTicLength); - switch(axis) - { - case 0: - if (xMin != start || xMax != end) - { - xMin = start; - xMax = end; - } + switch(axis){ + case 0: + if (xMin != start || xMax != end){ + xMin = start; + xMax = end; + } break; - case 1: - if (yMin != start || yMax != end) - { - yMin = start; - yMax = end; - } - axis1 = Y1, axis2 = Y2, axis3 = Y3, axis4 = Y4; + case 1: + if (yMin != start || yMax != end){ + yMin = start; + yMax = end; + } + axis1 = Y1, axis2 = Y2, axis3 = Y3, axis4 = Y4; break; - case 2: - if (zMin != start || zMax != end) - { - zMin = start; - zMax = end; - } - axis1 = Z1, axis2 = Z2, axis3 = Z3, axis4 = Z4; + case 2: + if (zMin != start || zMax != end){ + zMin = start; + zMax = end; + } + axis1 = Z1, axis2 = Z2, axis3 = Z3, axis4 = Z4; break; } @@ -1361,7 +1359,7 @@ d_surface->restrictRange(ParallelEpiped(Triple(xMin, yMin, zMin), Triple(xMax, yMax, zMax))); d_surface->create(); } else - setScales(xMin, xMax, yMin, yMax, zMin, zMax); + setScales(xMin, xMax, yMin, yMax, zMin, zMax, axis); sp->coordinates()->axes[axis1].setLimits(start, end); sp->coordinates()->axes[axis2].setLimits(start, end); @@ -1400,7 +1398,7 @@ emit modified(); } -void Graph3D::setScales(double xl, double xr, double yl, double yr, double zl, double zr) +void Graph3D::setScales(double xl, double xr, double yl, double yr, double zl, double zr, int axis) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); @@ -1434,10 +1432,10 @@ if (name.endsWith("(Z)",true)){ pos = name.find(",",posX); posX = name.find("(",pos); - QString zColName = name.mid(pos+1,posX-pos-1); + QString zColName = name.mid(pos + 1, posX - pos - 1); int zCol = d_table->colIndex(zColName); - loadData(d_table, xCol, yCol, zCol, xl, xr, yl, yr, zl, zr); + loadData(d_table, xCol, yCol, zCol, xl, xr, yl, yr, zl, zr, axis); } else if (name.endsWith("(Y)",true)) updateScales(xl, xr, yl, yr, zl, zr, xCol, yCol); } diff -Nru qtiplot-0.9.8/qtiplot/src/plot3D/Graph3D.h qtiplot-0.9.8.2/qtiplot/src/plot3D/Graph3D.h --- qtiplot-0.9.8/qtiplot/src/plot3D/Graph3D.h 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/plot3D/Graph3D.h 2010-12-01 21:48:36.000000000 +0000 @@ -101,7 +101,7 @@ double xl, double xr, double yl, double yr, double zl, double zr); void addData(Table* table, int xCol, int yCol, int zCol, int type = 0); void loadData(Table* table, int xCol, int yCol, int zCol, - double xl=0.0, double xr=0.0, double yl=0.0, double yr=0.0, double zl=0.0, double zr=0.0); + double xl=0.0, double xr=0.0, double yl=0.0, double yr=0.0, double zl=0.0, double zr=0.0, int axis = -1); PlotType tablePlotType(){return d_table_plot_type;}; @@ -179,7 +179,7 @@ int axisNumericPrecision(int axis); void setAxisNumericFormat(int axis, int format, int precision); - void setScales(double xl, double xr, double yl, double yr, double zl, double zr); + void setScales(double xl, double xr, double yl, double yr, double zl, double zr, int axis = -1); void updateScales(double xl, double xr, double yl, double yr, double zl, double zr, int xcol, int ycol); void updateScalesFromMatrix(double xl,double xr,double yl,double yr,double zl,double zr); diff -Nru qtiplot-0.9.8/qtiplot/src/scripting/qti.sip qtiplot-0.9.8.2/qtiplot/src/scripting/qti.sip --- qtiplot-0.9.8/qtiplot/src/scripting/qti.sip 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/scripting/qti.sip 2010-12-01 21:48:37.000000000 +0000 @@ -355,10 +355,9 @@ %MethodCode sipIsErr=0; CHECK_TABLE_COL(a0); - if (sipIsErr==0) - { + if (sipIsErr == 0){ QStringList list; - list << "_" + sipCpp->colLabel(col); + list << sipCpp->colName(col); sipCpp->removeCol(list); } %End @@ -1882,7 +1881,7 @@ void setYAxisTickLength(double majorLength, double minorLength); void setZAxisTickLength(double majorLength, double minorLength); - void setScales(double xl, double xr, double yl, double yr, double zl, double zr); + void setScales(double xl, double xr, double yl, double yr, double zl, double zr, int axis = -1); int axisNumericFormat(int axis); int axisNumericPrecision(int axis); @@ -2067,6 +2066,7 @@ Table* matrixToTable(Matrix* m, MatrixToTableConversion = Direct); QTextEdit *resultsLog(); + void displayInfo(const QString& text); QString stemPlot(Table *t, const QString& colName, int power = 1001, int startRow = 0, int endRow = -1); QMdiArea* workspace(); diff -Nru qtiplot-0.9.8/qtiplot/src/table/SortDialog.cpp qtiplot-0.9.8.2/qtiplot/src/table/SortDialog.cpp --- qtiplot-0.9.8/qtiplot/src/table/SortDialog.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/table/SortDialog.cpp 2010-12-01 21:48:37.000000000 +0000 @@ -54,8 +54,8 @@ topLayout->addWidget( new QLabel( tr("Order")), 1, 0 ); boxOrder = new QComboBox(); - boxOrder->addItem(tr("Ascending")); - boxOrder->addItem(tr("Descending")); + boxOrder->addItem(QIcon(":/sort_ascending.png"), tr("Ascending")); + boxOrder->addItem(QIcon(":/sort_descending.png"), tr("Descending")); topLayout->addWidget(boxOrder, 1, 1 ); topLayout->addWidget( new QLabel(tr("Leading column")), 2, 0 ); diff -Nru qtiplot-0.9.8/qtiplot/src/table/Table.cpp qtiplot-0.9.8.2/qtiplot/src/table/Table.cpp --- qtiplot-0.9.8/qtiplot/src/table/Table.cpp 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/src/table/Table.cpp 2010-12-01 21:48:37.000000000 +0000 @@ -965,7 +965,7 @@ if (col<0 || col >= col_label.count()) return QString(); - return QString(this->objectName())+"_"+col_label[col]; + return QString(this->objectName()) + "_" + col_label[col]; } void Table::setColName(int col, const QString& text, bool enumerateRight, bool warn) @@ -1387,13 +1387,16 @@ if (sel.isEmpty ()){ int col = d_table->currentColumn(); + if (col < 0 || d_table->currentRow() < 0) + return; + QString name = colName(col); if (d_table->isColumnReadOnly(col)){ QMessageBox::warning(this, tr("QtiPlot - Error"), tr("Column '%1' is read only!").arg(name)); return; } - d_table->setText(d_table->currentRow (), col, ""); + d_table->setText(d_table->currentRow(), col, ""); emit modifiedData(this, name); } else { QStringList lstReadOnly; @@ -1616,14 +1619,13 @@ void Table::removeCol() { - QStringList list=selectedColumns(); - removeCol(list); + removeCol(selectedColumns()); } void Table::removeCol(const QStringList& list) { QStringList lstReadOnly; - for (int i=0; iisColumnReadOnly(col)) @@ -1632,11 +1634,11 @@ if (lstReadOnly.count() > 0){ QMessageBox::warning(this, tr("QtiPlot - Error"), - tr("The folowing columns")+":\n"+ lstReadOnly.join("\n") + "\n"+ tr("are read only!")); + tr("The folowing columns") + ":\n"+ lstReadOnly.join("\n") + "\n"+ tr("are read only!")); } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - for (int i=0; i= 0){ @@ -1796,10 +1798,16 @@ QVarLengthArray valid_cell(rows); QVarLengthArray data_double(rows); QVarLengthArray strings(rows); + QString format = col_format[leadcol]; for (int j = 0; j text(j, leadcol).isEmpty()){ - strings[non_empty_cells] = d_table->text(j, leadcol); - data_double[non_empty_cells] = cell(j, leadcol); + strings[non_empty_cells] = d_table->text(j, leadcol); + + if (columnType(leadcol) == Table::Date) + data_double[non_empty_cells] = (double)QDate::fromString (d_table->text(j, leadcol), format).toJulianDay(); + else if (columnType(leadcol) == Table::Numeric) + data_double[non_empty_cells] = cell(j, leadcol); + valid_cell[non_empty_cells] = j; non_empty_cells++; } @@ -1823,14 +1831,14 @@ else gsl_sort_index(p, data_double.data(), 1, non_empty_cells); - blockSignals(true); + setAutoUpdateValues(false); for(int i = 0; i < cols; i++){// Since we have the permutation index, sort all the columns int col = colIndex(s[i]); if (d_table->isColumnReadOnly(col)) continue; - if (columnType(col) == Text){ + if (columnType(col) == Text){ for (int j = 0; jsetText(valid_cell[j], col, strings[p[non_empty_cells - j - 1]]); - } else { + } else if (columnType(col) == Date) { + QString format = col_format[col]; + for (int j = 0; jtext(valid_cell[j], col), format).toJulianDay(); + if(!order) + for (int j=0; jsetText(valid_cell[j], col, QDate::fromJulianDay(data_double[p[j]]).toString(format)); + else + for (int j=0; jsetText(valid_cell[j], col, QDate::fromJulianDay(data_double[p[non_empty_cells-j-1]]).toString(format)); + } else if (columnType(col) == Numeric) { for (int j = 0; jisColumnReadOnly(col)) @@ -1866,6 +1882,7 @@ emit modifiedData(this, colName(col)); } emit modifiedWindow(this); + setAutoUpdateValues(applicationWindow()->autoUpdateTableValues()); } void Table::sortColumn(int col, int order) @@ -1881,12 +1898,16 @@ QVarLengthArray valid_cell(rows); QVarLengthArray r(rows); QStringList text_cells; + QString format = col_format[col]; for (int i = 0; i text(i, col).isEmpty()){ if (columnType(col) == Table::Text) text_cells << d_table->text(i, col); - else + else if (columnType(col) == Table::Date) + r[non_empty_cells] = (double)QDate::fromString (d_table->text(i, col), format).toJulianDay(); + else if (columnType(col) == Table::Numeric) r[non_empty_cells] = cell(i, col); + valid_cell[non_empty_cells] = i; non_empty_cells++; } @@ -1914,17 +1935,25 @@ for (int i=0; isetText(valid_cell[i], col, text_cells[non_empty_cells-i-1]); } - } else { + } else if (columnType(col) == Table::Date){ + if (!order) { + for (int i=0; isetText(valid_cell[i], col, QDate::fromJulianDay(r[i]).toString(format)); + } else { + for (int i=0; isetText(valid_cell[i], col, QDate::fromJulianDay(r[non_empty_cells-i-1]).toString(format)); + } + } else if (columnType(col) == Table::Numeric){ int prec; char f; columnNumericFormat(col, &f, &prec); - if (!order) { - for (int i=0; isetText(valid_cell[i], col, locale().toString(r[i], f, prec)); - } else { - for (int i=0; isetText(valid_cell[i], col, locale().toString(r[non_empty_cells-i-1], f, prec)); - } + if (!order) { + for (int i=0; isetText(valid_cell[i], col, locale().toString(r[i], f, prec)); + } else { + for (int i=0; isetText(valid_cell[i], col, locale().toString(r[non_empty_cells-i-1], f, prec)); + } } blockSignals(false); @@ -3223,7 +3252,9 @@ if (me->modifiers() == Qt::ShiftModifier){ int col = hheader->sectionAt (me->pos().x() + hheader->offset()); - for (int i = selectedCol; i <= col; i++) + int start = QMIN(col, selectedCol); + int end = QMAX(col, selectedCol); + for (int i = start; i <= end; i++) d_table->selectColumn(i); return true; } @@ -3474,10 +3505,20 @@ void Table::notifyChanges() { - for (int i=0; inumCols(); i++) - emit modifiedData(this, colName(i)); + bool updateValues = applicationWindow()->autoUpdateTableValues(); + if (updateValues) + setAutoUpdateValues(false); + for(int i = 0; i < d_table->numCols(); i++){ + if (d_table->isColumnReadOnly(i)) + continue; + + emit modifiedData(this, colName(i)); + } emit modifiedWindow(this); + + if (updateValues) + setAutoUpdateValues(true); } void Table::notifyChanges(const QString& colName) @@ -3693,7 +3734,10 @@ for(int i = 0; inumCols(); i++){ if (d_table->isColumnHidden(i)) d_table->showColumn(i); + if (!d_table->columnWidth(i)) + d_table->adjustColumn(i); } + emit modifiedWindow(this); } QString Table::sizeToString() diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_cn.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_cn.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_cn.ts 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_cn.ts 2010-12-01 21:48:35.000000000 +0000 @@ -3094,12 +3094,12 @@ 文件%1只包含%2表单,操作中止! - + Sheet %1 is empty, operation aborted! %1表单为空,操作中止! - + sheet 表单 @@ -3109,244 +3109,244 @@ - - + + QtiPlot - untitled QtiPlot - 未命名 - + Project Explorer 项目浏览器 - - + + Folder 文件夹 - + UNTITLED 未命名 - + Name 名称 - - - - - - - - + + + + + + + + Type 类型 - + View 视图 - - - - + + + + Size 大小 - - - - - + + + + + Created 创建 - - + + Label 标签 - + Results Log 结果日志 - + Scripting Console 脚本控制台 - + Undo Stack 撤销堆栈 - + &Next next window 下一个窗口(&N) - + F5 next window shortcut F5 - + &Previous previous window 上一个窗口(&P) - + F6 previous window shortcut F6 - - + + File 文件 - - + + Edit 编辑 - - + + Plot 绘图 - + Disable &Tools 禁用工具(&T) - - + + &Zoom In 放大(&Z) - - + + Ctrl++ Ctrl++ - + &Zoom Out 缩小(&Z) - - + + Ctrl+- Ctrl+- - - + + &Data Reader 数据读取器(&D) - - + + CTRL+D CTRL+D - - + + &Select Data Range 选择数据范围(&S) - - + + ALT+S ALT+S - - + + S&creen Reader 屏幕读取器(&c) - - + + &Draw Data Points 画数据点(&D) - - + + &Move Data Points... 移动数据点(&M)... - - + + Ctrl+ALT+M Ctrl+ALT+M - - + + Remove &Bad Data Points... 移除坏数据点(&B)... - - + + Alt+B Alt+B - - + + Add E&quation 添加公式(&q) - - + + ALT+Q ALT+Q - - + + Add &Text 添加文本(&T) @@ -3355,718 +3355,721 @@ ALT+T - - + + Draw &Arrow 画箭头(&A) - - + + CTRL+ALT+A CTRL+ALT+A - - + + Draw &Line 画线(&L) - - + + CTRL+ALT+L CTRL+ALT+L - - + + Add &Rectangle 添加矩形(&R) - - + + CTRL+ALT+R CTRL+ALT+R - - + + Add &Ellipse 添加椭圆(&E) - - + + CTRL+ALT+E CTRL+ALT+E - - - - - - - - + + + + + + + + Table 表格 - - - - - - - - + + + + + + + + Column - - + + Data Display 数据显示 - - + + Matrix Plot 矩阵绘图 - - - + + + Format 格式 - + QtiPlot - Script Window QtiPlot - 脚本窗口 - - + + 3D Surface 三维曲面图 - - + + &Recent Projects 最近项目(&R) - + &File 文件(&F) - + &New 新建(&N) - + &Export Graph 导出绘图(&E) - + &Edit 编辑(&E) - + &View 视图(&V) - + &Graph 绘图(&G) - - + + 3D &Plot 三维绘图(&P) - + &Matrix 矩阵(&M) - - - + + + &Plot 绘图(&P) - - + + &Data 数据(&D) - - - + + + &Normalize 归一化(&N) - - + + &Fill Columns With 填充列(&F) - - - + + + &Table 表格(&T) - + &Smooth 平滑(&S) - + &FFT filter FFT滤波器(&F) - + Fit E&xponential Decay 指数衰减拟合(&x) - + Fit &Multi-peak 多峰值拟合(&M) - + &Analysis 分析(&A) - + F&ormat 格式(&o) - + &Scripting 脚本(&S) - + &Windows 窗口(&W) - - - + + + &Help 帮助(&H) - + Set Columns &As 设置列(&A) - - + + &Read-only 只读(&R) - - + + Read/&Write 读写(&W) - - - + + + Special Line/Symb&ol 特殊线/符号(&o) - - - + + + Statistical &Graphs 统计图(&G) - - + + Pa&nel 面板(&n) - + 3&D Plot 三维绘图(&D) - + Empty Stack 空堆栈 - - - - - - - - + + + + + + + + QtiPlot - Plot error QtiPlot - 绘图错误 - - - - - + + + + + You must select exactly one column for plotting! 你必须选择一列来绘图! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QtiPlot - Error QtiPlot - 错误 - + Please select a column to plot! 请选择一列来绘图! - - + + Please select four columns for this operation! 请为这个操作选择四列! - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QtiPlot - Warning QtiPlot - 警告 - - + + <h4>There are no tables available in this project.</h4><p><h4>Please create a table and try again!</h4> <h4>项目中没有有效的表格。</h4><p><h4>请创建表格后重试!</h4> - + There are no available columns with plot designation set to Z! 绘图指示设置为Z的情况下没有有效的列! - - - + + + QtiPlot - Choose data set QtiPlot - 选择数据集 - - - - - - - - + + + + + + + + Matrix 矩阵 - - + + QtiPlot - Choose matrix to plot QtiPlot - 选择需要绘制的矩阵 - + <h4>There are no matrices available in this project.</h4><p><h4>Please create a matrix and try again!</h4> <h4>项目中没有有效的矩阵。</h4><p><h4>请创建矩阵后重试!</h4> - - - - - - - - - - - - - + + + + + + + + + + + + + Graph 绘图 - - - + + + + QtiPlot - Export error QtiPlot - 导出错误 - + + Could not write to file: <br><h4> %1 </h4><p>Please verify that you have the right to write to this location! 无法写入文件: <br><h4> %1 </h4><p>请保证你在这个位置有写权限! - + Images 图像 - + QtiPlot - Import image from file QtiPlot - 从文件导入图像 - + QtiPlot - Load image from file QtiPlot - 从文件中加载图像 - - - - + + + + Please select a Y column to plot! 请选择需要绘制的Y列! - - + + QtiPlot - Renamed Window QtiPlot - 重名名窗口 - - + + The table '%1' already exists. It has been renamed '%2'. 表格'%1'已经存在。重名名为'%2'。 - - - + + + Notes 笔记 - + Set Image Mode 设置图像模式 - + Set Data Mode 设置数据模式 - + Show X/Y 显示X/Y - + Show Column/Row 显示列/行 - + Set Default Palette 设置默认调色板 - + Set Gray Scale Palette 设置灰阶调色板 - + Set Rainbow Palette 设置彩色调色板 - + Determinant of 行列式 - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + <h4>There are no plot layers available in this window.</h4><p><h4>Please add a layer and try again!</h4> <h4>在此窗口没有有效的绘图图层。</h4><p><h4>请添加一个图层后重试!</h4> - - + + There are no curves available on this plot! 在此绘图上没有有效的曲线! - - - - - - - - - - - + + + + + + + + + + + This functionality is not available for pie plots! 这个功能在饼状图上无效! - + QtiPlot - Error bars error QtiPlot - 误差棒错误 - - + + This feature is not available for user defined function curves! 这个功能对于用户自定义函数曲线无效! - + The selected columns have different numbers of rows! 选中的列行数不同! - + The selected error column is empty! 选中的误差列为空! - - - - - - - + + + + + + + QtiPlot - File openning error QtiPlot - 文件打开错误 - + The file: <b>%1</b> is the current file! 文件<b>%1</b>是当前文件! - - - - + + + + The file: <b>%1</b> doesn't exist! 文件:<b>%1</b>不存在! - - + + You don't have the permission to open this file: <b>%1</b> 你没有权限打开<b>%1</b>文件 - - - - - - - - + + + + + + + + QtiPlot - File opening error QtiPlot - 文件打开错误 - + The file <b>%1</b> is corrupted, but there exists a backup copy.<br>Do you want to open the backup instead? 文件<b>%1</b>损坏,但是有一个备份。<br>你想打开备份的文件吗? - - + + The file: <b> %1 </b> was not created using QtiPlot! 文件<b> %1 </b>不是QtiPlot创建的! - + QtiPlot - File Open Error QtiPlot - 文件打开错误 - + The file: <b> %1 </b> <p>does not exist anymore!<p>It will be removed from the list. 文件<b> %1 </b> <p>不再存在!<p>它将被从列表中移除。 - + The file: <p><b> %1 </b><p> is the current file! 文件<p><b> %1 </b><p>是当前文件! - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + QtiPlot QtiPlot - + The file "%1" was created using "%2" as scripting language. Initializing support for this language FAILED; I'm using "%3" instead. @@ -4077,172 +4080,168 @@ 这个文件的很多部分可能不会被正确的显示。 - + Window 窗口 - + QtiPlot - Opening file QtiPlot - 打开文件 - + Script Error 脚本错误 - + QtiPlot - Scripting Error QtiPlot - 脚本错误 - + Scripting language "%1" failed to initialize. "%1"脚本语言初始化失败。 - + QtiPlot - Open Template File QtiPlot - 打开模板文件 - + The file: <b>%1</b> is not a QtiPlot template file! 文件<b>%1</b>不是一个QtiPlot模板文件! - + Table1 表格1 - + QtiPlot - Export Error QtiPlot - 导出错误 - + <h4>There are no plot layers available in this window!</h4> <h4>在此窗口没有有效的绘图图层。</h4> - + Choose a directory to export the graphs to 选择一个图像导出目录 - + Output format: 输出格式: - + Directory: 目录: - + There are no plot layers available in window <b>%1</b>.<br>Graph window not exported! 在<b>%1</b>窗口没有有效的绘图图层。<br>图像窗口没有导出! - - + + A file called: <p><b>%1</b><p>already exists. Do you want to overwrite it? <p><b>%1</b><p>文件已经存在。 你想覆盖吗? - - + + QtiPlot - Overwrite file? QtiPlot - 覆盖文件? - + Could not write to file: <br><h4>%1</h4><p>Please verify that you have the right to write to this location! 无法写入文件: <br><h4> %1</h4><p>请保证你在这个位置有写权限! - + Minimized 最小化 - - + + Maximized 最大化 - - - + QtiPlot project QtiPlot项目 - - - + Compressed QtiPlot project 压缩的QtiPlot项目 - + Save Project As 项目另存为 - + QtiPlot Matrix Template QtiPlot矩阵模板 - + QtiPlot 2D Graph Template QtiPlot 2D图像模板 - + QtiPlot Table Template QtiPlot表格模板 - + QtiPlot 3D Surface Template QtiPlot 3D曲面图模板 - + Save Window As Template 窗口另存为模板 - - + + Please enter a valid name! 请输入一个有效名称! - + The name you chose is not valid: only letters and digits are allowed! 你选择的名称无效:只允许字母和数字! - - - + + + Please choose another name! 请选择一个其它的名称! - + Name <b>%1</b> already exists! 名称<b>%1</b>已存在! - + Warning: for internal consistency reasons the underscore character is replaced with a minus sign. 警告:因为内部一致性原因,画线字符被减号替代。 @@ -4251,186 +4250,186 @@ 选择一个表格导出目录 - - + + &Yes 是(&Y) - - - + + + &All 全部(&A) - - - + + + &Cancel 取消(&C) - + Choose a filename to save under 选择一个文件来保存 - + QtiPlot - Enter rows number QtiPlot - 输入行号 - + Rows - - + + QtiPlot - Delete rows QtiPlot - 删除行 - + Start row 起始行 - + End row 终止行 - + QtiPlot - Enter columns number QtiPlot - 输入列号 - + Columns - - - - - - - - - - - - + + + + + + + + + + + + QtiPlot - Column selection error QtiPlot - 列选择错误 - - - - - + + + + + Please select a column first! 请先选择一列! - + Please select two columns for this operation! 请为此操作选择两列! - + Please select exactly one columns for this operation! 请为此操作选择恰好一列! - - + + Please select two columns for this operation: the first represents the signal and the second the response function! 请为此操作选择两列: 第一列代表信号第二列代表函数! - + QtiPlot - Row selection error QtiPlot - 行选择错误 - + Please select a row first! 请先选择一行! - - + + &Line 线状图(&L) - - - - + + + + &Scatter 散点图(&S) - - + + Line + S&ymbol 线状图+符号(&y) - - + + Vertical &Drop Lines 垂线图(&D) - - + + &Spline 齿形图(&S) - - + + &Vertical Steps 垂直阶梯图(&V) - - + + &Horizontal Steps 水平阶梯图(&H) - - - - + + + + &Columns 柱状图(&C) - - + + &Rows 水平柱状图(&R) - - + + &Area 面积图(&A) - - + + &Pie 饼状图(&P) @@ -4451,8 +4450,8 @@ 三维轨线(&T) - - + + &Histogram 直方图(&H) @@ -4461,132 +4460,132 @@ 堆叠直方图(&S) - - - - - + + + + + Cu&t 剪切(&t) - - - - - - - + + + + + + + &Copy 复制(&C) - - + + Past&e 粘贴(&e) - - - + + + &X &X - - - + + + &Y &Y - - - + + + &Z &Z - - - + + + &Label 标签(&L) - - + + &None 无(&N) - - - + + + X E&rror X误差(&r) - - - + + + Y &Error Y误差(&E) - - + + Set As 设置为 - + &Fill Column With 填充列(&F) - + &Column 列(&C) - - - - + + + + Clea&r 清除(&c) - - - - - + + + + + &Delete 删除(&D) - - + + &Insert 插入(&I) - + &Ascending 升序(&A) - + &Descending 降序(&D) - + Sort Colu&mn 按列排序(&m) @@ -4595,127 +4594,127 @@ 矢量图&XYXY - - - - + + + + &Vertical 2 Layers 垂直排列2图层(&V) - - - - + + + + &Horizontal 2 Layers 水平排列2图层(&H) - - - - + + + + &4 Layers 4图层(&4) - - - - + + + + &Stacked Layers 堆叠图层(&S) - + You need to select at least one Y column for this operation! 你需要为此操作选择至少一个Y列! - - - + + + You need at least two columns for this operation! 你需要为此操作选择至少两列! - + Y2 Axis Title Y2轴标题 - + Not available for empty 3D surface plots! 空的3D曲面图绘制是无效的! - + Set Display Range 设置显示范围 - - - - + + + + <h4>There are no plot layers available in this window.</h4> <h4>在此窗口没有有效的绘图图层。</h4> - - + + This will modify the data in the worksheets! Are you sure you want to continue? 这会改动工作表中的数据! 你确定你想继续吗? - - + + Continue 继续 - - + + Cancel 取消 - + Could not write to file: <h4>%1</h4><p>Please verify that you have the right to write to this location or that the file is not being used by another application! 无法写入文件: <h4> %1</h4><p>请保证你在这个位置有写权限或者这个文件不在被别的程序所使用! - + Sorry, there are no results to display! 对不起,没有结果可以显示! - + There are no plot layers available in this window! 在此窗口没有有效的绘图图层! - - - - + + + + There are no layers available on this plot. Operation aborted! 此绘图上没有有效图层。操作中止! - + QtiPlot - Insert image from file QtiPlot - 从文件插入图像 - + There are no plot layers available in this window. 在此窗口没有有效的绘图图层。 - + QtiPlot - Duplicate window error QtiPlot - 复制窗口错误 @@ -4724,270 +4723,268 @@ 此项目中没有有效窗口! - + QtiPlot - Duplicate error QtiPlot - 复制错误 - + Empty 3D surface plots cannot be duplicated! 空的3D曲面图不可复制! - - - + + + Released 发布 - + About QtiPlot 关于QtiPlot - + &Translate 翻译(&T) - + Vie&w 视图(&w) - + &Palette 调色板(&P) - + &Convert to Spreadsheet 转换为电子表格(&C) - + &Folders 文件夹(&F) - + &Cascade 层叠(&C) - + &Tile 平铺(&T) - - - + + Close &Window 关闭窗口(&W) - - + + More windows... 更多窗口... - + &View Pixel Line profile 查看像素谱线轮廓(&V) - + &Intensity Matrix 强度矩阵(&I) - + &Cut 剪切(&C) - - - - + + + + &Properties... 属性(&P)... - + Please use the project explorer to select a window! 请使用项目浏览器选择一个窗口! - Normal - 普通 + 普通 - + Save changes to project: <p><b> %1 </b> ? 保存变动到项目<p><b> %1 </b>? - + Yes - + No - - + + &Show All Windows 显示所有窗口(&S) - - + + &Hide All Windows 隐藏所有窗口(&H) - - - + + + &Delete Selection 删除所选(&D) - - + + New &Window 新建窗口(&W) - - + + New F&older 新建文件夹(&o) - + Auto &Column Width 自动列宽(&C) - + &Delete Window 删除窗口(&D) - - - + + + &Rename Window 重命名窗口(&R) - + &Print Window 打印窗口(&P) - + D&epending Graphs 依赖的图像(&e) - + D&epending 3D Graphs 依赖的3D图像(&e) - - - + + + D&epends on 依赖(&e) - + Function 函数 - + Re&move Pie Curve 移除饼状图曲线(&m) - + Anal&yze 分析(&y) - - + + &Paste Layer 粘贴图层(&P) - + &Paste Text 粘贴文本(&P) - + &Paste Tex Formula 粘贴TeX方程式(&P) - + &Paste Image 粘贴图像(&P) - + &Paste Rectangle 粘贴矩形(&P) - + &Paste Ellipse 粘贴椭圆(&P) - + &Paste Line/Arrow 粘贴线/箭头(&P) - - - + + + &Layer 图层(&L) - - - + + + &Window 窗口(&W) - + E&xport 导出(&x) - + &Print 打印(&P) - + P&roperties... 属性(&r)... @@ -4996,438 +4993,438 @@ 删除图层(&D) - + &Copy Page 复制页(&C) - + E&xport Page 导出页(&x) - + &Matrix... 矩阵(&M)... - + Choose &Data Set... 选择数据集(&D)... - + Choose &Matrix... 选择矩阵(&M)... - + C&lear 清除(&l) - + &Copy Graph 复制图像(&C) - + &Export 导出(&E) - - - + + + &Paste 粘贴(&P) - - + + &Insert Row 插入行(&I) - + &Insert Column 插入列(&I) - - + + &Delete Rows 删除行(&D) - + &Delete Columns 删除列(&D) - + &Delete Row 删除行(&D) - + Clea&r Row 清除行(&r) - + Clea&r Rows 清除行(&r) - + Choose the location of the QtiPlot help folder! 选择QtiPlot帮助文件夹的路径! - + QtiPlot - index.html File Not Found! QtiPlot - index.html文件没找到! - + There is no file called <b>index.html</b> in this folder.<br>Please choose another folder! 这个文件夹里面没有叫做<b>index.html</b>的文件。<br>请另选一个文件夹! - - - + + + QtiPlot - Help Files Not Found! QtiPlot - 帮助文件没找到! - - + + The manual can be downloaded from the following internet address: 手册可以从以下网址下载: - - + + QtiPlot - Help Profile Not Found! QtiPlot - 帮助没找到! - - + + The assistant could not start because the file <b>%1</b> was not found in the help file directory! 助手无法启动因为文件<b>%1</b>不在帮助文件的目录中! - - + + This file is provided with the QtiPlot manual which can be downloaded from the following internet address: 这个文件随同QtiPlot手册提供,可以在以下网址下载: - + Please indicate the location of the help file! 请指示帮助文件的位置! - + QtiPlot - Edit function QtiPlot - 编辑函数 - + QtiPlot - Set the number of pixels to average QtiPlot - 设置象素值为平均 - + Number of averaged pixels 平均象素值 - + You must have more than one layer in the active window! 在一个活动窗口你需要超过一个图层! - + You must have more than one dataset in the active layer! 在一个活动图层你需要超过一个数据集! - + QtiPlot - Guess best origin for the new layer? QtiPlot - 猜测新图层的最佳来源? - + Do you want QtiPlot to guess the best position for the new layer? Warning: this will rearrange existing layers! 你希望QtiPlot猜测新图层的最佳位置吗? 警告:这会重排已存在的图层! - + &Guess 猜测(&G) - + &Top-left corner 左上角(&T) - + Curve 曲线 - + Integration of %1 from zero is %1从0开始的积分 - - - - - + + + + + Please select a 'Y' column first! 请先选择一个Y列! - - + + Shared A&xes Panel - + - + File %1 contains only %2 sheets! 文件%1只包含%2表单! - + Imported sound file 导入声音文件 - + This is not a PCM type WAV file, operation aborted! 这不是一个PCM类型的WAV文件,操作中止! - + PCM PCM - + Left - + Right - + Data 数据 - + Channels 通道 - + Sample Rate 采样率 - + Byte Rate 比特率 - + Block Align 块对齐 - + Bits Per Sample 采样位数 - + Presentation Preview 演示预览 - + Paste Selection as Te&xt 粘贴所选为文本(&x) - + Print preview of window: 窗口打印预览: - + There are no windows available in this folder! 目录中没有可用的窗口! - + S&ubtract - + Export 导出 - + &Indexed Colors 索引色彩(&I) - + Pale&tte 调色板(&t) - + Integration of %1 %1的积分 - + Area 面积 - - + + Linear Regression of %1 %1线性回归 - - + + Slope 斜率 - + Intercept 截止 - - + + Chi^2 Chi^2 - - + + R^2 R^2 - - + + Add &Custom Script Action... 添加自定义脚本动作(&C)... - - + + New &Project 新建项目(&P) - - + + Ctrl+N Ctrl+N - - + + New &Graph 新建绘图(&G) - - + + Ctrl+G Ctrl+G - - + + New &Note 新建笔记(&N) - - + + New &Table 新建表格(&T) - - + + Ctrl+T Ctrl+T - - + + New &Matrix 新建矩阵(&M) - - + + Ctrl+M Ctrl+M - - + + New &Function Plot 新建函数绘图(&F) - - + + Ctrl+F Ctrl+F - - + + New 3D &Surface Plot 新建三维曲面绘图(&S) - - + + Ctrl+ALT+Z Ctrl+ALT+Z @@ -5436,20 +5433,20 @@ 打开(&O) - - + + Ctrl+O Ctrl+O - - + + Ctrl+Shift+E Ctrl+Shift+E - - + + Open ODF Spreads&heet... 打开ODF工作表(&h)... @@ -5458,220 +5455,220 @@ 打开图象文件(&F) - - + + Ctrl+I Ctrl+I - - + + Import I&mage... 导入图像(&m)... - - + + &Save Project 保存项目(&S) - - + + Ctrl+S Ctrl+S - - + + Save Project &As... 项目另存为(&A)... - - + + Ctrl+Shift+S Ctrl+Shift+S - + Open Temp&late... 打开模板(&l)... - - + + Save As &Template... 另存为模板(&T)... - + Save Note As... 笔记另存为... - - + + &Import ASCII... 导入ASCII(&I)... - - + + &Sound (WAV)... 导入WAV波形文件(&S)... - - + + &Undo 撤销(&U) - - + + Ctrl+Z Ctrl+Z - - + + &Redo 重做(&R) - - + + &Duplicate 复制(&D) - - + + Ctrl+Alt+D Ctrl+Alt+D - - + + Cu&t Selection 剪切所选(&t) - - + + Ctrl+X Ctrl+X - - + + &Copy Selection 复制所选(&C) - - + + Ctrl+C Ctrl+C - - + + &Paste Selection 粘贴所选(&P) - - + + Ctrl+V Ctrl+V - - + + Del delete key 删除 - - + + Ctrl+E Ctrl+E - - + + Add La&yer 添加图层(&y) - - + + ALT+L ALT+L - - + + Arran&ge Layers 排列图层(&g) - - + + Shift+A Shift+A - - - + + + Automatic Layout 自动布局 - - + + &Current 当前(&C) - - - - + + + + Ctrl+Alt+G Ctrl+Alt+G - - + + Alt+X Alt+X - - + + Create Open &Document Presentation... 创建Open Document演示(&D)... - - + + &Export PDF 导出PDF(&E) - - + + Ctrl+Alt+P Ctrl+Alt+P - - + + Ctrl+P Ctrl+P @@ -5680,8 +5677,8 @@ 打印预览(&v) - - + + Print All Plo&ts 打印所有绘图(&t) @@ -5690,1440 +5687,1448 @@ 导出ASCII文件(&x) - - + + &Quit 退出(&Q) - - + + &Open... 打开(&O)... - - + + Shift+T - + The selected Y column is empty, operation aborted! - + The associated X column is empty, operation aborted! - + The selected table is empty, operation aborted! - + Excel files - - Save Window As - + + Overwrite file? + 覆盖文件? - - + + %1 already exists. + %1已经存在了. + + + + Do you want to replace it? + 你想替换它么? + + + + Export Exce&l ... - - + + Open Image &File... - - + + Save &Window As... - - + + &Front - - + + &Back - - + + &Print... - - + + Print Pre&view... 打印预览(&v)... - - + + E&xport ASCII... - - + + Ctrl+Q Ctrl+Q - - + + Clear &Log Information 清除日志信息(&L) - - + + Delete &Fit Tables 删除拟合表格(&F) - - + + Plot &Wizard 绘图向导(&W) - - + + Ctrl+Alt+W Ctrl+Alt+W - - + + &Preferences... 选项(&P)... - - + + Add/Remove &Curve... 添加/删除曲线(&C)... - - + + ALT+C ALT+C - - + + Add &Error Bars... 添加误差棒(&E)... - - + + Ctrl+B Ctrl+B - - + + Add &Function... 添加函数(&F)... - - - - + + + + Ctrl+Alt+F Ctrl+Alt+F - - + + &Rescale to Show All 重缩放显示所有(&R) - - - + + + Ctrl+Shift+R Ctrl+Shift+R - - + + Zoom &In/Out and Drag Canvas 放大缩小拖动画布(&I) - - + + Zoom/Drag Canvas &Horizontally 水平缩放/拖动(&H) - - + + Zoom/Drag Canvas &Vertically 垂直缩放/拖动(&V) - - + + New &Legend 新建图例(&L) - - + + Ctrl+L Ctrl+L - - + + Add Time Stamp 添加时间标记 - - + + Ctrl+ALT+T Ctrl+ALT+T - - + + Add &Image 添加图像(&I) - - + + ALT+I ALT+I - - + + Stack &Bar 堆栈棒状图(&B) - - + + Stack &Column 堆栈列(&C) - - + + Vectors XY&AM 矢量图XY&AM - + &Vectors &XYXY 矢量图&XYXY - - + + &Stacked Histogram 堆叠直方图(&S) - - + + Stem-and-&Leaf Plot 茎叶图(&L) - - - - + + + + &Custom Layout... - - + + D&ouble-Y 双Y轴图(&o) - - + + &Zoom 缩放(&Z) - - + + &Waterfall Plot 瀑布图(&W) - - + + E&xtract to Graphs 提取至绘图(&x) - + Extract to &Layers 提取至层(&L) - - + + Add Inset Layer 添加浮动层 - - + + &Ribbon 带状图(&R) - - + + &Bars 棒状图(&B) - - + + &Trajectory 轨线(&T) - - + + Statistics on &Columns 统计列(&C) - - + + Statistics on &Rows 统计行(&R) - - + + &Integrate 积分(&I) - - + + Integr&ate Function... 函数积分(&a)... - - + + Inte&rpolate ... 插值(&r)... - - + + &Low Pass... 低通(&L)... - - + + &High Pass... 高通(&H)... - - + + &Band Pass... 带通(&B)... - - + + &Band Block... 带阻(&B)... - - + + &FFT... &FFT... - - + + &Savitzky-Golay... Savitzky-Golay(&S)... - - + + &FFT Filter... FFT滤波器(&F)... - - + + Moving Window &Average... 平均移动窗口(&A)... - - + + &Lowess... 局部加权回归(&L)... - - + + &Differentiate 微分(&D) - - + + Fit Slop&e 拟合斜率(&e) - - + + Fit &Linear 线性拟合(&L) - - + + Fit &Polynomial ... 多项式拟合(&P)... - - + + &First Order ... 一阶(&F)... - - + + &Second Order ... 二阶(&S)... - - + + &Third Order ... 三阶(&T)... - - + + Fit Exponential Gro&wth ... 指数增益拟合(&w)... - - + + Fit &Boltzmann (Sigmoidal) 波尔兹曼(S型)拟合(&B) - - + + Fit &Gaussian 高斯拟合(&G) - - + + Fit Lorent&zian 洛仑兹拟合(&z) - - + + Fit &Wizard... 拟合向导(&W)... - - + + Ctrl+Y Ctrl+Y - - + + &Plot ... 绘图(&P)... - - + + &Scales... 比例(&S)... - - + + &Axes... 轴(&A)... - - + + &Grid ... 网格(&G)... - - + + &Title ... 标题(&T)... - - + + Column &Options ... 列选项(&O)... - - + + Ctrl+Alt+O Ctrl+Alt+O - - + + Set Column &Values ... 设置列值(&V)... - - - - + + + + Alt+Q Alt+Q - - + + &Extract Data... - - + + Recalculate 重新计算 - - - - + + + + Ctrl+Return Ctrl+Return - - + + &Hide Selected 隐藏所选(&H) - - + + Sho&w All Columns 显示所有列(&w) - - + + &Swap columns 交换列(&S) - - + + Move &Right 右移(&R) - - + + Move &Left 左移(&L) - - + + Move to F&irst 移至开头(&i) - - + + Move to Las&t 移至末尾(&t) - - + + Ad&just Column Width 调整列宽(&j) - - + + &Columns... 列(&C)... - - + + &Rows... 行(&R)... - - + + &Delete Rows Interval... 删除行间隔(&D)... - - + + &Upward 向上(&U) - - + + &Downward 向下(&D) - - + + &About QtiPlot 关于QtiPlot(&A) - - + + F1 F1 - - + + Ctrl+H Ctrl+H - - + + &Choose Help Folder... 选择帮助文件夹(&C)... - - Ctrl+W - Ctrl+W + Ctrl+W - - - + + + Add Column 添加列 - - + + &Go to Row... 跳转至行(&G)... - - + + Go to Colum&n... 跳转至列(&n)... - - + + Ctrl+Alt+C Ctrl+Alt+C - - + + Clear 清除 - - + + &Remove Layer 移除图层(&R) - - + + Alt+R Alt+R - - + + Window &Geometry... 窗口几何属性(&G)... - - - - + + + + &Hide Window 隐藏窗口(&H) - - - - + + + + Ctrl+Alt+H Ctrl+Alt+H - - + + &View Pixel Line Profile 查看像素谱线轮廓(&V) - - + + &Intensity Table 强度表格(&I) - - - - + + + + &Properties 属性(&P) - - + + &Activate Window 激活窗口(&A) - - + + Mi&nimize Window 最小化窗口(&n) - - + + Ma&ximize Window 最大化窗口(&x) - - + + Re&size Window... 调整窗口尺寸(&s)... - - + + &Surface... 曲面图(&S)... - - + + &Data Set... 数据集(&D)... - - + + Set &Properties... 设置属性(&P)... - - + + Set &Dimensions... 设置维度(&D)... - - + + Ctrl+D Ctrl+D - - + + Set &Values... 设置值(&V)... - - + + &Image Plot 图像绘制(&I) - - + + &Image Profiles 图片简介(&I) - - + + &Transpose 转置(&T) - - + + Flip &V V型翻转(&V) - + Ctrl+Shift+V Ctrl+Shift+V - - + + Flip &H H型翻转(&H) - + Ctrl+Shift+H Ctrl+Shift+H - - + + R&otate 90 旋转90(&o) - - + + Rotate &-90 旋转-90(&-) - + Ctrl+Alt+R Ctrl+Alt+R - - + + &Invert 求逆(&I) - - + + &Determinant 秩(&D) - - + + &Image mode 图像模式(&I) - + Ctrl+Shift+I Ctrl+Shift+I - - + + &Data mode 数据模式(&D) - + Ctrl+Shift+D Ctrl+Shift+D - - + + Show &X/Y 显示X/Y(&X) - + Ctrl+Shift+X Ctrl+Shift+X - - + + Show &Column/Row 显示列/行(&C) - + Ctrl+Shift+C Ctrl+Shift+C - - + + &Straight Line... - - + + &Reference Data... - + &Baseline... - - + + Commen&t Selection - - + + &Uncomment Selection - + Waterfall Plot - + Comment Selection - + Ctrl+Shift+O - + Uncomment Selection - + Ctrl+Shift+U - + Execute Selected Lines - + Zoom In/Out and Drag Canvas Horizontally 横向缩放或移动画布 - + Zoom In/Out and Drag Canvas Vertically 纵向缩放或移动画布 - + can be any .qti, qti.gz, .ods, .opj, .ogm, .ogw, .ogg, .py, .xls or ASCII file 可以为任何.qti, qti.gz, .ods, .opj, .ogm, .ogw, .ogg, .py, .xls 或者ASCII文件 - - + + Set Precision %1 digits 设置精度为%1小数 - + Choose custom user interface 选择自定义用户界面 - + Custom user interfaces can be created using the QtDesigner application provided by the Qt framework 自定义用户界面可以用Qt framework提供的QtDesigner创建 - + For more details about how to use .ui files in your Python scripts please read the PyQt4 documentation 关于如何在Python脚本里面使用.ui文件的更多详细资料请参阅PyQt4手册 - - - + + + &Gray Scale 灰阶(&G) - - + + &Default 默认(&D) - - + + &Rainbow 彩虹(&R) - - + + &Custom 自定义(&C) - - + + &Export Image ... 导出图象(&E)... - - - - + + + + &Direct 直接(&D) - - + + &XYZ Columns &XYZ列 - - + + &YXZ Columns &YXZ列 - + &Forward FFT 正FFT(&F) - + &Inverse FFT 逆FFT(&I) - + Convert to &Matrix 转换为矩阵(&M) - - + + Dra&g Curve 移动曲线(&g) - + &Import 导入数据(&I) - + You must select a single Y column that has an associated X column! 你需要选择仅一个与X列关联的Y列! - + You must select exactly one Z column! 你必须选择仅一个Z列! - + Open ODF Spreadsheet File 打开ODF工作表文件 - + QtiPlot was built without ODF spreadsheet support! 此QtiPlot没有ODF支持! - + Open File 打开文件 - - + + Time 时间 - + &Save 保存(&S) - - + + Open Exce&l ... 打开Excel(&l)... - - + + &Close 关闭(&C) - - + + 3D &Wire Frame 三维线框(&W) - - + + 3D &Hidden Line 三维隐藏线(&H) - - + + 3D &Polygons 三维多边形(&P) - - + + 3D Wire &Surface 三维线状曲面图(&S) - + Contour - &Color Fill 等值线 - 色彩填充(&C) - - + + Contour &Lines 等值线图(&L) - - + + &Gray Scale Map 灰阶表(&G) - - + + Sort Ta&ble 表排序(&) - - + + Sort Columns 列排序 - - + + Co&rrelate 相关(&r) - - + + &Autocorrelate 自动相关(&A) - - + + &Convolute 卷积(&C) - - + + &Deconvolute 反卷积(&D) - - + + &Horizontal 水平(&H) - - + + &Vertical 垂直(&V) - - + + Ro&w Numbers 行号(&w) - - + + &Random Values 随机数(&R) - - + + &Frequency Count ... 频数统计(&F)... - - + + &Read Only 只读(&R) - - + + &Disregard 忽略该列(&D) - - + + &Box Plot 箱形图(&B) - - + + &Gaussian... 高斯(&G)... - - + + &Lorentzian... 洛仑兹(&L)... - - + + Search for &Updates 搜索更新(&U) - - + + &QtiPlot Homepage QtiPlot主页(&Q) - + QtiPlot &Forums QtiPlot论坛(&F) - - + + Report a &Bug 报告BUG(&B) - - + + Download &Manual 下载手册(&M) - - + + &Translations 语言包(&T) - - + + Make a &Donation 捐赠(&D) - - + + Technical &Support 技术支持(&S) - - + + Scripting &language 脚本语言(&l) - - + + &Restart scripting 重新运行脚本(&R) - - + + E&xecute 执行(&x) - - + + Ctrl+J Ctrl+J - - + + Execute &All 全部执行(&A) - - + + Ctrl+Shift+J Ctrl+Shift+J - - + + &Evaluate Expression 计算表达式(&E) - - + + Show Line &Numbers 显示行号(&N) - - + + &Replace... 替换(&R)... - - + + &Script Window 脚本窗口(&S) - - + + &Plot details... 绘图详情(&P)... - - + + &Worksheet 工作表(&W) - - + + &Reset to Full Range 重置到全部范围(&R) - - + + Edit &Range... 编辑范围(&R)... - - + + &Hide 隐藏(&H) - - + + Hide &Other Curves 隐藏其他曲线(&O) - - + + &Show All Curves 显示所有曲线(&S) @@ -7132,87 +7137,87 @@ 编辑函数(&E)... - - + + &Toolbars... 工具栏(&T)... - - + + Ctrl+Shift+T Ctrl+Shift+T - - + + Bold 粗体 - - + + Italic 斜体 - + Superscript 上标 - + Subscript 下标 - - + + Underline (Ctrl+U) 下划线 (Ctrl+U) - - + + Ctrl+U Ctrl+U - - - - + + + + Greek 希腊字母 - - + + Mathematical Symbols 数学符号 - + Increase Precision 增加精度 - + Decrease Precision 降低精度 - + Open a new project 打开一个新项目 - + Append a project to the current folder 在当前目录添加一个项目 - + Ctrl+Alt+A Ctrl+Alt+A @@ -7221,1002 +7226,1007 @@ 新建文件夹(&d) - + Create a new folder 创建新文件夹 - + Create an empty 2D plot 创建一个空2D绘图 - + Create an empty note window 创建一个空笔记窗口 - + New table 新建表格 - + New matrix 新建矩阵 - + Create a new 2D function plot 创建一个新的2D函数绘图 - + Create a new 3D surface plot 创建一个新的3D曲面图 - + Open project 打开项目 - + Open Excel 打开Excel文档 - + Export Excel - + Open ODF Spreadsheet 打开ODF文档 - + Save project 保存项目 - + Open Te&mplate... 打开模板(&m)... - + Open template 打开模板 - + Save window as template 窗口另存为模板 - + Import data file(s) 导入数据文件 - + Ctrl+K Ctrl+K - + Undo changes 撤销修改 - + Redo changes 重做修改 - + Duplicate window 复制窗口 - + Cut selection 剪切所选 - + Copy selection 复制所选 - + Paste selection 粘贴所选 - + Delete selection 删除所选 - + Raise object on top - + Lower object to the bottom - + Project &Explorer 项目浏览器(&E) - + Show project explorer 显示项目浏览器 - + Results &Log 结果日志(&L) - + Show analysis results 显示分析结果 - + &Undo/Redo Stack 撤销/重做堆栈(&U) - + Show available undo/redo commands 显示可用撤销/重做命令 - + &Console 控制台(&C) - + Show Scripting console 显示脚本控制台 - + Script Window 脚本窗口 - + Add Layer 添加图层 - + Arrange Layers 排列图层 - + Export current graph 导出当前绘图 - + Export all graphs 导出全部绘图 - + Export to PDF 导出到PDF - + Print window 打印窗口 - + Print preview 打印预览 - + Add curve to graph 把曲线添加到绘图 - + Add Error Bars... 添加误差棒... - + Add Function... 添加函数... - + Best fit 最佳拟合 - + Add new legend 添加新图例 - + Date & time 日期 & 时间 - + Add Image 添加图像 - + Plot as line 绘制为线 - + Plot as symbols 绘制为符号 - + Plot as line + symbols 绘制为线 + 符号 - + Plot with vertical bars 用垂直棒绘制 - + Plot with horizontal bars 用水平棒绘制 - + Plot stack bar 绘制堆栈棒 - + Plot stack column 绘制堆栈列 - + Plot area 绘图区域图 - + Plot pie 绘制饼状图 - + &Vectors XYXY 矢量图XYXY(&V) - + Vectors XYXY 矢量图XYXY - + Vectors XYAM 矢量图XYAM - + Stem-and-Leaf Plot 绘制茎叶图 - + Double Y Axis 双Y轴 - + Zoom 缩放 - + Extract to Graphs 提取至绘图 - + Extract to Layer&s 提取至图层(&s) - + Extract to Layers 提取至图层 - + Plot 3D ribbon 绘制三维带状图 - + Plot 3D bars 绘制三维棒状图 - + Plot 3D scatter 绘制三维散点图 - + Plot 3D trajectory 绘制三维轨线 - + Contour + &Color Fill 等值线 + 色彩填充(&C) - + Contour Lines + Color Fill 等值线图 + 色彩填充 - + Contour Lines 等值线图 - + Gray Scale Map 灰阶表 - + Selected columns statistics 选中列统计 - + Selected rows statistics 选中行统计 - + Hide selected columns 隐藏所选列 - + Show all table columns 显示表格所有列 - + Swap selected columns 交换选中列 - + Move Right 右移 - + Move Left 左移 - + Move to First 移至开头 - + Move to Last 移至末尾 - + Move current row upward 上移当前行 - + Move current row downward 下移当前行 - + Set optimal column width 设置最佳列宽 - + More Windows... 更多窗口... - + Set Matrix Values 设置矩阵值 - + Image Plot 图像绘制 - + Image Profiles 图片简介 - + Rotate 90 Clockwise 顺时针旋转90 - + Rotate 90 Counterclockwise 逆时针旋转90 - + Flip Vertically 垂直翻转 - + Flip Horizontally 水平翻转 - + Fill selected columns with row numbers 用行号填充选中列 - + Fill selected columns with random numbers 用随机数填充选中列 - + Set column as X 设置列为X - + Set column as Y 设置列为Y - + Set column as Z 设置列为Z - + Set as Y Error Bars 设置为Y误差棒 - + Set as Labels 设置为标签 - + Disregard Columns 忽视列 - + Box and whiskers plot 箱形图 - + Visit QtiPlot &Forums 访问QtiPlot论坛(&F) - + Show find dialog 显示查找对话框 - + Find Next 查找下一条 - + Find Previous 查找上一条 - + Show replace dialog 显示替换对话框 - + Ctrl+R Ctrl+R - + Disable &tools 禁用工具(&t) - + Pointer 指针 - + Zoom In (Shift++) or Out (-) and Drag Canvas 成比例缩放或移动画布 - + Zoom In 放大 - + Zoom &Out 缩小(&O) - + Zoom Out 缩小 - + Data reader 数据读取器 - + Select data range 选择数据范围 - + Screen reader 屏幕读取器 - + Draw Data Points 画数据点 - + Move data points 移动数据点 - + Drag Curve 移动曲线 - + Remove data points 移除数据点 - + Add Text 添加文本 - + Add Equation 添加公式 - + Add Rectangle 添加矩形 - + Add Ellipse/Circle 添加椭圆/圆 - + Draw arrow 画箭头 - + Draw line 画线 - - - - + + + + Box 箱形框 - - - + + + Frame 框架 - + &Frame 框架(&F) - - + + No Axes 无轴 - - + + No axes 无轴 - + Front grid 前栅格 - + Back grid 后栅格 - + Right grid 右栅格 - + Left grid 左栅格 - + Ceiling grid 顶栅格 - + Floor grid 底栅格 - - - - + + + + Wireframe 线框架 - - + + Hidden Line 隐藏线 - - + + Hidden line 隐藏线 - - + + Polygon Only 只有多边形 - - + + Polygon only 只有多边形 - - + + Mesh & Filled Polygons 网格&填充多边形 - - + + Mesh & filled Polygons 网格&填充多边形 - - - - + + + + Dots - - - - + + + + Bars - - - - + + + + Cones 圆锥体 - - - - + + + + Crosshairs 叉丝 - - + + Floor Data Projection 底面数据投影 - - + + Floor data projection 底面数据投影 - - + + Floor Isolines 底面等值线 - - + + Floor isolines 底面等值线 - - + + Empty Floor 空底面 - - + + Empty floor 空底面 - - - - + + + + Animation 动画 - - - - + + + + Enable perspective 启用透视 - - - - + + + + Reset rotation 重置旋转 - - - - + + + + Fit frame to window 使框架适合窗口 - + Profiles 简介 - + Horizontal 水平 - + Vertical 垂直 - + QtiPlot - Enter the number of peaks QtiPlot - 输入峰值数量 - + Peaks - + Make a donation 捐赠 - + show standalone scripting window 显示独立的脚本窗口 - + You are using the demonstration version of Qtiplot. It is identical with the full version, except that you can't save your work to project files and you can't use it for more than 10 minutes per session. <br><br> If you want to have ready-to-use, fully functional binaries, please subscribe for a <a href="http://soft.proindependent.com/individual_contract.html">single-user binaries maintenance contract</a>. <br><br> QtiPlot is free software in the sense of free speech. If you know how to use it, you can get <a href="http://soft.proindependent.com/download.html">the source code</a> free of charge. Nevertheless, you are welcome to <a href="http://soft.proindependent.com/why_donate.html">make a donation</a> in order to support the further development of QtiPlot. 你正在使用演示版本的Qtiplot。它跟完全版是一致的,不过你不能保存文件,也不能一次使用超过十分钟。<br><br>如果你准备好使用完整功能版,请在<a href="http://soft.proindependent.com/individual_contract.html">订阅一个单用户带维护通知的版本。</a><br><br>QtiPlot是一个自由软件。如果你想知道如何使用,你可以免费得到<a href="http://soft.proindependent.com/download.htm">源代码</a>。尽管如此,仍然欢迎你<a href="http://soft.proindependent.com/why_donate.html">捐助</a>来支持QtiPlot未来的开发。 - + + Yes, don't ask me again + + + + Memory Allocation Error 内存分配错误 - + Not enough memory, operation aborted! 内存不足,操作中止! - + <font size=+2, color = darkBlue><b>QtiPlot is open-source software and its development required hundreds of hours of work.<br><br> If you like it, you're using it in your work and you would like to see it constantly improved, please support its authors by making a donation.</b></font> <font size=+2, color = darkBlue><b>QtiPlot是一个开源软件,它的开发需要上百小时的工作。<br><br>如果你喜欢它,你在你的工作中应用它,并且希望看到它稳步的改进,请通过捐献的方式支持一下它的作者。</b></font> - + Please support QtiPlot! 请支持QtiPlot! - + <b> %1 </b>: This command line option must be used without other arguments! <b> %1 </b>: 这个命令行选项不能和其他参数一起用! - + Version 版本 - + Usage 用法 - + options 选项 - - + + file 文件 - - + + name 名称 - + Valid options are 有效的选项是 - - - - - - - - + + + + + + + + or 或者 - + show about dialog and exit 显示关于对话框并退出 - + start QtiPlot with the default settings 使用默认设置启动QtiPlot - + show command line options 显示命令行选项 - + start QtiPlot in language 使用语言包启动QtiPlot - + show QtiPlot manual in a standalone window 在一个单独的窗口显示QtiPlot手册 - + print QtiPlot version and release date 打印QtiPlot版本和发行日期 - + execute the script file given as argument 执行参数中给出的脚本文件 - + execute the script file given as argument without displying the user interface. Warning: 2D plots are not correctly handled in this functioning mode! 执行参数中给出的脚本文件并且不显示用户界面。警告:2D绘图在这种模式下处理不正确! @@ -8225,37 +8235,37 @@ 可以为任何.qti, qti.gz, .opj, .ogm, .ogw, .ogg, .py或者ASCII文件 - + Help 帮助 - + <b> %1 </b>: Wrong locale option or no translation available! <b> %1 </b>:错误的地区选项或者语言包不可用! - + <b> %1 </b> unknown command line option! <b> %1 </b> 未知命令行选项! - + Type %1 to see the list of the valid options. 键入%1来查看有效选项列表。 - + <b>%1</b> is a directory, please specify a file name! <b>%1</b>是一个目录,请指定一个文件名! - + The file: <b>%1</b> is not a QtiPlot or Origin project file! 文件:<b>%1</b>不是一个QtiPlot或者Origin项目文件! - + QtiPlot - Demo Version QtiPlot - 演示版本 @@ -8264,526 +8274,525 @@ 你正在使用演示版本的Qtiplot。它跟完全版是一致的,不过你不能保存文件,也不能一次使用超过十分钟。<br><br>如果你准备好使用完整功能版,请在<a href="http://soft.proindependent.com/individual_contract.html">订阅一个单用户带维护通知的版本。</a><br><br>QtiPlot是一个自由软件。如果你想知道如何使用,你可以免费得到<a href="http://developer.berlios.de/project/showfiles.php?group_id=6626">源代码</a>。尽管如此,仍然欢迎你<a href="http://soft.proindependent.com/why_donate.html">捐助</a>来支持QtiPlot未来的开发。 - + QtiPlot - File backup error QtiPlot - 文件备份错误 - + Cannot make a backup copy of <b>%1</b> (to %2).<br>If you ignore this, you run the risk of <b>data loss</b>. 无法备份<b>%1</b>(至 %2)。<br>如果你忽略这个,你就处于<b>丢失数据</b>的风险中。 - - + + QtiPlot - File save error QtiPlot - 文件保存失败 - - + + The file: <br><b>%1</b> is opened in read-only mode 文件: <br><b>%1</b>是以只读模式打开的 - Save project as - 项目另存为 + 项目另存为 - - - - + + + + &Find... 查找(&F)... - - + + Couldn't open file %1 不能打开文件%1 - + Open Excel File 打开Excel文件 - - + + App&end Project... 附加项目(&e)... - - + + Ctrl+Alt+S Ctrl+Alt+S - - + + 2D &Binning 2D合并(&B) - - + + &Regular XYZ 正则XYZ(&R) - - + + Find &Next 查找下一条(&N) - - + + F3 F3 - - + + Find &Previous 查找上一条(&P) - - + + F4 F4 - - + + Increase Indent 增加缩进 - - + + Decrease Indent 减少缩进 - - + + Rena&me Tab... 重命名标签(&m)... - - + + A&dd Tab 添加标签(&d) - - + + C&lose Tab 关闭标签(&l) - - + + Load Custom User &Interface... 加载自定义用户界面(&I)... - + Save &As Project... 另存为项目(&A)... - + &Delete Folder 删除文件夹(&D) - + &Rename 重命名(&R) - + &Windows in Active Folder 活动文件夹内的窗口(&W) - + Windows in &Active Folder && Subfolders 活动文件夹和自文件夹内的窗口(&A) - + &View Windows 查看窗口(&V) - + Hidden 隐藏 - + Name already exists! 名称已存在! - + Project 项目 - - - + + + Path 路径 - + bytes 字节 - - + + Contents 内容 - - + + windows 窗口 - - + + folders 文件夹 - + Modified 改动的 - - - + + + Properties 属性 - + New Folder 新建文件夹 - + QtiPlot - Delete folder? QtiPlot - 删除文件夹? - + Delete folder '%1' and all the windows it contains? 删除文件夹'%1'和里面包含的所有窗口? - - + + Note 笔记 - - + + 3D Graph 三维绘图 - + Status 状态 - + QtiPlot - No match found QtiPlot - 找不到匹配项 - + Sorry, no match found for string: '%1' 对不起,没有找到匹配的字符串: '%1' - + Cannot move an object to itself! 不能把一个对象移到自身上! - + Cannot move a parent folder into a child folder! 不能把一个父文件夹移动到资文件夹内! - + Skipped moving folder 跳过移动文件夹 - - + + The destination folder already contains a folder called '%1'! Folder skipped! 目的文件夹已经含有一个叫做'%1'的文件夹!文件夹跳过! - - - + + + Error 错误 - + QtiPlot will try to download necessary information about the last available updates. Please modify your firewall settings in order to allow QtiPlot to connect to the internet! QtiPlot尝试下载最新更新的必要信息。请修改你的防火墙设置来允许QtiPlot连接到英特网! - + Do you wish to continue? 你想继续吗? - + QtiPlot - HTTP get version file QtiPlot - HTTP获取版本文件 - + Error while fetching version file with HTTP: %1. HTTP取版本文件时出错: %1。 - + QtiPlot - Updates Available QtiPlot - 有更新 - + There is a newer version of QtiPlot (%1) available for download. Would you like to download it? 有更新版本的QtiPlot (%1)等待下载。你希望下载它吗? - + QtiPlot - No Updates Available QtiPlot - 没有更新 - + No updates available. Your current version %1 is the last version available! 没有更新。你现在的版本%1就是最新版本! - + This will clear the contents of all the data associated with the table. Are you sure? 这会清楚表格相关的数据的所有内容。你确定? - + &No 否(&N) - + QtiPlot - Enter row number QtiPlot - 输入行号 - + Row - + QtiPlot - Enter column number QtiPlot - 输入列号 - - + + QtiPlot was not built with Python scripting support included! QtiPlot编译时不包含Python脚本支持! - + Please set a default X column for this table, first! 请先为这个表格设置一个默认的X列! - + Please select a Z column for this operation! 请为这个操作选择一个Z列! - + You need to define a X column first! 首先你需要定义一个X列! - + You need to define a Y column first! 首先你需要定义一个Y列! - + Starting with version 0.9.1 QtiPlot stores the user defined fit models to a different location. 从0.9.1版本开始QtiPlot就保存拥护定义拟合模型到不同的位置。 - + If you want to save your already defined models, please choose a destination folder. 如果你想保存你已经定义的模型,请选择一个目的文件夹。 - + Import fit models 导入拟合模型 - + Choose a directory to export the fit models to 选择一个目录来导出拟合模型 - - + + No Icon 无图标 - + Couldn't load file: %1. Autocompletion will not be available! 无法加载文件:%1。 自动完成无法使用! - + Please select exactly one column and more than one non empty cell! 请选择一列和至少一个非空单元! - + Data set: %1 doesn't exist! 数据集:%1不存在! - + Stem and leaf plot of dataset 数据集的茎叶图 - + from row 起始行 - + to row 结束行 - + Not enough memory for this dataset! 没有足够的内存给这个数据集! - + Stem - + Leaf - + Please confirm the stem unit! 你确认茎单位! - + Data set 数据集 - + stem unit 茎单位 - + Stem unit 茎单位 - + Leaf unit 叶单位 - + Key - + means 方法 - + Input error: empty data set! 输入错误:空数据集! - + English 中文 - + Alt+C Alt+C - - - + + + Spec&ial Bar/Column 特定的棒/列(&i) - + &Add 添加(&A) - + Close 关闭 - - + + Move Row 移动行 @@ -9520,79 +9529,74 @@ - - - + + + Baseline - - Create Baseline - - - Curve 曲线 - + Points - + &Interpolation - + Linear - + Cubic 立方插值 - + Non-rounded Akima 非圆阿克玛插值 - + User Defined &Equation Y = - + Existing &Dataset - + Create &Baseline - + &Subtract - + &Undo Subtraction - + &Modify - + &Close 关闭(&C) @@ -9825,7 +9829,7 @@ ConfigDialog - + The column separator can be customized. The following special codes can be used: \t for a TAB character @@ -9836,1271 +9840,1352 @@ \s为空格 - + The separator must not contain the following characters: 0-9eE.+- 分隔符不能包含以下字符: 0-9eE.+- - - - + + + Background 背景 - - + + Background Color 背景颜色 - - - - - + + + + + Opacity 不透明度 - - + + Canvas Color 画布颜色 - - + + Border Color 边框颜色 - - - - + + + + Width 宽度 - + LF (Unix) LF (Unix) - + CRLF (Windows) CRLF (Windows) - + CR (Mac) CR (Mac) - - - - + + + + System Locale Setting 系统本地设置 - + &B &B - + &It &It - - + + Translations 语言包 - - + + Help 帮助 - - + + Python Configuration Files Python配置文件 - + QtiPlot - Choose default settings QtiPlot - 选择默认设置 - + General 常规 - - + + Tables 表格 - - + + 2D Plots 二维绘图 - - + + 3D Plots 三维绘图 - + Notes 笔记 - + Fitting 拟合 - + Options 选项 - + Curves 曲线 - + + Axes - + Ticks 刻度 - - - + + + Fonts 字体 - + Do not &resize layers when window size changes 当窗口尺寸变化的时候不改变图层尺寸(&r) - + &Disable in-place editing 禁用就地编辑(&D) - - + + Length 长度 - + Major Ticks 主刻度 - + Minor Ticks 次刻度 - + Margin 页边距 - + Axes title space 轴标题空白 - + Frame width 框架宽度 - + Canvas Fra&me 画布框架(&m) - + Show &Title 显示标题(&T) - + Scale &Fonts 缩放字体(&F) - + Auto&scaling 自动缩放(&s) - + Antia&liasing 反锯齿(&l) - + Legend display 图例显示 - - - + + + Column name 列名 - - - + + + Column comment 列注释 - + Table name 表名 - + Table legend 表图例 - - - + + + Transparent 透明 - + Axes &backbones 轴干线(&b) - + Axes linewidth 轴线宽 - + + Left - + + Right - + + Bottom - + + Top - + Enabled axes 启用轴 - + Show 显示 - - + + Labels 标签 - - + + None 不选 - - + + Out - - + + In & Out 内 & 外 - - + + In - + Print 打印 - + Print Crop&marks 打印截角标记(&m) - + &Scale layers to paper size 缩放图层到纸张尺寸(&S) - + Prompt on closing 关闭时提示 - + Folders - + Matrices 矩阵 - + &Notes 笔记(&N) - + &OK 确定(&O) - + &Cancel 取消(&C) - + &Apply 应用(&A) - + &Text Font 文本字体(&T) - + &Labels Font 标签字体(&L) - + A&xes Labels 轴标签(&x) - + Axes &Numbers 轴数字(&N) - + &Legend 图例(&L) - + T&itle 标题(&i) - + Prompt on &renaming tables when appending projects 添加到项目重命名表格时提醒(&r) - + Application 程序 - + Confirmations 确认 - - - + + + Colors 颜色 - + Numeric Format 数字格式 - + File Locations 文件位置 - + Language 语言 - - - - + + + + Style 样式 - - + + Grids 栅格 - - + + Ma&jor Grids 主栅格(&j) - - + + Mi&nor Grids 次栅格(&n) - - - + + + Color 颜色 - - + + &Keep aspect ratio 保持宽高比(&K) - - + + New Color - + + Line Color + 线颜色 + + + + Line Type + 线形 + + + + Thickness + + + + + &Default options + + + + + Grid + 栅格 + + + Geometry 布局 - + + Speed + 加速 + + + Ticks - Labels space 刻度-标签间距 - - + + pixels 像素 - + Axis title - + Default 默认 - + Unit 单位 - + inch 英寸 - + mm 毫米 - + cm 厘米 - + point - + pixel 像素 - + Canvas Width 画布宽 - + Canvas Height 画布高 - + Synchronize scale &divisions - + + Major Grids + 主栅格 + + + + Minor Grids + 次栅格 + + + + An&tialised + 反锯齿(&) + + + + Horizontal + 水平 + + + + Vertical + 垂直 + + + + &Disable for curves with more than + + + + + data points + 数据点 + + + Ask before over&writing files 覆盖文件前询问(&w) - + Main Font 主字体 - + Choose &font 选择字体(&f) - + Workspace 工作台 - + Panels text 面板文本 - + Panels 面板 - + Save every 保存每 - + &Backup project before saving 保存项目前备份(&B) - + Check for new versions at startup 启动时检查新版本 - + minutes 分钟 - + Default scripting language 默认脚本语言 - + Matrix Undo Stack Size 矩阵撤销堆栈大小 - + Endline character 行尾字符 - + Start New Project 开始新项目 - - + + Empty - + Table 表格 - + Matrix 矩阵 - + Empty Graph 空图 - + Note 笔记 - + &Enable autocompletion (Ctrl+U) 启用自动完成(&E)(Ctrl+U) - + + Open &last project at startup + + + + Number of Decimal Digits 小数位数 - + Decimal Separators 小数分隔符 - + Omit &Thousands Separator 忽略千位分隔符(&T) - + mu&Parser uses C locale settings muParser使用C本地设置(&P) - + Clipboard Decimal Separators 剪贴板小数分隔符 - + Automatically &Recalculate Column Values 自动重计算列值(&R) - + &Display Comments in Header 在头里面显示注释(&D) - + Default Column Separator 默认列分隔符 - - - - + + + + TAB TAB - - - - + + + + SPACE SPACE - + Text 文本 - + Default curve style 默认曲线样式 - + Line width 线宽 - + Symbol size 符号大小 - - + + &Load Default - + Delete Color - + Move Color Up - + Move Color Down - + Indexed Colors - + Inde&xed Symbols - + Move Symbol Up - + Move Symbol Down - + Pattern 图案 - + Line style - + Fill area under curve 填充曲线下方区域 - + Default Line Style - + Default Symbol - + Edge width - + &Fill Symbol - + Name 名称 - + Symbol 符号 - + Line 线状图 - + Scatter 散点图 - + Line + Symbol 线状图+符号 - + Vertical drop lines 垂线图 - + Spline 齿形图 - + Vertical steps 垂直阶梯图 - + Horizontal steps 水平阶梯图 - + Area 面积 - + Vertical Bars 垂直棒状图 - + Horizontal Bars 水平棒状图 - + &Resolution 分辨率(&R) - + (all data shown) (显示所有数据) - + &Show Legend 显示图例(&S) - + &Floor style 底线样式(&F) - + Isolines 等值线 - + Projection 投影 - + Smoot&h Line 平滑线(&h) - + O&rthogonal 正交(&r) - + Lab&els 标签(&e) - + &Mesh 网格(&M) - + &Grid 栅格(&G) - - - + + + &Numbers 数字(&N) - + A&xes 轴(&x) - + &Background 背景(&B) - + Default Color Map 默认颜色表 - + &Title 标题(&T) - + &Axes Labels 轴标签(&A) - + Autosca&ling 自动缩放(&l) - - + + Solid 实心 - - + + Dash 虚线 - - + + Dot - - + + Dash Dot 点划线 - - + + Dash Dot Dot 点划线点点 - - + + Short Dash 短划线 - - + + Short Dot 短点线 - - + + Short Dash Dot 短点划线 - + Tab length (pixels) 制表符长度(像素) - + Font 字体 - + &Display line numbers 显示行号(&D) - + Syntax Highlighting 语法高亮 - + Co&mments 注释(&m) - + &Keywords 关键字(&K) - + &Quotations 引用(&Q) - + &Functions 函数(&F) - + Q&t Classes Qt类(&t) - + Generated Fit Curve 拟合生成的曲线 - + Uniform X Function 统一X的函数 - + Points - + Same X as Fitting Data 跟拟合数据的X相同 - + 2 points for linear fits 线性拟合两点 - - + + Display Peak Curves for Multi-peak Fits 多峰拟合显示峰值曲线 - + Parameters Output 参数输出 - + Significant Digits 有效数字 - + Write Parameters to Result Log 参数写到结果日志 - + Paste Parameters to Plot 参数粘贴到绘图上 - + Scale Errors with sqrt(Chi^2/doF) 用sqrt(Chi^2/doF)调整误差 - + Peaks Color 峰值颜色 - + Display Confirmation &Messages for Multi-peak Fits 为多峰拟合显示确认信息(&M) - + QtiPlot - Import options error QtiPlot - 导入选项错误 - + The separator must not contain the following characters: 0-9eE.+- 分隔符不能包含以下字符: 0-9eE.+- - - + + QtiPlot - index.html File Not Found! QtiPlot - index.html没有找到! - + There is no file called <b>index.html</b> in folder %1.<br>Please choose another folder! %1文件夹中没有<b>index.html</b>文件.<br>请选择另一个文件夹! - + Choose the location of the QtiPlot translations folder! 选择QtiPlot语言包文件夹的位置! - + Choose the location of the QtiPlot help folder! 选择QtiPlot帮助文件夹的位置! - + There is no file called <b>index.html</b> in this folder.<br>Please choose another folder! 文件夹中没有<b>index.html</b>文件.<br>请选择另一个文件夹! - + Choose the location of the Python configuration files! 选择Python配置文件的位置! - - + + QtiPlot - Folder Not Found! QtiPlot - 文件夹未找到! - + The folder %1 doesn't exist.<br>Please choose another folder! 文件夹%1不存在.<br>请选择另一个文件夹! - + %1 is not a folder.<br>Please choose another folder! %1不是文件夹.<br>请选择另一个文件夹! - - + + + QtiPlot QtiPlot - + You don't have read access rights to folder %1.<br>Please choose another folder! 你没有%1文件夹的阅读权限.<br>请选择另一个文件夹! - - + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + + + + + &Internet Connection 网络连接(&I) - - + + &Proxy 代理(&P) - - + + Host 主机 - - + + Port 端口 - - + + Username 用户名 - - + + Password 密码 - + LaTeX Compiler LaTeX编译器 - + Choose the location of the LaTeX compiler! 选择LaTeX编译器的位置! - - + + QtiPlot - File Not Found! QtiPlot - 文件未找到! - + The file %1 doesn't exist.<br>Please choose another file! 文件%1不存在.<br>请选择另一个文件! - + %1 is a folder.<br>Please choose a file! %1是文件夹.<br>请选择一个文件! - + You don't have read access rights to file %1.<br>Please choose another file! 你没有%1文件的阅读权限.<br>请选择另一个文件! @@ -11333,32 +11418,37 @@ CurveRangeDialog - + QtiPlot - Plot range QtiPlot - 绘图值域 - + Data set: 数据集: - + From row number 自行号 - + To row number 至行号 - + + Apply to &all layer curves + + + + &OK 确定(&O) - + &Close 关闭(&C) @@ -11451,67 +11541,92 @@ 直方图 - + + Axes + + + + + Bottom + + + + + Top + + + + + Left + + + + + Right + + + + Available data 可用数据 - + Graph contents 图片内容 - + &Plot Associations... 绘图关联(&P)... - + Edit &Range... 编辑范围(&R)... - + &Edit Function... 编辑函数(&E)... - + OK 确定 - + Close 关闭 - + &Show Range 显示范围(&S) - + Show current &folder only 只显示当前文件夹(&f) - + &Plot Selection 绘制所选(&P) - + &Plot 绘图(&P) - + &Delete Selection 删除所选(&D) - + &Delete Curve 删除曲线(&D) @@ -11846,13 +11961,13 @@ Differentiation - - + + Derivative 导数 - + of Derivative of @@ -11867,424 +11982,432 @@ + EllipseWidget + + + Ellipse + 椭圆 + + + EnrichmentDialog - - - - + + + + QtiPlot QtiPlot - + Tex Equation Editor Tex公式编辑器 - + Clea&r 清除(&r) - + Window Geometry 窗口几何属性 - + Object Properties 对象属性 - + &Apply 应用(&A) - + &Close 关闭(&C) - + Preview: 预览: - - + + &Text 文本(&T) - - + + Color 颜色 - + &Font 字体(&F) - + Background 背景 - - + + Opacity 不透明度 - - + + Transparent 透明 - + Rotate (deg.) 旋转(角度) - + Auto-&update 自动更新(&u) - + TeX &Output TeX输出(&O) - - - + + + Set As &Default 设为默认(&D) - + Apply format &to... 应用格式到(&t)... - - - + + + Object 对象 - - - + + + Layer 图层 - - - + + + Window 窗口 - - - + + + All Windows 所有窗口 - + File 文件 - + &Save internally 内部保存(&S) - + &Image 图像(&I) - + Shape 形状 - + None 不选 - + Line 线 - + Rectangle 矩形 - + Shadow 阴影 - + Line Style 线样式 - - + + Width 宽度 - - + + Apply t&o... 应用到(&o)... - + &Frame 框架(&F) - + Fill Color 填充颜色 - + Pattern 图案 - + Pattern Color 图案颜色 - + Use &Frame Color 使用框架颜色(&F) - + Fill &Pattern 填充图案(&P) - + Page - + Layer Scales 层比例尺 - + Attach to 附加至 - + inch 英寸 - + mm 毫米 - + cm 厘米 - + point - + pixel 像素 - + scale 比例 - + Unit 单位 - + Position 位置 - + X X - + Y Y - + Size 大小 - + Height - + &Keep aspect ratio 保持宽高比(&K) - + &Best size 最佳尺寸(&B) - + &Geometry 布局(&G) - + Network connection error 网络连接错误 - + Error while trying to connect to host %1: 尝试连接主机%1时错误: - + Please verify your network connection! 请检查你的网络连接! - + QtiPlot - Import image from file QtiPlot - 从文件导入图像 - + QtiPlot - Warning QtiPlot - 警告 - + The file %1 doesn't exist. The image cannot be restored when reloading the project file! 文件%1不存在。当重载项目文件时图像无法恢复! - + MathTran (http://www.mathtran.org/) MathTran (http://www.mathtran.org/) - + locally installed 本地已安装 - + LaTeX Compiler LaTeX编译器 - + Compile process ended 编译过程结束 - + Compiling process ended with exit code: %1 编译过程结束于代码:%1 - + LaTeX compile process LaTeX编译过程 - + dvipng process dvipng过程 - - + + failed to start! 启动失败! - + Please verify that you have dvipng installed in the same folder as your LaTeX compiler! 请保证你在LaTeX编译器的目录下安装了dvipng! - + crashed 已崩溃 - + timedout 超时 - + write error 写错误 - + read error 读错误 - + unknown error 未知错误 - + Compile error 编译错误 - + Please set the correct path to the compiler in the preferences dialog! 请在选项对话框设置编译器的正确路径! @@ -12954,82 +13077,82 @@ Filter - - - - - - + + + + + + QtiPlot QtiPlot - - - - - + + + + + Error 错误 - + Please assign a curve first! 请先制定一条曲线! - + Several data points have the same x value causing divisions by zero, operation aborted! 部分点X值相同,导致被0除,操作中止! - - + + You need at least %1 points in order to perform this operation! 你需要至少%1个点来进行操作! - + QtiPlot - Filter Error QtiPlot - 滤波器错误 - + Please enter a valid curve name! 请输入一个有效的曲线名称! - + QtiPlot - Color Name Error QtiPlot - 颜色名称错误 - + The color name '%1' is not valid, a default color (red) will be used instead! 颜色名称'%1'无效,使用默认颜色(红色)! - + You didn't specify a valid data set for this operation! 你还没有为该操作选定一个有效的数据集! - + of - + Plot 绘图 - + Memory Allocation Error 内存分配错误 - + Not enough memory, operation aborted! 内存不足,操作中止! @@ -13409,194 +13532,194 @@ 列%1数据点少于拟合数据集。你选择其它列!。 - + Parameter 参数 - + Value - + Error 错误 - - - - - - - + + + + + + + QtiPlot - Fit Error QtiPlot - 拟合错误 - - - + + + Please perform a fit first! 请先进行一个拟合! - + FitResiduals 残差拟合 - + Residuals of %1 %1的残差 - + residue 残差 - - - - - - - + + + + + + + QtiPlot - Memory Allocation Error QtiPlot - 内存分配错误 - - - - - - + + + + + + Not enough memory! 内存不足! - - + + FitStats 拟合状态 - + Confidence Limits of %1 %1的置信限 - - + + Independent Variable 独立变量 - + LCL 置信下限 - + Lower %1 Confidence Limit %1的置信下限 - + UCL 置信上限 - + Upper %1 Confidence Limit %1的置信上限 - + Prediction Limits of %1 %1的预测限 - + LPL 预测下限 - + Lower %1 Prediction Limit %1的预测下限 - + UPL 预测上限 - + Upper %1 Prediction Limit %1的预测上限 - + You didn't specify a valid data set for this fit operation. Operation aborted! 你没有为此次拟合指定有效的数据集。操作中止! - + There are no parameters specified for this fit operation. Operation aborted! 你没有为此次拟合指定参数。操作中止! - + You need at least %1 data points for this fit operation. Operation aborted! 你需要至少%1个数据点来拟合。操作中止! - + You must specify a valid fit function first. Operation aborted! 你必须首先指定一个有效的拟合函数。操作中止! - - + + Could not allocate enough memory for the fit curves! 不能为拟合曲线分配足够的内存! - + QtiPlot - Memory Allocation Error QtiPlot - 内存分配错误 - + Fit 拟合 - + QtiPlot QtiPlot - + File Save Error 文件保存错误 - + Could not write to file: <br><h4> %1 </h4><p>Please verify that you have the right to write to this location! 无法写入文件: <br><h4> %1 </h4><p>请保证你在这个位置有写权限! - + QtiPlot Fit Model QtiPlot拟合模型 - + Cannot read file %1: %2. 不能读取文件%1: @@ -14609,10 +14732,10 @@ - - - - + + + + QtiPlot - Error QtiPlot - 错误 @@ -14623,38 +14746,38 @@ 不能将轴类型转换为请求格式! - - + + Please provide a valid file name! 请提供有效的文件名! - + File format not handled, operation aborted! 无法处理的文件格式,操作中止! - + layer - + Title 标题 - + QtiPlot - File open error QtiPlot - 文件打开错误 - + Image file: <p><b> %1 </b><p>does not exist anymore! 图像文件<p><b> %1 </b><p>不再存在! - + Data set generated from curve 从曲线生成数据集 @@ -14663,100 +14786,100 @@ 表格 - - - + + + QtiPlot - Warning QtiPlot - 警告 - + The columns - + are empty and will not be added to the plot! 是空的并且不会被添加到绘图中! - + The column - + is empty and will not be added to the plot! 是空的并且不会被添加到绘图中! - - + + Cu&t 剪切(&t) - - + + &Copy 复制(&C) - - + + C&lear 清除(&l) - - + + &Delete 删除(&D) - - - + + + &Properties... 属性(&P)... - + &Rescale to show all 重缩放显示所有(&R) - + Ctrl+Shift+R Ctrl+Shift+R - + &Hide axis 隐藏轴(&H) - + &Show grids 显示网格(&S) - + &Scale... 比例(&S)... - + There are no curves available on this plot! 绘图中没有有效曲线! - + There are no curves with more than two points on this plot. Operation aborted! 绘图中没有包含多于两个点的曲线。操作中止! - + F F @@ -14779,20 +14902,20 @@ Z轴 - - - + + + QtiPlot - Error QtiPlot - 错误 - - + + Please provide a valid file name! 请提供有效的文件名! - + File format not handled, operation aborted! 无法处理的文件格式,操作中止! @@ -15000,18 +15123,24 @@ ImageWidget - - + + + Image + 图像 + + + + QtiPlot - File openning error QtiPlot - 文件打开错误 - + The file: <b>%1</b> doesn't exist! 文件:<b>%1</b>不存在! - + You don't have the permission to open this file: <b>%1</b> 你没有权限打开<b>%1</b>文件 @@ -15024,22 +15153,22 @@ QtiPlot - 导入ASCII文件 - + All files 所有文件 - + Text files 文本文件 - + Data files 数据文件 - + Comma Separated Values 逗号分隔的值 @@ -15050,12 +15179,12 @@ - + New Table 新建表格 - + New Matrice 新建矩阵 @@ -15327,12 +15456,12 @@ QtiPlot - 帮助 - + QtiPlot - File openning error QtiPlot - 文件打开错误 - + You don't have the permission to open this file: <b>%1</b> 你没有权限打开<b>%1</b>文件 @@ -15867,7 +15996,7 @@ - + &Cancel 取消(&C) @@ -15892,57 +16021,65 @@ 交换(&S) - + QtiPlot - Delete Layers? QtiPlot - 删除图层? - + You are about to delete %1 existing layers. 你将要删除已存在的%1图层。 - + Are you sure you want to continue this operation? 你确定要继续此次操作? - + &Continue 继续(&C) - + QtiPlot - Columns input error QtiPlot - 列输入错误 - + The number of columns you've entered is greater than the number of graphs (%1)! 你输入的列数超过了图像数(%1)! - + QtiPlot - Rows input error QtiPlot - 行输入错误 - + The number of rows you've entered is greater than the number of graphs (%1)! 你输入的行数超过了图像数(%1)! - + QtiPlot - Error QtiPlot - 错误 - + Please enter different indexes for the source and destination layers! 请为源和目的图层输入不同的索引号! + LegendWidget + + + Legend + + + + LineDialog @@ -16747,121 +16884,121 @@ MultiLayer - + Add layer 添加层 - + Remove active layer 移除活动层 - + QtiPlot - Guess best layout? QtiPlot - 猜测最优布局? - + Do you want QtiPlot to rearrange the remaining layers? 你希望QtiPlot重排现在的图层吗? - + &Yes 是(&Y) - + &No 否(&N) - + &Cancel 取消(&C) - - - + + + QtiPlot - Error QtiPlot - 错误 - - + + Please provide a valid file name! 请提供有效的文件名! - + File format not handled, operation aborted! 无法处理的文件格式,操作中止! - + kB kB - + Offset Amount... 偏移量... - + Reverse Order 逆序 - + Fill Area... 填充区域... - + Offset Dialog 偏移设置窗口 - + Total Y Offset (%) 总Y偏移(%) - + Total X Offset (%) 总X偏移(%) - + &Apply 应用(&A) - - + + &Close 关闭(&C) - + Fill Curves 填充曲线 - + Enable Fill 启用填充 - + Fill with Color 填充色 - + Side Lines 边线 @@ -17665,260 +17802,261 @@ PlotDialog - + QtiPlot - Plot details QtiPlot - 绘图详情 - + Plot type 绘图类型 - + &Worksheet 工作表(&W) - + &OK 确定(&O) - + &Cancel 取消(&C) - + &Apply 应用(&A) - - + + &Plot Associations... 绘图关联(&P)... - + Titles 标题 - + Axes Labels 轴标签 - + Axes Numbers 轴数字 - + Legends 图例 - - + + Fonts 字体 - + Background Color 背景颜色 - - - + + + Opacity 不透明度 - - - + + + Transparent 透明 - + Canvas Color 画布颜色 - + Border Color 边框颜色 - - - - - + + + + + Width 宽度 - + Antialiasing 反锯齿 - + Margin 页边距 - + Set As &Default 设为默认(&D) - - - + + + Apply &to... 应用到(&t)... - - - - - - - - - - + + + + + + + + + + + Layer 图层 - - - - - - + + + + + + Window 窗口 - - - - - - + + + + + + All Windows 所有窗口 - - + + inch 英寸 - - + + mm 毫米 - - + + cm 厘米 - - + + point - - + + pixel 像素 - - + + Unit 单位 - - + + Origin Origin - - + + X= X= - - + + Y= Y= - - - - + + + + Size 大小 - - + + width= 宽= - - + + height= 高= - - + + Keep aspect ratio 保持宽高比 - - - + + + Geometry 布局 - + &Speed Mode, Skip Points if needed 加速模式,如果必要会跳过一些点(&S) - + data points 数据点 - + Apply to curves with more than: 应用到曲线用多余: @@ -17927,855 +18065,875 @@ 容差(Douglas Peuke算法) - - - + + + Speed 加速 - - - - - - + + + + + + Color 颜色 - - - - - + + + + + Style 样式 - + Border 边界 - + First color 第一颜色 - - - - - - + + + + + + Pattern 图案 - + Fill 填充 - + 3D View 三维视图 - + View Angle (deg) 视角(度) - + Thickness (% of radius) 厚(半径的百分比) - + Rotation 旋转 - + Starting Azimuth (deg) 起始方位角(度) - + Counter cloc&kwise 顺时针计数(&k) - + Radius/Center 半径/中心 - + Radius (% of frame) 半径(框架的百分比) - + Horizontal Offset (% of frame) 水平偏移(框架的百分比) - - + + Pie Geometry 饼状图几何属性 - + Automatic &Format 自动格式化(&F) - + &Values 值(&V) - + &Percentages 百分比(&P) - + Categories/&Rows 类别/行(&R) - + Associate Position with &Wedge 用楔子关联位置(&W) - + Dist. from Pie Edge 到饼状图边缘的距离 - - - - - + + + + + Labels 标签 - + &Scale layers to paper size 缩放图层到纸张尺寸(&S) - + Print Crop&marks 打印截角标记(&m) - - + + Print 打印 - + &Show 显示(&S) - + Column - + White O&ut 不透明(&u) - + Justify 证明 - + Center 居中 - - - + + + Left 左对齐 - - - + + + Right 右对齐 - + &Font 字体(&F) - + Rotate (deg) 旋转(角度) - + + Move upward + + + + + Move downward + + + + Link &X axes - - + + Miscellaneous - + Scale &Fonts 缩放字体(&F) - + Do not &resize layers when window size changes 当窗口尺寸变化的时候不改变图层尺寸(&r) - - + + Dimensions 维度 - + 0 (all data points) - + Tolerance (Douglas-Peucker algorithm) - + X Offset (font height %) X偏移(字体高度百分比) - + Y Offset (font height %) Y偏移(字体高度百分比) - + Attach curve to: 附加曲线至: - + x Axis X轴 - - + + Bottom - - + + Top - + y Axis Y轴 - - + + Axes - + Connect 连接 - + No line 没有线 - + Lines 线 - + Sticks - + Horizontal Steps 水平阶梯图 - + Dots - + Spline 齿形图 - + Vertical Steps 垂直阶梯图 - - - + + + Apply Format &to 应用格式至(&t) - - - + + + Selected Curve 选择曲线 - + Fill area under curve 填充曲线下方区域 - + Fill color 填充颜色 - - - - + + + + Line 线 - - + + Fill Color 填充颜色 - - + + Edge Color 边缘颜色 - - + + Edge Width 边缘宽度 - - + + Skip Points 跳过点 - - + + None 不选 - - - - + + + + Symbol 符号 - - + + Box 箱形框 - - + + Type 类型 - + No Box 无边框 - + Rectangle 矩形 - + Diamond 菱形 - + Perc 10, 25, 75, 90 百分比 10, 25, 75, 90 - + Notch V型切口 - - + + Range 范围 - - - + + + Standard Deviation 标准差 - - + + Standard Error 标准误差 - + Perc 25, 75 百分比 25, 75 - + Perc 10, 90 百分比 10, 90 - + Perc 5, 95 百分比 5, 95 - + Perc 1, 99 百分比 1, 99 - - + + Max-Min 最大-最小 - - + + Constant 常数 - - + + Percentile (%) 百分比(%) - + Coefficient 系数 - + Box Width 箱形宽度 - + Whiskers 有须 - + No Whiskers 无须 - + 75-25 75-25 - + 90-10 90-10 - + 95-5 95-5 - + 99-1 99-1 - + Coef 系数 - - + + Box/Whiskers 箱形图 - + Max 最大值 - + 99% 99% - - + + Mean 平均值 - + 1% 1% - + Min 最小值 - - + + Percentile 百分比 - - + + Image 图像 - + &Gray Scale 灰阶(&G) - + &Default Color Map 默认颜色表(&D) - + &Custom Color Map 自定义颜色表(&C) - - + + Contour Lines 等值线图 - + Levels - + Use &Color Map 使用颜色表(&C) - + Use Default &Pen 使用默认笔触(&P) - + Color Bar Scale 颜色棒比例 - + Axis - + Contour 等值线 - + Direction 方向 - + Plus - + Minus - + &X Error Bar &X误差棒 - - + + Line Width 线宽 - + Cap Width 冠宽度 - + 8 8 - + 10 10 - + 12 12 - + 16 16 - + 20 20 - + Through Symbol 贯穿符号 - - - + + + Error Bars 误差棒 - + Automatic Binning 自动Binning - + &Show statistics 显示统计信息(&S) - + Bin Size Bin尺寸 - + Begin 开始 - + End 结束 - - + + Histogram Data 直方图数据 - + Gap Between Bars (in %) 棒间间隔(%) - + Offset (in %) 偏移(%) - - + + Spacing 间距 - + Arrowheads 箭头头部 - + Length 长度 - - + + Angle 角度 - + &Filled 填充(&F) - - + + End Point 终点 - - + + X End X终点 - - + + Y End Y终点 - + Position 位置 - + Tail 尾部 - + Middle 中部 - + Head 头部 - - + + Vector 矢量 - - - + + + Bins Bins - - + + Histogram and Probabilities for 直方图和几率 - + Quantity 数量 - + Sum - + Percent 百分比 - + Minimum 最小 - + Maximum 最大 - + + Move &upward + + + + + Move do&wnward + + + + &Delete 删除(&D) @@ -18784,163 +18942,163 @@ 编辑(&E)... - - + + Colors 颜色 - + &Function 函数(&F) - + Pie 饼状图 - + Vertical Bars 垂直棒状图 - + Horizontal Bars 水平棒状图 - + Histogram 直方图 - + Vector XYXY 矢量图XYXY - + Vector XYAM 矢量图XYAM - + Scatter 散点图 - + Line + Symbol 线状图+符号 - - - - + + + + QtiPlot - Input error QtiPlot - 输入错误 - + Please enter a valid start limit! 请输入有效的起始限制! - + Please enter a valid end limit! 请输入有效的结束限制! - + Please enter a valid bin size value! 请输入一个有效的bin尺寸值! - + QtiPlot - Start limit error QtiPlot - 起始限制错误 - + QtiPlot - End limit error QtiPlot - 结束限制错误 - + Please enter limits that satisfy: begin < end! 请输入限制满足begin < end! - - + + QtiPlot - Bin size input error QtiPlot - Bin尺寸输入错误 - + Please enter a positive bin size value! 请输入一个正的bin尺寸值! - + Vector Data 矢量图数据 - + Magnitude - + Matrix 矩阵 - + Use matrix formula to calculate values 用矩阵式计算值 - - + + Values - + &Show Contour Lines 显示等值线图(&S) - + Set Equidistant Levels 设置等距级数 - + Start 开始 - + Step 步长 - + Set &Levels 设置等级(&L) - + Pen 笔触 - + Use &Table Custom Pen 使用表格自定义笔触(&T) @@ -19207,7 +19365,7 @@ PreviewTable - + Format 格式 @@ -19328,37 +19486,37 @@ 格式: - + &Close 关闭(&C) - + Column - + Numeric 数字 - + Type 类型 - + Text 文本 - + Date 日期 - + Time 时间 @@ -19367,7 +19525,7 @@ - + Choose column type @@ -20019,6 +20177,14 @@ + RectangleWidget + + + Rectangle + 矩形 + + + RenameWindowDialog @@ -21304,9 +21470,9 @@ - - - + + + QtiPlot QtiPlot @@ -21321,23 +21487,23 @@ - - - - - - - - - - + + + + + + + + + + QtiPlot - Error QtiPlot - 错误 - + Column '%1' is read only! 列'%1'为只读! @@ -21353,55 +21519,55 @@ - - - - - - - + + + + + + + The folowing columns 以下列 - - - - - - - + + + + + + + are read only! 是只读! - + Paste operation 粘贴操作 - + How should QtiPlot interpret first clipboard line? QtiPlot该如何翻译剪贴板中的第一行? - + &Values 值(&V) - + Column &Names 列名(&N) - + &Comments 注释(&C) - + Please indicate the name of the leading column! 请注明前导列的名称! @@ -21410,60 +21576,60 @@ 前导列类型必须为'文本'!操作中止! - + The leading column is empty! Operation aborted! 前导列为空!操作中止! - + Qtiplot QtiPlot - + Reading file... 读取文件... - + QtiPlot - ASCII Export Error QtiPlot - ASCII导出错误 - + Could not write to file: <br><h4> 不能写入文件: <br><h4> - + Rows will be deleted from the table! 将从表中删除行! - - + + Do you really want to continue? 你想继续吗? - - + + Yes - - + + Cancel 取消 - + Columns will be deleted from the table! 将从表中删除列! - + kB kB @@ -21912,6 +22078,14 @@ + TexWidget + + + Equation + + + + TextDialog diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_cz.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_cz.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_cz.ts 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_cz.ts 2010-12-01 21:48:36.000000000 +0000 @@ -1358,7 +1358,7 @@ Ctrl+W - Ctrl+W + Ctrl+W Ctrl+X @@ -1522,7 +1522,7 @@ Normal - Obvyklá + Obvyklá Front grid @@ -3066,7 +3066,7 @@ Save project as - Uložit projekt jako + Uložit projekt jako Save Project As @@ -3811,98 +3811,114 @@ Waterfall Plot - + Vodopádový nákres &Extract Data... - + &Vytáhnout data... S&ubtract - + &Odečíst &Straight Line... - + &Přímka... &Reference Data... - + &Srovnávací data... &Open... - &Otevřít... + &Otevřít... Open Image &File... - + Otevřít &soubor s obrázkem... &Print... - + &Tisk... Print Pre&view... - Náhled &tisku... + Ná&hled tisku... E&xport ASCII... - + &Vyvést jako ASCII... The selected table is empty, operation aborted! - + Vybraná tabulka je prázdná. Operace byla zrušena! Export Exce&l ... - + Vyvést Exce&l... Export Excel - + Vyvést Excel &Front - + &Přední část &Back - + &Zadní část Raise object on top - + Dát předmět nahoru Lower object to the bottom - + Dát předmět dolů The selected Y column is empty, operation aborted! - + Vybraný sloupec Y je prázdný. Operace byla zrušena! The associated X column is empty, operation aborted! - + Související sloupec X je prázdný. Operace byla zrušena! Excel files - + Soubory programu Excel Save Window As - + Uložit okno jako Save &Window As... - + Uložit &okno jako... &Baseline... - + &Základní čára... Shift+T + Shift+T + + + Overwrite file? + Přepsat soubor? + + + %1 already exists. + %1 již existuje. + + + Do you want to replace it? + Chcete jej nahradit? + + + Yes, don't ask me again @@ -4453,78 +4469,78 @@ Prefix - + Předpona Suffix - + Přípona BaselineDialog QtiPlot - QtiPlot + QtiPlot Baseline - + Základní čára Create Baseline - + Vytvořit základní čáru Curve - Křivka + Křivka Points - Body + Body &Interpolation - + &Interpolace Linear - Lineární + Přímočará Cubic - Trojrozměrná + Trojrozměrná Non-rounded Akima - Ne-kulatá Akima + Ne-kulatá Akima User Defined &Equation Y = - + Uživatelsky stanovená &rovnice Y = Existing &Dataset - + Stávající &soubor dat Create &Baseline - + Vytvořit &základní čáru &Subtract - + &Odečíst &Undo Subtraction - + &Vrátit zpět odečtení &Modify - + &Upravit &Close - &Zavřít + &Zavřít @@ -5665,14 +5681,74 @@ Axis title - + Název osy Default - Výchozí + Výchozí Synchronize scale &divisions + Seřídit &rozdělení stupnice + + + Line Color + Barva čáry + + + Line Type + Druh čáry + + + Thickness + Síla v průřezu + + + Grid + Mřížka + + + Major Grids + Hlavní mřížka + + + Minor Grids + Podmřížka + + + An&tialised + Vyhla&zeno + + + Horizontal + Vodorovně + + + Vertical + Svisle + + + Speed + Rychlost + + + &Disable for curves with more than + &Zakázat pro mřížky s více než + + + data points + datové body + + + &Default options + + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + + + + Open &last project at startup @@ -5755,11 +5831,11 @@ The response dataset '%1' must contain an odd number of points! - Záznam s údaji o odpovědi '%1' musí obsahovat lichý počet bodů! + Soubor dat odpovědi '%1' musí obsahovat lichý počet bodů! The response dataset '%1' must be less then half the size of the signal dataset '%2'! - Záznam s údaji o odpovědi '%1' musí být menší než poloviční oproti záznamu s údaji o signálu '%2'! + Soubor dat odpovědi '%1' musí být menší než poloviční oproti záznamu s údaji o signálu '%2'! @@ -5870,6 +5946,10 @@ QtiPlot - Plot range QtiPlot - Rozsah nákresu + + Apply to &all layer curves + Použít na křivky &všech vrstev + CurvesDialog @@ -5993,6 +6073,26 @@ Horizontal steps Vodorovné kroky + + Axes + Osy + + + Bottom + Dole + + + Top + Nahoře + + + Left + Vlevo + + + Right + Vpravo + CustomActionDialog @@ -6243,6 +6343,13 @@ + EllipseWidget + + Ellipse + Elipsa + + + EnrichmentDialog X @@ -6802,19 +6909,19 @@ ExtractDataDialog QtiPlot - QtiPlot + QtiPlot Extract Data - + Vytáhnout data For row (i) - Pro řádek (i) + Pro řádek (i) to - + do Add function @@ -6826,7 +6933,7 @@ &Apply - &Použít + &Použít Clear &Formulas @@ -6834,35 +6941,35 @@ &Close - &Zavřít + &Zavřít &Put into table - + &Dát do tabulky Table - Tabulka + Tabulka Cond&ition: - + &Podmínka: Add &function - + Přidat &funkci Add co&lumn - + Přidat s&loupec Add &operator - + Přidat &operátor Clea&r - Vypráz&dnit + Vypráz&dnit @@ -6917,7 +7024,7 @@ Angle (deg) - + Úhel (stupně) @@ -7354,7 +7461,7 @@ Arbitrary Dataset - Libovolný záznam s údaji + Libovolný soubor dat RSS (Residual Sum of Squares) @@ -7474,11 +7581,11 @@ Dataset - Záznam s údaji + Soubor dat of dataset - záznamu s údaji + souboru dat No weighting @@ -7490,7 +7597,7 @@ Direct Weighting using Dataset - Přímé zvážení za použití záznamu s údaji + Přímé zvážení za použití souboru dat Function @@ -7544,7 +7651,7 @@ Chi^2/doF - + Chí^2/doF @@ -7651,7 +7758,7 @@ Arbitrary Dataset - Libovolný záznam s údaji + Libovolný soubor dat Please perform a fit first and try again. @@ -8573,6 +8680,10 @@ The file: <b>%1</b> doesn't exist! Soubor: <b>%1</b> neexistuje! + + Image + Obrázek + ImportASCIIDialog @@ -8866,7 +8977,7 @@ Column T&ypes... - + T&ypy sloupců... @@ -9332,6 +9443,13 @@ + LegendWidget + + Legend + Vysvětlivka + + + LineDialog X @@ -11576,15 +11694,31 @@ Scale &Fonts - Velikost &písma + Velikost &písma Do not &resize layers when window size changes - Neměnit &velikost vrstev při změně velikosti okna + Neměnit &velikost vrstev při změně velikosti okna Dimensions - Rozměry + Rozměry + + + Move upward + Posunout nahoru + + + Move downward + Posunout dolů + + + Move &upward + Posunout &nahoru + + + Move do&wnward + Posunout &dolů @@ -11779,19 +11913,19 @@ PreviewTable Numeric - Číselný + Číselný Text - Text + Text Date - Datum + Datum Time - Čas + Čas Month @@ -11799,7 +11933,7 @@ Choose column type - + Vybrat typ sloupce dd/MM/yyyy @@ -11919,19 +12053,19 @@ &Close - &Zavřít + &Zavřít Column - Sloupec + Sloupec Type - + Typ Format - Formát + Formát @@ -12350,45 +12484,48 @@ rnd(seed): Returns a pseudo-random number in the range 0 to 1. Calling this function several times with the same seed will return the same value. - + rnd(semeno): + Vrátí falešné náhodné číslo v rozsahu 0 až 1. Volání této funkce poněkolikáté s tím samým základem (semenem) vrátí tutéž hodnotu. angle - úhel + úhel length - délka + délka dx - dx + dx dy - dy + dy eqn - rovnice + rovnice y - y + y x - x + x MIN("colName", i, j): The minimum of all cells from row i to j in column colName. - + MIN("colName", i, j): + Minimum všech buněk od řádku i po j ve sloupci colName. MAX("colName", i, j): The maximum of all cells from row i to j in column colName. - + MAX("colName", i, j): + Maximum všech buněk od řádku i po j ve sloupci colName. @@ -12502,6 +12639,13 @@ + RectangleWidget + + Rectangle + Obdélník + + + RenameWindowDialog &OK @@ -13134,58 +13278,58 @@ SubtractDataDialog QtiPlot - QtiPlot + QtiPlot Math on Data Sets - + Matematika na soubory dat Cu&rve - + &Křivka &Operator - + &Operátor &Data set - + &Soubor dat Current &folder - + Nynější &složka &Value - + &Hodnota &Apply - &Použít + &Použít &Close - &Zavřít + &Zavřít Error - Chyba + Chyba Data set %1 must containt at least two valid data points in order to perform this operation! - + Soubor dat %1 musí obsahovat alespoň dva platné datové body, aby tato operace mohla být provedena! SubtractLineTool Move cursor and click to select and double-click/press 'Enter' to set the position of the first point! - + Posuňte ukazovátko a klepněte pro výběr a dvakrát klepněte/stiskněte 'Enter' pro stanovení polohy prvního bodu! First point selected! Click to select and double-click/press 'Enter' to set the position of the 2nd point! - + První bod byl vybrán! Klepněte pro výběr a dvakrát klepněte/stiskněte 'Enter' pro stanovení polohy druhého bodu! @@ -13867,6 +14011,13 @@ + TexWidget + + Equation + Rovnice + + + TextDialog Font @@ -14155,11 +14306,11 @@ MIN() works only on tables! - + MIN() pracuje pouze u tabulek! MAX() works only on tables! - + MAX() pracuje pouze u tabulek! diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_de.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_de.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_de.ts 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_de.ts 2010-12-01 21:48:35.000000000 +0000 @@ -5144,7 +5144,7 @@ Normal - Normal + Normal <h4>There are no plot layers available in this window.</h4><p><h4>Please add a layer and try again!</h4> @@ -6080,7 +6080,7 @@ Ctrl+W - Strg+W + Strg+W Add column @@ -8594,7 +8594,7 @@ Save project as - Projekt speichern als + Projekt speichern als windows @@ -9878,10 +9878,6 @@ - Save Window As - - - Save &Window As... @@ -9893,6 +9889,22 @@ Shift+T Umschalt+T + + Overwrite file? + Datei überschreiben? + + + %1 already exists. + %1 existiert bereits. + + + Do you want to replace it? + Möchten Sie ersetzen? + + + Yes, don't ask me again + + ArrowMarker @@ -10565,10 +10577,6 @@ - Create Baseline - - - Curve Kurve @@ -11932,6 +11940,66 @@ Synchronize scale &divisions &Gleiche Skalenabstände bei doppelten Achsen + + Line Color + + + + Line Type + Linientyp + + + Thickness + + + + Grid + + + + Major Grids + + + + Minor Grids + + + + An&tialised + Kanteng&lättung + + + Horizontal + Horizontal + + + Vertical + Vertikal + + + Speed + Beschleunigung + + + &Disable for curves with more than + + + + data points + Datenpunkten + + + &Default options + + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + + + + Open &last project at startup + + ContourLinesEditor @@ -12139,6 +12207,10 @@ &Close S&chließen + + Apply to &all layer curves + + CurvesDialog @@ -12274,6 +12346,26 @@ Histogram Histogramm + + Axes + Achsen + + + Bottom + Unten + + + Top + Oben + + + Left + Links + + + Right + Rechts + CustomActionDialog @@ -12547,6 +12639,13 @@ + EllipseWidget + + Ellipse + Ellipse + + + EnrichmentDialog QtiPlot @@ -16274,6 +16373,10 @@ You don't have the permission to open this file: <b>%1</b> Sie haben nicht die Rechte um die Datei <b>%1</b> zu öffnen. + + Image + Farbbild + ImportASCIIDialog @@ -17529,6 +17632,13 @@ + LegendWidget + + Legend + + + + LineDialog QtiPlot - Line options @@ -20554,6 +20664,22 @@ Dimensions Größe + + Move upward + + + + Move downward + + + + Move &upward + + + + Move do&wnward + + PlotWizard @@ -21561,6 +21687,13 @@ + RectangleWidget + + Rectangle + Rechteck + + + RenameWindowDialog QtiPlot - Rename Window @@ -23226,6 +23359,13 @@ + TexWidget + + Equation + + + + TextDialog QtiPlot - Text options diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_es.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_es.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_es.ts 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_es.ts 2010-12-01 21:48:35.000000000 +0000 @@ -3690,7 +3690,7 @@ Normal - Normal + Normal <h4>There are no plot layers available in this window.</h4><p><h4>Please add a layer and try again!</h4> @@ -4570,7 +4570,7 @@ Ctrl+W - Ctrl+W + Ctrl+W Add column @@ -7074,10 +7074,6 @@ - Save project as - - - &Delete Folder Eliminar Carpeta @@ -8227,10 +8223,6 @@ - Save Window As - - - Save &Window As... @@ -8242,6 +8234,22 @@ Shift+T + + Overwrite file? + + + + %1 already exists. + + + + Do you want to replace it? + + + + Yes, don't ask me again + + AssociationsDialog @@ -8833,10 +8841,6 @@ - Create Baseline - - - Curve Curva @@ -10081,6 +10085,66 @@ Synchronize scale &divisions + + Line Color + Color de Línea + + + Line Type + Tipo de Línea + + + Thickness + Grosor + + + Grid + + + + Major Grids + Mallas Primarias + + + Minor Grids + Mallas Secundarias + + + An&tialised + + + + Horizontal + Horizontal + + + Vertical + Vertical + + + Speed + + + + &Disable for curves with more than + + + + data points + + + + &Default options + + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + + + + Open &last project at startup + + ContourLinesEditor @@ -10288,6 +10352,10 @@ &Close &Cerrar + + Apply to &all layer curves + + CurvesDialog @@ -10411,6 +10479,26 @@ Histogram + + Axes + Ejes + + + Bottom + Inferior + + + Top + Superior + + + Left + Izquierda + + + Right + Derecha + CustomActionDialog @@ -10676,6 +10764,13 @@ + EllipseWidget + + Ellipse + Elipse + + + EnrichmentDialog QtiPlot @@ -13735,6 +13830,10 @@ You don't have the permission to open this file: <b>%1</b> + + Image + Imagen + ImportASCIIDialog @@ -14729,6 +14828,13 @@ + LegendWidget + + Legend + + + + LineDialog QtiPlot - Line options @@ -17358,6 +17464,22 @@ Dimensions Dimensiones + + Move upward + + + + Move downward + + + + Move &upward + + + + Move do&wnward + + PlotWizard @@ -18162,6 +18284,13 @@ + RectangleWidget + + Rectangle + Rectángulo + + + RenameWindowDialog Window Title @@ -19729,6 +19858,13 @@ + TexWidget + + Equation + + + + TextDialog QtiPlot - Text options diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_fr.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_fr.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_fr.ts 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_fr.ts 2010-12-01 21:48:35.000000000 +0000 @@ -148,7 +148,7 @@ Normal - Normal + Normal <h4>There are no plot layers available in this window.</h4><p><h4>Please add a layer and try again!</h4> @@ -718,7 +718,7 @@ Ctrl+W - Ctrl+W + Ctrl+W Window &Geometry... @@ -906,7 +906,7 @@ Set Column &Values ... - Fixer les &Valeurs de la Colonne... + Fixer les &valeurs de la Colonne... &Remove Layer @@ -1283,7 +1283,7 @@ This will modify the data in the worksheets! Are you sure you want to continue? - Ceci modifiera les données dans les tables ! + Cette action modifiera les données dans les tables ! Êtes vous sûr de vouloir continuer ? @@ -1500,19 +1500,19 @@ Create an empty 2D plot - Créer un graphe 2D vide + Nouveau graphe 2D Create an empty note window - Créer une fenêtre de commentaires vide + Nouvelle fenêtre de commentaires Create a new 2D function plot - Créer un nouveau graphe de fonction 2D + Nouveau graphe de fonction 2D Create a new 3D surface plot - Créer un nouveau graphe 3D + Nouveau graphe 3D Open Te&mplate... @@ -1800,7 +1800,7 @@ Draw arrow - Désiner une flèche + Déssiner une flèche Graph @@ -2569,7 +2569,7 @@ Open Excel - Ouvrir Excel + Ouvrir un fichier Excel Open ODF Spreadsheet @@ -2926,7 +2926,7 @@ Save project as - Enregistrer le projet sous + Enregistrer le projet sous bytes @@ -3002,7 +3002,7 @@ &Swap columns - Echanger les Colonne&s + Intervertirr les Colonne&s Move &Right @@ -3123,7 +3123,7 @@ Create a new folder - Créer un nouveau dossier + Nouveau dossier Swap selected columns @@ -3331,7 +3331,7 @@ Disregard Columns - + Ignorer les colonnes Mathematical Symbols @@ -3883,7 +3883,7 @@ Save Window As - Sauvegarder la fenêtre comme + Sauvegarder la fenêtre comme Save &Window As... @@ -3897,6 +3897,26 @@ Shift+T Shift+T + + Overwrite file? + Écraser le fichier ? + + + %1 already exists. + %1 existe déjà. + + + Do you want to replace it? + Voulez-vous le remplacer ? + + + chart + Diagramme + + + Yes, don't ask me again + + ArrowMarker @@ -4461,7 +4481,7 @@ Create Baseline - Créer la ligne de base + Créer la ligne de base Curve @@ -5659,6 +5679,66 @@ Synchronize scale &divisions S&ynchroniser les échelles opposées + + Line Color + Couleur de ligne + + + Line Type + Type de ligne + + + Thickness + Épaisseur + + + Grid + Grille + + + Major Grids + Grille principale + + + Minor Grids + Grille secondaire + + + An&tialised + An&tialiasé + + + Horizontal + Horizontal + + + Vertical + Vertical + + + Speed + Accélération + + + &Disable for curves with more than + In&disponible pour les courbes de plus de + + + data points + Données + + + &Default options + &Réinitialiser + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + Vous avez besoin de redémarrer QtiPlot pour que les changements soient éffectifs, voulez-vous le faire maintenant ? + + + Open &last project at startup + Ouvirir &le dernier projet au démarrage + ContourLinesEditor @@ -5854,6 +5934,10 @@ &Close &Fermer + + Apply to &all layer curves + &Appliquer à toutes les planches des courbes + CurvesDialog @@ -5977,6 +6061,26 @@ Histogram Histogramme + + Axes + Axes + + + Bottom + Inférieur + + + Top + Supérieur + + + Left + Gauche + + + Right + Droite + CustomActionDialog @@ -6223,6 +6327,13 @@ + EllipseWidget + + Ellipse + Éllipse + + + EnrichmentDialog QtiPlot @@ -8556,6 +8667,10 @@ You don't have the permission to open this file: <b>%1</b> Vous n'avez pas les droits pour ouvrir le fichier <b>%1</b> + + Image + Image + ImportASCIIDialog @@ -9236,7 +9351,7 @@ Swap Layers - Échanger les planches + Intervertir les planches Source Layer @@ -9280,6 +9395,13 @@ + LegendWidget + + Legend + Légende + + + LineDialog QtiPlot - Line options @@ -11531,6 +11653,22 @@ Dimensions Dimensions + + Move upward + Déplacer vers le haut + + + Move downward + Déplacer vers le bas + + + Move &upward + Déplacer vers le ha&ut + + + Move do&wnward + D&éplacer vers le ba&s + PlotWizard @@ -12449,6 +12587,13 @@ + RectangleWidget + + Rectangle + Rectangle + + + RenameWindowDialog Window Title @@ -13512,7 +13657,7 @@ Display - Affichage + Affichage : Numeric @@ -13835,6 +13980,13 @@ + TexWidget + + Equation + Équation + + + TextDialog QtiPlot - Text options diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_ja.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_ja.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_ja.ts 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_ja.ts 2010-12-01 21:48:36.000000000 +0000 @@ -974,10 +974,6 @@ - Normal - - - Save changes to project: <p><b> %1 </b> ? @@ -1431,10 +1427,6 @@ - Ctrl+W - - - Add Column @@ -2739,10 +2731,6 @@ - Save project as - - - Save &As Project... @@ -4397,10 +4385,6 @@ - Save Window As - - - Save &Window As... @@ -4412,6 +4396,22 @@ Shift+T + + Overwrite file? + + + + %1 already exists. + + + + Do you want to replace it? + + + + Yes, don't ask me again + + AssociationsDialog @@ -4943,10 +4943,6 @@ - Create Baseline - - - Curve @@ -6136,6 +6132,66 @@ Synchronize scale &divisions + + Line Color + + + + Line Type + + + + Thickness + + + + Grid + + + + Major Grids + + + + Minor Grids + + + + An&tialised + + + + Horizontal + + + + Vertical + + + + Speed + + + + &Disable for curves with more than + + + + data points + + + + &Default options + + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + + + + Open &last project at startup + + ContourLinesEditor @@ -6331,6 +6387,10 @@ &Close + + Apply to &all layer curves + + CurvesDialog @@ -6454,6 +6514,26 @@ Histogram + + Axes + + + + Bottom + + + + Top + + + + Left + + + + Right + + CustomActionDialog @@ -6700,6 +6780,13 @@ + EllipseWidget + + Ellipse + + + + EnrichmentDialog QtiPlot @@ -9016,6 +9103,10 @@ You don't have the permission to open this file: <b>%1</b> + + Image + + ImportASCIIDialog @@ -9736,6 +9827,13 @@ + LegendWidget + + Legend + + + + LineDialog QtiPlot - Line options @@ -11982,6 +12080,22 @@ Dimensions + + Move upward + + + + Move downward + + + + Move &upward + + + + Move do&wnward + + PlotWizard @@ -12710,6 +12824,13 @@ + RectangleWidget + + Rectangle + + + + RenameWindowDialog Window Title @@ -14071,6 +14192,13 @@ + TexWidget + + Equation + + + + TextDialog QtiPlot - Text options diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_ro.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_ro.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_ro.ts 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_ro.ts 2010-12-01 21:48:35.000000000 +0000 @@ -4511,7 +4511,7 @@ Normal - Normal + Normal Save changes to project: <p><b> %1 </b> ? @@ -5377,7 +5377,7 @@ Ctrl+W - Ctrl+W + Ctrl+W Add Column @@ -6806,7 +6806,7 @@ Save project as - Salvează proiectul ca + Salvează proiectul ca &Find... @@ -7367,7 +7367,7 @@ Save Window As - Salvează fereastra ca + Salvează fereastra ca Save &Window As... @@ -7381,6 +7381,22 @@ Shift+T Shift+T + + Overwrite file? + Rescriere fişier? + + + %1 already exists. + %1 există deja. + + + Do you want to replace it? + Doriţi să-l înlocuiţi? + + + Yes, don't ask me again + Da, nu mă mai întreba + ArrowMarker @@ -7964,7 +7980,7 @@ Create Baseline - Curbă de referinţă + Curbă de referinţă Curve @@ -9173,6 +9189,66 @@ Synchronize scale &divisions Sincronizează &diviziunile axelor + + Line Color + Culoare + + + Line Type + Tip de linie + + + Thickness + Grosime + + + Grid + Grilaj + + + Major Grids + Grilaj principal + + + Minor Grids + Grilaj secundar + + + An&tialised + Linie ne&tă + + + Horizontal + Orizontal + + + Vertical + Vertical + + + Speed + Viteză + + + &Disable for curves with more than + &Dezactivează pentru curbe cu mai mult de + + + data points + puncte + + + &Default options + Valori &prestabilite + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + Trebuie să reporniţi QtiPlot pentru ca noile setări să funcţioneze, vreţi să reporniţi acum? + + + Open &last project at startup + Deschide u&ltimul proiect la pornire + ContourLinesEditor @@ -9368,6 +9444,10 @@ &Close În&chide + + Apply to &all layer curves + &Aplică tuturor curbelor din grafic + CurvesDialog @@ -9491,6 +9571,26 @@ &Delete Curve Şterge cur&ba + + Axes + Axe + + + Bottom + Jos + + + Top + Sus + + + Left + Stânga + + + Right + Dreapta + CustomActionDialog @@ -9764,6 +9864,13 @@ + EllipseWidget + + Ellipse + Elipsă + + + EnrichmentDialog QtiPlot @@ -12170,6 +12277,10 @@ You don't have the permission to open this file: <b>%1</b> Nu aveţi permisiunea să deschideţi fişierul: <b>%1</b> + + Image + Imagine + ImportASCIIDialog @@ -12891,6 +13002,13 @@ + LegendWidget + + Legend + Legendă + + + LineDialog QtiPlot - Line options @@ -15165,6 +15283,22 @@ Dimensions Dimensiuni + + Move upward + Mută mai sus + + + Move downward + Mută mai jos + + + Move &upward + Mută mai s&us + + + Move do&wnward + Mută mai &jos + PlotWizard @@ -16078,6 +16212,13 @@ + RectangleWidget + + Rectangle + Dreptunghi + + + RenameWindowDialog QtiPlot - Rename Window @@ -17503,6 +17644,13 @@ + TexWidget + + Equation + Ecuaţie + + + TextDialog QtiPlot - Text options diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_ru.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_ru.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_ru.ts 2010-07-10 18:21:45.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_ru.ts 2010-12-01 21:48:35.000000000 +0000 @@ -648,7 +648,7 @@ Ctrl+W - Ctrl+W + Ctrl+W Ctrl+X @@ -1398,7 +1398,7 @@ Normal - Нормальный + Нормальный &Normalize @@ -2053,7 +2053,7 @@ Save project as - Сохранить проект как + Сохранить проект как Save window as template @@ -2715,7 +2715,7 @@ File %1 contains only %2 sheets! - + Файл '%1' содержит только %2 листов! QtiPlot was built without ODF spreadsheet support! @@ -2803,7 +2803,7 @@ Paste Selection as Te&xt - + Вставить выделенное как &текст There are no windows available in this folder! @@ -3709,19 +3709,19 @@ Stack &Bar - + Совмещённые &блоки Stack &Column - + Совмещённые &столбцы Plot stack bar - + Построить совмещённые блоки Plot stack column - + Построить совмещённые столбцы Move Row @@ -3769,138 +3769,158 @@ Shared A&xes Panel - + Панель с общей о&сью - + &Custom Layout... - + &Пользовательская компоновка... Execute Selected Lines - + Выполнить выделенные строки Commen&t Selection - + Закоммен&тировать выделенное &Uncomment Selection - + &Раскомментировать выделенное Comment Selection - + Закомментировать выделенное Uncomment Selection - + Раскомментировать выделенное Ctrl+Shift+O - + Ctrl+Shift+O Ctrl+Shift+U - + Ctrl+Shift+U Waterfall Plot - + Каскадный график &Extract Data... - + Извл&ечь данные... S&ubtract - + В&ычесть &Straight Line... - + &Прямая линия... &Reference Data... - + &Базисные данные... &Open... - &Открыть... + &Открыть... Open Image &File... - + Открыть &файл изображения... &Print... - + &Печать... Print Pre&view... - Предварительный &просмотр... + Предварительный &просмотр... E&xport ASCII... - + Э&кспортировать в ASCII... The selected table is empty, operation aborted! - + Выбранная таблица пуста, операция отменена! Export Exce&l ... - + Экспортировать в Exc&el... Export Excel - + Экспортировать в Excel &Front - + На &передний план &Back - + На &задний план Raise object on top - + На передний план Lower object to the bottom - + На задний план The selected Y column is empty, operation aborted! - + Выбранный столбец Y пуст, операция отменена! The associated X column is empty, operation aborted! - + Соответвующий столбец X пуст, операция отменена! Excel files - + файлы Excel Save Window As - + Сохранить окно как Save &Window As... - + Сохранить &окно как... &Baseline... - + &Базисная линия... Shift+T + Shift+T + + + chart + диаграмма + + + Overwrite file? + Перезаписать файл? + + + %1 already exists. + %1 уже существует. + + + Do you want to replace it? + Заменить? + + + Yes, don't ask me again @@ -4335,11 +4355,11 @@ Labels space - + Расстояние до меток Show &backbone - + Показать &каркас осей Set As &Default @@ -4383,7 +4403,7 @@ Scientific: 1·10^4 - Научный: 1E4 {1·10^?} + Научный: 1E4 {1·10^4} Origin @@ -4415,94 +4435,94 @@ Hide Ticks - + Скрыть деления At Axis Begin - + В начале At Axis End - + В конце At Axis Begin & End - + В начале и конце Prefix - + Префикс Suffix - + Суффикс BaselineDialog QtiPlot - QtiPlot + QtiPlot Baseline - + Базисная линия Create Baseline - + Создать базисную линию Curve - График функции + Кривая Points - + Точек &Interpolation - + &Интерполяция Linear - + Линейная Cubic - + Кубическая Non-rounded Akima - Акима без округления + Акима без округления User Defined &Equation Y = - + Уравн&ение Y = Existing &Dataset - + Существующий &набор Create &Baseline - + Создать &базисную линию &Subtract - + &Вычесть &Undo Subtraction - + &Отменить вычитание &Modify - + &Изменить &Close - &Закрыть + &Закрыть @@ -5347,7 +5367,7 @@ &Keep aspect ratio - + &Сохранять пропорции Axes @@ -5355,15 +5375,15 @@ Geometry - Геометрия + Геометрия Ticks - Labels space - + Расстояние от делений до меток pixels - + точек Legend display @@ -5387,35 +5407,35 @@ Unit - Размеры в + Единица измерения inch - дюйм + дюйм mm - мм + мм cm - см + см point - точка + точка pixel - + точка растра Canvas Width - + Ширина холста Canvas Height - + Высота холста Left @@ -5483,7 +5503,7 @@ Display Confirmation &Messages for Multi-peak Fits - + Запрашивать &подтвеждения для многопиковой аппроксимации QtiPlot - index.html File Not Found! @@ -5571,35 +5591,35 @@ New Color - + Новый цвет &Load Default - + &Вернуть установки по умолчанию Delete Color - + Удалить цвет Move Color Up - + Переместить вверх Move Color Down - + Переместить вниз Indexed Colors - + Индексированные цвета Default Symbol - + Символ по умолчанию Edge width - + Толщина кромки Fill @@ -5607,54 +5627,114 @@ Name - Имя + Название Symbol - Символ + Символ Inde&xed Symbols - + &Индексированные символы &Fill Symbol - + &Заполнить символ Move Symbol Up - + Переместить вверх Move Symbol Down - + Переместить вниз Pattern - Шаблон + Шаблон Line style - + Тип линии Fill area under curve - Заполнить область под кривой + Заполнить область под кривой Default Line Style - + Стиль кривой по умолчанию Axis title - + Подпись оси Default - По умолчанию + По умолчанию Synchronize scale &divisions + Синхронизировать &деления шкал + + + Line Color + Цвет линии + + + Line Type + Тип линии + + + Thickness + Толщина + + + Grid + Сетка + + + Major Grids + Основная сетка + + + Minor Grids + Дополнительная сетка + + + An&tialised + Сгла&живание + + + Horizontal + + + + Vertical + + + + Speed + Быстродействие + + + &Disable for curves with more than + + + + data points + точек + + + &Default options + + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + + + + Open &last project at startup @@ -5852,6 +5932,10 @@ To row number До строки номер + + Apply to &all layer curves + + CurvesDialog @@ -5975,6 +6059,26 @@ Histogram Гистограмма + + Axes + Оси + + + Bottom + + + + Top + + + + Left + + + + Right + + CustomActionDialog @@ -6221,6 +6325,13 @@ + EllipseWidget + + Ellipse + Эллипс + + + EnrichmentDialog QtiPlot @@ -6782,19 +6893,19 @@ ExtractDataDialog QtiPlot - QtiPlot + QtiPlot Extract Data - + Извлечь данные For row (i) - Строки (i) от + Строки (i) от to - до + до Add function @@ -6806,7 +6917,7 @@ &Apply - &Применить + &Применить Clear &Formulas @@ -6814,35 +6925,35 @@ &Close - &Закрыть + &Закрыть &Put into table - + &Поместить в таблицу Table - Таблица + Таблица Cond&ition: - + Услов&ие: Add &function - + Добавить &функцию Add co&lumn - + Добавить сто&лбец Add &operator - + Добавить &оператор Clea&r - &Очистить + &Очистить @@ -6897,7 +7008,7 @@ Angle (deg) - + Угол (градусы) @@ -7334,7 +7445,7 @@ Scaled Levenberg-Marquardt - Масштабированный Левенберг-Макуардт + Масштабированный Левенберг-Марквардт Statistical @@ -7358,7 +7469,7 @@ Unscaled Levenberg-Marquardt - Немасштабированный Левенберг-Макуардт + Немасштабированный Левенберг-Марквардт Value @@ -7528,7 +7639,7 @@ Chi^2/doF - + Chi^2/doF @@ -7803,7 +7914,7 @@ Scaled Levenberg-Marquardt - Масштабированный Левенберг-Макуардт + Масштабированный Левенберг-Марквардт Significant Digits @@ -7831,7 +7942,7 @@ Unscaled Levenberg-Marquardt - Немасштабированный Левенберг-Макуардт + Немасштабированный Левенберг-Марквардт User defined @@ -8601,6 +8712,10 @@ You don't have the permission to open this file: <b>%1</b> У вас нет прав доступа на открытие файла: <b>%1</b> + + Image + Изображения + ImportASCIIDialog @@ -8862,7 +8977,7 @@ Column T&ypes... - + &Тип столбцов... @@ -9128,35 +9243,35 @@ Unit - Размеры в + Единица измерения inch - дюйм + дюйм mm - мм + мм cm - см + см point - точка + точка pixel - + точка растра &Keep aspect ratio - + &Сохранять пропорции Margins - + Поля Bottom margin @@ -9308,22 +9423,29 @@ Link &X axes - + Связать &X оси &Fixed size - + &Фиксированный размер Align - + Выравнять Canvases - + Холсты Co&mmon axes + О&бщие оси + + + + LegendWidget + + Legend @@ -10173,7 +10295,7 @@ Ignore - + Игнорировать @@ -10561,15 +10683,15 @@ Scale to paper si&ze - + Масштабировать по ра&змеру бумаги Print Crop&marks - + Печатать &метки обреза &Print - &Печать + &Печать Color map &file @@ -10601,23 +10723,23 @@ Dash Dot - + Dash Dot Dot - + Short Dash - + Short Dot - + Short Dash Dot - + G&rid @@ -10633,31 +10755,31 @@ Tick Labels - + Метки делений Format - Формат + Формат Automatic - + Автоматически Decimal: 10000.0 - Десятичный: 10000.0 + Десятичный: 10000.0 Scientific: 1e4 - Научный: 1e4 + Научный: 1e4 Engineering: 10k - Инжнерный: 10k + Инжнерный: 10k Precision - Точность + Точность @@ -11560,31 +11682,47 @@ Link &X axes - + Связать &X оси Miscellaneous - + Разное 0 (all data points) - + 0 (все точки) Tolerance (Douglas-Peucker algorithm) - + Допуск (алгоритм Douglas-Peuker) Scale &Fonts - Масштабировать &шрифты + Масштабировать &шрифты Do not &resize layers when window size changes - Не &изменять размеры слоёв при изменении размера окна + Не &изменять размеры слоёв при изменении размера окна Dimensions - Размерность + Размерность + + + Move upward + + + + Move downward + + + + Move &upward + + + + Move do&wnward + @@ -11779,19 +11917,19 @@ PreviewTable Numeric - + Числовой Text - Текст + Текст Date - Дата + Дата Time - Время + Время Month @@ -11799,7 +11937,7 @@ Choose column type - + Выбрать тип столбца dd/MM/yyyy @@ -11919,19 +12057,19 @@ &Close - &Закрыть + &Закрыть Column - Столбец + Столбец Type - Тип + Тип Format - Формат + Формат @@ -12318,67 +12456,72 @@ AVG("colName", i, j): The average of all cells from row i to j in column colName. - + AVG("colName", i, j): + Среднее всех ячеек в строках от i до j в столбце colName. SUM("colName", i, j): The sum of all cells from row i to j in column colName. - + SUM("colName", i, j): + Сумма всех ячеек в строках от i до j в столбце colName. QtiPlot - Memory Allocation Error - QtiPlot - Ошибка выделения памяти + QtiPlot - Ошибка выделения памяти Not enough memory, operation aborted! - Недостаточно памяти, операция отменена! + Недостаточно памяти, операция отменена! The function %1 is not defined in the specified interval! - + Функция %1 не определена в указанном интервале! rnd(seed): Returns a pseudo-random number in the range 0 to 1. Calling this function several times with the same seed will return the same value. - + rnd(seed): + Возвращает псевдослучайное число в диапазоне от 0 до 1. Вызов этой функции несколько раз с тем же самым затравочным значением возращает одно и то же число. angle - угол + угол length - длина + длина dx - + dy - + eqn - уравнение + уравнение y - y + y x - x + x MIN("colName", i, j): The minimum of all cells from row i to j in column colName. - + MIN("colName", i, j): + Минимум всех ячеек в строках от i до j в столбце colName. MAX("colName", i, j): The maximum of all cells from row i to j in column colName. - + MAX("colName", i, j): + Миксимум всех ячеек в строках от i до j в столбце colName. @@ -12492,6 +12635,13 @@ + RectangleWidget + + Rectangle + Прямоугольник + + + RenameWindowDialog &Both Name and Label @@ -13128,58 +13278,58 @@ SubtractDataDialog QtiPlot - QtiPlot + QtiPlot Math on Data Sets - + Математические операции над наборами данных Cu&rve - + К&ривые &Operator - + &Оператор &Data set - + Набор &данных Current &folder - + Текущая &папка &Value - + &Значение &Apply - &Применить + &Применить &Close - &Закрыть + &Закрыть Error - Ошибка + Ошибка Data set %1 must containt at least two valid data points in order to perform this operation! - + Для выполнения этой операции набор данных %1 должен содержать по крайней мере две точки! SubtractLineTool Move cursor and click to select and double-click/press 'Enter' to set the position of the first point! - + Для выделения точки подведите к ней указатель и щёлкните, двойной щелчок или 'Enter' для установки положения первой точки! First point selected! Click to select and double-click/press 'Enter' to set the position of the 2nd point! - + Первая точка выбрана! Один щелчок для выбора точки и двойной щелчок или 'Enter', для указания положения второй точки! @@ -13877,6 +14027,13 @@ + TexWidget + + Equation + + + + TextDialog Alignment @@ -14141,11 +14298,11 @@ SUM() works only on tables! - + SUM() работает только с таблицами! AVG() works only on tables! - + AVG() работает только с таблицами! tablecol: wrong number of arguments (need 2, got %1) @@ -14153,11 +14310,11 @@ MIN() works only on tables! - + MIN() работает только с таблицами! MAX() works only on tables! - + MAX() работает только с таблицами! diff -Nru qtiplot-0.9.8/qtiplot/translations/qtiplot_sv.ts qtiplot-0.9.8.2/qtiplot/translations/qtiplot_sv.ts --- qtiplot-0.9.8/qtiplot/translations/qtiplot_sv.ts 2010-07-10 18:21:46.000000000 +0000 +++ qtiplot-0.9.8.2/qtiplot/translations/qtiplot_sv.ts 2010-12-01 21:48:36.000000000 +0000 @@ -4738,7 +4738,7 @@ Normal - Normal + Normal Save changes to project: <p><b> %1 </b> ? @@ -5472,7 +5472,7 @@ Ctrl+W - Ctrl+W + Ctrl+W Add column @@ -7047,11 +7047,11 @@ Plot stack bar - + Rita stalpad stapel Plot stack column - + Rita staplad kolumn Move current row upward @@ -7539,7 +7539,7 @@ Save project as - Spara projekt som + Spara projekt som windows @@ -8326,7 +8326,7 @@ Spec&ial Bar/Column - + Spec&ial stapel/kolumn Move Row @@ -8414,23 +8414,23 @@ The selected table is empty, operation aborted! - + Den valda tabellen är tom, åtgärden avbryts! Export Exce&l ... - + Exportera Exce&l... &Front - + &Förgrund &Back - + &Bakgrund Export Excel - + Exportera Excel Raise object on top @@ -8442,30 +8442,46 @@ The selected Y column is empty, operation aborted! - + Den valda Y-kolumnen är tom, åtgärden avbryts! The associated X column is empty, operation aborted! - + Den valda X-kolumnen är tom, åtgärden avbryts! Excel files - + Excel-filer Save Window As - + Spara fönster som Save &Window As... - + Spara &fönster som... &Baseline... - + &Baslinje... Shift+T + Shift-T + + + Overwrite file? + Skriva över fil? + + + %1 already exists. + %1 finns redan. + + + Do you want to replace it? + Vill du byta ut den? + + + Yes, don't ask me again @@ -9084,11 +9100,11 @@ Prefix - + Prefix Suffix - + Suffix @@ -9099,11 +9115,11 @@ Baseline - + Baslinje Create Baseline - + Skapa baslinje Curve @@ -9131,7 +9147,7 @@ User Defined &Equation Y = - + Användardefinierad &ekvation Y = Existing &Dataset @@ -9139,7 +9155,7 @@ Create &Baseline - + Skapa &baslinje &Subtract @@ -9147,11 +9163,11 @@ &Undo Subtraction - + &Ångra subtraktion &Modify - + &Ändra &Close @@ -10367,6 +10383,66 @@ Synchronize scale &divisions Synkronisera skalin&delningar + + Line Color + Linjefärg + + + Line Type + Linjetyp + + + Thickness + Tjocklek + + + Grid + Rutnät + + + Major Grids + Huvudrutnät + + + Minor Grids + Delrutnät + + + An&tialised + An&tialiased + + + Horizontal + Horisontell + + + Vertical + Vertikal + + + Speed + Snabb + + + &Disable for curves with more than + + + + data points + datapunkter + + + &Default options + + + + You need to restart QtiPlot before your changes become effective, would you like to do it now? + + + + Open &last project at startup + + ContourLinesEditor @@ -10574,6 +10650,10 @@ &Close &Stäng + + Apply to &all layer curves + + CurvesDialog @@ -10697,6 +10777,26 @@ Histogram Histogram + + Axes + Axlar + + + Bottom + Botten + + + Top + Topp + + + Left + Vänster + + + Right + Höger + CustomActionDialog @@ -10970,6 +11070,13 @@ + EllipseWidget + + Ellipse + Ellips + + + EnrichmentDialog QtiPlot @@ -11733,7 +11840,7 @@ Angle (deg) - + Vinkel (grader) @@ -12420,7 +12527,7 @@ Chi^2/doF - + Chi²/doF @@ -14097,6 +14204,10 @@ You don't have the permission to open this file: <b>%1</b> Du har inte tillåtelse att öppna denna fil: <b>%1</b> + + Image + Bild + ImportASCIIDialog @@ -14397,7 +14508,7 @@ Column T&ypes... - + Kolumn&typer... @@ -15240,6 +15351,13 @@ + LegendWidget + + Legend + + + + LineDialog QtiPlot - Line options @@ -17893,6 +18011,22 @@ Dimensions Dimensioner + + Move upward + + + + Move downward + + + + Move &upward + + + + Move do&wnward + + PlotWizard @@ -18238,19 +18372,19 @@ Type - Typ + Typ Format - Format + Format &Close - + &Stäng Column - Kolumn + Kolumn @@ -18680,41 +18814,43 @@ angle - vinkel + vinkel length - längd + längd dx - dx + dx dy - dy + dy eqn - ekv + ekv y - y + y x - x + x MIN("colName", i, j): The minimum of all cells from row i to j in column colName. - + MIN("colName", i, j): + Minsta av alla celler från rad i till j i kolumn colName. MAX("colName", i, j): The maximum of all cells from row i to j in column colName. - + MAX("colName", i, j): + Maximum av alla celler från rad i till j i kolumn colName. @@ -18838,6 +18974,13 @@ + RectangleWidget + + Rectangle + Rektangel + + + RenameWindowDialog Window Title @@ -20447,6 +20590,13 @@ + TexWidget + + Equation + + + + TextDialog QtiPlot - Text options @@ -23413,11 +23563,11 @@ MIN() works only on tables! - + MIN() fungerar bara på tabeller! MAX() works only on tables! - + MAX() fungerar bara på tabeller!