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"), 
"[email protected]", 0);
        aboutData.addAuthor(i18n("Andreas Kainz"), i18n("icon designer"), 
"[email protected]", 0);
        aboutData.addCredit(i18n("Yuri Chornoivan"), i18n("Help on many 
questions about the KDE-infrastructure and translation related topics"), 
"[email protected]", 0);
 +      aboutData.addCredit(i18n("Garvit Khatri"), i18n("Porting LabPlot2 to 
KF5 and Integration with Cantor"), "[email protected]", 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>&amp;Spreadsheet</text></Menu>
  <Menu name="matrix"><text>&amp;Matrix</text></Menu>
  <Menu name="worksheet"><text>&amp;Worksheet</text></Menu>
 +<Menu name="casWorksheet"><text>&amp;CAS Worksheet</text></Menu>
+ <Menu name="datapicker"><text>&amp;Datapicker</text></Menu>
  <!-- <Menu name="analysis"><text>&amp;Analysis</text></Menu> -->
  <!-- <Menu name="drawing"><text>&amp;Drawing</text></Menu> -->
  <!-- <Menu name="script"><text>&amp;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") );
_______________________________________________
kde-doc-english mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kde-doc-english

Reply via email to