[labplot/frameworks] /: fixed merge conflicts

Stefan Gerlach stefan.gerlach at uni-konstanz.de
Wed Sep 7 18:23:59 UTC 2016


Git commit 2da178f3536026f2de0d5eb3b484fa4342e0e593 by Stefan Gerlach.
Committed on 07/09/2016 at 18:23.
Pushed by sgerlach into branch 'frameworks'.

fixed merge conflicts

M  +26   -2    doc/index.docbook
M  +6    -0    src/CMakeLists.txt
M  +10   -14   src/backend/core/AbstractAspect.cpp
M  +0    -2    src/backend/core/Folder.cpp
M  +5    -0    src/backend/core/Project.cpp
M  +22   -6    src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
M  +2    -1    src/commonfrontend/widgets/TreeViewComboBox.cpp
M  +22   -15   src/commonfrontend/worksheet/WorksheetView.cpp
M  +5    -3    src/commonfrontend/worksheet/WorksheetView.h
M  +38   -20   src/kdefrontend/GuiObserver.cpp
M  +7    -11   src/kdefrontend/LabPlot.cpp
M  +62   -66   src/kdefrontend/MainWin.cpp
M  +4    -2    src/kdefrontend/MainWin.h
M  +1    -1    src/kdefrontend/TemplateHandler.cpp
M  +533  -0    src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp

http://commits.kde.org/labplot/2da178f3536026f2de0d5eb3b484fa4342e0e593

diff --cc src/backend/core/Folder.cpp
index 48c06f1,f1f84de..153692f
--- a/src/backend/core/Folder.cpp
+++ b/src/backend/core/Folder.cpp
@@@ -52,10 -49,8 +52,8 @@@
  
  Folder::Folder(const QString &name) : AbstractAspect(name) {}
  
- Folder::~Folder(){}
- 
  QIcon Folder::icon() const {
 -	return KIcon("folder");
 +	return QIcon::fromTheme("folder");
  }
  
  /**
diff --cc src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
index 25e46c8,9f198bf..ae735a7
--- a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
+++ b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
@@@ -347,22 -347,24 +348,23 @@@ void CartesianPlot::initDefault(Type ty
  
  void CartesianPlot::initActions() {
  	//"add new" actions
 -	addCurveAction = new KAction(KIcon("labplot-xy-curve"), i18n("xy-curve"), this);
 -	addEquationCurveAction = new KAction(KIcon("labplot-xy-equation-curve"), i18n("xy-curve from a mathematical equation"), this);
 +	addCurveAction = new QAction(QIcon::fromTheme("labplot-xy-curve"), i18n("xy-curve"), this);
 +	addEquationCurveAction = new QAction(QIcon::fromTheme("labplot-xy-equation-curve"), i18n("xy-curve from a mathematical equation"), this);
  // no icons yet
 -	addDataReductionCurveAction = new KAction(i18n("xy-curve from a data reduction"), this);
 -	addInterpolationCurveAction = new KAction(i18n("xy-curve from an interpolation"), this);
 -	addSmoothCurveAction = new KAction(i18n("xy-curve from a smooth"), this);
 -	addFitCurveAction = new KAction(KIcon("labplot-xy-fit-curve"), i18n("xy-curve from a fit to data"), this);
 -	addFourierFilterCurveAction = new KAction(i18n("xy-curve from a Fourier filter"), this);
 -	addFourierTransformCurveAction = new KAction(i18n("xy-curve from a Fourier transform"), this);
 -//	addInterpolationCurveAction = new KAction(KIcon("labplot-xy-interpolation-curve"), i18n("xy-curve from an interpolation"), this);
 -//	addSmoothCurveAction = new KAction(KIcon("labplot-xy-smooth-curve"), i18n("xy-curve from a smooth"), this);
 -//	addFourierFilterCurveAction = new KAction(KIcon("labplot-xy-fourier_filter-curve"), i18n("xy-curve from a Fourier filter"), this);
 -//	addFourierTransformCurveAction = new KAction(KIcon("labplot-xy-fourier_transform-curve"), i18n("xy-curve from a Fourier transform"), this);
 -
 -	addLegendAction = new KAction(KIcon("text-field"), i18n("legend"), this);
 -	addHorizontalAxisAction = new KAction(KIcon("labplot-axis-horizontal"), i18n("horizontal axis"), this);
 -	addVerticalAxisAction = new KAction(KIcon("labplot-axis-vertical"), i18n("vertical axis"), this);
 -	addCustomPointAction = new KAction(KIcon("draw-cross"), i18n("custom point"), this);
++	addDataReductionCurveAction = new QAction(i18n("xy-curve from a data reduction"), this);
 +	addInterpolationCurveAction = new QAction(i18n("xy-curve from an interpolation"), this);
 +	addSmoothCurveAction = new QAction(i18n("xy-curve from a smooth"), this);
 +	addFitCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fit-curve"), i18n("xy-curve from a fit to data"), this);
 +	addFourierFilterCurveAction = new QAction(i18n("xy-curve from a Fourier filter"), this);
 +	addFourierTransformCurveAction = new QAction(i18n("xy-curve from a Fourier transform"), this);
 +//	addInterpolationCurveAction = new QAction(QIcon::fromTheme("labplot-xy-interpolation-curve"), i18n("xy-curve from an interpolation"), this);
 +//	addSmoothCurveAction = new QAction(QIcon::fromTheme("labplot-xy-smooth-curve"), i18n("xy-curve from a smooth"), this);
 +//	addFourierFilterCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_filter-curve"), i18n("xy-curve from a Fourier filter"), this);
 +//	addFourierTransformCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_transform-curve"), i18n("xy-curve from a Fourier transform"), this);
 +	addLegendAction = new QAction(QIcon::fromTheme("text-field"), i18n("legend"), this);
 +	addHorizontalAxisAction = new QAction(QIcon::fromTheme("labplot-axis-horizontal"), i18n("horizontal axis"), this);
 +	addVerticalAxisAction = new QAction(QIcon::fromTheme("labplot-axis-vertical"), i18n("vertical axis"), this);
 +	addCustomPointAction = new QAction(QIcon::fromTheme("draw-cross"), i18n("custom point"), this);
  
  	connect(addCurveAction, SIGNAL(triggered()), SLOT(addCurve()));
  	connect(addEquationCurveAction, SIGNAL(triggered()), SLOT(addEquationCurve()));
diff --cc src/commonfrontend/worksheet/WorksheetView.cpp
index 9dbcc8c,e3fad56..3602b09
--- a/src/commonfrontend/worksheet/WorksheetView.cpp
+++ b/src/commonfrontend/worksheet/WorksheetView.cpp
@@@ -272,62 -272,64 +272,64 @@@ void WorksheetView::initActions() 
  	connect(cartesianPlotMouseModeActionGroup, SIGNAL(triggered(QAction*)), SLOT(cartesianPlotMouseModeChanged(QAction*)));
  
  	QActionGroup* cartesianPlotAddNewActionGroup = new QActionGroup(this);
 -	addCurveAction = new KAction(KIcon("labplot-xy-curve"), i18n("xy-curve"), cartesianPlotAddNewActionGroup);
 -	addEquationCurveAction = new KAction(KIcon("labplot-xy-equation-curve"), i18n("xy-curve from a mathematical equation"), cartesianPlotAddNewActionGroup);
 +	addCurveAction = new QAction(QIcon::fromTheme("labplot-xy-curve"), i18n("xy-curve"), cartesianPlotAddNewActionGroup);
 +	addEquationCurveAction = new QAction(QIcon::fromTheme("labplot-xy-equation-curve"), i18n("xy-curve from a mathematical equation"), cartesianPlotAddNewActionGroup);
  // no icons yet
 -	addDataReductionCurveAction = new KAction(i18n("xy-curve from a data reduction"), cartesianPlotAddNewActionGroup);
 -	addInterpolationCurveAction = new KAction(i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
 -	addSmoothCurveAction = new KAction(i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
 -	addFourierFilterCurveAction = new KAction(i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
 -	addFourierTransformCurveAction = new KAction(i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
 -//	addInterpolationCurveAction = new KAction(KIcon("labplot-xy-interpolation-curve"), i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
 -//	addSmoothCurveAction = new KAction(KIcon("labplot-xy-smooth-curve"), i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
 -	addFitCurveAction = new KAction(KIcon("labplot-xy-fit-curve"), i18n("xy-curve from a fit to data"), cartesianPlotAddNewActionGroup);
 -//	addFourierFilterCurveAction = new KAction(KIcon("labplot-xy-fourier_filter-curve"), i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
 -//	addFourierTransformCurveAction = new KAction(KIcon("labplot-xy-fourier_transform-curve"), i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
 -	addLegendAction = new KAction(KIcon("text-field"), i18n("legend"), cartesianPlotAddNewActionGroup);
 -	addHorizontalAxisAction = new KAction(KIcon("labplot-axis-horizontal"), i18n("horizontal axis"), cartesianPlotAddNewActionGroup);
 -	addVerticalAxisAction = new KAction(KIcon("labplot-axis-vertical"), i18n("vertical axis"), cartesianPlotAddNewActionGroup);
 -	addCustomPointAction = new KAction(KIcon("draw-cross"), i18n("custom point"), cartesianPlotAddNewActionGroup);
++	addDataReductionCurveAction = new QAction(i18n("xy-curve from a data reduction"), cartesianPlotAddNewActionGroup);
 +	addInterpolationCurveAction = new QAction(i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
 +	addSmoothCurveAction = new QAction(i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
 +	addFitCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fit-curve"), i18n("xy-curve from a fit to data"), cartesianPlotAddNewActionGroup);
 +	addFourierFilterCurveAction = new QAction(i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
 +	addFourierTransformCurveAction = new QAction(i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
 +//	addInterpolationCurveAction = new QAction(QIcon::fromTheme("labplot-xy-interpolation-curve"), i18n("xy-curve from an interpolation"), cartesianPlotAddNewActionGroup);
 +//	addSmoothCurveAction = new QAction(QIcon::fromTheme("labplot-xy-smooth-curve"), i18n("xy-curve from a smooth"), cartesianPlotAddNewActionGroup);
 +//	addFourierFilterCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_filter-curve"), i18n("xy-curve from a Fourier filter"), cartesianPlotAddNewActionGroup);
 +//	addFourierTransformCurveAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_transform-curve"), i18n("xy-curve from a Fourier transform"), cartesianPlotAddNewActionGroup);
 +	addLegendAction = new QAction(QIcon::fromTheme("text-field"), i18n("legend"), cartesianPlotAddNewActionGroup);
 +	addHorizontalAxisAction = new QAction(QIcon::fromTheme("labplot-axis-horizontal"), i18n("horizontal axis"), cartesianPlotAddNewActionGroup);
 +	addVerticalAxisAction = new QAction(QIcon::fromTheme("labplot-axis-vertical"), i18n("vertical axis"), cartesianPlotAddNewActionGroup);
 +	addCustomPointAction = new QAction(QIcon::fromTheme("draw-cross"), i18n("custom point"), cartesianPlotAddNewActionGroup);
  	connect(cartesianPlotAddNewActionGroup, SIGNAL(triggered(QAction*)), SLOT(cartesianPlotAddNew(QAction*)));
  
  	// Analysis menu
  // no icons yet
 -	addDataReductionAction = new KAction(i18n("Data reduction"), cartesianPlotAddNewActionGroup);
 -	addInterpolationAction = new KAction(i18n("Interpolation"), cartesianPlotAddNewActionGroup);
 -	addSmoothAction = new KAction(i18n("Smooth"), cartesianPlotAddNewActionGroup);
 -	addFitAction = new KAction(KIcon("labplot-xy-fit-curve"), i18n("Data fitting"), cartesianPlotAddNewActionGroup);
 -	addFourierFilterAction = new KAction(i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
 -	addFourierTransformAction = new KAction(i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
 -//	addInterpolationAction = new KAction(KIcon("labplot-xy-interpolation-curve"), i18n("Interpolation"), cartesianPlotAddNewActionGroup);
 -//	addSmoothAction = new KAction(KIcon("labplot-xy-smooth-curve"), i18n("Smooth"), cartesianPlotAddNewActionGroup);
 -//	addFourierFilterAction = new KAction(KIcon("labplot-xy-fourier_filter-curve"), i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
 -//	addFourierTransformAction = new KAction(KIcon("labplot-xy-fourier_transform-curve"), i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
++	addDataReductionAction = new QAction(i18n("Data reduction"), cartesianPlotAddNewActionGroup);
 +	addInterpolationAction = new QAction(i18n("Interpolation"), cartesianPlotAddNewActionGroup);
 +	addSmoothAction = new QAction(i18n("Smooth"), cartesianPlotAddNewActionGroup);
 +	addFitAction = new QAction(QIcon::fromTheme("labplot-xy-fit-curve"), i18n("Data fitting"), cartesianPlotAddNewActionGroup);
 +	addFourierFilterAction = new QAction(i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
 +	addFourierTransformAction = new QAction(i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
 +//	addInterpolationAction = new QAction(QIcon::fromTheme("labplot-xy-interpolation-curve"), i18n("Interpolation"), cartesianPlotAddNewActionGroup);
 +//	addSmoothAction = new QAction(QIcon::fromTheme("labplot-xy-smooth-curve"), i18n("Smooth"), cartesianPlotAddNewActionGroup);
 +//	addFourierFilterAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_filter-curve"), i18n("Fourier filter"), cartesianPlotAddNewActionGroup);
 +//	addFourierTransformAction = new QAction(QIcon::fromTheme("labplot-xy-fourier_transform-curve"), i18n("Fourier transform"), cartesianPlotAddNewActionGroup);
  
  	QActionGroup* cartesianPlotNavigationGroup = new QActionGroup(this);
 -	scaleAutoAction = new KAction(KIcon("labplot-auto-scale-all"), i18n("auto scale"), cartesianPlotNavigationGroup);
 +	scaleAutoAction = new QAction(QIcon::fromTheme("labplot-auto-scale-all"), i18n("auto scale"), cartesianPlotNavigationGroup);
  	scaleAutoAction->setData(CartesianPlot::ScaleAuto);
 -	scaleAutoXAction = new KAction(KIcon("labplot-auto-scale-x"), i18n("auto scale X"), cartesianPlotNavigationGroup);
 +	scaleAutoXAction = new QAction(QIcon::fromTheme("labplot-auto-scale-x"), i18n("auto scale X"), cartesianPlotNavigationGroup);
  	scaleAutoXAction->setData(CartesianPlot::ScaleAutoX);
 -	scaleAutoYAction = new KAction(KIcon("labplot-auto-scale-y"), i18n("auto scale Y"), cartesianPlotNavigationGroup);
 +	scaleAutoYAction = new QAction(QIcon::fromTheme("labplot-auto-scale-y"), i18n("auto scale Y"), cartesianPlotNavigationGroup);
  	scaleAutoYAction->setData(CartesianPlot::ScaleAutoY);
 -	zoomInAction = new KAction(KIcon("zoom-in"), i18n("zoom in"), cartesianPlotNavigationGroup);
 +	zoomInAction = new QAction(QIcon::fromTheme("zoom-in"), i18n("zoom in"), cartesianPlotNavigationGroup);
  	zoomInAction->setData(CartesianPlot::ZoomIn);
 -	zoomOutAction = new KAction(KIcon("zoom-out"), i18n("zoom out"), cartesianPlotNavigationGroup);
 +	zoomOutAction = new QAction(QIcon::fromTheme("zoom-out"), i18n("zoom out"), cartesianPlotNavigationGroup);
  	zoomOutAction->setData(CartesianPlot::ZoomOut);
 -	zoomInXAction = new KAction(KIcon("labplot-zoom-in-x"), i18n("zoom in X"), cartesianPlotNavigationGroup);
 +	zoomInXAction = new QAction(QIcon::fromTheme("labplot-zoom-in-x"), i18n("zoom in X"), cartesianPlotNavigationGroup);
  	zoomInXAction->setData(CartesianPlot::ZoomInX);
 -	zoomOutXAction = new KAction(KIcon("labplot-zoom-out-x"), i18n("zoom out X"), cartesianPlotNavigationGroup);
 +	zoomOutXAction = new QAction(QIcon::fromTheme("labplot-zoom-out-x"), i18n("zoom out X"), cartesianPlotNavigationGroup);
  	zoomOutXAction->setData(CartesianPlot::ZoomOutX);
 -	zoomInYAction = new KAction(KIcon("labplot-zoom-in-y"), i18n("zoom in Y"), cartesianPlotNavigationGroup);
 +	zoomInYAction = new QAction(QIcon::fromTheme("labplot-zoom-in-y"), i18n("zoom in Y"), cartesianPlotNavigationGroup);
  	zoomInYAction->setData(CartesianPlot::ZoomInY);
 -	zoomOutYAction = new KAction(KIcon("labplot-zoom-out-y"), i18n("zoom out Y"), cartesianPlotNavigationGroup);
 +	zoomOutYAction = new QAction(QIcon::fromTheme("labplot-zoom-out-y"), i18n("zoom out Y"), cartesianPlotNavigationGroup);
  	zoomOutYAction->setData(CartesianPlot::ZoomOutY);
 -	shiftLeftXAction = new KAction(KIcon("labplot-shift-left-x"), i18n("shift left X"), cartesianPlotNavigationGroup);
 +	shiftLeftXAction = new QAction(QIcon::fromTheme("labplot-shift-left-x"), i18n("shift left X"), cartesianPlotNavigationGroup);
  	shiftLeftXAction->setData(CartesianPlot::ShiftLeftX);
 -	shiftRightXAction = new KAction(KIcon("labplot-shift-right-x"), i18n("shift right X"), cartesianPlotNavigationGroup);
 +	shiftRightXAction = new QAction(QIcon::fromTheme("labplot-shift-right-x"), i18n("shift right X"), cartesianPlotNavigationGroup);
  	shiftRightXAction->setData(CartesianPlot::ShiftRightX);
 -	shiftUpYAction = new KAction(KIcon("labplot-shift-up-y"), i18n("shift up Y"), cartesianPlotNavigationGroup);
 +	shiftUpYAction = new QAction(QIcon::fromTheme("labplot-shift-up-y"), i18n("shift up Y"), cartesianPlotNavigationGroup);
  	shiftUpYAction->setData(CartesianPlot::ShiftUpY);
 -	shiftDownYAction = new KAction(KIcon("labplot-shift-down-y"), i18n("shift down Y"), cartesianPlotNavigationGroup);
 +	shiftDownYAction = new QAction(QIcon::fromTheme("labplot-shift-down-y"), i18n("shift down Y"), cartesianPlotNavigationGroup);
  	shiftDownYAction->setData(CartesianPlot::ShiftDownY);
  
  	connect(cartesianPlotNavigationGroup, SIGNAL(triggered(QAction*)), SLOT(cartesianPlotNavigationChanged(QAction*)));
@@@ -445,11 -450,10 +448,10 @@@ void WorksheetView::initMenus() 
  	m_cartesianPlotMenu->addSeparator();
  	m_cartesianPlotMenu->addMenu(m_cartesianPlotActionModeMenu);
  
- 	// Filter menu?
- 	//m_filterMenu = new QMenu(i18n("Filter"));
- 	//TODO: filter icon
- // 	m_filterMenu->setIcon(QIcon::fromTheme("zoom-draw"));
- // 	m_filterMenu->addAction(addFourierFilterAction);
+ 	// Data manipulation menu
+ 	m_dataManipulationMenu = new QMenu(i18n("Data Manipulation"));
 -	m_dataManipulationMenu->setIcon(KIcon("zoom-draw"));
++	m_dataManipulationMenu->setIcon(QIcon::fromTheme("zoom-draw"));
+ 	m_dataManipulationMenu->addAction(addDataReductionAction);
  }
  
  /*!
diff --cc src/kdefrontend/LabPlot.cpp
index 64618b5,958b945..fe0ddcb
--- a/src/kdefrontend/LabPlot.cpp
+++ b/src/kdefrontend/LabPlot.cpp
@@@ -39,38 -38,28 +39,34 @@@
  #include "backend/core/AbstractColumn.h"
  
  int main (int argc, char *argv[]) {
 -	KAboutData aboutData( "labplot2", "labplot2",
 -		ki18n("LabPlot2"), LVERSION,
 -		ki18n("LabPlot2 is a KDE-application for interactive graphing and analysis of scientific data."),
 -		KAboutData::License_GPL,
 -		ki18n("(c) 2007-2016") );
 -	aboutData.setHomepage("http://www.labplot.sourceforge.net");
 -	aboutData.addAuthor(ki18n("Stefan Gerlach"), ki18n("developer"), "stefan.gerlach at uni-konstanz.de", 0);
 -	aboutData.addAuthor(ki18n("Alexander Semke"), ki18n("developer"), "alexander.semke at web.de", 0);
 -	aboutData.addAuthor(ki18n("Andreas Kainz"), ki18n("icon designer"), "kainz.a at gmail.com", 0);
 -	aboutData.addCredit(ki18n("Yuri Chornoivan"), ki18n("Help on many questions about the KDE-infrastructure and translation related topics"), "yurchor at ukr.net", 0);
 +	KAboutData aboutData( QStringLiteral("labplot2"), QString("labplot2"),
- 				LVERSION,
- 				i18n("LabPlot2 is a KDE-application for interactive graphing and analysis of scientific data."),
- 				KAboutLicense::GPL,
- 				i18n("(c) 2007-2016"),
- 				QString(),
- 				QStringLiteral("http://www.labplot.sourceforge.net"));
++		LVERSION, i18n("LabPlot2 is a KDE-application for interactive graphing and analysis of scientific data."),
++		KAboutLicense::GPL,i18n("(c) 2007-2016"), QString(), QStringLiteral("http://www.labplot.sourceforge.net"));
  
 -	KCmdLineArgs::init( argc, argv, &aboutData );
 -	KCmdLineOptions options;
 -	options.add("no-splash",ki18n("do not show the splash screen"));
 -	options.add("+[file]",ki18n("open a project file"));
 -	KCmdLineArgs::addCmdLineOptions( options );
 +	aboutData.addAuthor(i18n("Stefan Gerlach"), i18n("developer"), "stefan.gerlach at uni-konstanz.de", 0);
 +	aboutData.addAuthor(i18n("Alexander Semke"), i18n("developer"), "alexander.semke at web.de", 0);
 +	aboutData.addAuthor(i18n("Andreas Kainz"), i18n("icon designer"), "kainz.a at gmail.com", 0);
 +	aboutData.addCredit(i18n("Yuri Chornoivan"), i18n("Help on many questions about the KDE-infrastructure and translation related topics"), "yurchor at ukr.net", 0);
 +	aboutData.addCredit(i18n("Garvit Khatri"), i18n("Porting LabPlot2 to KF5 and Integration with Cantor"), "garvitdelhi at gmail.com", 0);
 +	KAboutData::setApplicationData(aboutData);
  
 -	KApplication app;
 -	KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
 +	QApplication app(argc, argv);
 +	QCoreApplication::setApplicationVersion(QLatin1String(LVERSION));
 +	QCommandLineParser parser;
 +	parser.addHelpOption();
 +	parser.addVersionOption();
 +	QCommandLineOption nosplashOption("no-splash", i18n("disable splash screen"));
 +	parser.addOption(nosplashOption);
 +
 +	parser.addPositionalArgument("+[file]", i18n( "open a project file"));
 +
 +	aboutData.setupCommandLine(&parser);
 +	parser.process(app);
 +	aboutData.processCommandLine(&parser);
 +	const QStringList args = parser.positionalArguments();
  	QString filename;
 -	if (args->count() > 0)
 -		filename = args->arg(0);
 +	if (args.count() > 0)
 +		filename = args[0];
  
  	if(!filename.isEmpty() ) {
  		if ( !QFile::exists(filename)) {
diff --cc src/kdefrontend/MainWin.cpp
index 8c3c49a,f53f0c6..ddbaef3
--- a/src/kdefrontend/MainWin.cpp
+++ b/src/kdefrontend/MainWin.cpp
@@@ -95,45 -83,43 +95,45 @@@
  */
  
  MainWin::MainWin(QWidget *parent, const QString& filename)
- 	: KXmlGuiWindow(parent),
- 	  m_currentSubWindow(0),
- 	  m_project(0),
- 	  m_aspectTreeModel(0),
- 	  m_projectExplorer(0),
- 	  m_projectExplorerDock(0),
- 	  m_propertiesDock(0),
- 	  m_currentAspect(0),
- 	  m_currentFolder(0),
- 	  m_suppressCurrentSubWindowChangedEvent(false),
- 	  m_closing(false),
- 	  m_autoSaveActive(false),
- 	  m_visibilityMenu(0),
- 	  m_newMenu(0),
-       m_editMenu(0),
- 	  axisDock(0),
- 	  notesDock(0),
- 	  cartesianPlotDock(0),
- 	  cartesianPlotLegendDock(0),
- 	  columnDock(0),
- 	  matrixDock(0),
- 	  spreadsheetDock(0),
- 	  projectDock(0),
- 	  xyCurveDock(0),
- 	  xyEquationCurveDock(0),
- 	  xyInterpolationCurveDock(0),
- 	  xySmoothCurveDock(0),
- 	  xyFitCurveDock(0),
- 	  xyFourierFilterCurveDock(0),
- 	  xyFourierTransformCurveDock(0),
- 	  worksheetDock(0),
- 	  textLabelDock(0),
- 	  customPointDock(0),
- 	  datapickerImageDock(0),
- 	  datapickerCurveDock(0),
+ 		: KXmlGuiWindow(parent),
+ 	m_currentSubWindow(0),
+ 	m_project(0),
+ 	m_aspectTreeModel(0),
+ 	m_projectExplorer(0),
+ 	m_projectExplorerDock(0),
+ 	m_propertiesDock(0),
+ 	m_currentAspect(0),
+ 	m_currentFolder(0),
+ 	m_suppressCurrentSubWindowChangedEvent(false),
+ 	m_closing(false),
+ 	m_autoSaveActive(false),
+ 	m_visibilityMenu(0),
+ 	m_newMenu(0),
+ 	m_editMenu(0),
+ 	axisDock(0),
+ 	notesDock(0),
+ 	cartesianPlotDock(0),
+ 	cartesianPlotLegendDock(0),
+ 	columnDock(0),
+ 	matrixDock(0),
+ 	spreadsheetDock(0),
+ 	projectDock(0),
+ 	xyCurveDock(0),
+ 	xyEquationCurveDock(0),
 -	xyDataReductionCurveDock(0),
+ 	xyInterpolationCurveDock(0),
+ 	xySmoothCurveDock(0),
+ 	xyFitCurveDock(0),
+ 	xyFourierFilterCurveDock(0),
+ 	xyFourierTransformCurveDock(0),
+ 	worksheetDock(0),
+ 	textLabelDock(0),
+ 	customPointDock(0),
+ 	datapickerImageDock(0),
+ 	datapickerCurveDock(0),
 +#ifdef HAVE_CANTOR_LIBS
 +	cantorWorksheetDock(0),
 +#endif
- 	  m_guiObserver(0) {
+ 	m_guiObserver(0) {
  
  // 	QTimer::singleShot( 0, this, SLOT(initGUI(filename)) );  //TODO doesn't work anymore
  	initGUI(filename);
@@@ -169,19 -155,13 +169,19 @@@ void MainWin::initGUI(const QString& fi
  	m_mdiArea = new QMdiArea;
  	setCentralWidget(m_mdiArea);
  	connect(m_mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),
- 	        this, SLOT(handleCurrentSubWindowChanged(QMdiSubWindow*)));
+ 		this, SLOT(handleCurrentSubWindowChanged(QMdiSubWindow*)));
 -
 +#ifdef _WIN32
 +	QIcon::setThemeName("hicolor");
 +#endif
  	statusBar()->showMessage(i18nc("%1 is the LabPlot version", "Welcome to LabPlot %1", QLatin1String(LVERSION)));
  	initActions();
 +#ifdef __APPLE__
 +	setupGUI(Default, QLatin1String("/Applications/labplot2.app/Contents/share/labplot2ui.rc"));
 +#else
 +	setupGUI(Default, QLatin1String("labplot2ui.rc"));
 +#endif
  	initMenus();
 -	setupGUI();
 -	setWindowIcon(KIcon("LabPlot2"));
 +	setWindowIcon(QIcon::fromTheme("LabPlot2"));
  	setAttribute( Qt::WA_DeleteOnClose );
  
  	//make the status bar of a fixed size in order to avoid height changes when placing a ProgressBar there.
@@@ -955,8 -873,9 +955,8 @@@ bool MainWin::saveProject() 
  bool MainWin::saveProjectAs() {
  	KConfigGroup conf(KSharedConfig::openConfig(), "MainWin");
  	QString dir = conf.readEntry("LastOpenDir", "");
 -	QString fileName = KFileDialog::getSaveFileName(KUrl(dir),
 -		i18n("LabPlot Projects (*.lml *.lml.gz *.lml.bz2 *.lml.xz *.LML *.LML.GZ *.LML.BZ2 *.LML.XZ)"),
 -		this, i18n("Save project as"));
 +	QString fileName = QFileDialog::getSaveFileName(this, i18n("Save project as"), dir,
- 	                   i18n("LabPlot Projects (*.lml *.lml.gz *.lml.bz2 *.lml.xz *.LML *.LML.GZ *.LML.BZ2 *.LML.XZ)"));
++		i18n("LabPlot Projects (*.lml *.lml.gz *.lml.bz2 *.lml.xz *.LML *.LML.GZ *.LML.BZ2 *.LML.XZ)"));
  
  	if (fileName.isEmpty())// "Cancel" was clicked
  		return false;
diff --cc src/kdefrontend/MainWin.h
index 604d99a,6ab2c00..660688a
--- a/src/kdefrontend/MainWin.h
+++ b/src/kdefrontend/MainWin.h
@@@ -239,14 -227,9 +241,14 @@@ private slots
  	void historyDialog();
  	void importFileDialog(const QString& fileName = QString());
  	void exportDialog();
-     void editFitsFileDialog();
+ 	void editFitsFileDialog();
  	void settingsDialog();
  	void projectChanged();
 +	
 +	//Cantor
 +	#ifdef HAVE_CANTOR_LIBS
 +	void newCantorWorksheet(QAction* action);
 +	#endif
  
  	void newFolder();
  	void newWorkbook();
diff --cc src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp
index 0000000,56cbd71..9cbeaa7
mode 000000,100644..100644
--- a/src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp
+++ b/src/kdefrontend/dockwidgets/XYDataReductionCurveDock.cpp
@@@ -1,0 -1,533 +1,533 @@@
+ /***************************************************************************
+     File             : XYDataReductionCurveDock.cpp
+     Project          : LabPlot
+     --------------------------------------------------------------------
+     Copyright        : (C) 2016 Stefan Gerlach (stefan.gerlach at uni.kn)
+     Description      : widget for editing properties of data reduction curves
+ 
+  ***************************************************************************/
+ 
+ /***************************************************************************
+  *                                                                         *
+  *  This program is free software; you can redistribute it and/or modify   *
+  *  it under the terms of the GNU General Public License as published by   *
+  *  the Free Software Foundation; either version 2 of the License, or      *
+  *  (at your option) any later version.                                    *
+  *                                                                         *
+  *  This program is distributed in the hope that it will be useful,        *
+  *  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+  *  GNU General Public License for more details.                           *
+  *                                                                         *
+  *   You should have received a copy of the GNU General Public License     *
+  *   along with this program; if not, write to the Free Software           *
+  *   Foundation, Inc., 51 Franklin Street, Fifth Floor,                    *
+  *   Boston, MA  02110-1301  USA                                           *
+  *                                                                         *
+  ***************************************************************************/
+ 
+ #include "XYDataReductionCurveDock.h"
+ #include "backend/core/AspectTreeModel.h"
+ #include "backend/core/Project.h"
+ #include "backend/worksheet/plots/cartesian/XYDataReductionCurve.h"
+ #include "commonfrontend/widgets/TreeViewComboBox.h"
+ 
+ #include <QMenu>
+ #include <QWidgetAction>
+ #include <QStandardItemModel>
+ #ifndef NDEBUG
+ #include <QDebug>
+ #endif
+ 
+ #include <cmath>        // isnan
+ 
+ /*!
+   \class XYDataReductionCurveDock
+  \brief  Provides a widget for editing the properties of the XYDataReductionCurves
+ 		(2D-curves defined by an data reduction) currently selected in
+ 		the project explorer.
+ 
+   If more then one curves are set, the properties of the first column are shown.
+   The changes of the properties are applied to all curves.
+   The exclusions are the name, the comment and the datasets (columns) of
+   the curves  - these properties can only be changed if there is only one single curve.
+ 
+   \ingroup kdefrontend
+ */
+ 
+ XYDataReductionCurveDock::XYDataReductionCurveDock(QWidget *parent): 
+ 	XYCurveDock(parent), cbXDataColumn(0), cbYDataColumn(0), m_dataReductionCurve(0) {
+ 
+ 	//hide the line connection type
+ 	ui.cbLineType->setDisabled(true);
+ 
+ 	//remove the tab "Error bars"
+ 	ui.tabWidget->removeTab(5);
+ }
+ 
+ /*!
+  * 	// Tab "General"
+  */
+ void XYDataReductionCurveDock::setupGeneral() {
+ 	QWidget* generalTab = new QWidget(ui.tabGeneral);
+ 	uiGeneralTab.setupUi(generalTab);
+ 
+ 	QGridLayout* gridLayout = dynamic_cast<QGridLayout*>(generalTab->layout());
+ 	if (gridLayout) {
+ 		gridLayout->setContentsMargins(2,2,2,2);
+ 		gridLayout->setHorizontalSpacing(2);
+ 		gridLayout->setVerticalSpacing(2);
+ 	}
+ 
+ 	cbXDataColumn = new TreeViewComboBox(generalTab);
+ 	gridLayout->addWidget(cbXDataColumn, 4, 3, 1, 2);
+ 	cbYDataColumn = new TreeViewComboBox(generalTab);
+ 	gridLayout->addWidget(cbYDataColumn, 5, 3, 1, 2);
+ 
+ 	for (int i=0; i < NSL_GEOM_LINESIM_TYPE_COUNT; i++)
+ 		uiGeneralTab.cbType->addItem(i18n(nsl_geom_linesim_type_name[i]));
+ 	uiGeneralTab.cbType->setItemData(nsl_geom_linesim_type_visvalingam_whyatt, i18n("This method is much slower than any other"), Qt::ToolTipRole);
+ 
 -	uiGeneralTab.pbRecalculate->setIcon(KIcon("run-build"));
++	uiGeneralTab.pbRecalculate->setIcon(QIcon::fromTheme("run-build"));
+ 
+ 	QHBoxLayout* layout = new QHBoxLayout(ui.tabGeneral);
+ 	layout->setMargin(0);
+ 	layout->addWidget(generalTab);
+ 
+ 	//Slots
+ 	connect( uiGeneralTab.leName, SIGNAL(returnPressed()), this, SLOT(nameChanged()) );
+ 	connect( uiGeneralTab.leComment, SIGNAL(returnPressed()), this, SLOT(commentChanged()) );
+ 	connect( uiGeneralTab.chkVisible, SIGNAL(clicked(bool)), this, SLOT(visibilityChanged(bool)) );
+ 
+ 	connect( uiGeneralTab.cbType, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged()) );
+ 	connect( uiGeneralTab.chkAuto, SIGNAL(clicked(bool)), this, SLOT(autoToleranceChanged()) );
+ 	connect( uiGeneralTab.sbTolerance, SIGNAL(valueChanged(double)), this, SLOT(toleranceChanged()) );
+ 	connect( uiGeneralTab.chkAuto2, SIGNAL(clicked(bool)), this, SLOT(autoTolerance2Changed()) );
+ 	connect( uiGeneralTab.sbTolerance2, SIGNAL(valueChanged(double)), this, SLOT(tolerance2Changed()) );
+ 
+ 	connect( uiGeneralTab.pbRecalculate, SIGNAL(clicked()), this, SLOT(recalculateClicked()) );
+ }
+ 
+ void XYDataReductionCurveDock::initGeneralTab() {
+ 	//if there are more then one curve in the list, disable the tab "general"
+ 	if (m_curvesList.size()==1) {
+ 		uiGeneralTab.lName->setEnabled(true);
+ 		uiGeneralTab.leName->setEnabled(true);
+ 		uiGeneralTab.lComment->setEnabled(true);
+ 		uiGeneralTab.leComment->setEnabled(true);
+ 
+ 		uiGeneralTab.leName->setText(m_curve->name());
+ 		uiGeneralTab.leComment->setText(m_curve->comment());
+ 	}else {
+ 		uiGeneralTab.lName->setEnabled(false);
+ 		uiGeneralTab.leName->setEnabled(false);
+ 		uiGeneralTab.lComment->setEnabled(false);
+ 		uiGeneralTab.leComment->setEnabled(false);
+ 
+ 		uiGeneralTab.leName->setText("");
+ 		uiGeneralTab.leComment->setText("");
+ 	}
+ 
+ 	//show the properties of the first curve
+ 	m_dataReductionCurve = dynamic_cast<XYDataReductionCurve*>(m_curve);
+ 	Q_ASSERT(m_dataReductionCurve);
+ 	XYCurveDock::setModelIndexFromColumn(cbXDataColumn, m_dataReductionCurve->xDataColumn());
+ 	XYCurveDock::setModelIndexFromColumn(cbYDataColumn, m_dataReductionCurve->yDataColumn());
+ 	// update list of selectable types
+ 	xDataColumnChanged(cbXDataColumn->currentModelIndex());
+ 
+ 	uiGeneralTab.cbType->setCurrentIndex(m_dataReductionData.type);
+ 	this->typeChanged();
+ 	uiGeneralTab.chkAuto->setChecked(m_dataReductionData.autoTolerance);
+ 	this->autoToleranceChanged();
+ 	uiGeneralTab.sbTolerance->setValue(m_dataReductionData.tolerance);
+ 	this->toleranceChanged();
+ 	uiGeneralTab.chkAuto2->setChecked(m_dataReductionData.autoTolerance2);
+ 	this->autoTolerance2Changed();
+ 	uiGeneralTab.sbTolerance2->setValue(m_dataReductionData.tolerance2);
+ 	this->tolerance2Changed();
+ 
+ 	this->showDataReductionResult();
+ 
+ 	//enable the "recalculate"-button if the source data was changed since the last dataReduction
+ 	uiGeneralTab.pbRecalculate->setEnabled(m_dataReductionCurve->isSourceDataChangedSinceLastDataReduction());
+ 
+ 	uiGeneralTab.chkVisible->setChecked( m_curve->isVisible() );
+ 
+ 	//Slots
+ 	connect(m_dataReductionCurve, SIGNAL(aspectDescriptionChanged(const AbstractAspect*)), this, SLOT(curveDescriptionChanged(const AbstractAspect*)));
+ 	connect(m_dataReductionCurve, SIGNAL(xDataColumnChanged(const AbstractColumn*)), this, SLOT(curveXDataColumnChanged(const AbstractColumn*)));
+ 	connect(m_dataReductionCurve, SIGNAL(yDataColumnChanged(const AbstractColumn*)), this, SLOT(curveYDataColumnChanged(const AbstractColumn*)));
+ 	connect(m_dataReductionCurve, SIGNAL(dataReductionDataChanged(XYDataReductionCurve::DataReductionData)), this, SLOT(curveDataReductionDataChanged(XYDataReductionCurve::DataReductionData)));
+ 	connect(m_dataReductionCurve, SIGNAL(sourceDataChangedSinceLastDataReduction()), this, SLOT(enableRecalculate()));
+ }
+ 
+ void XYDataReductionCurveDock::setModel() {
+ 	QList<const char*>  list;
+ 	list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet"
+ 		<<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve";
+ 	cbXDataColumn->setTopLevelClasses(list);
+ 	cbYDataColumn->setTopLevelClasses(list);
+ 
+  	list.clear();
+ 	list<<"Column";
+ 	cbXDataColumn->setSelectableClasses(list);
+ 	cbYDataColumn->setSelectableClasses(list);
+ 
+ 	connect( cbXDataColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, SLOT(xDataColumnChanged(QModelIndex)) );
+ 	connect( cbYDataColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, SLOT(yDataColumnChanged(QModelIndex)) );
+ 
+ 	cbXDataColumn->setModel(m_aspectTreeModel);
+ 	cbYDataColumn->setModel(m_aspectTreeModel);
+ 
+ 	XYCurveDock::setModel();
+ }
+ 
+ /*!
+   sets the curves. The properties of the curves in the list \c list can be edited in this widget.
+ */
+ void XYDataReductionCurveDock::setCurves(QList<XYCurve*> list) {
+ 	m_initializing=true;
+ 	m_curvesList=list;
+ 	m_curve=list.first();
+ 	m_dataReductionCurve = dynamic_cast<XYDataReductionCurve*>(m_curve);
+ 	Q_ASSERT(m_dataReductionCurve);
+ 	m_aspectTreeModel = new AspectTreeModel(m_curve->project());
+ 	this->setModel();
+ 	m_dataReductionData = m_dataReductionCurve->dataReductionData();
+ 	initGeneralTab();
+ 	initTabs();
+ 	m_initializing=false;
+ 
+ 	//hide the "skip gaps" option after the curves were set
+ 	ui.lLineSkipGaps->hide();
+ 	ui.chkLineSkipGaps->hide();
+ }
+ 
+ //*************************************************************
+ //**** SLOTs for changes triggered in XYFitCurveDock *****
+ //*************************************************************
+ void XYDataReductionCurveDock::nameChanged() {
+ 	if (m_initializing)
+ 		return;
+ 
+ 	m_curve->setName(uiGeneralTab.leName->text());
+ }
+ 
+ void XYDataReductionCurveDock::commentChanged() {
+ 	if (m_initializing)
+ 		return;
+ 
+ 	m_curve->setComment(uiGeneralTab.leComment->text());
+ }
+ 
+ void XYDataReductionCurveDock::updateTolerance() {
+ 	const AbstractColumn *xDataColumn = dynamic_cast<XYDataReductionCurve*>(m_curve)->xDataColumn();
+ 	const AbstractColumn *yDataColumn = dynamic_cast<XYDataReductionCurve*>(m_curve)->yDataColumn();
+ 	if(xDataColumn == 0 || yDataColumn == 0)
+ 			return;
+ 
+ 	//copy all valid data points for calculating tolerance to temporary vectors
+ 	QVector<double> xdataVector;
+ 	QVector<double> ydataVector;
+ 	for (int row=0; row<xDataColumn->rowCount(); ++row) {
+ 		//only copy those data where _all_ values (for x and y, if given) are valid
+ 		if (!std::isnan(xDataColumn->valueAt(row)) && !std::isnan(yDataColumn->valueAt(row))
+ 			&& !xDataColumn->isMasked(row) && !yDataColumn->isMasked(row)) {
+ 				xdataVector.append(xDataColumn->valueAt(row));
+ 				ydataVector.append(yDataColumn->valueAt(row));
+ 		}
+ 	}
+ 
+ 	if(xdataVector.size() > 1) {
+ 		uiGeneralTab.cbType->setEnabled(true);
+ 	} else {
+ 		uiGeneralTab.cbType->setEnabled(false);
+ 		return;
+ 	}
+ 
+ 	nsl_geom_linesim_type type = (nsl_geom_linesim_type)uiGeneralTab.cbType->currentIndex();
+ 	if (type == nsl_geom_linesim_type_raddist || type == nsl_geom_linesim_type_opheim)
+ 		m_dataReductionData.tolerance = nsl_geom_linesim_radial_tol(xdataVector.data(), ydataVector.data(), xdataVector.size());
+ 	else if (type == nsl_geom_linesim_type_visvalingam_whyatt)
+ 		m_dataReductionData.tolerance = nsl_geom_linesim_area_tol(xdataVector.data(), ydataVector.data(), xdataVector.size());
+ 	else
+ 		m_dataReductionData.tolerance = nsl_geom_linesim_perpendicular_tol(xdataVector.data(), ydataVector.data(), xdataVector.size());
+ 	uiGeneralTab.sbTolerance->setValue(m_dataReductionData.tolerance);
+ }
+ 
+ void XYDataReductionCurveDock::updateTolerance2() {
+ 	nsl_geom_linesim_type type = (nsl_geom_linesim_type)uiGeneralTab.cbType->currentIndex();
+ 
+ 	if (type == nsl_geom_linesim_type_perpdist)
+ 		uiGeneralTab.sbTolerance2->setValue(10);
+ 	else if (type == nsl_geom_linesim_type_opheim)
+ 		uiGeneralTab.sbTolerance2->setValue(5*uiGeneralTab.sbTolerance->value());
+ 	else if (type == nsl_geom_linesim_type_lang)
+ 		uiGeneralTab.sbTolerance2->setValue(10);
+ }
+ 
+ void XYDataReductionCurveDock::xDataColumnChanged(const QModelIndex& index) {
+ 	if (m_initializing)
+ 		return;
+ 
+ 	AbstractAspect* aspect = static_cast<AbstractAspect*>(index.internalPointer());
+ 	AbstractColumn* column = 0;
+ 	if (aspect) {
+ 		column = dynamic_cast<AbstractColumn*>(aspect);
+ 		Q_ASSERT(column);
+ 	}
+ 
+ 	foreach(XYCurve* curve, m_curvesList)
+ 		dynamic_cast<XYDataReductionCurve*>(curve)->setXDataColumn(column);
+ 
+ 	updateTolerance();
+ 	updateTolerance2();
+ }
+ 
+ void XYDataReductionCurveDock::yDataColumnChanged(const QModelIndex& index) {
+ 	if (m_initializing)
+ 		return;
+ 
+ 	AbstractAspect* aspect = static_cast<AbstractAspect*>(index.internalPointer());
+ 	AbstractColumn* column = 0;
+ 	if (aspect) {
+ 		column = dynamic_cast<AbstractColumn*>(aspect);
+ 		Q_ASSERT();
+ 	}
+ 
+ 	foreach(XYCurve* curve, m_curvesList)
+ 		dynamic_cast<XYDataReductionCurve*>(curve)->setYDataColumn(column);
+ 
+ 	updateTolerance();
+ 	updateTolerance2();
+ }
+ 
+ void XYDataReductionCurveDock::typeChanged() {
+ 	nsl_geom_linesim_type type = (nsl_geom_linesim_type)uiGeneralTab.cbType->currentIndex();
+ 	m_dataReductionData.type = type;
+ 
+ 	switch (type) {
+ 	case nsl_geom_linesim_type_douglas_peucker:
+ 	case nsl_geom_linesim_type_raddist:
+ 	case nsl_geom_linesim_type_interp:
+ 	case nsl_geom_linesim_type_reumann_witkam:
+ 		uiGeneralTab.lOption->setText(i18n("Tolerance (distance)"));
+ 		uiGeneralTab.sbTolerance->setDecimals(6);
+ 		uiGeneralTab.sbTolerance->setMinimum(0);
+ 		uiGeneralTab.sbTolerance->setSingleStep(0.01);
+ 		uiGeneralTab.lOption2->hide();
+ 		uiGeneralTab.chkAuto2->hide();
+ 		uiGeneralTab.sbTolerance2->hide();
+ 		if (uiGeneralTab.chkAuto->isChecked())
+ 			updateTolerance();
+ 		break;
+ 	case nsl_geom_linesim_type_nthpoint:
+ 		uiGeneralTab.lOption->setText(i18n("Step size"));
+ 		uiGeneralTab.sbTolerance->setValue(10);
+ 		uiGeneralTab.sbTolerance->setDecimals(0);
+ 		uiGeneralTab.sbTolerance->setMinimum(1);
+ 		uiGeneralTab.sbTolerance->setSingleStep(1);
+ 		uiGeneralTab.lOption2->hide();
+ 		uiGeneralTab.chkAuto2->hide();
+ 		uiGeneralTab.sbTolerance2->hide();
+ 		break;
+ 	case nsl_geom_linesim_type_perpdist:	// repeat option
+ 		uiGeneralTab.lOption->setText(i18n("Tolerance (distance)"));
+ 		uiGeneralTab.sbTolerance->setDecimals(6);
+ 		uiGeneralTab.sbTolerance->setMinimum(0);
+ 		uiGeneralTab.sbTolerance->setSingleStep(0.01);
+ 		uiGeneralTab.sbTolerance2->show();
+ 		uiGeneralTab.lOption2->show();
+ 		uiGeneralTab.chkAuto2->show();
+ 		uiGeneralTab.lOption2->setText(i18n("Repeats"));
+ 		uiGeneralTab.sbTolerance2->setDecimals(0);
+ 		uiGeneralTab.sbTolerance2->setMinimum(1);
+ 		uiGeneralTab.sbTolerance2->setSingleStep(1);
+ 		if (uiGeneralTab.chkAuto->isChecked())
+ 			updateTolerance();
+ 		if (uiGeneralTab.chkAuto2->isChecked())
+ 			updateTolerance2();
+ 		break;
+ 	case nsl_geom_linesim_type_visvalingam_whyatt:
+ 		uiGeneralTab.lOption->setText(i18n("Tolerance (area)"));
+ 		uiGeneralTab.sbTolerance->setDecimals(6);
+ 		uiGeneralTab.sbTolerance->setMinimum(0);
+ 		uiGeneralTab.sbTolerance->setSingleStep(0.01);
+ 		uiGeneralTab.lOption2->hide();
+ 		uiGeneralTab.chkAuto2->hide();
+ 		uiGeneralTab.sbTolerance2->hide();
+ 		if (uiGeneralTab.chkAuto->isChecked())
+ 			updateTolerance();
+ 		break;
+ 	case nsl_geom_linesim_type_opheim:	// min/max tol options
+ 		uiGeneralTab.lOption->setText(i18n(" Min. Tolerance"));
+ 		uiGeneralTab.sbTolerance->setDecimals(6);
+ 		uiGeneralTab.sbTolerance->setMinimum(0);
+ 		uiGeneralTab.sbTolerance->setSingleStep(0.01);
+ 		uiGeneralTab.lOption2->setText(i18n("Max. Tolerance"));
+ 		uiGeneralTab.lOption2->show();
+ 		uiGeneralTab.chkAuto2->show();
+ 		uiGeneralTab.sbTolerance2->show();
+ 		uiGeneralTab.sbTolerance2->setDecimals(6);
+ 		uiGeneralTab.sbTolerance2->setMinimum(0);
+ 		uiGeneralTab.sbTolerance2->setSingleStep(0.01);
+ 		if (uiGeneralTab.chkAuto->isChecked())
+ 			updateTolerance();
+ 		if (uiGeneralTab.chkAuto2->isChecked())
+ 			updateTolerance2();
+ 		break;
+ 	case nsl_geom_linesim_type_lang:	// distance/region
+ 		uiGeneralTab.lOption->setText(i18n("Tolerance (distance)"));
+ 		uiGeneralTab.sbTolerance->setDecimals(6);
+ 		uiGeneralTab.sbTolerance->setMinimum(0);
+ 		uiGeneralTab.sbTolerance->setSingleStep(0.01);
+ 		uiGeneralTab.lOption2->setText(i18n("Search region"));
+ 		uiGeneralTab.lOption2->show();
+ 		uiGeneralTab.chkAuto2->show();
+ 		uiGeneralTab.sbTolerance2->show();
+ 		uiGeneralTab.sbTolerance2->setDecimals(0);
+ 		uiGeneralTab.sbTolerance2->setMinimum(1);
+ 		uiGeneralTab.sbTolerance2->setSingleStep(1);
+ 		if (uiGeneralTab.chkAuto->isChecked())
+ 			updateTolerance();
+ 		if (uiGeneralTab.chkAuto2->isChecked())
+ 			updateTolerance2();
+ 		break;
+ 	}
+ 
+ 	uiGeneralTab.pbRecalculate->setEnabled(true);
+ }
+ 
+ void XYDataReductionCurveDock::autoToleranceChanged() {
+ 	bool autoTolerance = (bool)uiGeneralTab.chkAuto->isChecked();
+ 	m_dataReductionData.autoTolerance = autoTolerance;
+ 
+ 	if (autoTolerance) {
+ 		uiGeneralTab.sbTolerance->setEnabled(false);
+ 		updateTolerance();
+ 	} else {
+ 		uiGeneralTab.sbTolerance->setEnabled(true);
+ 	}
+ }
+ 
+ void XYDataReductionCurveDock::toleranceChanged() {
+ 	m_dataReductionData.tolerance = uiGeneralTab.sbTolerance->value();
+ 
+ 	uiGeneralTab.pbRecalculate->setEnabled(true);
+ }
+ 
+ void XYDataReductionCurveDock::autoTolerance2Changed() {
+ 	bool autoTolerance2 = (bool)uiGeneralTab.chkAuto2->isChecked();
+ 	m_dataReductionData.autoTolerance2 = autoTolerance2;
+ 
+ 	if (autoTolerance2) {
+ 		uiGeneralTab.sbTolerance2->setEnabled(false);
+ 		updateTolerance2();
+ 	} else {
+ 		uiGeneralTab.sbTolerance2->setEnabled(true);
+ 	}
+ }
+ 
+ void XYDataReductionCurveDock::tolerance2Changed() {
+ 	m_dataReductionData.tolerance2 = uiGeneralTab.sbTolerance2->value();
+ 
+ 	uiGeneralTab.pbRecalculate->setEnabled(true);
+ }
+ 
+ void XYDataReductionCurveDock::recalculateClicked() {
+ 	QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
+ 
+ 	foreach (XYCurve* curve, m_curvesList)
+ 		dynamic_cast<XYDataReductionCurve*>(curve)->setDataReductionData(m_dataReductionData);
+ 
+ 	uiGeneralTab.pbRecalculate->setEnabled(false);
+ 	QApplication::restoreOverrideCursor();
+ }
+ 
+ void XYDataReductionCurveDock::enableRecalculate() const {
+ 	if (m_initializing)
+ 		return;
+ 
+ 	//no dataReductioning possible without the x- and y-data
+ 	AbstractAspect* aspectX = static_cast<AbstractAspect*>(cbXDataColumn->currentModelIndex().internalPointer());
+ 	AbstractAspect* aspectY = static_cast<AbstractAspect*>(cbYDataColumn->currentModelIndex().internalPointer());
+ 	bool data = (aspectX!=0 && aspectY!=0);
+ 
+ 	uiGeneralTab.pbRecalculate->setEnabled(data);
+ }
+ 
+ /*!
+  * show the result and details of the dataReduction
+  */
+ void XYDataReductionCurveDock::showDataReductionResult() {
+ 	const XYDataReductionCurve::DataReductionResult& dataReductionResult = m_dataReductionCurve->dataReductionResult();
+ 	if (!dataReductionResult.available) {
+ 		uiGeneralTab.teResult->clear();
+ 		return;
+ 	}
+ 
+ 	//const XYDataReductionCurve::DataReductionData& dataReductionData = m_dataReductionCurve->dataReductionData();
+ 	QString str = i18n("status:") + ' ' + dataReductionResult.status + "<br>";
+ 
+ 	if (!dataReductionResult.valid) {
+ 		uiGeneralTab.teResult->setText(str);
+ 		return; //result is not valid, there was an error which is shown in the status-string, nothing to show more.
+ 	}
+ 
+ 	if (dataReductionResult.elapsedTime>1000)
+ 		str += i18n("calculation time: %1 s").arg(QString::number(dataReductionResult.elapsedTime/1000)) + "<br>";
+ 	else
+ 		str += i18n("calculation time: %1 ms").arg(QString::number(dataReductionResult.elapsedTime)) + "<br>";
+ 
+  	str += "<br>";
+ 
+ 	str += i18n("number of points: %1").arg(QString::number(dataReductionResult.npoints)) + "<br>";
+ 	str += i18n("positional squared error: %1").arg(QString::number(dataReductionResult.posError)) + "<br>";
+ 	str += i18n("area error: %1").arg(QString::number(dataReductionResult.areaError)) + "<br>";
+ 
+ 	uiGeneralTab.teResult->setText(str);
+ }
+ 
+ //*************************************************************
+ //*********** SLOTs for changes triggered in XYCurve **********
+ //*************************************************************
+ //General-Tab
+ void XYDataReductionCurveDock::curveDescriptionChanged(const AbstractAspect* aspect) {
+ 	if (m_curve != aspect)
+ 		return;
+ 
+ 	m_initializing = true;
+ 	if (aspect->name() != uiGeneralTab.leName->text()) {
+ 		uiGeneralTab.leName->setText(aspect->name());
+ 	} else if (aspect->comment() != uiGeneralTab.leComment->text()) {
+ 		uiGeneralTab.leComment->setText(aspect->comment());
+ 	}
+ 	m_initializing = false;
+ }
+ 
+ void XYDataReductionCurveDock::curveXDataColumnChanged(const AbstractColumn* column) {
+ 	m_initializing = true;
+ 	XYCurveDock::setModelIndexFromColumn(cbXDataColumn, column);
+ 	m_initializing = false;
+ }
+ 
+ void XYDataReductionCurveDock::curveYDataColumnChanged(const AbstractColumn* column) {
+ 	m_initializing = true;
+ 	XYCurveDock::setModelIndexFromColumn(cbYDataColumn, column);
+ 	m_initializing = false;
+ }
+ 
+ void XYDataReductionCurveDock::curveDataReductionDataChanged(const XYDataReductionCurve::DataReductionData& data) {
+ 	m_initializing = true;
+ 	m_dataReductionData = data;
+ 	//uiGeneralTab.cbType->setCurrentIndex(m_dataReductionData.type);
+ 	//this->typeChanged();
+ 
+ 	this->showDataReductionResult();
+ 	m_initializing = false;
+ }
+ 
+ void XYDataReductionCurveDock::dataChanged() {
+ 	this->enableRecalculate();
+ }


More information about the kde-doc-english mailing list