[kde-doc-english] [labplot/integrate-cantor] /: Merge branch 'frameworks' into integrate-cantor

Alexander Semke alexander.semke at web.de
Sun Mar 27 08:43:46 UTC 2016


Git commit 8c599c296292edd5d91d50cb5651fcbe30a44ceb by Alexander Semke.
Committed on 27/03/2016 at 07:59.
Pushed by asemke into branch 'integrate-cantor'.

Merge branch 'frameworks' into integrate-cantor

M  +1    -1    CMakeLists.txt
M  +235  -19   doc/index.docbook
M  +21   -1    src/CMakeLists.txt
M  +11   -11   src/backend/core/AbstractAspect.cpp
M  +12   -6    src/backend/core/AspectTreeModel.cpp
M  +9    -0    src/backend/core/Folder.cpp
M  +15   -1    src/backend/core/Project.cpp
M  +4    -3    src/backend/core/column/Column.cpp
M  +1    -1    src/backend/core/column/Column.h
M  +8    -1    src/backend/gsl/functions.h
M  +4    -0    src/backend/spreadsheet/Spreadsheet.h
M  +1    -1    src/backend/worksheet/TextLabel.cpp
M  +4    -0    src/backend/worksheet/Worksheet.h
M  +1    -1    src/backend/worksheet/plots/cartesian/Axis.h
M  +8    -1    src/backend/worksheet/plots/cartesian/CartesianPlot.h
M  +1    -1    src/backend/worksheet/plots/cartesian/CartesianPlotLegend.h
M  +5    -9    src/backend/worksheet/plots/cartesian/XYCurve.h
M  +236  -234  src/commonfrontend/spreadsheet/SpreadsheetView.cpp
M  +329  -288  src/commonfrontend/worksheet/WorksheetView.cpp
M  +79   -27   src/kdefrontend/GuiObserver.cpp
M  +3    -0    src/kdefrontend/GuiTools.cpp
M  +22   -22   src/kdefrontend/LabPlot.cpp
M  +251  -284  src/kdefrontend/MainWin.cpp
M  +23   -5    src/kdefrontend/MainWin.h
M  +20   -25   src/kdefrontend/SettingsDialog.cpp
M  +1    -1    src/kdefrontend/TemplateHandler.cpp
M  +47   -45   src/kdefrontend/datasources/ImportFileWidget.cpp
M  +98   -70   src/kdefrontend/dockwidgets/CartesianPlotDock.cpp
M  +29   -11   src/kdefrontend/dockwidgets/CartesianPlotLegendDock.cpp
M  +16   -5    src/kdefrontend/dockwidgets/WorksheetDock.cpp
M  +26   -12   src/kdefrontend/dockwidgets/XYCurveDock.cpp
M  +11   -6    src/kdefrontend/dockwidgets/XYEquationCurveDock.cpp
M  +34   -23   src/kdefrontend/dockwidgets/XYFitCurveDock.cpp
M  +7    -0    src/kdefrontend/labplot2ui.rc
M  +19   -14   src/kdefrontend/spreadsheet/ExportSpreadsheetDialog.cpp
M  +4    -2    src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp
M  +1    -1    src/kdefrontend/widgets/FitOptionsWidget.cpp
M  +1    -1    src/kdefrontend/widgets/FitParametersWidget.cpp
M  +1    -1    src/kdefrontend/widgets/LabelWidget.cpp

http://commits.kde.org/labplot/8c599c296292edd5d91d50cb5651fcbe30a44ceb

diff --cc doc/index.docbook
index 418297b,0fcecbe..3690583
--- a/doc/index.docbook
+++ b/doc/index.docbook
@@@ -97,10 -90,7 +97,11 @@@ Features
  <listitem><para>Definition of mathematical formulas is supported by syntax-highlighting and completion and by the list of thematicaly grouped mathematical and physical constants and functions</para></listitem>
  <listitem><para>Analysis of plotted data is supported by many zooming and navigation features</para></listitem>
  <listitem><para>Linear and non-linear fits to data, several fit-models are predefined and custom models with arbitrary number of parameters can be provided</para></listitem>
 +<listitem><para>Supports many CAS backends like Maxima, Python, KAlgebra, Sage</para></listitem>
 +<listitem><para>Nice Worksheet view for evaluating expressions</para></listitem>
 +<listitem><para>Easy plugin based structure to add different Backends</para></listitem>
 +<listitem><para>Plugin based assistant dialogs for common tasks (like integrating a function or entering a matrix)</para></listitem>
+ <listitem><para>Datapicker for manual or (semi-)automatic data extraction from imported images containing plots and curves.</para></listitem>
  </itemizedlist>
  </para>
  
@@@ -708,11 -677,11 +840,16 @@@ The menu is only available when a sprea
  </para>
  </sect1>
  
 +<sect1 id="CASworksheet-menu">
 +<title>The CAS Worksheet Menu</title>
 +<para>
 +This menu contains all the items that can also be found in the context menu (right mouse) of a CAS worksheet.
 +The menu is only available when a worksheet object is selected on the <guilabel>Project Explorer</guilabel> panel.
+ <sect1 id="datapicker-menu">
+ <title>The Datapicker Menu</title>
+ <para>
+ This menu contains all the items that can also be found in the context menu (right mouse) of a datapicker. 
+ The menu is only available when a datapicker object is selected on the <guilabel>Project Explorer</guilabel> panel.
  </para>
  </sect1>
  
diff --cc src/CMakeLists.txt
index e243acb,acf03a2..b403705
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@@ -167,22 -182,11 +183,25 @@@ set(COMMONFRONTEND_SOURCE
  	${COMMONFRONTEND_DIR}/ProjectExplorer.cpp
  	${COMMONFRONTEND_DIR}/core/PartMdiView.cpp
  	${COMMONFRONTEND_DIR}/widgets/TreeViewComboBox.cpp
+ 	${COMMONFRONTEND_DIR}/widgets/qxtspanslider.cpp
+ 	${COMMONFRONTEND_DIR}/datapicker/DatapickerView.cpp
+         ${COMMONFRONTEND_DIR}/datapicker/DatapickerImageView.cpp
  )
  
 +IF (${CANTOR_LIBS_FOUND})
 +	set(CANTOR_SOURCES
 +		${KDEFRONTEND_DIR}/ui/dockwidgets/cantorworksheetdock.ui
 +		${KDEFRONTEND_DIR}/dockwidgets/CantorWorksheetDock.cpp
 +		${BACKEND_DIR}/cantorWorksheet/VariableParser.cpp
 +		${BACKEND_DIR}/cantorWorksheet/CantorWorksheet.cpp
 +		${COMMONFRONTEND_DIR}/cantorWorksheet/CantorWorksheetView.cpp
 +	)
 +ELSE (${CANTOR_LIBS_FOUND})
 +	set(CANTOR_SOURCES "")
 +ENDIF (${CANTOR_LIBS_FOUND})
 +
 +MESSAGE (STATUS "Here it is ${CANTOR_SOURCES}")
 +
  set(TOOLS_SOURCES
  	${TOOLS_DIR}/TeXRenderer.cpp
  	${TOOLS_DIR}/EquationHighlighter.cpp
diff --cc src/commonfrontend/worksheet/WorksheetView.cpp
index e9db77f,5751fa1..41f920e
--- a/src/commonfrontend/worksheet/WorksheetView.cpp
+++ b/src/commonfrontend/worksheet/WorksheetView.cpp
@@@ -368,8 -386,10 +386,8 @@@ void WorksheetView::initMenus() 
  	m_cartesianPlotAddNewMenu->addSeparator();
  	m_cartesianPlotAddNewMenu->addAction(addHorizontalAxisAction);
  	m_cartesianPlotAddNewMenu->addAction(addVerticalAxisAction);
 -	m_cartesianPlotAddNewMenu->addSeparator();
 -	m_cartesianPlotAddNewMenu->addAction(addCustomPointAction);
  
- 	m_cartesianPlotZoomMenu = new QMenu(i18n("Zoom/Navigate"));
+ 	m_cartesianPlotZoomMenu = new QMenu(i18n("Zoom/Navigate"), this);
  	m_cartesianPlotZoomMenu->setIcon(QIcon::fromTheme("zoom-draw"));
  	m_cartesianPlotZoomMenu->addAction(scaleAutoAction);
  	m_cartesianPlotZoomMenu->addAction(scaleAutoXAction);
diff --cc src/kdefrontend/GuiObserver.cpp
index 6d1ec04,4ea5a4c..a40003e
--- a/src/kdefrontend/GuiObserver.cpp
+++ b/src/kdefrontend/GuiObserver.cpp
@@@ -36,9 -36,12 +36,13 @@@
  #include "backend/worksheet/plots/cartesian/CartesianPlotLegend.h"
  #include "backend/worksheet/plots/cartesian/XYCurve.h"
  #include "backend/worksheet/plots/cartesian/Axis.h"
+ #include "backend/worksheet/plots/cartesian/CustomPoint.h"
  #include "backend/worksheet/TextLabel.h"
 +#include "backend/cantorWorksheet/CantorWorksheet.h"
  #include "backend/core/Project.h"
+ #include "backend/datapicker/Datapicker.h"
+ #include "backend/datapicker/DatapickerImage.h"
+ #include "backend/datapicker/DatapickerCurve.h"
  #include "commonfrontend/ProjectExplorer.h"
  #include "kdefrontend/MainWin.h"
  #include "kdefrontend/dockwidgets/AxisDock.h"
@@@ -51,9 -54,11 +55,12 @@@
  #include "kdefrontend/dockwidgets/XYCurveDock.h"
  #include "kdefrontend/dockwidgets/XYEquationCurveDock.h"
  #include "kdefrontend/dockwidgets/XYFitCurveDock.h"
+ #include "kdefrontend/dockwidgets/CustomPointDock.h"
  #include "kdefrontend/dockwidgets/WorksheetDock.h"
 +#include "kdefrontend/dockwidgets/CantorWorksheetDock.h"
  #include "kdefrontend/widgets/LabelWidget.h"
+ #include "kdefrontend/widgets/DatapickerImageWidget.h"
+ #include "kdefrontend/widgets/DatapickerCurveWidget.h"
  
  #include <kstatusbar.h>
  
@@@ -93,244 -113,253 +100,289 @@@ void GuiObserver::selectedAspectsChange
  
  		mainWindow->m_propertiesDock->setWindowTitle(i18n("Properties"));
  		return;
 -	  }
 -	  prevClassName = className;
 -  }
 -
 -  if (mainWindow->stackedWidget->currentWidget())
 -	mainWindow->stackedWidget->currentWidget()->show();
 -
 -  if (className=="Spreadsheet"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Spreadsheet properties"));
 -
 -	if (!mainWindow->spreadsheetDock){
 -	  mainWindow->spreadsheetDock = new SpreadsheetDock(mainWindow->stackedWidget);
 -	  connect(mainWindow->spreadsheetDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->spreadsheetDock);
 -	}
 -
 -	QList<Spreadsheet*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<Spreadsheet *>(aspect);
 -	}
 -	mainWindow->spreadsheetDock->setSpreadsheets(list);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->spreadsheetDock);
 -  }else if (className=="Column"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Column properties"));
 -
 -	if (!mainWindow->columnDock){
 -	  mainWindow->columnDock = new ColumnDock(mainWindow->stackedWidget);
 -	  connect(mainWindow->columnDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->columnDock);
 -	}
 -
 -	QList<Column*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<Column *>(aspect);
  	}
 -	mainWindow->columnDock->setColumns(list);
  
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->columnDock);
 -  }else if (className=="Matrix"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Matrix properties"));
 +	AbstractAspect* aspect=0;
 +	QString prevClassName, className;
  
 -	if (!mainWindow->matrixDock){
 -	  mainWindow->matrixDock = new MatrixDock(mainWindow->stackedWidget);
 -	  connect(mainWindow->matrixDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->matrixDock);
 -	}
 -
 -	QList<Matrix*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<Matrix*>(aspect);
 -	}
 -	mainWindow->matrixDock->setMatrices(list);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->matrixDock);
 -  }else if (className=="Worksheet"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Worksheet properties"));
 -
 -	if (!mainWindow->worksheetDock){
 -	  mainWindow->worksheetDock = new WorksheetDock(mainWindow->stackedWidget);
 -	  connect(mainWindow->worksheetDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->worksheetDock);
 -	}
 -
 -	QList<Worksheet*> list;
 +	//check, whether objects of different types where selected
 +	//don't show any dock widgets in this case.
  	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<Worksheet *>(aspect);
 +		className= aspect->metaObject()->className();
 +		if ( className != prevClassName && !prevClassName.isEmpty() ){
 +			if (mainWindow->stackedWidget->currentWidget())
 +				mainWindow->stackedWidget->currentWidget()->hide();
 +
 +			mainWindow->m_propertiesDock->setWindowTitle(i18n("Properties"));
 +			return;
 +		}
 +		prevClassName = className;
  	}
 -	mainWindow->worksheetDock->setWorksheets(list);
  
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->worksheetDock);
 -  }else if (className=="CartesianPlot"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Cartesian plot properties"));
 -
 -	if (!mainWindow->cartesianPlotDock){
 -	  mainWindow->cartesianPlotDock = new CartesianPlotDock(mainWindow->stackedWidget);
 -	  connect(mainWindow->cartesianPlotDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->cartesianPlotDock);
 -	}
 -
 -	QList<CartesianPlot*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<CartesianPlot *>(aspect);
 -	}
 -	mainWindow->cartesianPlotDock->setPlots(list);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->cartesianPlotDock);
 -  }else if (className=="CartesianPlotLegend"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Cartesian plot legend properties"));
 -
 -	if (!mainWindow->cartesianPlotLegendDock){
 -	  mainWindow->cartesianPlotLegendDock = new CartesianPlotLegendDock(mainWindow->stackedWidget);
 -	  connect(mainWindow->cartesianPlotLegendDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->cartesianPlotLegendDock);
 -	}
 -
 -	QList<CartesianPlotLegend*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<CartesianPlotLegend*>(aspect);
 -	}
 -	mainWindow->cartesianPlotLegendDock->setLegends(list);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->cartesianPlotLegendDock);
 -  }else if (className=="Axis"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Axis properties"));
 -
 -	if (!mainWindow->axisDock){
 -	  mainWindow->axisDock = new AxisDock(mainWindow->stackedWidget);
 -	  connect(mainWindow->axisDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->axisDock);
 -	}
 -
 -	QList<Axis*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<Axis *>(aspect);
 -	}
 -	mainWindow->axisDock->setAxes(list);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->axisDock);
 -  }else if (className=="XYCurve"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("xy-curve properties"));
 -
 -	if (!mainWindow->xyCurveDock){
 -	  mainWindow->xyCurveDock = new XYCurveDock(mainWindow->stackedWidget);
 -	  mainWindow->xyCurveDock->setupGeneral();
 -	  connect(mainWindow->xyCurveDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->xyCurveDock);
 -	}
 -
 -	QList<XYCurve*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<XYCurve *>(aspect);
 -	}
 -	mainWindow->xyCurveDock->setCurves(list);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->xyCurveDock);
 -  }else if (className=="XYEquationCurve"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("xy-equation-curve properties"));
 -
 -	if (!mainWindow->xyEquationCurveDock){
 -	  mainWindow->xyEquationCurveDock = new XYEquationCurveDock(mainWindow->stackedWidget);
 -	  mainWindow->xyEquationCurveDock->setupGeneral();
 -	  connect(mainWindow->xyEquationCurveDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 -	  mainWindow->stackedWidget->addWidget(mainWindow->xyEquationCurveDock);
 -	}
 -
 -	QList<XYCurve*> list;
 -	foreach(aspect, selectedAspects){
 -	  list<<qobject_cast<XYCurve *>(aspect);
 -	}
 -	mainWindow->xyEquationCurveDock->setCurves(list);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->xyEquationCurveDock);
 +	if (mainWindow->stackedWidget->currentWidget())
 +		mainWindow->stackedWidget->currentWidget()->show();
 +
 +	if (className=="Spreadsheet"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Spreadsheet properties"));
 +
 +		if (!mainWindow->spreadsheetDock){
 +			mainWindow->spreadsheetDock = new SpreadsheetDock(mainWindow->stackedWidget);
 +			connect(mainWindow->spreadsheetDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->spreadsheetDock);
 +		}
 +
 +		QList<Spreadsheet*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<Spreadsheet *>(aspect);
 +		}
 +		mainWindow->spreadsheetDock->setSpreadsheets(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->spreadsheetDock);
 +	}else if (className=="Column"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Column properties"));
 +
 +		if (!mainWindow->columnDock){
 +			mainWindow->columnDock = new ColumnDock(mainWindow->stackedWidget);
 +			connect(mainWindow->columnDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->columnDock);
 +		}
 +
 +		QList<Column*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<Column *>(aspect);
 +		}
 +		mainWindow->columnDock->setColumns(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->columnDock);
 +	}else if (className=="Matrix"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Matrix properties"));
 +
 +		if (!mainWindow->matrixDock){
 +			mainWindow->matrixDock = new MatrixDock(mainWindow->stackedWidget);
 +			connect(mainWindow->matrixDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->matrixDock);
 +		}
 +
 +		QList<Matrix*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<Matrix*>(aspect);
 +		}
 +		mainWindow->matrixDock->setMatrices(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->matrixDock);
 +	}else if (className=="Worksheet"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Worksheet properties"));
 +
 +		if (!mainWindow->worksheetDock){
 +			mainWindow->worksheetDock = new WorksheetDock(mainWindow->stackedWidget);
 +			connect(mainWindow->worksheetDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->worksheetDock);
 +		}
 +
 +		QList<Worksheet*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<Worksheet *>(aspect);
 +		}
 +		mainWindow->worksheetDock->setWorksheets(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->worksheetDock);
 +	}else if (className=="CartesianPlot"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Cartesian plot properties"));
 +
 +		if (!mainWindow->cartesianPlotDock){
 +			mainWindow->cartesianPlotDock = new CartesianPlotDock(mainWindow->stackedWidget);
 +			connect(mainWindow->cartesianPlotDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->cartesianPlotDock);
 +		}
 +
 +		QList<CartesianPlot*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<CartesianPlot *>(aspect);
 +		}
 +		mainWindow->cartesianPlotDock->setPlots(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->cartesianPlotDock);
 +	}else if (className=="CartesianPlotLegend"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Cartesian plot legend properties"));
 +
 +		if (!mainWindow->cartesianPlotLegendDock){
 +			mainWindow->cartesianPlotLegendDock = new CartesianPlotLegendDock(mainWindow->stackedWidget);
 +			connect(mainWindow->cartesianPlotLegendDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->cartesianPlotLegendDock);
 +		}
 +
 +		QList<CartesianPlotLegend*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<CartesianPlotLegend*>(aspect);
 +		}
 +		mainWindow->cartesianPlotLegendDock->setLegends(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->cartesianPlotLegendDock);
 +	}else if (className=="Axis"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Axis properties"));
 +
 +		if (!mainWindow->axisDock){
 +			mainWindow->axisDock = new AxisDock(mainWindow->stackedWidget);
 +			connect(mainWindow->axisDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->axisDock);
 +		}
 +
 +		QList<Axis*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<Axis *>(aspect);
 +		}
 +		mainWindow->axisDock->setAxes(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->axisDock);
 +	}else if (className=="XYCurve"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("xy-curve properties"));
 +
 +		if (!mainWindow->xyCurveDock){
 +			mainWindow->xyCurveDock = new XYCurveDock(mainWindow->stackedWidget);
 +			mainWindow->xyCurveDock->setupGeneral();
 +			connect(mainWindow->xyCurveDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->xyCurveDock);
 +		}
 +
 +		QList<XYCurve*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<XYCurve *>(aspect);
 +		}
 +		mainWindow->xyCurveDock->setCurves(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->xyCurveDock);
 +	}else if (className=="XYEquationCurve"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("xy-equation-curve properties"));
 +
 +		if (!mainWindow->xyEquationCurveDock){
 +			mainWindow->xyEquationCurveDock = new XYEquationCurveDock(mainWindow->stackedWidget);
 +			mainWindow->xyEquationCurveDock->setupGeneral();
 +			connect(mainWindow->xyEquationCurveDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->xyEquationCurveDock);
 +		}
 +
 +		QList<XYCurve*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<XYCurve *>(aspect);
 +		}
 +		mainWindow->xyEquationCurveDock->setCurves(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->xyEquationCurveDock);
- 	}else if (className=="XYFitCurve"){
- 		mainWindow->m_propertiesDock->setWindowTitle(i18n("xy-fit-curve properties"));
- 
- 		if (!mainWindow->xyFitCurveDock){
- 			mainWindow->xyFitCurveDock = new XYFitCurveDock(mainWindow->stackedWidget);
- 			mainWindow->xyFitCurveDock->setupGeneral();
- 			connect(mainWindow->xyFitCurveDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
- 			mainWindow->stackedWidget->addWidget(mainWindow->xyFitCurveDock);
- 		}
+   }else if (className=="XYFitCurve"){
+ 	mainWindow->m_propertiesDock->setWindowTitle(i18n("xy-fit-curve properties"));
+ 
+ 	if (!mainWindow->xyFitCurveDock){
+ 	  mainWindow->xyFitCurveDock = new XYFitCurveDock(mainWindow->stackedWidget);
+ 	  mainWindow->xyFitCurveDock->setupGeneral();
+ 	  connect(mainWindow->xyFitCurveDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
+ 	  mainWindow->stackedWidget->addWidget(mainWindow->xyFitCurveDock);
+ 	}
  
- 		QList<XYCurve*> list;
- 		foreach(aspect, selectedAspects){
- 			list<<qobject_cast<XYCurve*>(aspect);
- 		}
- 		mainWindow->xyFitCurveDock->setCurves(list);
+ 	QList<XYCurve*> list;
+ 	foreach(aspect, selectedAspects){
+ 	  list<<qobject_cast<XYCurve*>(aspect);
+ 	}
+ 	mainWindow->xyFitCurveDock->setCurves(list);
  
- 		mainWindow->stackedWidget->setCurrentWidget(mainWindow->xyFitCurveDock);
- 	}else if (className=="TextLabel"){
- 		mainWindow->m_propertiesDock->setWindowTitle(i18n("Text label properties"));
+ 	mainWindow->stackedWidget->setCurrentWidget(mainWindow->xyFitCurveDock);
+   }else if (className=="TextLabel"){
+ 	mainWindow->m_propertiesDock->setWindowTitle(i18n("Text label properties"));
  
- 		if (!mainWindow->textLabelDock){
- 			mainWindow->textLabelDock = new LabelWidget(mainWindow->stackedWidget);
- 			mainWindow->stackedWidget->addWidget(mainWindow->textLabelDock);
- 		}
+ 	if (!mainWindow->textLabelDock){
+ 	  mainWindow->textLabelDock = new LabelWidget(mainWindow->stackedWidget);
+ 	  mainWindow->stackedWidget->addWidget(mainWindow->textLabelDock);
+ 	}
  
- 		QList<TextLabel*> list;
- 		foreach(aspect, selectedAspects){
- 			list<<qobject_cast<TextLabel*>(aspect);
- 		}
- 		mainWindow->textLabelDock->setLabels(list);
+ 	QList<TextLabel*> list;
+ 	foreach(aspect, selectedAspects){
+ 	  list<<qobject_cast<TextLabel*>(aspect);
+ 	}
+ 	mainWindow->textLabelDock->setLabels(list);
+ 
+ 	mainWindow->stackedWidget->setCurrentWidget(mainWindow->textLabelDock);
+   }else if (className=="CustomPoint"){
+ 	mainWindow->m_propertiesDock->setWindowTitle(i18n("Custom point properties"));
  
- 		mainWindow->stackedWidget->setCurrentWidget(mainWindow->textLabelDock);
+ 	if (!mainWindow->customPointDock){
+ 	  mainWindow->customPointDock = new CustomPointDock(mainWindow->stackedWidget);
+ 	  mainWindow->stackedWidget->addWidget(mainWindow->customPointDock);
+ 	}
+ 
+ 	QList<CustomPoint*> list;
+ 	foreach(aspect, selectedAspects){
+ 	  list<<qobject_cast<CustomPoint*>(aspect);
+ 	}
+ 	mainWindow->customPointDock->setPoints(list);
+ 
+ 	mainWindow->stackedWidget->setCurrentWidget(mainWindow->customPointDock);
+   }else if (className=="DatapickerCurve"){
+       mainWindow->m_propertiesDock->setWindowTitle(i18n("DatapickerCurve properties"));
+ 
+       if (!mainWindow->datapickerCurveDock){
+         mainWindow->datapickerCurveDock = new DatapickerCurveWidget(mainWindow->stackedWidget);
+         mainWindow->stackedWidget->addWidget(mainWindow->datapickerCurveDock);
+       }
+ 
+       QList<DatapickerCurve*> list;
+       foreach(aspect, selectedAspects){
+         list<<qobject_cast<DatapickerCurve*>(aspect);
+       }
+       mainWindow->datapickerCurveDock->setCurves(list);
+ 
+       mainWindow->stackedWidget->setCurrentWidget(mainWindow->datapickerCurveDock);
+   }else if (className=="Datapicker"){
+       mainWindow->m_propertiesDock->setWindowTitle(i18n("Datapicker properties"));
+ 
+       if (!mainWindow->datapickerImageDock){
+         mainWindow->datapickerImageDock = new DatapickerImageWidget(mainWindow->stackedWidget);
+         mainWindow->stackedWidget->addWidget(mainWindow->datapickerImageDock);
+       }
+ 
+       QList<DatapickerImage*> list;
+       foreach(aspect, selectedAspects){
+         list<<qobject_cast<Datapicker*>(aspect)->image();
+       }
+       mainWindow->datapickerImageDock->setImages(list);
+ 
+       mainWindow->stackedWidget->setCurrentWidget(mainWindow->datapickerImageDock);
 -  }else if (className=="Project"){
 -	mainWindow->m_propertiesDock->setWindowTitle(i18n("Project properties"));
 -
 -	if (!mainWindow->projectDock){
 -	  mainWindow->projectDock = new ProjectDock(mainWindow->stackedWidget);
 -	  mainWindow->stackedWidget->addWidget(mainWindow->projectDock);
 +	}else if (className=="Project"){
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Project properties"));
 +
 +		if (!mainWindow->projectDock){
 +			mainWindow->projectDock = new ProjectDock(mainWindow->stackedWidget);
 +			mainWindow->stackedWidget->addWidget(mainWindow->projectDock);
 +		}
 +
 +		mainWindow->projectDock->setProject(mainWindow->m_project);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->projectDock);
 +	}else if (className=="CantorWorksheet"){
 +		#ifdef HAVE_CANTOR_LIBS
 +		if (!mainWindow->cantorWorksheetDock){
 +			mainWindow->cantorWorksheetDock = new CantorWorksheetDock(mainWindow->stackedWidget);
 +			connect(mainWindow->cantorWorksheetDock, SIGNAL(info(QString)), mainWindow->statusBar(), SLOT(showMessage(QString)));
 +			mainWindow->stackedWidget->addWidget(mainWindow->cantorWorksheetDock);
 +		}
 +
 +		QList<CantorWorksheet*> list;
 +		foreach(aspect, selectedAspects){
 +			list<<qobject_cast<CantorWorksheet *>(aspect);
 +		}
 +		if (list.size()==1){
 +			mainWindow->m_propertiesDock->setWindowTitle(list.first()->backendName() + " Properties");
 +		} else {
 +			mainWindow->m_propertiesDock->setWindowTitle("CAS Properties");
 +		}
 +		mainWindow->cantorWorksheetDock->setCantorWorksheets(list);
 +
 +		mainWindow->stackedWidget->setCurrentWidget(mainWindow->cantorWorksheetDock);
 +		#endif
 +	}else{
 +		mainWindow->m_propertiesDock->setWindowTitle(i18n("Properties"));
 +		if (mainWindow->stackedWidget->currentWidget())
 +			mainWindow->stackedWidget->currentWidget()->hide();
  	}
  
 -	mainWindow->projectDock->setProject(mainWindow->m_project);
 -
 -	mainWindow->stackedWidget->setCurrentWidget(mainWindow->projectDock);
 -  }else{
 -    mainWindow->m_propertiesDock->setWindowTitle(i18n("Properties"));
 -	if (mainWindow->stackedWidget->currentWidget())
 -	  mainWindow->stackedWidget->currentWidget()->hide();
 -  }
 -
  }
  
  /*!
diff --cc src/kdefrontend/LabPlot.cpp
index 7cd9147,89dfa69..4115942
--- a/src/kdefrontend/LabPlot.cpp
+++ b/src/kdefrontend/LabPlot.cpp
@@@ -53,14 -51,14 +51,15 @@@ int main (int argc, char *argv[]) 
  	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);
  
- 
  	QApplication app(argc, argv);
- 
+ 	QCoreApplication::setApplicationVersion(QLatin1String(LVERSION));
  	QCommandLineParser parser;
- 	QCommandLineOption nosplashOption("no-splash", i18n( "start in fullscreen mode"));
+ 	parser.addHelpOption();
+ 	parser.addVersionOption();
+ 	QCommandLineOption nosplashOption("no-splash", i18n("disable splash screen"));
  	parser.addOption(nosplashOption);
  
  	parser.addPositionalArgument("+[file]", i18n( "open a project file"));
diff --cc src/kdefrontend/MainWin.cpp
index 0ebf079,fc9d283..a5e95cf
--- a/src/kdefrontend/MainWin.cpp
+++ b/src/kdefrontend/MainWin.cpp
@@@ -37,16 -37,15 +37,17 @@@
  #include "backend/matrix/Matrix.h"
  #include "backend/worksheet/Worksheet.h"
  #include "backend/datasources/FileDataSource.h"
 +#include "backend/cantorWorksheet/CantorWorksheet.h"
+ #include "backend/datapicker/Datapicker.h"
  
  #include "commonfrontend/ProjectExplorer.h"
  #include "commonfrontend/matrix/MatrixView.h"
  #include "commonfrontend/spreadsheet/SpreadsheetView.h"
  #include "commonfrontend/worksheet/WorksheetView.h"
 +#include "commonfrontend/cantorWorksheet/CantorWorksheetView.h"
+ #include "commonfrontend/datapicker/DatapickerView.h"
+ #include "commonfrontend/datapicker/DatapickerImageView.h"
  
- #include "kdefrontend/worksheet/ExportWorksheetDialog.h"
- #include "kdefrontend/spreadsheet/ExportSpreadsheetDialog.h"
  #include "kdefrontend/datasources/ImportFileDialog.h"
  #include "kdefrontend/dockwidgets/ProjectDock.h"
  #include "kdefrontend/HistoryDialog.h"
@@@ -58,14 -57,11 +59,12 @@@
  #include <QDockWidget>
  #include <QStackedWidget>
  #include <QUndoStack>
- #include <QPrinter>
- #include <QPrintDialog>
- #include <QPrintPreviewDialog>
  #include <QCloseEvent>
  #include <QFileDialog>
+ #include <QMimeData>
  #include <QElapsedTimer>
  #include <QDebug>
 +#include <QHash>
  
  #include <KActionCollection>
  #include <KFileDialog>
@@@ -77,46 -73,44 +76,51 @@@
  #include <KLocalizedString>
  #include <KFilterDev>
  
 +#ifdef HAVE_CANTOR_LIBS
 +#include <cantor/backend.h>
 +#endif
-  /*!
- 	\class MainWin
- 	\brief Main application window.
 +
- 	\ingroup kdefrontend
-  */
+ /*!
+ \class MainWin
+ \brief Main application window.
+ 
+ \ingroup kdefrontend
+ */
  
  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),
- 	axisDock(0),
- 	cartesianPlotDock(0),
- 	cartesianPlotLegendDock(0),
- 	columnDock(0),
- 	matrixDock(0),
- 	spreadsheetDock(0),
- 	projectDock(0),
- 	xyCurveDock(0),
- 	xyEquationCurveDock(0),
- 	xyFitCurveDock(0),
- 	worksheetDock(0),
+ 	  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),
+ 	  axisDock(0),
+ 	  cartesianPlotDock(0),
+ 	  cartesianPlotLegendDock(0),
+ 	  columnDock(0),
+ 	  matrixDock(0),
+ 	  spreadsheetDock(0),
+ 	  projectDock(0),
+ 	  xyCurveDock(0),
+ 	  xyEquationCurveDock(0),
+ 	  xyFitCurveDock(0),
+ 	  worksheetDock(0),
 +	#ifdef HAVE_CANTOR_LIBS
 +	cantorWorksheetDock(0),
 +	#endif
- 	textLabelDock(0){
+ 	  textLabelDock(0),
+ 	  customPointDock(0),
+ 	  datapickerImageDock(0),
+ 	  datapickerCurveDock(0),
+ 	  m_guiObserver(0) {
  
  // 	QTimer::singleShot( 0, this, SLOT(initGUI(filename)) );  //TODO doesn't work anymore
  	initGUI(filename);
@@@ -357,41 -365,9 +375,42 @@@ void MainWin::initMenus() 
  	m_newMenu->addAction(m_newSpreadsheetAction);
  	m_newMenu->addAction(m_newMatrixAction);
  	m_newMenu->addAction(m_newWorksheetAction);
+ 	m_newMenu->addAction(m_newDatapickerAction);
  	m_newMenu->addSeparator();
  	m_newMenu->addAction(m_newFileDataSourceAction);
 +	m_newMenu->addSeparator();
 +
 +	#ifdef HAVE_CANTOR_LIBS
 +	//"Adding Cantor backends to menue and context menu"
 +	QStringList m_availableBackend = Cantor::Backend::listAvailableBackends();
 +	if(m_availableBackend.count() > 0) {
 +		m_newCantorWorksheetMenu = new QMenu(i18n("CAS Worksheet"));
 +		m_newCantorWorksheetMenu->setIcon(QIcon::fromTheme("archive-insert"));
 +	unplugActionList(QLatin1String("backends_list"));
 +		QList<QAction*> newBackendActions;
 +		foreach (Cantor::Backend* backend, Cantor::Backend::availableBackends()) {
 +			if (!backend->isEnabled()) continue;
 +			QAction* action = new QAction(QIcon::fromTheme(backend->icon()), backend->name(),this);
 +			action->setData(backend->name());
 +			newBackendActions << action;
 +			m_newCantorWorksheetMenu->addAction(action);
 +		}
 +
 +		connect(m_newCantorWorksheetMenu, SIGNAL(triggered(QAction*)), this, SLOT(newCantorWorksheet(QAction*)));
 +		foreach(QAction* a, newBackendActions) {
 +			qDebug() << a->data().toString();
 +		}
 +		plugActionList(QLatin1String("backends_list"), newBackendActions);
 +		m_newMenu->addMenu(m_newCantorWorksheetMenu);
 +	} else {
 +		int choice = KMessageBox::warningContinueCancel(this, i18n("No backend for Cantor is installed."), i18n("Warning"));
 +		switch(choice) {
 +			case KMessageBox::Cancel:
 +			close();
 +			break;
 +		}
 +	}
 +	#endif
  // 	m_newMenu->addAction(m_newSqlDataSourceAction);
  
  	//menu subwindow visibility policy
@@@ -462,7 -440,7 +483,8 @@@ void MainWin::updateGUIOnProjectChanges
  		factory->container("worksheet_toolbar", this)->hide();
  		factory->container("cartesian_plot_toolbar", this)->hide();
  		factory->container("spreadsheet_toolbar", this)->hide();
 +		factory->container("casWorksheet", this)->setEnabled(!b);
+ 		factory->container("datapicker_toolbar", this)->hide();
  	}
  
  	factory->container("new", this)->setEnabled(!b);
@@@ -500,7 -479,7 +523,8 @@@ void MainWin::updateGUI() 
  		factory->container("worksheet_toolbar", this)->hide();
  		factory->container("cartesian_plot_toolbar", this)->hide();
  		factory->container("spreadsheet_toolbar", this)->hide();
 +		factory->container("casWorksheet", this)->setEnabled(false);
+ 		factory->container("datapicker_toolbar", this)->hide();
  		return;
  	}
  
@@@ -595,27 -574,31 +619,46 @@@
  		QMenu* menu=qobject_cast<QMenu*>(factory->container("matrix", this));
  		menu->clear();
  		view->createContextMenu(menu);
- 	}else{
+ 	} else {
  		factory->container("matrix", this)->setEnabled(false);
  	}
 +	#ifdef HAVE_CANTOR_LIBS
 +	CantorWorksheet* cantorworksheet = this->activeCantorWorksheet();
 +	if(cantorworksheet) {
 +		// enable Cantor Worksheet related menues
 +		factory->container("casWorksheet", this)->setEnabled(true);
 +		CantorWorksheetView* view=qobject_cast<CantorWorksheetView*>(cantorworksheet->view());
 +		QMenu* menu=qobject_cast<QMenu*>(factory->container("casWorksheet", this));
 +		menu->clear();
 +		view->createContextMenu(menu);
 +		QToolBar* toolbar=qobject_cast<QToolBar*>(factory->container("cantorworksheet_toolbar", this));
- 		toolbar->setVisible(true);
- 		toolbar->clear();
- 		view->fillToolBar(toolbar);
 +	} else {
 +		//no cantor worksheet selected -> deactivate cantor worksheet related menus
 +		factory->container("casWorksheet", this)->setEnabled(false);
 +	}
 +	#endif
+ 
+ 	const Datapicker* datapicker = this->activeDatapicker();
+ 	if (datapicker) {
+ 		factory->container("datapicker", this)->setEnabled(true);
+ 		//populate datapicker-menu
+ 		DatapickerView* view=qobject_cast<DatapickerView*>(datapicker->view());
+ 		QMenu* menu=qobject_cast<QMenu*>(factory->container("datapicker", this));
+ 		menu->clear();
+ 		view->createContextMenu(menu);
+ 
+ 		//populate spreadsheet-toolbar
+ 		QToolBar* toolbar=qobject_cast<QToolBar*>(factory->container("datapicker_toolbar", this));
+ 		if (group.groupList().indexOf("Toolbar datapicker_toolbar")==-1)
+ 			toolbar->setToolButtonStyle(Qt::ToolButtonFollowStyle);
+ 
+ 		toolbar->setVisible(true);
+ 		toolbar->clear();
+ 		view->fillToolBar(toolbar);
+ 	} else {
+ 		factory->container("datapicker", this)->setEnabled(false);
+ 		factory->container("datapicker_toolbar", this)->setVisible(false);
+ 	}
  }
  
  /*!
@@@ -1275,10 -1182,10 +1267,10 @@@ void MainWin::handleAspectAboutToBeRemo
  }
  
  /*!
 -	called when the current aspect in the tree of the project explorer was changed.
 -	Selects the new aspect.
 +    called when the current aspect in the tree of the project explorer was changed.
 +    Selects the new aspect.
  */
- void MainWin::handleCurrentAspectChanged(AbstractAspect *aspect){
+ void MainWin::handleCurrentAspectChanged(AbstractAspect *aspect) {
  	if (!aspect)
  		aspect = m_project; // should never happen, just in case
  
@@@ -1501,11 -1432,11 +1517,11 @@@ void MainWin::handleSettingsChanges() 
  /************************************** dialogs ***************************************/
  /***************************************************************************************/
  /*!
 -	shows the dialog with the Undo-history.
 +  shows the dialog with the Undo-history.
  */
- void MainWin::historyDialog(){
+ void MainWin::historyDialog() {
  	if (!m_project->undoStack())
- 			return;
+ 		return;
  
  	HistoryDialog* dialog = new HistoryDialog(this, m_project->undoStack(), m_undoViewEmptyLabel);
  	int index = m_project->undoStack()->index();
@@@ -1523,10 -1454,10 +1539,10 @@@
  }
  
  /*!
 -	Opens the dialog to import data to the selected workbook, spreadsheet or matrix
 +  Opens the dialog to import data to the selected workbook, spreadsheet or matrix
  */
- void MainWin::importFileDialog(){
- 	m_importFileDialog = new ImportFileDialog(this);
+ void MainWin::importFileDialog(const QString& fileName) {
+ 	m_importFileDialog = new ImportFileDialog(this, false, fileName);
  
  	if ( m_currentAspect->inherits("Spreadsheet") || m_currentAspect->inherits("Matrix") || m_currentAspect->inherits("Workbook") ) {
  		m_importFileDialog->setCurrentIndex( m_projectExplorer->currentIndex());
@@@ -1545,71 -1476,22 +1561,22 @@@
  }
  
  /*!
 -	opens the dialog for the export of the currently active worksheet, spreadsheet or matrix.
 +  opens the dialog for the export of the currently active worksheet, spreadsheet or matrix.
   */
- void MainWin::exportDialog(){
- 	Worksheet* w=this->activeWorksheet();
- 	if (w!=0){ //worksheet
- 		ExportWorksheetDialog* dlg = new ExportWorksheetDialog(this);
- 		dlg->setFileName(w->name());
- 		if (dlg->exec()==QDialog::Accepted){
- 			QString path = dlg->path();
- 			WorksheetView::ExportFormat format = dlg->exportFormat();
- 			WorksheetView::ExportArea area = dlg->exportArea();
- 			bool background = dlg->exportBackground();
- 			int resolution = dlg->exportResolution();
- 
- 			WorksheetView* view = qobject_cast<WorksheetView*>(w->view());
- 			WAIT_CURSOR;
- 			view->exportToFile(path, format, area, background, resolution);
- 			RESET_CURSOR;
- 		}
- 
- 		return;
- 	}
- 
- 
- 	Spreadsheet* s = this->activeSpreadsheet();
- 	if (s) {
- 		ExportSpreadsheetDialog* dlg = new ExportSpreadsheetDialog(this);
- 		dlg->setFileName(s->name());
- 		if (dlg->exec()==QDialog::Accepted){
- 			QString path = dlg->path();
- 			const bool exportHeader = dlg->exportHeader();
- 			QString separator = dlg->separator();
- 
- 			SpreadsheetView* view = qobject_cast<SpreadsheetView*>(s->view());
- 			WAIT_CURSOR;
- 			view->exportToFile(path, exportHeader, separator);
- 			RESET_CURSOR;
- 		}
- 
+ void MainWin::exportDialog() {
+ 	QMdiSubWindow* win = m_mdiArea->currentSubWindow();
+ 	if (!win)
  		return;
- 	}
- 
- 	Matrix* m = this->activeMatrix();
- 	if (m) {
- 		ExportSpreadsheetDialog* dlg = new ExportSpreadsheetDialog(this);
- 		dlg->setFileName(m->name());
- 		dlg->setMatrixMode(true);
- 		if (dlg->exec()==QDialog::Accepted){
- 			QString path = dlg->path();
- 			QString separator = dlg->separator();
- 
- 			MatrixView* view = qobject_cast<MatrixView*>(m->view());
- 			WAIT_CURSOR;
- 			view->exportToFile(path, separator);
- 			RESET_CURSOR;
- 		}
  
- 		return;
- 	}
+ 	AbstractPart* part = dynamic_cast<PartMdiView*>(win)->part();
+ 	part->exportView();
+ 	statusBar()->showMessage(i18n("%1 exported", part->name()));
  }
  
  /*!
 -	adds a new file data source to the current project.
 +  adds a new file data source to the current project.
  */
- void MainWin::newFileDataSourceActionTriggered(){
+ void MainWin::newFileDataSourceActionTriggered() {
  	ImportFileDialog* dlg = new ImportFileDialog(this, true);
  	if ( dlg->exec() == QDialog::Accepted ) {
  		FileDataSource* dataSource = new FileDataSource(0,  i18n("File data source%1", 1));
@@@ -1620,9 -1502,9 +1587,9 @@@
  }
  
  /*!
 -	adds a new SQL data source to the current project.
 +  adds a new SQL data source to the current project.
  */
- void MainWin::newSqlDataSourceActionTriggered(){
+ void MainWin::newSqlDataSourceActionTriggered() {
  	//TODO
  }
  
diff --cc src/kdefrontend/MainWin.h
index 7d2aaad,2cbcab5..e0a0e30
--- a/src/kdefrontend/MainWin.h
+++ b/src/kdefrontend/MainWin.h
@@@ -55,16 -58,15 +58,20 @@@ class XYFitCurveDock
  class WorksheetDock;
  class LabelWidget;
  class ImportFileDialog;
+ class DatapickerImageWidget;
+ class DatapickerCurveWidget;
  
 +#ifdef HAVE_CANTOR_LIBS
 +class CantorWorksheet;
 +class CantorWorksheetDock;
 +#endif
 +
  class QDockWidget;
  class QStackedWidget;
+ class QDragEnterEvent;
+ class QDropEvent;
  
- class MainWin : public KXmlGuiWindow{
+ class MainWin : public KXmlGuiWindow {
  	Q_OBJECT
  
  public:
@@@ -142,14 -145,7 +150,14 @@@ private
  	QAction* m_visibilityAllAction;
  	QAction* m_toggleProjectExplorerDockAction;
  	QAction* m_togglePropertiesDockAction;
 +	
 +	//cantor
 +	#ifdef HAVE_CANTOR_LIBS
 +	QMenu* m_newCantorWorksheetMenu;
 +	CantorWorksheetDock* cantorWorksheetDock;
 +	CantorWorksheet* activeCantorWorksheet() const;
 +	#endif
- 	
+ 
  	//Menus
  	QMenu* m_visibilityMenu;
  	QMenu* m_newMenu;
diff --cc src/kdefrontend/SettingsDialog.cpp
index d245a76,846dd3b..ab944ba
--- a/src/kdefrontend/SettingsDialog.cpp
+++ b/src/kdefrontend/SettingsDialog.cpp
@@@ -98,7 -91,8 +91,9 @@@ void SettingsDialog::onOkButton()
  	}
  }
  
- void SettingsDialog::onApplyButton(){
+ /*void SettingsDialog::onApplyButton(){
+ 	qDebug()<<"SettingsDialog::onApplyButton()";
++>>>>>>> frameworks
  	if (m_changed){
  		applySettings();
  		setWindowTitle(i18n("Preferences"));
diff --cc src/kdefrontend/dockwidgets/CartesianPlotDock.cpp
index a81b141,8eefb4d..1bba819
--- a/src/kdefrontend/dockwidgets/CartesianPlotDock.cpp
+++ b/src/kdefrontend/dockwidgets/CartesianPlotDock.cpp
@@@ -161,58 -164,62 +164,62 @@@ CartesianPlotDock::CartesianPlotDock(QW
  	connect(templateHandler, SIGNAL(saveConfigRequested(KConfig&)), this, SLOT(saveConfigAsTemplate(KConfig&)));
  	connect(templateHandler, SIGNAL(info(QString)), this, SIGNAL(info(QString)));
  
 -    init();
 +	init();
  
 -    //TODO: activate the tab again once the functionality is implemented
 -    ui.tabWidget->removeTab(2);
 +	//TODO: activate the tab again once the functionality is implemented
 +	ui.tabWidget->removeTab(2);
  }
  
+ CartesianPlotDock::~CartesianPlotDock() {
+ 	delete m_completion;
+ }
+ 
  void CartesianPlotDock::init(){
 -    this->retranslateUi();
 -
 -    //create icons for the different styles for scale breaking
 -    QPainter pa;
 -    pa.setPen( QPen(Qt::SolidPattern, 0) );
 -    QPixmap pm(20, 20);
 -    ui.cbXBreakStyle->setIconSize( QSize(20,20) );
 -    ui.cbYBreakStyle->setIconSize( QSize(20,20) );
 -
 -    //simple
 -    pm.fill(Qt::transparent);
 -    pa.begin( &pm );
 -    pa.setRenderHint(QPainter::Antialiasing);
 -    pa.setBrush(Qt::SolidPattern);
 -    pa.drawLine(3,10,8,10);
 -    pa.drawLine(12,10,17,10);
 -    pa.end();
 -    ui.cbXBreakStyle->setItemIcon(0, pm);
 -    ui.cbYBreakStyle->setItemIcon(0, pm);
 -
 -    //vertical
 -    pm.fill(Qt::transparent);
 -    pa.begin( &pm );
 -    pa.setRenderHint(QPainter::Antialiasing);
 -    pa.setBrush(Qt::SolidPattern);
 -    pa.drawLine(3,10,8,10);
 -    pa.drawLine(12,10,17,10);
 -    pa.drawLine(8,14,8,6);
 -    pa.drawLine(12,14,12,6);
 -    pa.end();
 -    ui.cbXBreakStyle->setItemIcon(1, pm);
 -    ui.cbYBreakStyle->setItemIcon(1, pm);
 -
 -    //sloped
 -    pm.fill(Qt::transparent);
 -    pa.begin( &pm );
 -    pa.setRenderHint(QPainter::Antialiasing);
 -    pa.setBrush(Qt::SolidPattern);
 -    pa.drawLine(3,10,8,10);
 -    pa.drawLine(12,10,17,10);
 -    pa.drawLine(6,14,10,6);
 -    pa.drawLine(10,14,14,6);
 -    pa.end();
 -    ui.cbXBreakStyle->setItemIcon(2, pm);
 -    ui.cbYBreakStyle->setItemIcon(2, pm);
 +	this->retranslateUi();
 +
 +	//create icons for the different styles for scale breaking
 +	QPainter pa;
 +	pa.setPen( QPen(Qt::SolidPattern, 0) );
 +	QPixmap pm(20, 20);
 +	ui.cbXBreakStyle->setIconSize( QSize(20,20) );
 +	ui.cbYBreakStyle->setIconSize( QSize(20,20) );
 +
 +	//simple
 +	pm.fill(Qt::transparent);
 +	pa.begin( &pm );
 +	pa.setRenderHint(QPainter::Antialiasing);
 +	pa.setBrush(Qt::SolidPattern);
 +	pa.drawLine(3,10,8,10);
 +	pa.drawLine(12,10,17,10);
 +	pa.end();
 +	ui.cbXBreakStyle->setItemIcon(0, pm);
 +	ui.cbYBreakStyle->setItemIcon(0, pm);
 +
 +	//vertical
 +	pm.fill(Qt::transparent);
 +	pa.begin( &pm );
 +	pa.setRenderHint(QPainter::Antialiasing);
 +	pa.setBrush(Qt::SolidPattern);
 +	pa.drawLine(3,10,8,10);
 +	pa.drawLine(12,10,17,10);
 +	pa.drawLine(8,14,8,6);
 +	pa.drawLine(12,14,12,6);
 +	pa.end();
 +	ui.cbXBreakStyle->setItemIcon(1, pm);
 +	ui.cbYBreakStyle->setItemIcon(1, pm);
 +
 +	//sloped
 +	pm.fill(Qt::transparent);
 +	pa.begin( &pm );
 +	pa.setRenderHint(QPainter::Antialiasing);
 +	pa.setBrush(Qt::SolidPattern);
 +	pa.drawLine(3,10,8,10);
 +	pa.drawLine(12,10,17,10);
 +	pa.drawLine(6,14,10,6);
 +	pa.drawLine(10,14,14,6);
 +	pa.end();
 +	ui.cbXBreakStyle->setItemIcon(2, pm);
 +	ui.cbYBreakStyle->setItemIcon(2, pm);
  }
  
  void CartesianPlotDock::setPlots(QList<CartesianPlot*> list){
@@@ -234,65 -241,67 +241,67 @@@
  		ui.lComment->setEnabled(true);
  		ui.leComment->setEnabled(true);
  
 -        ui.leName->setText(m_plot->name());
 -        ui.leComment->setText(m_plot->comment());
 -    }else{
 -        ui.lName->setEnabled(false);
 -        ui.leName->setEnabled(false);
 -        ui.lComment->setEnabled(false);
 -        ui.leComment->setEnabled(false);
 +		ui.leName->setText(m_plot->name());
 +		ui.leComment->setText(m_plot->comment());
 +	}else{
 +		ui.lName->setEnabled(false);
 +		ui.leName->setEnabled(false);
 +		ui.lComment->setEnabled(false);
 +		ui.leComment->setEnabled(false);
  
 -        ui.leName->setText("");
 -        ui.leComment->setText("");
 -    }
 +		ui.leName->setText("");
 +		ui.leComment->setText("");
 +	}
  
  	//show the properties of the first plot
- 	this->load();
- 
- 	//update active widgets
- 	backgroundTypeChanged(ui.cbBackgroundType->currentIndex());
- 
- 	//Deactivate the geometry related widgets, if the worksheet layout is active.
- 	//Currently, a plot can only be a child of the worksheet itself, so we only need to ask the parent aspect (=worksheet).
- 	//TODO redesign this, if the hierarchy will be changend in future (a plot is a child of a new object group/container or so)
- 	Worksheet* w = dynamic_cast<Worksheet*>(m_plot->parentAspect());
- 	if (w){
- 		bool b = (w->layout()==Worksheet::NoLayout);
- 		ui.sbTop->setEnabled(b);
- 		ui.sbLeft->setEnabled(b);
- 		ui.sbWidth->setEnabled(b);
- 		ui.sbHeight->setEnabled(b);
- 		connect(w, SIGNAL(layoutChanged(Worksheet::Layout)), this, SLOT(layoutChanged(Worksheet::Layout)));
- 	}
- 
- 	//SIGNALs/SLOTs
- 	connect( m_plot, SIGNAL(aspectDescriptionChanged(const AbstractAspect*)), this, SLOT(plotDescriptionChanged(const AbstractAspect*)) );
- 	connect( m_plot, SIGNAL(rectChanged(QRectF&)), this, SLOT(plotRectChanged(QRectF&)) );
- 	connect( m_plot, SIGNAL(xMinChanged(float)), this, SLOT(plotXMinChanged(float)) );
- 	connect( m_plot, SIGNAL(xMaxChanged(float)), this, SLOT(plotXMaxChanged(float)) );
- 	connect( m_plot, SIGNAL(xScaleChanged(int)), this, SLOT(plotXScaleChanged(int)) );
- 	connect( m_plot, SIGNAL(yMinChanged(float)), this, SLOT(plotYMinChanged(float)) );
- 	connect( m_plot, SIGNAL(yMaxChanged(float)), this, SLOT(plotYMaxChanged(float)) );
- 	connect( m_plot, SIGNAL(yScaleChanged(int)), this, SLOT(plotYScaleChanged(int)) );
- 	connect( m_plot, SIGNAL(xScaleBreakingsChanged(CartesianPlot::ScaleBreakings)), this, SLOT(plotXScaleBreakingChanged(CartesianPlot::ScaleBreakings)) );
- 	connect( m_plot, SIGNAL(yScaleBreakingsChanged(CartesianPlot::ScaleBreakings)), this, SLOT(plotYScaleBreakingChanged(CartesianPlot::ScaleBreakings)) );
- 	connect( m_plot, SIGNAL(visibleChanged(bool)), this, SLOT(plotVisibleChanged(bool)) );
- 
- 	// Plot Area
- 	connect( m_plot->plotArea(), SIGNAL(backgroundTypeChanged(PlotArea::BackgroundType)), this, SLOT(plotBackgroundTypeChanged(PlotArea::BackgroundType)) );
- 	connect( m_plot->plotArea(), SIGNAL(backgroundColorStyleChanged(PlotArea::BackgroundColorStyle)), this, SLOT(plotBackgroundColorStyleChanged(PlotArea::BackgroundColorStyle)) );
- 	connect( m_plot->plotArea(), SIGNAL(backgroundImageStyleChanged(PlotArea::BackgroundImageStyle)), this, SLOT(plotBackgroundImageStyleChanged(PlotArea::BackgroundImageStyle)) );
- 	connect( m_plot->plotArea(), SIGNAL(backgroundBrushStyleChanged(Qt::BrushStyle)), this, SLOT(plotBackgroundBrushStyleChanged(Qt::BrushStyle)) );
- 	connect( m_plot->plotArea(), SIGNAL(backgroundFirstColorChanged(QColor&)), this, SLOT(plotBackgroundFirstColorChanged(QColor&)) );
- 	connect( m_plot->plotArea(), SIGNAL(backgroundSecondColorChanged(QColor&)), this, SLOT(plotBackgroundSecondColorChanged(QColor&)) );
- 	connect( m_plot->plotArea(), SIGNAL(backgroundFileNameChanged(QString&)), this, SLOT(plotBackgroundFileNameChanged(QString&)) );
- 	connect( m_plot->plotArea(), SIGNAL(backgroundOpacityChanged(float)), this, SLOT(plotBackgroundOpacityChanged(float)) );
- 	connect( m_plot->plotArea(), SIGNAL(borderPenChanged(QPen&)), this, SLOT(plotBorderPenChanged(QPen&)) );
- 	connect( m_plot->plotArea(), SIGNAL(borderOpacityChanged(float)), this, SLOT(plotBorderOpacityChanged(float)) );
- 	connect( m_plot, SIGNAL(horizontalPaddingChanged(float)), this, SLOT(plotHorizontalPaddingChanged(float)) );
- 	connect( m_plot, SIGNAL(verticalPaddingChanged(float)), this, SLOT(plotVerticalPaddingChanged(float)) );
- 
- 	m_initializing = false;
+   	this->load();
+ 
+     //update active widgets
+     backgroundTypeChanged(ui.cbBackgroundType->currentIndex());
+ 
+     //Deactivate the geometry related widgets, if the worksheet layout is active.
+     //Currently, a plot can only be a child of the worksheet itself, so we only need to ask the parent aspect (=worksheet).
+     //TODO redesign this, if the hierarchy will be changend in future (a plot is a child of a new object group/container or so)
+     Worksheet* w = dynamic_cast<Worksheet*>(m_plot->parentAspect());
+     if (w){
+         bool b = (w->layout()==Worksheet::NoLayout);
+         ui.sbTop->setEnabled(b);
+         ui.sbLeft->setEnabled(b);
+         ui.sbWidth->setEnabled(b);
+         ui.sbHeight->setEnabled(b);
+         connect(w, SIGNAL(layoutChanged(Worksheet::Layout)), this, SLOT(layoutChanged(Worksheet::Layout)));
+     }
+ 
+     //SIGNALs/SLOTs
+     connect( m_plot, SIGNAL(aspectDescriptionChanged(const AbstractAspect*)), this, SLOT(plotDescriptionChanged(const AbstractAspect*)) );
+     connect( m_plot, SIGNAL(rectChanged(QRectF&)), this, SLOT(plotRectChanged(QRectF&)) );
+     connect( m_plot, SIGNAL(xMinChanged(float)), this, SLOT(plotXMinChanged(float)) );
+     connect( m_plot, SIGNAL(xMaxChanged(float)), this, SLOT(plotXMaxChanged(float)) );
+     connect( m_plot, SIGNAL(xScaleChanged(int)), this, SLOT(plotXScaleChanged(int)) );
+     connect( m_plot, SIGNAL(xAutoScaleChanged(bool)), this, SLOT(plotXAutoScaleChanged(bool)) );
+     connect( m_plot, SIGNAL(yMinChanged(float)), this, SLOT(plotYMinChanged(float)) );
+     connect( m_plot, SIGNAL(yMaxChanged(float)), this, SLOT(plotYMaxChanged(float)) );
+     connect( m_plot, SIGNAL(yScaleChanged(int)), this, SLOT(plotYScaleChanged(int)) );
+     connect( m_plot, SIGNAL(yAutoScaleChanged(bool)), this, SLOT(plotYAutoScaleChanged(bool)) );
+     connect( m_plot, SIGNAL(xScaleBreakingsChanged(CartesianPlot::ScaleBreakings)), this, SLOT(plotXScaleBreakingChanged(CartesianPlot::ScaleBreakings)) );
+     connect( m_plot, SIGNAL(yScaleBreakingsChanged(CartesianPlot::ScaleBreakings)), this, SLOT(plotYScaleBreakingChanged(CartesianPlot::ScaleBreakings)) );
+     connect( m_plot, SIGNAL(visibleChanged(bool)), this, SLOT(plotVisibleChanged(bool)) );
+ 
+     // Plot Area
+     connect( m_plot->plotArea(), SIGNAL(backgroundTypeChanged(PlotArea::BackgroundType)), this, SLOT(plotBackgroundTypeChanged(PlotArea::BackgroundType)) );
+     connect( m_plot->plotArea(), SIGNAL(backgroundColorStyleChanged(PlotArea::BackgroundColorStyle)), this, SLOT(plotBackgroundColorStyleChanged(PlotArea::BackgroundColorStyle)) );
+     connect( m_plot->plotArea(), SIGNAL(backgroundImageStyleChanged(PlotArea::BackgroundImageStyle)), this, SLOT(plotBackgroundImageStyleChanged(PlotArea::BackgroundImageStyle)) );
+     connect( m_plot->plotArea(), SIGNAL(backgroundBrushStyleChanged(Qt::BrushStyle)), this, SLOT(plotBackgroundBrushStyleChanged(Qt::BrushStyle)) );
+     connect( m_plot->plotArea(), SIGNAL(backgroundFirstColorChanged(QColor&)), this, SLOT(plotBackgroundFirstColorChanged(QColor&)) );
+     connect( m_plot->plotArea(), SIGNAL(backgroundSecondColorChanged(QColor&)), this, SLOT(plotBackgroundSecondColorChanged(QColor&)) );
+     connect( m_plot->plotArea(), SIGNAL(backgroundFileNameChanged(QString&)), this, SLOT(plotBackgroundFileNameChanged(QString&)) );
+     connect( m_plot->plotArea(), SIGNAL(backgroundOpacityChanged(float)), this, SLOT(plotBackgroundOpacityChanged(float)) );
+     connect( m_plot->plotArea(), SIGNAL(borderPenChanged(QPen&)), this, SLOT(plotBorderPenChanged(QPen&)) );
+     connect( m_plot->plotArea(), SIGNAL(borderOpacityChanged(float)), this, SLOT(plotBorderOpacityChanged(float)) );
+     connect( m_plot, SIGNAL(horizontalPaddingChanged(float)), this, SLOT(plotHorizontalPaddingChanged(float)) );
+     connect( m_plot, SIGNAL(verticalPaddingChanged(float)), this, SLOT(plotVerticalPaddingChanged(float)) );
+ 
+     m_initializing = false;
  }
  
  void CartesianPlotDock::activateTitleTab(){
@@@ -359,20 -368,18 +368,18 @@@ void CartesianPlotDock::nameChanged()
  }
  
  void CartesianPlotDock::commentChanged(){
 -  if (m_initializing)
 -    return;
 +	if (m_initializing)
 +		return;
  
 -  m_plot->setComment(ui.leComment->text());
 +	m_plot->setComment(ui.leComment->text());
  }
  
- void CartesianPlotDock::visibilityChanged(int state){
- 	if (m_initializing)
- 		return;
+ void CartesianPlotDock::visibilityChanged(bool state){
+     if (m_initializing)
+             return;
  
- 	bool b = (state==Qt::Checked);
- 	foreach(CartesianPlot* plot, m_plotList){
- 		plot->setVisible(b);
- 	}
+     foreach(CartesianPlot* plot, m_plotList)
+             plot->setVisible(state);
  }
  
  void CartesianPlotDock::geometryChanged(){
@@@ -741,23 -748,30 +748,30 @@@ void CartesianPlotDock::backgroundSecon
      opens a file dialog and lets the user select the image file.
  */
  void CartesianPlotDock::selectFile() {
- 	KConfigGroup conf(KSharedConfig::openConfig(), "CartesianPlotDock");
- 	QString dir = conf.readEntry("LastImageDir", "");
- 	QString path = QFileDialog::getOpenFileName(this, i18n("Select the image file"), dir);
- 	if (path.isEmpty())
- 		return; //cancel was clicked in the file-dialog
- 
- 	int pos = path.lastIndexOf(QDir::separator());
- 	if (pos!=-1) {
- 		QString newDir = path.left(pos);
- 		if (newDir!=dir)
- 			conf.writeEntry("LastImageDir", newDir);
+     KConfigGroup conf(KSharedConfig::openConfig(), "CartesianPlotDock");
+     QString dir = conf.readEntry("LastImageDir", "");
+ 
+ 	QString formats;
+ 	foreach(const QByteArray format, QImageReader::supportedImageFormats()) {
+ 		QString f = "*." + QString(format.constData());
+ 		formats.isEmpty() ? formats+=f : formats+=' '+f;
  	}
  
+ 	QString path = QFileDialog::getOpenFileName(this, i18n("Select the image file"), dir, i18n("Images (%1)", formats));
+     if (path.isEmpty())
+         return; //cancel was clicked in the file-dialog
+ 
+     int pos = path.lastIndexOf(QDir::separator());
+     if (pos!=-1) {
+         QString newDir = path.left(pos);
+         if (newDir!=dir)
+             conf.writeEntry("LastImageDir", newDir);
+     }
+ 
 -    ui.kleBackgroundFileName->setText( path );
 +	ui.kleBackgroundFileName->setText( path );
  
 -    foreach(CartesianPlot* plot, m_plotList)
 -        plot->plotArea()->setBackgroundFileName(path);
 +	foreach(CartesianPlot* plot, m_plotList)
 +		plot->plotArea()->setBackgroundFileName(path);
  }
  
  void CartesianPlotDock::fileNameChanged(){
@@@ -872,18 -886,24 +886,24 @@@ void CartesianPlotDock::plotDescription
  }
  
  void CartesianPlotDock::plotRectChanged(QRectF& rect){
 -    m_initializing = true;
 -    ui.sbLeft->setValue(Worksheet::convertFromSceneUnits(rect.x(), Worksheet::Centimeter));
 -    ui.sbTop->setValue(Worksheet::convertFromSceneUnits(rect.y(), Worksheet::Centimeter));
 -    ui.sbWidth->setValue(Worksheet::convertFromSceneUnits(rect.width(), Worksheet::Centimeter));
 -    ui.sbHeight->setValue(Worksheet::convertFromSceneUnits(rect.height(), Worksheet::Centimeter));
 -    m_initializing = false;
 +	m_initializing = true;
 +	ui.sbLeft->setValue(Worksheet::convertFromSceneUnits(rect.x(), Worksheet::Centimeter));
 +	ui.sbTop->setValue(Worksheet::convertFromSceneUnits(rect.y(), Worksheet::Centimeter));
 +	ui.sbWidth->setValue(Worksheet::convertFromSceneUnits(rect.width(), Worksheet::Centimeter));
 +	ui.sbHeight->setValue(Worksheet::convertFromSceneUnits(rect.height(), Worksheet::Centimeter));
 +	m_initializing = false;
  }
  
+ void CartesianPlotDock::plotXAutoScaleChanged(bool value) {
+ 	m_initializing = true;
+ 	ui.chkAutoScaleX->setChecked(value);
+ 	m_initializing = false;
+ }
+ 
  void CartesianPlotDock::plotXMinChanged(float value){
 -    m_initializing = true;
 -    ui.kleXMin->setText( QString::number(value) );
 -    m_initializing = false;
 +	m_initializing = true;
 +	ui.kleXMin->setText( QString::number(value) );
 +	m_initializing = false;
  }
  
  void CartesianPlotDock::plotXMaxChanged(float value){
@@@ -893,15 -913,22 +913,22 @@@
  }
  
  void CartesianPlotDock::plotXScaleChanged(int scale){
 -    m_initializing = true;
 -    ui.cbXScaling->setCurrentIndex( scale );
 -    m_initializing = false;
 +	m_initializing = true;
 +	ui.cbXScaling->setCurrentIndex( scale );
 +	m_initializing = false;
  }
  
+ 
+ void CartesianPlotDock::plotYAutoScaleChanged(bool value) {
+ 	m_initializing = true;
+ 	ui.chkAutoScaleY->setChecked(value);
+ 	m_initializing = false;
+ }
+ 
  void CartesianPlotDock::plotYMinChanged(float value){
 -    m_initializing = true;
 -    ui.kleYMin->setText( QString::number(value) );
 -    m_initializing = false;
 +	m_initializing = true;
 +	ui.kleYMin->setText( QString::number(value) );
 +	m_initializing = false;
  }
  
  void CartesianPlotDock::plotYMaxChanged(float value){
@@@ -1178,32 -1205,33 +1205,33 @@@ void CartesianPlotDock::saveConfigAsTem
  //  group.writeEntry("yMax", ui.kleYMax->text());
  //  group.writeEntry("yScale", ui.cbYScaling->currentIndex());
  
 -    //Title
 -    KConfigGroup group = config.group("PlotTitle");
 -    labelWidget->saveConfig(group);
 -
 -    //Scale breakings
 -    //TODO
 -
 -    //Background
 -    group = config.group("PlotArea");
 -    group.writeEntry("BackgroundType", ui.cbBackgroundType->currentIndex());
 -    group.writeEntry("BackgroundColorStyle", ui.cbBackgroundColorStyle->currentIndex());
 -    group.writeEntry("BackgroundImageStyle", ui.cbBackgroundImageStyle->currentIndex());
 -    group.writeEntry("BackgroundBrushStyle", ui.cbBackgroundBrushStyle->currentIndex());
 -    group.writeEntry("BackgroundFileName", ui.kleBackgroundFileName->text());
 -    group.writeEntry("BackgroundFirstColor", ui.kcbBackgroundFirstColor->color());
 -    group.writeEntry("BackgroundSecondColor", ui.kcbBackgroundSecondColor->color());
 -    group.writeEntry("BackgroundOpacity", ui.sbBackgroundOpacity->value()/100.0);
 -    group.writeEntry("HorizontalPadding", Worksheet::convertToSceneUnits(ui.sbPaddingHorizontal->value(), Worksheet::Centimeter));
 -    group.writeEntry("VerticalPadding", Worksheet::convertToSceneUnits(ui.sbPaddingVertical->value(), Worksheet::Centimeter));
 -
 -    //Border
 -    group.writeEntry("BorderStyle", ui.cbBorderStyle->currentIndex());
 -    group.writeEntry("BorderColor", ui.kcbBorderColor->color());
 -    group.writeEntry("BorderWidth", Worksheet::convertToSceneUnits(ui.sbBorderWidth->value(), Worksheet::Point));
 -    group.writeEntry("BorderCornerRadius", Worksheet::convertToSceneUnits(ui.sbBorderCornerRadius->value(), Worksheet::Centimeter));
 -    group.writeEntry("BorderOpacity", ui.sbBorderOpacity->value()/100.0);
 -
 -    config.sync();
 +	//Title
 +	KConfigGroup group = config.group("PlotTitle");
 +	labelWidget->saveConfig(group);
 +
 +	//Scale breakings
 +	//TODO
 +
 +	//Background
 +	group = config.group("PlotArea");
 +	group.writeEntry("BackgroundType", ui.cbBackgroundType->currentIndex());
 +	group.writeEntry("BackgroundColorStyle", ui.cbBackgroundColorStyle->currentIndex());
 +	group.writeEntry("BackgroundImageStyle", ui.cbBackgroundImageStyle->currentIndex());
 +	group.writeEntry("BackgroundBrushStyle", ui.cbBackgroundBrushStyle->currentIndex());
 +	group.writeEntry("BackgroundFileName", ui.kleBackgroundFileName->text());
 +	group.writeEntry("BackgroundFirstColor", ui.kcbBackgroundFirstColor->color());
 +	group.writeEntry("BackgroundSecondColor", ui.kcbBackgroundSecondColor->color());
 +	group.writeEntry("BackgroundOpacity", ui.sbBackgroundOpacity->value()/100.0);
 +	group.writeEntry("HorizontalPadding", Worksheet::convertToSceneUnits(ui.sbPaddingHorizontal->value(), Worksheet::Centimeter));
 +	group.writeEntry("VerticalPadding", Worksheet::convertToSceneUnits(ui.sbPaddingVertical->value(), Worksheet::Centimeter));
 +
 +	//Border
 +	group.writeEntry("BorderStyle", ui.cbBorderStyle->currentIndex());
 +	group.writeEntry("BorderColor", ui.kcbBorderColor->color());
 +	group.writeEntry("BorderWidth", Worksheet::convertToSceneUnits(ui.sbBorderWidth->value(), Worksheet::Point));
 +	group.writeEntry("BorderCornerRadius", Worksheet::convertToSceneUnits(ui.sbBorderCornerRadius->value(), Worksheet::Centimeter));
 +	group.writeEntry("BorderOpacity", ui.sbBorderOpacity->value()/100.0);
 +
 +	config.sync();
  }
+ 
diff --cc src/kdefrontend/dockwidgets/CartesianPlotLegendDock.cpp
index 17f4769,7ee9f79..930d85b
--- a/src/kdefrontend/dockwidgets/CartesianPlotLegendDock.cpp
+++ b/src/kdefrontend/dockwidgets/CartesianPlotLegendDock.cpp
@@@ -62,10 -66,9 +66,9 @@@ CartesianPlotLegendDock::CartesianPlotL
  
  	//"Background"-tab
  	ui.kleBackgroundFileName->setClearButtonShown(true);
 -    ui.bOpen->setIcon( QIcon::fromTheme("document-open") );
 +	ui.bOpen->setIcon( QIcon::fromTheme("document-open") );
  
- 	KUrlCompletion *comp = new KUrlCompletion();
- 	ui.kleBackgroundFileName->setCompletionObject(comp);
+ 	ui.kleBackgroundFileName->setCompletionObject(m_completion);
  
  	//adjust layouts in the tabs
  	for (int i=0; i<ui.tabWidget->count(); ++i){
diff --cc src/kdefrontend/dockwidgets/WorksheetDock.cpp
index ad9a2c0,a6a0f23..dafde31
--- a/src/kdefrontend/dockwidgets/WorksheetDock.cpp
+++ b/src/kdefrontend/dockwidgets/WorksheetDock.cpp
@@@ -87,10 -88,9 +88,9 @@@ WorksheetDock::WorksheetDock(QWidget *p
  	//Background-tab
  	ui.cbBackgroundColorStyle->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLengthWithIcon);
  	ui.kleBackgroundFileName->setClearButtonShown(true);
 -    ui.bOpen->setIcon( QIcon::fromTheme("document-open") );
 +	ui.bOpen->setIcon( QIcon::fromTheme("document-open") );
  
- 	KUrlCompletion *comp = new KUrlCompletion();
- 	ui.kleBackgroundFileName->setCompletionObject(comp);
+ 	ui.kleBackgroundFileName->setCompletionObject(m_completion);
  
  	//adjust layouts in the tabs
  	for (int i=0; i<ui.tabWidget->count(); ++i){
diff --cc src/kdefrontend/dockwidgets/XYCurveDock.cpp
index d82f772,3a838bf..dfbb2e2
--- a/src/kdefrontend/dockwidgets/XYCurveDock.cpp
+++ b/src/kdefrontend/dockwidgets/XYCurveDock.cpp
@@@ -481,7 -488,7 +488,7 @@@ void XYCurveDock::init()
  
  void XYCurveDock::setModel() {
  	QList<const char*>  list;
- 	list<<"Folder"<<"Workbook"<<"Spreadsheet"<<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"<<"CantorWorksheet";
 -    list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet"<<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve";
++        list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet"<<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<<"XYFitCurve"<<"CantorWorksheet";
  	if (cbXColumn) {
  		cbXColumn->setTopLevelClasses(list);
  		cbYColumn->setTopLevelClasses(list);
diff --cc src/kdefrontend/dockwidgets/XYFitCurveDock.cpp
index 2ba9ab3,99527a1..07a7d49
--- a/src/kdefrontend/dockwidgets/XYFitCurveDock.cpp
+++ b/src/kdefrontend/dockwidgets/XYFitCurveDock.cpp
@@@ -161,7 -168,7 +168,7 @@@ void XYFitCurveDock::initGeneralTab() 
  
  void XYFitCurveDock::setModel() {
  	QList<const char*>  list;
- 	list<<"Folder"<<"Workbook"<<"Spreadsheet"<<"FileDataSource"<<"Column"<<"CantorWorksheet";
 -	list<<"Folder"<<"Workbook"<<"Spreadsheet"<<"FileDataSource"<<"Column"<<"Datapicker";
++	list<<"Folder"<<"Workbook"<<"Spreadsheet"<<"FileDataSource"<<"Column"<<"CantorWorksheet"<<"Datapicker";
  	cbXDataColumn->setTopLevelClasses(list);
  	cbYDataColumn->setTopLevelClasses(list);
  	cbWeightsColumn->setTopLevelClasses(list);
diff --cc src/kdefrontend/labplot2ui.rc
index 2374a32,fc21b73..ec0fcca
--- a/src/kdefrontend/labplot2ui.rc
+++ b/src/kdefrontend/labplot2ui.rc
@@@ -65,7 -64,7 +71,8 @@@
  <Menu name="spreadsheet"><text>&Spreadsheet</text></Menu>
  <Menu name="matrix"><text>&Matrix</text></Menu>
  <Menu name="worksheet"><text>&Worksheet</text></Menu>
 +<Menu name="casWorksheet"><text>&CAS Worksheet</text></Menu>
+ <Menu name="datapicker"><text>&Datapicker</text></Menu>
  <!-- <Menu name="analysis"><text>&Analysis</text></Menu> -->
  <!-- <Menu name="drawing"><text>&Drawing</text></Menu> -->
  <!-- <Menu name="script"><text>&Script</text></Menu> -->
diff --cc src/kdefrontend/spreadsheet/ExportSpreadsheetDialog.cpp
index e9290bc,f2ac4b5..0a5a64b
--- a/src/kdefrontend/spreadsheet/ExportSpreadsheetDialog.cpp
+++ b/src/kdefrontend/spreadsheet/ExportSpreadsheetDialog.cpp
@@@ -82,8 -79,9 +79,9 @@@ ExportSpreadsheetDialog::ExportSpreadsh
  	connect(this,SIGNAL(user1Clicked()), this, SLOT(toggleOptions()));
  
  	setCaption(i18n("Export spreadsheet"));
 -    setWindowIcon(QIcon::fromTheme("document-export-database"));
 +	setWindowIcon(QIcon::fromTheme("document-export-database"));
  
+ 	//restore saved settings
  	KConfigGroup conf(KSharedConfig::openConfig(), "ExportSpreadsheetDialog");
  	ui.cbFormat->setCurrentIndex(conf.readEntry("Format", 0));
  	ui.chkExportHeader->setChecked(conf.readEntry("Header", true));
diff --cc src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp
index c1b89c4,ce8114b..8700516
--- a/src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp
+++ b/src/kdefrontend/spreadsheet/FunctionValuesDialog.cpp
@@@ -58,10 -58,9 +58,11 @@@ FunctionValuesDialog::FunctionValuesDia
  	setMainWidget(mainWidget);
  
  	ui.tbConstants->setIcon( QIcon::fromTheme("labplot-format-text-symbol") );
 +
 +	ui.tbConstants->setIcon( QIcon::fromTheme("format-text-symbol") );
  	ui.tbFunctions->setIcon( QIcon::fromTheme("preferences-desktop-font") );
  
+ 	ui.teEquation->setMaximumHeight(QLineEdit().sizeHint().height()*2);
  	ui.teEquation->setFocus();
  
  	m_topLevelClasses<<"Folder"<<"Workbook"<<"Spreadsheet"<<"FileDataSource"<<"Column";
diff --cc src/kdefrontend/widgets/FitOptionsWidget.cpp
index 1a3e660,73ed0af..1ffad11
--- a/src/kdefrontend/widgets/FitOptionsWidget.cpp
+++ b/src/kdefrontend/widgets/FitOptionsWidget.cpp
@@@ -33,10 -33,10 +33,10 @@@
  
  	\ingroup kdefrontend
   */
- FitOptionsWidget::FitOptionsWidget(QWidget *parent, XYFitCurve::FitData* fitData): QWidget(parent), m_fitData(fitData) {
+ FitOptionsWidget::FitOptionsWidget(QWidget *parent, XYFitCurve::FitData* fitData): QWidget(parent), m_fitData(fitData), m_changed(false) {
  	ui.setupUi(this);
 -    ui.pbApply->setIcon(QIcon::fromTheme("dialog-ok-apply"));
 -    ui.pbCancel->setIcon(QIcon::fromTheme("dialog-cancel"));
 +	ui.pbApply->setIcon(QIcon::fromTheme("dialog-ok-apply"));
 +	ui.pbCancel->setIcon(QIcon::fromTheme("dialog-cancel"));
  
  	//TODO: show "robust" option when robust fitting is possible
  // 	ui.cbRobust->addItem(i18n("on"));
diff --cc src/kdefrontend/widgets/FitParametersWidget.cpp
index dbbf68d,0b2dc4f..fc556a4
--- a/src/kdefrontend/widgets/FitParametersWidget.cpp
+++ b/src/kdefrontend/widgets/FitParametersWidget.cpp
@@@ -37,10 -37,10 +37,10 @@@
  
  	\ingroup kdefrontend
   */
- FitParametersWidget::FitParametersWidget(QWidget* parent, XYFitCurve::FitData* data) : QWidget(parent), m_fitData(data) {
+ FitParametersWidget::FitParametersWidget(QWidget* parent, XYFitCurve::FitData* data) : QWidget(parent), m_fitData(data), m_changed(false) {
  	ui.setupUi(this);
 -    ui.pbApply->setIcon(QIcon::fromTheme("dialog-ok-apply"));
 -    ui.pbCancel->setIcon(QIcon::fromTheme("dialog-cancel"));
 +	ui.pbApply->setIcon(QIcon::fromTheme("dialog-ok-apply"));
 +	ui.pbCancel->setIcon(QIcon::fromTheme("dialog-cancel"));
  
  	ui.tableWidget->setColumnCount(2);
  
diff --cc src/kdefrontend/widgets/LabelWidget.cpp
index 7aeea41,4ac385c..803235e
--- a/src/kdefrontend/widgets/LabelWidget.cpp
+++ b/src/kdefrontend/widgets/LabelWidget.cpp
@@@ -48,16 -48,16 +48,16 @@@
   */
  
  // see legacy/LabelWidget.cpp
- LabelWidget::LabelWidget(QWidget *parent): QWidget(parent), m_dateTimeMenu(new QMenu(this)) {
+ LabelWidget::LabelWidget(QWidget *parent): QWidget(parent), m_initializing(false), m_dateTimeMenu(new QMenu(this)) {
  	ui.setupUi(this);
  
 -    m_dateTimeMenu->setSeparatorsCollapsible(false); //we don't want the first separator to be removed
 +	m_dateTimeMenu->setSeparatorsCollapsible(false); //we don't want the first separator to be removed
  
 -    QGridLayout* layout =static_cast<QGridLayout*>(this->layout());
 -    layout->setContentsMargins(2,2,2,2);
 -    layout->setHorizontalSpacing(2);
 -    layout->setVerticalSpacing(2);
 -    ui.kcbFontColor->setColor(Qt::black); // default color
 +	QGridLayout* layout =static_cast<QGridLayout*>(this->layout());
 +	layout->setContentsMargins(2,2,2,2);
 +	layout->setHorizontalSpacing(2);
 +	layout->setVerticalSpacing(2);
 +	ui.kcbFontColor->setColor(Qt::black); // default color
  
  	//Icons
  	ui.tbFontBold->setIcon( QIcon::fromTheme("format-text-bold") );


More information about the kde-doc-english mailing list