[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [labplot/histogram_chart] src: removing unwanted functions from histogram files
From:       Anu Mittal <anu22mittal () gmail ! com>
Date:       2016-06-27 14:09:18
Message-ID: E1bHXDy-0000QE-Gj () code ! kde ! org
[Download RAW message or body]

Git commit 3caee898c73a9ab2a840acfca4b988e3858e45b2 by Anu Mittal.
Committed on 27/06/2016 at 14:08.
Pushed by anumittal into branch 'histogram_chart'.

removing unwanted functions from histogram files

M  +1    -0    src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
M  +126  -1012 src/backend/worksheet/plots/cartesian/Histogram.cpp
M  +11   -94   src/backend/worksheet/plots/cartesian/Histogram.h
M  +11   -47   src/backend/worksheet/plots/cartesian/HistogramPrivate.h
M  +339  -357  src/kdefrontend/dockwidgets/HistogramDock.cpp
M  +10   -82   src/kdefrontend/dockwidgets/HistogramDock.h

http://commits.kde.org/labplot/3caee898c73a9ab2a840acfca4b988e3858e45b2

diff --git a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp \
b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp index be3abac..9d3ae7f \
                100644
--- a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
+++ b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
@@ -31,6 +31,7 @@
 #include "CartesianPlotPrivate.h"
 #include "Axis.h"
 #include "XYCurve.h"
+#include "Histogram.h"
 #include "XYEquationCurve.h"
 #include "XYFitCurve.h"
 #include "XYFourierFilterCurve.h"
diff --git a/src/backend/worksheet/plots/cartesian/Histogram.cpp \
b/src/backend/worksheet/plots/cartesian/Histogram.cpp index efa8d05..46be04f 100644
--- a/src/backend/worksheet/plots/cartesian/Histogram.cpp
+++ b/src/backend/worksheet/plots/cartesian/Histogram.cpp
@@ -39,8 +39,10 @@
 #include "backend/worksheet/plots/AbstractCoordinateSystem.h"
 #include "backend/worksheet/plots/cartesian/CartesianCoordinateSystem.h"
 #include "backend/worksheet/plots/cartesian/CartesianPlot.h"
+#include "backend/worksheet/plots/AbstractPlotPrivate.h"
 #include "backend/lib/commandtemplates.h"
 #include "backend/worksheet/Worksheet.h"
+#include "backend/core/Project.h"
 #include "backend/lib/XmlStreamReader.h"
 
 #include <QGraphicsDropShadowEffect>
@@ -87,30 +89,6 @@ void Histogram::init(){
 	d->xColumn = NULL;
 	d->yColumn = NULL;
 
-	d->lineType = (Histogram::LineType) group.readEntry("LineType", \
                (int)Histogram::Line);
-	d->lineSkipGaps = group.readEntry("SkipLineGaps", false);
-	d->lineInterpolationPointsCount = group.readEntry("LineInterpolationPointsCount", \
                1);
-	d->linePen.setStyle( (Qt::PenStyle) group.readEntry("LineStyle", \
                (int)Qt::SolidLine) );
-	d->linePen.setColor( group.readEntry("LineColor", QColor(Qt::black)) );
-	d->linePen.setWidthF( group.readEntry("LineWidth", \
                Worksheet::convertToSceneUnits(1.0, Worksheet::Point)) );
-	d->lineOpacity = group.readEntry("LineOpacity", 1.0);
-
-	d->dropLineType = (Histogram::DropLineType) group.readEntry("DropLineType", \
                (int)Histogram::NoLine);
-	d->dropLinePen.setStyle( (Qt::PenStyle) group.readEntry("DropLineStyle", \
                (int)Qt::SolidLine) );
-	d->dropLinePen.setColor( group.readEntry("DropLineColor", QColor(Qt::black)));
-	d->dropLinePen.setWidthF( group.readEntry("DropLineWidth", \
                Worksheet::convertToSceneUnits(1.0, Worksheet::Point)) );
-	d->dropLineOpacity = group.readEntry("DropLineOpacity", 1.0);
-
-	d->symbolsStyle = (Symbol::Style)group.readEntry("SymbolStyle", \
                (int)Symbol::NoSymbols);
-	d->symbolsSize = group.readEntry("SymbolSize", Worksheet::convertToSceneUnits(5, \
                Worksheet::Point));
-	d->symbolsRotationAngle = group.readEntry("SymbolRotation", 0.0);
-	d->symbolsOpacity = group.readEntry("SymbolOpacity", 1.0);
-  	d->symbolsBrush.setStyle( (Qt::BrushStyle)group.readEntry("SymbolFillingStyle", \
                (int)Qt::NoBrush) );
-  	d->symbolsBrush.setColor( group.readEntry("SymbolFillingColor", \
                QColor(Qt::black)) );
-  	d->symbolsPen.setStyle( (Qt::PenStyle)group.readEntry("SymbolBorderStyle", \
                (int)Qt::SolidLine) );
-  	d->symbolsPen.setColor( group.readEntry("SymbolBorderColor", QColor(Qt::black)) \
                );
-	d->symbolsPen.setWidthF( group.readEntry("SymbolBorderWidth", \
                Worksheet::convertToSceneUnits(0.0, Worksheet::Point)) );
-
 	d->valuesType = (Histogram::ValuesType) group.readEntry("ValuesType", \
(int)Histogram::NoValues);  d->valuesColumn = NULL;
 	d->valuesPosition = (Histogram::ValuesPosition) group.readEntry("ValuesPosition", \
(int)Histogram::ValuesAbove); @@ -133,19 +111,6 @@ void Histogram::init(){
 	d->fillingSecondColor = group.readEntry("FillingSecondColor", QColor(Qt::black));
 	d->fillingOpacity = group.readEntry("FillingOpacity", 1.0);
 
-	d->xErrorType = (Histogram::ErrorType) group.readEntry("XErrorType", \
                (int)Histogram::NoError);
-	d->xErrorPlusColumn = NULL;
-	d->xErrorMinusColumn = NULL;
-	d->yErrorType = (Histogram::ErrorType) group.readEntry("YErrorType", \
                (int)Histogram::NoError);
-	d->yErrorPlusColumn = NULL;
-	d->yErrorMinusColumn = NULL;
-	d->errorBarsType = (Histogram::ErrorBarsType) group.readEntry("ErrorBarsType", \
                (int)Histogram::ErrorBarsSimple);
-	d->errorBarsCapSize = group.readEntry( "ErrorBarsCapSize", \
                Worksheet::convertToSceneUnits(10, Worksheet::Point) );
-	d->errorBarsPen.setStyle( (Qt::PenStyle)group.readEntry("ErrorBarsStyle", \
                (int)Qt::SolidLine) );
-	d->errorBarsPen.setColor( group.readEntry("ErrorBarsColor", QColor(Qt::black)) );
-	d->errorBarsPen.setWidthF( group.readEntry("ErrorBarsWidth", \
                Worksheet::convertToSceneUnits(0.0, Worksheet::Point)) );
-	d->errorBarsOpacity = group.readEntry("ErrorBarsOpacity", 1.0);
-
 	this->initActions();
 }
 
@@ -198,26 +163,6 @@ BASIC_SHARED_D_READER_IMPL(Histogram, const AbstractColumn*, \
yColumn, yColumn)  QString& Histogram::xColumnPath() const { return \
d_ptr->xColumnPath; }  QString& Histogram::yColumnPath() const {	return \
d_ptr->yColumnPath; }  
-//line
-BASIC_SHARED_D_READER_IMPL(Histogram, Histogram::LineType, lineType, lineType)
-BASIC_SHARED_D_READER_IMPL(Histogram, bool, lineSkipGaps, lineSkipGaps)
-BASIC_SHARED_D_READER_IMPL(Histogram, int, lineInterpolationPointsCount, \
                lineInterpolationPointsCount)
-CLASS_SHARED_D_READER_IMPL(Histogram, QPen, linePen, linePen)
-BASIC_SHARED_D_READER_IMPL(Histogram, qreal, lineOpacity, lineOpacity)
-
-//droplines
-BASIC_SHARED_D_READER_IMPL(Histogram, Histogram::DropLineType, dropLineType, \
                dropLineType)
-CLASS_SHARED_D_READER_IMPL(Histogram, QPen, dropLinePen, dropLinePen)
-BASIC_SHARED_D_READER_IMPL(Histogram, qreal, dropLineOpacity, dropLineOpacity)
-
-//symbols
-BASIC_SHARED_D_READER_IMPL(Histogram, Symbol::Style, symbolsStyle, symbolsStyle)
-BASIC_SHARED_D_READER_IMPL(Histogram, qreal, symbolsOpacity, symbolsOpacity)
-BASIC_SHARED_D_READER_IMPL(Histogram, qreal, symbolsRotationAngle, \
                symbolsRotationAngle)
-BASIC_SHARED_D_READER_IMPL(Histogram, qreal, symbolsSize, symbolsSize)
-CLASS_SHARED_D_READER_IMPL(Histogram, QBrush, symbolsBrush, symbolsBrush)
-CLASS_SHARED_D_READER_IMPL(Histogram, QPen, symbolsPen, symbolsPen)
-
 //values
 BASIC_SHARED_D_READER_IMPL(Histogram, Histogram::ValuesType, valuesType, valuesType)
 BASIC_SHARED_D_READER_IMPL(Histogram, const AbstractColumn *, valuesColumn, \
valuesColumn) @@ -242,24 +187,6 @@ CLASS_SHARED_D_READER_IMPL(Histogram, QColor, \
fillingSecondColor, fillingSecondC  CLASS_SHARED_D_READER_IMPL(Histogram, QString, \
fillingFileName, fillingFileName)  BASIC_SHARED_D_READER_IMPL(Histogram, qreal, \
fillingOpacity, fillingOpacity)  
-//error bars
-BASIC_SHARED_D_READER_IMPL(Histogram, Histogram::ErrorType, xErrorType, xErrorType)
-BASIC_SHARED_D_READER_IMPL(Histogram, const AbstractColumn*, xErrorPlusColumn, \
                xErrorPlusColumn)
-QString& Histogram::xErrorPlusColumnPath() const { return \
                d_ptr->xErrorPlusColumnPath; }
-BASIC_SHARED_D_READER_IMPL(Histogram, const AbstractColumn*, xErrorMinusColumn, \
                xErrorMinusColumn)
-QString& Histogram::xErrorMinusColumnPath() const { return \
                d_ptr->xErrorMinusColumnPath; }
-
-BASIC_SHARED_D_READER_IMPL(Histogram, Histogram::ErrorType, yErrorType, yErrorType)
-BASIC_SHARED_D_READER_IMPL(Histogram, const AbstractColumn*, yErrorPlusColumn, \
                yErrorPlusColumn)
-QString& Histogram::yErrorPlusColumnPath() const { return \
                d_ptr->yErrorPlusColumnPath; }
-BASIC_SHARED_D_READER_IMPL(Histogram, const AbstractColumn*, yErrorMinusColumn, \
                yErrorMinusColumn)
-QString& Histogram::yErrorMinusColumnPath() const { return \
                d_ptr->yErrorMinusColumnPath; }
-
-BASIC_SHARED_D_READER_IMPL(Histogram, Histogram::ErrorBarsType, errorBarsType, \
                errorBarsType)
-BASIC_SHARED_D_READER_IMPL(Histogram, qreal, errorBarsCapSize, errorBarsCapSize)
-CLASS_SHARED_D_READER_IMPL(Histogram, QPen, errorBarsPen, errorBarsPen)
-BASIC_SHARED_D_READER_IMPL(Histogram, qreal, errorBarsOpacity, errorBarsOpacity)
-
 //##############################################################################
 //#################  setter methods and undo commands ##########################
 //##############################################################################
@@ -269,10 +196,10 @@ void Histogram::setXColumn(const AbstractColumn* column) {
 	if (column != d->xColumn) {
 		exec(new HistogramSetXColumnCmd(d, column, i18n("%1: assign x values")));
 
-		//emit xDataChanged() in order to notify the plot about the changes
-		emit xDataChanged();
+		//emit xHistogramDataChanged() in order to notify the plot about the changes
+		emit xHistogramDataChanged();
 		if (column) {
-			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
SIGNAL(xDataChanged())); +			connect(column, SIGNAL(dataChanged(const \
AbstractColumn*)), this, SIGNAL(xHistogramDataChanged()));  
 			//update the curve itself on changes
 			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
SLOT(retransform())); @@ -289,10 +216,10 @@ void Histogram::setYColumn(const \
AbstractColumn* column) {  if (column != d->yColumn) {
 		exec(new HistogramSetYColumnCmd(d, column, i18n("%1: assign y values")));
 
-		//emit yDataChanged() in order to notify the plot about the changes
-		emit yDataChanged();
+		//emit yHistogramDataChanged() in order to notify the plot about the changes
+		emit yHistogramDataChanged();
 		if (column) {
-			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
SIGNAL(yDataChanged())); +			connect(column, SIGNAL(dataChanged(const \
AbstractColumn*)), this, SIGNAL(yHistogramDataChanged()));  
 			//update the curve itself on changes
 			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
SLOT(retransform())); @@ -303,107 +230,6 @@ void Histogram::setYColumn(const \
AbstractColumn* column) {  }
 }
 
-//Line
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetLineType, Histogram::LineType, lineType, \
                updateLines)
-void Histogram::setLineType(LineType type) {
-	Q_D(Histogram);
-	if (type != d->lineType)
-		exec(new HistogramSetLineTypeCmd(d, type, i18n("%1: line type changed")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetLineSkipGaps, bool, lineSkipGaps, updateLines)
-void Histogram::setLineSkipGaps(bool skip) {
-	Q_D(Histogram);
-	if (skip != d->lineSkipGaps)
-		exec(new HistogramSetLineSkipGapsCmd(d, skip, i18n("%1: set skip line gaps")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetLineInterpolationPointsCount, int, \
                lineInterpolationPointsCount, updateLines)
-void Histogram::setLineInterpolationPointsCount(int count) {
-	Q_D(Histogram);
-	if (count != d->lineInterpolationPointsCount)
-		exec(new HistogramSetLineInterpolationPointsCountCmd(d, count, i18n("%1: set the \
                number of interpolation points")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetLinePen, QPen, linePen, \
                recalcShapeAndBoundingRect)
-void Histogram::setLinePen(const QPen &pen) {
-	Q_D(Histogram);
-	if (pen != d->linePen)
-		exec(new HistogramSetLinePenCmd(d, pen, i18n("%1: set line style")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetLineOpacity, qreal, lineOpacity, update);
-void Histogram::setLineOpacity(qreal opacity) {
-	Q_D(Histogram);
-	if (opacity != d->lineOpacity)
-		exec(new HistogramSetLineOpacityCmd(d, opacity, i18n("%1: set line opacity")));
-}
-
-//Drop lines
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetDropLineType, Histogram::DropLineType, \
                dropLineType, updateDropLines)
-void Histogram::setDropLineType(DropLineType type) {
-	Q_D(Histogram);
-	if (type != d->dropLineType)
-		exec(new HistogramSetDropLineTypeCmd(d, type, i18n("%1: drop line type \
                changed")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetDropLinePen, QPen, dropLinePen, \
                recalcShapeAndBoundingRect)
-void Histogram::setDropLinePen(const QPen &pen) {
-	Q_D(Histogram);
-	if (pen != d->dropLinePen)
-		exec(new HistogramSetDropLinePenCmd(d, pen, i18n("%1: set drop line style")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetDropLineOpacity, qreal, dropLineOpacity, \
                updatePixmap)
-void Histogram::setDropLineOpacity(qreal opacity) {
-	Q_D(Histogram);
-	if (opacity != d->dropLineOpacity)
-		exec(new HistogramSetDropLineOpacityCmd(d, opacity, i18n("%1: set drop line \
                opacity")));
-}
-
-// Symbols-Tab
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetSymbolsStyle, Symbol::Style, symbolsStyle, \
                updateSymbols)
-void Histogram::setSymbolsStyle(Symbol::Style style) {
-	Q_D(Histogram);
-	if (style != d->symbolsStyle)
-		exec(new HistogramSetSymbolsStyleCmd(d, style, i18n("%1: set symbol style")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetSymbolsSize, qreal, symbolsSize, \
                updateSymbols)
-void Histogram::setSymbolsSize(qreal size) {
-	Q_D(Histogram);
-	if (!qFuzzyCompare(1 + size, 1 + d->symbolsSize))
-		exec(new HistogramSetSymbolsSizeCmd(d, size, i18n("%1: set symbol size")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetSymbolsRotationAngle, qreal, \
                symbolsRotationAngle, updateSymbols)
-void Histogram::setSymbolsRotationAngle(qreal angle) {
-	Q_D(Histogram);
-	if (!qFuzzyCompare(1 + angle, 1 + d->symbolsRotationAngle))
-		exec(new HistogramSetSymbolsRotationAngleCmd(d, angle, i18n("%1: rotate \
                symbols")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetSymbolsBrush, QBrush, symbolsBrush, \
                updatePixmap)
-void Histogram::setSymbolsBrush(const QBrush &brush) {
-	Q_D(Histogram);
-	if (brush != d->symbolsBrush)
-		exec(new HistogramSetSymbolsBrushCmd(d, brush, i18n("%1: set symbol filling")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetSymbolsPen, QPen, symbolsPen, updateSymbols)
-void Histogram::setSymbolsPen(const QPen &pen) {
-	Q_D(Histogram);
-	if (pen != d->symbolsPen)
-		exec(new HistogramSetSymbolsPenCmd(d, pen, i18n("%1: set symbol outline style")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetSymbolsOpacity, qreal, symbolsOpacity, \
                updatePixmap)
-void Histogram::setSymbolsOpacity(qreal opacity) {
-	Q_D(Histogram);
-	if (opacity != d->symbolsOpacity)
-		exec(new HistogramSetSymbolsOpacityCmd(d, opacity, i18n("%1: set symbols \
                opacity")));
-}
-
 //Values-Tab
 STD_SETTER_CMD_IMPL_F_S(Histogram, SetValuesType, Histogram::ValuesType, valuesType, \
updateValues)  void Histogram::setValuesType(Histogram::ValuesType type) {
@@ -547,106 +373,6 @@ void Histogram::setFillingOpacity(qreal opacity) {
 		exec(new HistogramSetFillingOpacityCmd(d, opacity, i18n("%1: set filling \
opacity")));  }
 
-//Error bars
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetXErrorType, Histogram::ErrorType, xErrorType, \
                updateErrorBars)
-void Histogram::setXErrorType(ErrorType type) {
-	Q_D(Histogram);
-	if (type != d->xErrorType)
-		exec(new HistogramSetXErrorTypeCmd(d, type, i18n("%1: x-error type changed")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetXErrorPlusColumn, const AbstractColumn*, \
                xErrorPlusColumn, updateErrorBars)
-void Histogram::setXErrorPlusColumn(const AbstractColumn* column) {
-	Q_D(Histogram);
-	if (column != d->xErrorPlusColumn) {
-		exec(new HistogramSetXErrorPlusColumnCmd(d, column, i18n("%1: set x-error \
                column")));
-		if (column) {
-			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
                SLOT(updateErrorBars()));
-			connect(column->parentAspect(), SIGNAL(aspectAboutToBeRemoved(const \
                AbstractAspect*)),
-					this, SLOT(xErrorPlusColumnAboutToBeRemoved(const AbstractAspect*)));
-		}
-	}
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetXErrorMinusColumn, const AbstractColumn*, \
                xErrorMinusColumn, updateErrorBars)
-void Histogram::setXErrorMinusColumn(const AbstractColumn* column) {
-	Q_D(Histogram);
-	if (column != d->xErrorMinusColumn) {
-		exec(new HistogramSetXErrorMinusColumnCmd(d, column, i18n("%1: set x-error \
                column")));
-		if (column) {
-			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
                SLOT(updateErrorBars()));
-			connect(column->parentAspect(), SIGNAL(aspectAboutToBeRemoved(const \
                AbstractAspect*)),
-					this, SLOT(xErrorMinusColumnAboutToBeRemoved(const AbstractAspect*)));
-		}
-	}
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetYErrorType, Histogram::ErrorType, yErrorType, \
                updateErrorBars)
-void Histogram::setYErrorType(ErrorType type) {
-	Q_D(Histogram);
-	if (type != d->yErrorType)
-		exec(new HistogramSetYErrorTypeCmd(d, type, i18n("%1: y-error type changed")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetYErrorPlusColumn, const AbstractColumn*, \
                yErrorPlusColumn, updateErrorBars)
-void Histogram::setYErrorPlusColumn(const AbstractColumn* column) {
-	Q_D(Histogram);
-	if (column != d->yErrorPlusColumn) {
-		exec(new HistogramSetYErrorPlusColumnCmd(d, column, i18n("%1: set y-error \
                column")));
-		if (column) {
-			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
                SLOT(updateErrorBars()));
-			connect(column->parentAspect(), SIGNAL(aspectAboutToBeRemoved(const \
                AbstractAspect*)),
-					this, SLOT(yErrorPlusColumnAboutToBeRemoved(const AbstractAspect*)));
-		}
-	}
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetYErrorMinusColumn, const AbstractColumn*, \
                yErrorMinusColumn, updateErrorBars)
-void Histogram::setYErrorMinusColumn(const AbstractColumn* column) {
-	Q_D(Histogram);
-	if (column != d->yErrorMinusColumn) {
-		exec(new HistogramSetYErrorMinusColumnCmd(d, column, i18n("%1: set y-error \
                column")));
-		if (column) {
-			connect(column, SIGNAL(dataChanged(const AbstractColumn*)), this, \
                SLOT(updateErrorBars()));
-			connect(column->parentAspect(), SIGNAL(aspectAboutToBeRemoved(const \
                AbstractAspect*)),
-					this, SLOT(yErrorMinusColumnAboutToBeRemoved(const AbstractAspect*)));
-		}
-	}
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetErrorBarsCapSize, qreal, errorBarsCapSize, \
                updateErrorBars)
-void Histogram::setErrorBarsCapSize(qreal size) {
-	Q_D(Histogram);
-	if (size != d->errorBarsCapSize)
-		exec(new HistogramSetErrorBarsCapSizeCmd(d, size, i18n("%1: set error bar cap \
                size")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetErrorBarsType, Histogram::ErrorBarsType, \
                errorBarsType, updateErrorBars)
-void Histogram::setErrorBarsType(ErrorBarsType type) {
-	Q_D(Histogram);
-	if (type != d->errorBarsType)
-		exec(new HistogramSetErrorBarsTypeCmd(d, type, i18n("%1: error bar type \
                changed")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetErrorBarsPen, QPen, errorBarsPen, \
                recalcShapeAndBoundingRect)
-void Histogram::setErrorBarsPen(const QPen& pen) {
-	Q_D(Histogram);
-	if (pen != d->errorBarsPen)
-		exec(new HistogramSetErrorBarsPenCmd(d, pen, i18n("%1: set error bar style")));
-}
-
-STD_SETTER_CMD_IMPL_F_S(Histogram, SetErrorBarsOpacity, qreal, errorBarsOpacity, \
                updatePixmap)
-void Histogram::setErrorBarsOpacity(qreal opacity) {
-	Q_D(Histogram);
-	if (opacity != d->errorBarsOpacity)
-		exec(new HistogramSetErrorBarsOpacityCmd(d, opacity, i18n("%1: set error bar \
                opacity")));
-}
-
-void Histogram::suppressRetransform(bool b) {
-	Q_D(Histogram);
-	d->m_suppressRetransform = b;
-}
-
 //##############################################################################
 //#################################  SLOTS  ####################################
 //##############################################################################
@@ -654,28 +380,10 @@ void Histogram::retransform() {
 	d_ptr->retransform();
 }
 
-void Histogram::updateValues() {
-	d_ptr->updateValues();
-}
-
-void Histogram::updateErrorBars() {
-	d_ptr->updateErrorBars();
-}
-
 //TODO
 void Histogram::handlePageResize(double horizontalRatio, double verticalRatio){
 	Q_D(const Histogram);
 
-	setSymbolsSize(d->symbolsSize * horizontalRatio);
-
-	QPen pen = d->symbolsPen;
-	pen.setWidthF(pen.widthF() * (horizontalRatio + verticalRatio) / 2.0);
-	setSymbolsPen(pen);
-
-	pen = d->linePen;
-	pen.setWidthF(pen.widthF() * (horizontalRatio + verticalRatio) / 2.0);
-	setLinePen(pen);
-
 	//setValuesDistance(d->distance*);
 	QFont font=d->valuesFont;
 	font.setPointSizeF(font.pointSizeF()*horizontalRatio);
@@ -684,6 +392,10 @@ void Histogram::handlePageResize(double horizontalRatio, double \
verticalRatio){  retransform();
 }
 
+void Histogram::updateValues() {
+	d_ptr->updateValues();
+}
+
 void Histogram::xColumnAboutToBeRemoved(const AbstractAspect* aspect) {
 	Q_D(Histogram);
 	if (aspect == d->xColumn) {
@@ -708,35 +420,120 @@ void Histogram::valuesColumnAboutToBeRemoved(const \
AbstractAspect* aspect) {  }
 }
 
-void Histogram::xErrorPlusColumnAboutToBeRemoved(const AbstractAspect* aspect) {
+
+void Histogram::scaleAutoX(){
 	Q_D(Histogram);
-	if (aspect == d->xErrorPlusColumn) {
-		d->xErrorPlusColumn = 0;
-		d->updateErrorBars();
+
+	//loop over all xy-curves and determine the maximum x-value
+	if (d->curvesXMinMaxIsDirty) {
+		d->curvesXMin = INFINITY;
+		d->curvesXMax = -INFINITY;
+		QList<const Histogram*> children = this->children<const Histogram>();
+		foreach(const Histogram* curve, children) {
+			if (!curve->isVisible())
+				continue;
+			if (!curve->xColumn())
+				continue;
+
+			if (curve->xColumn()->minimum() != INFINITY){
+				if (curve->xColumn()->minimum() < d->curvesXMin)
+					d->curvesXMin = curve->xColumn()->minimum();
+			}
+
+			if (curve->xColumn()->maximum() != -INFINITY){
+				if (curve->xColumn()->maximum() > d->curvesXMax)
+					d->curvesXMax = curve->xColumn()->maximum();
+			}
+		}
+
+		d->curvesXMinMaxIsDirty = false;
 	}
-}
 
-void Histogram::xErrorMinusColumnAboutToBeRemoved(const AbstractAspect* aspect) {
-	Q_D(Histogram);
-	if (aspect == d->xErrorMinusColumn) {
-		d->xErrorMinusColumn = 0;
-		d->updateErrorBars();
+	bool update = false;
+	if (d->curvesXMin != d->xMin && d->curvesXMin != INFINITY){
+		d->xMin = d->curvesXMin;
+		update = true;
 	}
-}
 
-void Histogram::yErrorPlusColumnAboutToBeRemoved(const AbstractAspect* aspect) {
-	Q_D(Histogram);
-	if (aspect == d->yErrorPlusColumn) {
-		d->yErrorPlusColumn = 0;
-		d->updateErrorBars();
+	if (d->curvesXMax != d->xMax && d->curvesXMax != -INFINITY){
+		d->xMax = d->curvesXMax;
+		update = true;
+	}
+
+	if(update){
+		if (d->xMax == d->xMin){
+			//in case min and max are equal (e.g. if we plot a single point), subtract/add \
10% of the value +			if (d->xMax!=0){
+				d->xMax = d->xMax*1.1;
+				d->xMin = d->xMin*0.9;
+			}else{
+				d->xMax = 0.1;
+				d->xMin = -0.1;
+			}
+		}else{
+		/*	float offset = (d->xMax - d->xMin)*d->autoScaleOffsetFactor;
+			d->xMin -= offset;
+			d->xMax += offset;
+		*/}
+		//d->retransformScales();
 	}
 }
 
-void Histogram::yErrorMinusColumnAboutToBeRemoved(const AbstractAspect* aspect) {
+void Histogram::scaleAutoY(){
 	Q_D(Histogram);
-	if (aspect == d->yErrorMinusColumn) {
-		d->yErrorMinusColumn = 0;
-		d->updateErrorBars();
+
+	//loop over all xy-curves and determine the maximum y-value
+	if (d->curvesYMinMaxIsDirty) {
+		d->curvesYMin = INFINITY;
+		d->curvesYMax = -INFINITY;
+		QList<const Histogram*> children = this->children<const Histogram>();
+		foreach(const Histogram* curve, children) {
+			if (!curve->isVisible())
+				continue;
+			if (!curve->yColumn())
+				continue;
+
+			if (curve->yColumn()->minimum() != INFINITY){
+				if (curve->yColumn()->minimum() < d->curvesYMin)
+					d->curvesYMin = curve->yColumn()->minimum();
+			}
+
+			if (curve->yColumn()->maximum() != -INFINITY){
+				if (curve->yColumn()->maximum() > d->curvesYMax)
+					d->curvesYMax = curve->yColumn()->maximum();
+			}
+		}
+
+		d->curvesYMinMaxIsDirty = false;
+	}
+
+	bool update = false;
+	if (d->curvesYMin != d->yMin && d->curvesYMin != INFINITY){
+		d->yMin = d->curvesYMin;
+		update = true;
+	}
+
+	if (d->curvesYMax != d->yMax && d->curvesYMax != -INFINITY){
+		d->yMax = d->curvesYMax;
+		update = true;
+	}
+
+	if(update){
+		if (d->yMax == d->yMin){
+			//in case min and max are equal (e.g. if we plot a single point), subtract/add \
10% of the value +			if (d->yMax!=0){
+				d->yMax = d->yMax*1.1;
+				d->yMin = d->yMin*0.9;
+			}else{
+				d->yMax = 0.1;
+				d->yMin = -0.1;
+			}
+		}else{
+		/*	float offset = (d->yMax - d->yMin)*d->autoScaleOffsetFactor;
+			d->yMin -= offset;
+			d->yMax += offset;
+	*/	}
+		//d->retransformScales();
 	}
 }
 
@@ -798,11 +595,7 @@ void HistogramPrivate::retransform(){
 	connectedPointsLogical.clear();
 
 	if ( (NULL == xColumn) || (NULL == yColumn) ){
-		linePath = QPainterPath();
-		dropLinePath = QPainterPath();
-		symbolsPath = QPainterPath();
 		valuesPath = QPainterPath();
-		errorBarsPath = QPainterPath();
 		recalcShapeAndBoundingRect();
 		return;
 	}
@@ -863,329 +656,8 @@ void HistogramPrivate::retransform(){
 	cSystem->mapLogicalToScene(symbolPointsLogical, symbolPointsScene, visiblePoints);
 
 	m_suppressRecalc = true;
-	updateLines();
-	updateDropLines();
-	updateSymbols();
 	updateValues();
 	m_suppressRecalc = false;
-	updateErrorBars();
-}
-
-/*!
-  recalculates the painter path for the lines connecting the data points.
-  Called each time when the type of this connection is changed.
-*/
-void HistogramPrivate::updateLines(){
-  	linePath = QPainterPath();
-	lines.clear();
-	if (lineType == Histogram::NoLine){
-	  updateFilling();
-	  recalcShapeAndBoundingRect();
-	  return;
-	}
-
-	const int count=symbolPointsLogical.count();
-
-	//nothing to do, if no data points available
-	if (count<=1){
-	  	recalcShapeAndBoundingRect();
-		return;
-	}
-
-	//calculate the lines connecting the data points
-	QPointF tempPoint1, tempPoint2;
-	QPointF curPoint, nextPoint;
-	switch(lineType){
-          case Histogram::NoLine:
-		break;
-	  case Histogram::Line:{
-		for (int i=0; i<count-1; i++){
-		  if (!lineSkipGaps && !connectedPointsLogical[i]) continue;
-		  lines.append(QLineF(symbolPointsLogical.at(i), symbolPointsLogical.at(i+1)));
-		}
-		break;
-	  }
-	  case Histogram::StartHorizontal:{
-		for (int i=0; i<count-1; i++){
-		  if (!lineSkipGaps && !connectedPointsLogical[i]) continue;
-		  curPoint=symbolPointsLogical.at(i);
-		  nextPoint=symbolPointsLogical.at(i+1);
-		  tempPoint1=QPointF(nextPoint.x(), curPoint.y());
-		  lines.append(QLineF(curPoint, tempPoint1));
-		  lines.append(QLineF(tempPoint1, nextPoint));
-		}
-		break;
-	  }
-	  case Histogram::StartVertical:{
-		for (int i=0; i<count-1; i++){
-		  if (!lineSkipGaps && !connectedPointsLogical[i]) continue;
-		  curPoint=symbolPointsLogical.at(i);
-		  nextPoint=symbolPointsLogical.at(i+1);
-		  tempPoint1=QPointF(curPoint.x(), nextPoint.y());
-		  lines.append(QLineF(curPoint, tempPoint1));
-		  lines.append(QLineF(tempPoint1,nextPoint));
-		}
-		break;
-	  }
-	  case Histogram::MidpointHorizontal:{
-		for (int i=0; i<count-1; i++){
-		  if (!lineSkipGaps && !connectedPointsLogical[i]) continue;
-		  curPoint=symbolPointsLogical.at(i);
-		  nextPoint=symbolPointsLogical.at(i+1);
-		  tempPoint1=QPointF(curPoint.x() + (nextPoint.x()-curPoint.x())/2, curPoint.y());
-		  tempPoint2=QPointF(curPoint.x() + (nextPoint.x()-curPoint.x())/2, \
                nextPoint.y());
-		  lines.append(QLineF(curPoint, tempPoint1));
-		  lines.append(QLineF(tempPoint1, tempPoint2));
-		  lines.append(QLineF(tempPoint2, nextPoint));
-		}
-		break;
-	  }
-	  case Histogram::MidpointVertical:{
-		for (int i=0; i<count-1; i++){
-		  if (!lineSkipGaps && !connectedPointsLogical[i]) continue;
-		  curPoint=symbolPointsLogical.at(i);
-		  nextPoint=symbolPointsLogical.at(i+1);
-		  tempPoint1=QPointF(curPoint.x(), curPoint.y() + (nextPoint.y()-curPoint.y())/2);
-		  tempPoint2=QPointF(nextPoint.x(), curPoint.y() + \
                (nextPoint.y()-curPoint.y())/2);
-		  lines.append(QLineF(curPoint, tempPoint1));
-		  lines.append(QLineF(tempPoint1, tempPoint2));
-		  lines.append(QLineF(tempPoint2, nextPoint));
-		}
-		break;
-	  }
-	  case Histogram::Segments2:{
-		int skip=0;
-		for (int i=0; i<count-1; i++){
-		  if (skip!=1){
-			if (!lineSkipGaps && !connectedPointsLogical[i]) {skip=0; continue;}
-			lines.append(QLineF(symbolPointsLogical.at(i), symbolPointsLogical.at(i+1)));
-			skip++;
-		  }else{
-			skip=0;
-		  }
-		}
-		break;
-	  }
-	  case Histogram::Segments3:{
-		int skip=0;
-		for (int i=0; i<count-1; i++){
-		  if (skip!=2){
-			if (!lineSkipGaps && !connectedPointsLogical[i]) {skip=0; continue;}
-			lines.append(QLineF(symbolPointsLogical.at(i), symbolPointsLogical.at(i+1)));
-			skip++;
-		  }else{
-			skip=0;
-		  }
-		}
-		break;
-	  }
-	  case Histogram::SplineCubicNatural:
-	  case Histogram::SplineCubicPeriodic:
-	  case Histogram::SplineAkimaNatural:
-	  case Histogram::SplineAkimaPeriodic:{
-		//TODO: optimize! try to omit the copying from the column to the arrays of \
                doubles.
-		//TODO: forward the error message to the UI.
-		gsl_interp_accel *acc  = gsl_interp_accel_alloc();
-		gsl_spline *spline=0;
-
-		double x[count],  y[count];
-		for (int i=0; i<count; i++){
-		  x[i]=symbolPointsLogical.at(i).x();
-		  y[i]=symbolPointsLogical.at(i).y();
-		}
-
-		gsl_set_error_handler_off();
-		if (lineType==Histogram::SplineCubicNatural){
-			spline = gsl_spline_alloc(gsl_interp_cspline, count);
-		}else if (lineType==Histogram::SplineCubicPeriodic){
-			spline = gsl_spline_alloc(gsl_interp_cspline_periodic, count);
-		}else if (lineType==Histogram::SplineAkimaNatural){
-			spline = gsl_spline_alloc(gsl_interp_akima, count);
-		}else if (lineType==Histogram::SplineAkimaPeriodic){
-			spline = gsl_spline_alloc(gsl_interp_akima_periodic, count);
-		}
-
-		if (!spline) {
-			QString msg;
-			if ( (lineType==Histogram::SplineAkimaNatural || \
                lineType==Histogram::SplineAkimaPeriodic) && count<5)
-				msg=i18n("Error: Akima spline interpolation requires a minimum of 5 points.");
-			else
-				msg =i18n("Couldn't initialize spline function");
-			qDebug()<<msg;
-			recalcShapeAndBoundingRect();
-			return;
-		}
-
-		int status = gsl_spline_init (spline, x, y, count);
-		if (status ) {
-			//TODO: check in gsl/interp.c when GSL_EINVAL is thrown
-			QString gslError;
-			if (status == GSL_EINVAL)
-				gslError = "x values must be monotonically increasing.";
-			else
-				gslError = gsl_strerror (status);
-
-			qDebug() << "Error in spline calculation. " << gslError;
-
-			recalcShapeAndBoundingRect();
-			return;
-		}
-
-		//create interpolating points
-		std::vector<double> xinterp, yinterp;
-		double step;
-		double xi, yi, x1, x2;
-		for (int i=0; i<count-1; i++){
-		   x1 = x[i];
-		   x2 = x[i+1];
-		   step=fabs(x2-x1)/(lineInterpolationPointsCount+1);
-
-		  for (xi=x1; xi<x2; xi += step){
-			yi = gsl_spline_eval (spline, xi, acc);
-			xinterp.push_back(xi);
-			yinterp.push_back(yi);
-		  }
-		}
-
-		for (unsigned int i=0; i<xinterp.size()-1; i++){
-		  lines.append(QLineF(xinterp[i], yinterp[i], xinterp[i+1], yinterp[i+1]));
-		}
-		lines.append(QLineF(xinterp[xinterp.size()-1], yinterp[yinterp.size()-1], \
                x[count-1], y[count-1]));
-
-		gsl_spline_free (spline);
-        gsl_interp_accel_free (acc);
-		break;
-	  }
-	  default:
-		break;
-	}
-
-	//map the lines to scene coordinates
-	const CartesianPlot* plot = dynamic_cast<const CartesianPlot*>(q->parentAspect());
-	const AbstractCoordinateSystem* cSystem = plot->coordinateSystem();
-	lines = cSystem->mapLogicalToScene(lines);
-
-	//new line path
-	foreach (const QLineF& line, lines){
-		linePath.moveTo(line.p1());
-		linePath.lineTo(line.p2());
-	}
-
-	updateFilling();
-	recalcShapeAndBoundingRect();
-}
-
-/*!
-  recalculates the painter path for the drop lines.
-  Called each time when the type of the drop lines is changed.
-*/
-void HistogramPrivate::updateDropLines(){
-  	dropLinePath = QPainterPath();
-	if (dropLineType == Histogram::NoDropLine){
-	  recalcShapeAndBoundingRect();
-	  return;
-	}
-
-	//calculate drop lines
-	const CartesianPlot* plot = dynamic_cast<const CartesianPlot*>(q->parentAspect());
-	QList<QLineF> lines;
-	float xMin = 0;
-	float yMin = 0;
-
-	xMin = plot->xMin();
-	yMin = plot->yMin();
-	switch(dropLineType){
-	  case Histogram::NoDropLine:
-		break;
-	  case Histogram::DropLineX:{
-		for(int i=0; i<symbolPointsLogical.size(); ++i){
-			if (!visiblePoints[i]) continue;
-			const QPointF& point = symbolPointsLogical.at(i);
-			lines.append(QLineF(point, QPointF(point.x(), yMin)));
-		}
-		break;
-	  }
-	  case Histogram::DropLineY:{
-		for(int i=0; i<symbolPointsLogical.size(); ++i){
-			if (!visiblePoints[i]) continue;
-			const QPointF& point = symbolPointsLogical.at(i);
-			lines.append(QLineF(point, QPointF(xMin, point.y())));
-		}
-		break;
-	  }
-	  case Histogram::DropLineXY:{
-		for(int i=0; i<symbolPointsLogical.size(); ++i){
-			if (!visiblePoints[i]) continue;
-			const QPointF& point = symbolPointsLogical.at(i);
-			lines.append(QLineF(point, QPointF(point.x(), yMin)));
-			lines.append(QLineF(point, QPointF(xMin, point.y())));
-		}
-		break;
-	  }
-	  case Histogram::DropLineXZeroBaseline:{
-		for(int i=0; i<symbolPointsLogical.size(); ++i){
-			if (!visiblePoints[i]) continue;
-			const QPointF& point = symbolPointsLogical.at(i);
-			lines.append(QLineF(point, QPointF(point.x(), 0)));
-		}
-		break;
-	  }
-	  case Histogram::DropLineXMinBaseline:{
-		for(int i=0; i<symbolPointsLogical.size(); ++i){
-			if (!visiblePoints[i]) continue;
-			const QPointF& point = symbolPointsLogical.at(i);
-			lines.append( QLineF(point, QPointF(point.x(), dynamic_cast<const \
                Column*>(yColumn)->minimum())) );
-		}
-		break;
-	  }
-	  case Histogram::DropLineXMaxBaseline:{
-		for(int i=0; i<symbolPointsLogical.size(); ++i){
-			if (!visiblePoints[i]) continue;
-			const QPointF& point = symbolPointsLogical.at(i);
-			lines.append( QLineF(point, QPointF(point.x(), dynamic_cast<const \
                Column*>(yColumn)->maximum())) );
-		}
-		break;
-	  }
-	  default:
-		break;
-	}
-
-	//map the drop lines to scene coordinates
-	const AbstractCoordinateSystem* cSystem = plot->coordinateSystem();
-	lines = cSystem->mapLogicalToScene(lines);
-
-	//new painter path for the drop lines
-	foreach (const QLineF& line, lines){
-		dropLinePath.moveTo(line.p1());
-		dropLinePath.lineTo(line.p2());
-	}
-
-	recalcShapeAndBoundingRect();
-}
-
-void HistogramPrivate::updateSymbols(){
-	symbolsPath = QPainterPath();
-	if (symbolsStyle != Symbol::NoSymbols){
-		QPainterPath path = Symbol::pathFromStyle(symbolsStyle);
-
-		QTransform trafo;
-		trafo.scale(symbolsSize, symbolsSize);
-		path = trafo.map(path);
-		trafo.reset();
-
-		if (symbolsRotationAngle != 0) {
-			trafo.rotate(symbolsRotationAngle);
-			path = trafo.map(path);
-		}
-
-		foreach (const QPointF& point, symbolPointsScene) {
-			trafo.reset();
-			trafo.translate(point.x(), point.y());
-			symbolsPath.addPath(trafo.map(path));
-		}
-	}
-
-	recalcShapeAndBoundingRect();
 }
 
 /*!
@@ -1350,7 +822,6 @@ void HistogramPrivate::updateFilling() {
 		fillLines = lines;
 	} else {
 		for (int i=0; i<symbolPointsLogical.count()-1; i++){
-		  if (!lineSkipGaps && !connectedPointsLogical[i]) continue;
 		  fillLines.append(QLineF(symbolPointsLogical.at(i), \
symbolPointsLogical.at(i+1)));  }
 		fillLines = cSystem->mapLogicalToScene(fillLines);
@@ -1566,147 +1037,6 @@ void HistogramPrivate::updateFilling() {
 	recalcShapeAndBoundingRect();
 }
 
-void HistogramPrivate::updateErrorBars(){
-  	errorBarsPath = QPainterPath();
-	if (xErrorType==Histogram::NoError && yErrorType==Histogram::NoError){
-		recalcShapeAndBoundingRect();
-		return;
-	}
-
-	QList<QLineF> lines;
-	float errorPlus, errorMinus;
-	const CartesianPlot* plot = dynamic_cast<const CartesianPlot*>(q->parentAspect());
-	const AbstractCoordinateSystem* cSystem = plot->coordinateSystem();
-
-	//the cap size for the errorbars is given in scene units.
-	//determine first the (half of the) cap size in logical units:
-	// * take the first visible point in logical units
-	// * convert it to scene units
-	// * add to this point an offset corresponding to the cap size in scene units
-	// * convert this point back to logical units
-	// * subtract from this point the original coordinates (without the new offset)
-	//   to determine the cap size in logical units.
-	float capSizeX = 0;
-	float capSizeY = 0;
-	if (errorBarsType != Histogram::ErrorBarsSimple && !symbolPointsLogical.isEmpty()) \
                {
-		//determine the index of the first visible point
-		size_t i = 0;
-		while( i<visiblePoints.size() && !visiblePoints[i])
-			i++;
-
-		if (i==visiblePoints.size())
-			return; //no visible points -> no error bars to draw
-
-		//cap size for x-error bars
-		QPointF pointScene = cSystem->mapLogicalToScene(symbolPointsLogical.at(i));
-		pointScene.setY(pointScene.y()-errorBarsCapSize);
-		QPointF pointLogical = cSystem->mapSceneToLogical(pointScene);
-		capSizeX = (pointLogical.y() - symbolPointsLogical.at(i).y())/2;
-
-		//cap size for y-error bars
-		pointScene = cSystem->mapLogicalToScene(symbolPointsLogical.at(i));
-		pointScene.setX(pointScene.x()+errorBarsCapSize);
-		pointLogical = cSystem->mapSceneToLogical(pointScene);
-		capSizeY = (pointLogical.x() - symbolPointsLogical.at(i).x())/2;
-	}
-
-	for (int i=0; i<symbolPointsLogical.size(); ++i){
-		if (!visiblePoints[i])
-			continue;
-
-		const QPointF& point = symbolPointsLogical.at(i);
-
-		//error bars for x
-		if (xErrorType!=Histogram::NoError) {
-			//determine the values for the errors
-			if (xErrorPlusColumn && xErrorPlusColumn->isValid(i) && \
                !xErrorPlusColumn->isMasked(i))
-				errorPlus = xErrorPlusColumn->valueAt(i);
-			else
-				errorPlus = 0;
-
-			if (xErrorType==Histogram::SymmetricError) {
-				errorMinus = errorPlus;
-			} else {
-				if (xErrorMinusColumn && xErrorMinusColumn->isValid(i) && \
                !xErrorMinusColumn->isMasked(i))
-					errorMinus = xErrorMinusColumn->valueAt(i);
-				else
-					errorMinus = 0;
-			}
-
-			//draw the error bars
-			switch(errorBarsType) {
-				case Histogram::ErrorBarsSimple:
-					lines.append(QLineF(QPointF(point.x()-errorMinus, point.y()),
-										QPointF(point.x()+errorPlus, point.y())));
-					break;
-				case Histogram::ErrorBarsWithEnds: {
-					lines.append(QLineF(QPointF(point.x()-errorMinus, point.y()),
-										QPointF(point.x()+errorPlus, point.y())));
-					if (errorMinus!=0) {
-						lines.append(QLineF(QPointF(point.x()-errorMinus, point.y()-capSizeX),
-											QPointF(point.x()-errorMinus, point.y()+capSizeX)));
-					}
-					if (errorPlus!=0) {
-						lines.append(QLineF(QPointF(point.x()+errorPlus, point.y()-capSizeX),
-											QPointF(point.x()+errorPlus, point.y()+capSizeX)));
-					}
-					break;
-				}
-			}
-		}
-
-		//error bars for y
-		if (yErrorType!=Histogram::NoError) {
-			//determine the values for the errors
-			if (yErrorPlusColumn && yErrorPlusColumn->isValid(i) && \
                !yErrorPlusColumn->isMasked(i))
-				errorPlus = yErrorPlusColumn->valueAt(i);
-			else
-				errorPlus = 0;
-
-			if (yErrorType==Histogram::SymmetricError) {
-				errorMinus = errorPlus;
-			} else {
-				if (yErrorMinusColumn && yErrorMinusColumn->isValid(i) && \
                !yErrorMinusColumn->isMasked(i) )
-					errorMinus = yErrorMinusColumn->valueAt(i);
-				else
-					errorMinus = 0;
-			}
-
-			//draw the error bars
-			switch(errorBarsType) {
-				case Histogram::ErrorBarsSimple:
-					lines.append(QLineF(QPointF(point.x(), point.y()-errorMinus),
-										QPointF(point.x(), point.y()+errorPlus)));
-					break;
-				case Histogram::ErrorBarsWithEnds: {
-					lines.append(QLineF(QPointF(point.x(), point.y()-errorMinus),
-										QPointF(point.x(), point.y()+errorPlus)));
-					if (errorMinus!=0) {
-						lines.append(QLineF(QPointF(point.x()-capSizeY, point.y()-errorMinus),
-											QPointF(point.x()+capSizeY, point.y()-errorMinus)));
-					}
-					if (errorPlus!=0) {
-						lines.append(QLineF(QPointF(point.x()-capSizeY, point.y()+errorPlus),
-											QPointF(point.x()+capSizeY, point.y()+errorPlus)));
-					}
-					break;
-				}
-			}
-		}
-	}
-
-	//map the error bars to scene coordinates
-	lines = cSystem->mapLogicalToScene(lines);
-
-	//new painter path for the drop lines
-	foreach (const QLineF& line, lines){
-		errorBarsPath.moveTo(line.p1());
-		errorBarsPath.lineTo(line.p2());
-	}
-
-	recalcShapeAndBoundingRect();
-}
-
 /*!
   recalculates the outer bounds and the shape of the curve.
 */
@@ -1716,26 +1046,10 @@ void HistogramPrivate::recalcShapeAndBoundingRect() {
 
 	prepareGeometryChange();
 	curveShape = QPainterPath();
-	if (lineType != Histogram::NoLine){
-		curveShape.addPath(WorksheetElement::shapeFromPath(linePath, linePen));
-	}
-
-	if (dropLineType != Histogram::NoDropLine){
-		curveShape.addPath(WorksheetElement::shapeFromPath(dropLinePath, dropLinePen));
-	}
-
-	if (symbolsStyle != Symbol::NoSymbols){
-		curveShape.addPath(symbolsPath);
-	}
 
 	if (valuesType != Histogram::NoValues){
 		curveShape.addPath(valuesPath);
 	}
-
-	if (xErrorType != Histogram::NoError || yErrorType != Histogram::NoError){
-		curveShape.addPath(WorksheetElement::shapeFromPath(errorBarsPath, errorBarsPen));
-	}
-
 	boundingRectangle = curveShape.boundingRect();
 
 	foreach(const QPolygonF& pol, fillPolygons)
@@ -1757,38 +1071,6 @@ void HistogramPrivate::draw(QPainter *painter) {
 		drawFilling(painter);
 	}
 
-	//draw lines
-	if (lineType != Histogram::NoLine){
-		painter->setOpacity(lineOpacity);
-		painter->setPen(linePen);
-		painter->setBrush(Qt::NoBrush);
-		painter->drawPath(linePath);
-	}
-
-	//draw drop lines
-	if (dropLineType != Histogram::NoDropLine){
-		painter->setOpacity(dropLineOpacity);
-		painter->setPen(dropLinePen);
-		painter->setBrush(Qt::NoBrush);
-		painter->drawPath(dropLinePath);
-	}
-
-	//draw error bars
-	if ( (xErrorType != Histogram::NoError) || (yErrorType != Histogram::NoError) ){
-		painter->setOpacity(errorBarsOpacity);
-		painter->setPen(errorBarsPen);
-		painter->setBrush(Qt::NoBrush);
-		painter->drawPath(errorBarsPath);
-	}
-
-	//draw symbols
-	if (symbolsStyle != Symbol::NoSymbols){
-		painter->setOpacity(symbolsOpacity);
-		painter->setPen(symbolsPen);
-		painter->setBrush(symbolsBrush);
-		drawSymbols(painter);
-	}
-
 	//draw values
 	if (valuesType != Histogram::NoValues){
 		painter->setOpacity(valuesOpacity);
@@ -1953,23 +1235,6 @@ void HistogramPrivate::paint(QPainter* painter, const \
QStyleOptionGraphicsItem*  Drawing of symbolsPath is very slow, so we draw every \
symbol in the loop  which us much faster (factor 10)
 */
-void HistogramPrivate::drawSymbols(QPainter* painter) {
-	QPainterPath path = Symbol::pathFromStyle(symbolsStyle);
-
-	QTransform trafo;
-	trafo.scale(symbolsSize, symbolsSize);
-	path = trafo.map(path);
-	trafo.reset();
-	if (symbolsRotationAngle != 0) {
-		trafo.rotate(symbolsRotationAngle);
-		path = trafo.map(path);
-	}
-	foreach (const QPointF& point, symbolPointsScene) {
-		trafo.reset();
-		trafo.translate(point.x(), point.y());
-		painter->drawPath(trafo.map(path));
-	}
-}
 
 void HistogramPrivate::drawValues(QPainter* painter) {
 	QTransform trafo;
@@ -2078,21 +1343,21 @@ void HistogramPrivate::drawFilling(QPainter* painter) {
 }
 
 void HistogramPrivate::hoverEnterEvent(QGraphicsSceneHoverEvent*) {
-	const CartesianPlot* plot = dynamic_cast<const CartesianPlot*>(q->parentAspect());
-	if (plot->mouseMode() == CartesianPlot::SelectionMode && !isSelected()) {
+	/*const Histogram* plot = dynamic_cast<const Histogram*>(q->parentAspect());
+	if (plot->mouseMode() == Histogram::SelectionMode && !isSelected()) {
 		m_hovered = true;
 		q->hovered();
 		update();
-	}
+	}*/
 }
 
 void HistogramPrivate::hoverLeaveEvent(QGraphicsSceneHoverEvent*) {
-	const CartesianPlot* plot = dynamic_cast<const CartesianPlot*>(q->parentAspect());
-	if (plot->mouseMode() == CartesianPlot::SelectionMode && m_hovered) {
+	/*const Histogram* plot = dynamic_cast<const Histogram*>(q->parentAspect());
+	if (plot->mouseMode() == Histogram::SelectionMode && m_hovered) {
 		m_hovered = false;
 		q->unhovered();
 		update();
-	}
+	}*/
 }
 
 //##############################################################################
@@ -2113,31 +1378,7 @@ void Histogram::save(QXmlStreamWriter* writer) const{
 	writer->writeAttribute( "visible", QString::number(d->isVisible()) );
 	writer->writeEndElement();
 
-	//Line
-    writer->writeStartElement( "lines" );
-	writer->writeAttribute( "type", QString::number(d->lineType) );
-	writer->writeAttribute( "skipGaps", QString::number(d->lineSkipGaps) );
-	writer->writeAttribute( "interpolationPointsCount", \
                QString::number(d->lineInterpolationPointsCount) );
-	WRITE_QPEN(d->linePen);
-	writer->writeAttribute( "opacity", QString::number(d->lineOpacity) );
-	writer->writeEndElement();
-
-	//Drop lines
-	writer->writeStartElement( "dropLines" );
-	writer->writeAttribute( "type", QString::number(d->dropLineType) );
-	WRITE_QPEN(d->dropLinePen);
-	writer->writeAttribute( "opacity", QString::number(d->dropLineOpacity) );
-	writer->writeEndElement();
-
-	//Symbols
-	writer->writeStartElement( "symbols" );
-	writer->writeAttribute( "symbolsStyle", QString::number(d->symbolsStyle) );
-	writer->writeAttribute( "opacity", QString::number(d->symbolsOpacity) );
-	writer->writeAttribute( "rotation", QString::number(d->symbolsRotationAngle) );
-	writer->writeAttribute( "size", QString::number(d->symbolsSize) );
-	WRITE_QBRUSH(d->symbolsBrush);
-	WRITE_QPEN(d->symbolsPen);
-	writer->writeEndElement();
+	
 
 	//Values
 	writer->writeStartElement( "values" );
@@ -2171,20 +1412,6 @@ void Histogram::save(QXmlStreamWriter* writer) const{
 	writer->writeAttribute( "opacity", QString::number(d->fillingOpacity) );
 	writer->writeEndElement();
 
-	//Error bars
-	writer->writeStartElement( "errorBars" );
-	writer->writeAttribute( "xErrorType", QString::number(d->xErrorType) );
-	WRITE_COLUMN(d->xErrorPlusColumn, xErrorPlusColumn);
-	WRITE_COLUMN(d->xErrorMinusColumn, xErrorMinusColumn);
-	writer->writeAttribute( "yErrorType", QString::number(d->yErrorType) );
-	WRITE_COLUMN(d->yErrorPlusColumn, yErrorPlusColumn);
-	WRITE_COLUMN(d->yErrorMinusColumn, yErrorMinusColumn);
-	writer->writeAttribute( "type", QString::number(d->errorBarsType) );
-	writer->writeAttribute( "capSize", QString::number(d->errorBarsCapSize) );
-	WRITE_QPEN(d->errorBarsPen);
-	writer->writeAttribute( "opacity", QString::number(d->errorBarsOpacity) );
-	writer->writeEndElement();
-
 	writer->writeEndElement(); //close "Histogram" section
 }
 
@@ -2225,79 +1452,6 @@ bool Histogram::load(XmlStreamReader* reader){
                 reader->raiseWarning(attributeWarning.arg("'visible'"));
             else
                 d->setVisible(str.toInt());
-		}else if (reader->name() == "lines"){
-			attribs = reader->attributes();
-
-			str = attribs.value("type").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'type'"));
-            else
-                d->lineType = (Histogram::LineType)str.toInt();
-
-			str = attribs.value("skipGaps").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'skipGps'"));
-            else
-                d->lineSkipGaps = str.toInt();
-
-			str = attribs.value("interpolationPointsCount").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'interpolationPointsCount'"));
                
-            else
-                d->lineInterpolationPointsCount = str.toInt();
-
-			READ_QPEN(d->linePen);
-
-			str = attribs.value("opacity").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'opacity'"));
-            else
-                d->lineOpacity = str.toDouble();
-		}else if (reader->name() == "dropLines"){
-			attribs = reader->attributes();
-
-			str = attribs.value("type").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'type'"));
-            else
-                d->dropLineType = (Histogram::DropLineType)str.toInt();
-
-			READ_QPEN(d->dropLinePen);
-
-			str = attribs.value("opacity").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'opacity'"));
-            else
-                d->dropLineOpacity = str.toDouble();
-		}else if (reader->name() == "symbols"){
-			attribs = reader->attributes();
-
-			str = attribs.value("symbolsStyle").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'symbolsStyle'"));
-            else
-                d->symbolsStyle = (Symbol::Style)str.toInt();
-
-			str = attribs.value("opacity").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'opacity'"));
-            else
-                d->symbolsOpacity = str.toDouble();
-
-			str = attribs.value("rotation").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'rotation'"));
-            else
-                d->symbolsRotationAngle = str.toDouble();
-
-			str = attribs.value("size").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'size'"));
-            else
-                d->symbolsSize = str.toDouble();
-
-			READ_QBRUSH(d->symbolsBrush);
-			READ_QPEN(d->symbolsPen);
 		}else if (reader->name() == "values"){
 			attribs = reader->attributes();
 
@@ -2422,48 +1576,8 @@ bool Histogram::load(XmlStreamReader* reader){
                 reader->raiseWarning(attributeWarning.arg("opacity"));
             else
                 d->fillingOpacity = str.toDouble();
-		}else if (reader->name() == "errorBars"){
-			attribs = reader->attributes();
-
-			str = attribs.value("xErrorType").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'xErrorType'"));
-            else
-                d->xErrorType = (Histogram::ErrorType)str.toInt();
-
-			READ_COLUMN(xErrorPlusColumn);
-			READ_COLUMN(xErrorMinusColumn);
-
-			str = attribs.value("yErrorType").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'yErrorType'"));
-            else
-                d->yErrorType = (Histogram::ErrorType)str.toInt();
-
-			READ_COLUMN(yErrorPlusColumn);
-			READ_COLUMN(yErrorMinusColumn);
-
-			str = attribs.value("type").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'type'"));
-            else
-                d->errorBarsType = (Histogram::ErrorBarsType)str.toInt();
-
-			str = attribs.value("capSize").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'capSize'"));
-            else
-                d->errorBarsCapSize = str.toDouble();
-
-			READ_QPEN(d->errorBarsPen);
-
-			str = attribs.value("opacity").toString();
-            if(str.isEmpty())
-                reader->raiseWarning(attributeWarning.arg("'opacity'"));
-            else
-                d->errorBarsOpacity = str.toDouble();
-		}
+		
+	}
 	}
-
 	return true;
 }
diff --git a/src/backend/worksheet/plots/cartesian/Histogram.h \
b/src/backend/worksheet/plots/cartesian/Histogram.h index 9bff497..72de473 100644
--- a/src/backend/worksheet/plots/cartesian/Histogram.h
+++ b/src/backend/worksheet/plots/cartesian/Histogram.h
@@ -65,23 +65,12 @@ class Histogram: public WorksheetElement {
 		POINTER_D_ACCESSOR_DECL(const AbstractColumn, yColumn, YColumn)
 		QString& xColumnPath() const;
 		QString& yColumnPath() const;
+		
+		BASIC_D_ACCESSOR_DECL(float, xMin, XMin)
+		BASIC_D_ACCESSOR_DECL(float, xMax, XMax)
+		BASIC_D_ACCESSOR_DECL(float, yMin, YMin)
+		BASIC_D_ACCESSOR_DECL(float, yMax, YMax)
 
-		BASIC_D_ACCESSOR_DECL(LineType, lineType, LineType)
-		BASIC_D_ACCESSOR_DECL(bool, lineSkipGaps, LineSkipGaps)
-		BASIC_D_ACCESSOR_DECL(int, lineInterpolationPointsCount, \
                LineInterpolationPointsCount)
-		CLASS_D_ACCESSOR_DECL(QPen, linePen, LinePen)
-		BASIC_D_ACCESSOR_DECL(qreal, lineOpacity, LineOpacity)
-
-		BASIC_D_ACCESSOR_DECL(DropLineType, dropLineType, DropLineType)
-		CLASS_D_ACCESSOR_DECL(QPen, dropLinePen, DropLinePen)
-		BASIC_D_ACCESSOR_DECL(qreal, dropLineOpacity, DropLineOpacity)
-
-		BASIC_D_ACCESSOR_DECL(Symbol::Style, symbolsStyle, SymbolsStyle)
-		BASIC_D_ACCESSOR_DECL(qreal, symbolsOpacity, SymbolsOpacity)
-		BASIC_D_ACCESSOR_DECL(qreal, symbolsRotationAngle, SymbolsRotationAngle)
-		BASIC_D_ACCESSOR_DECL(qreal, symbolsSize, SymbolsSize)
-		CLASS_D_ACCESSOR_DECL(QBrush, symbolsBrush, SymbolsBrush)
-		CLASS_D_ACCESSOR_DECL(QPen, symbolsPen, SymbolsPen)
 
 		BASIC_D_ACCESSOR_DECL(ValuesType, valuesType, ValuesType)
 		POINTER_D_ACCESSOR_DECL(const AbstractColumn, valuesColumn, ValuesColumn)
@@ -104,22 +93,7 @@ class Histogram: public WorksheetElement {
 		CLASS_D_ACCESSOR_DECL(QColor, fillingSecondColor, FillingSecondColor)
 		CLASS_D_ACCESSOR_DECL(QString, fillingFileName, FillingFileName)
 		BASIC_D_ACCESSOR_DECL(qreal, fillingOpacity, FillingOpacity)
-
-		BASIC_D_ACCESSOR_DECL(ErrorType, xErrorType, XErrorType)
-		POINTER_D_ACCESSOR_DECL(const AbstractColumn, xErrorPlusColumn, XErrorPlusColumn)
-		QString& xErrorPlusColumnPath() const;
-		POINTER_D_ACCESSOR_DECL(const AbstractColumn, xErrorMinusColumn, \
                XErrorMinusColumn)
-		QString& xErrorMinusColumnPath() const;
-		BASIC_D_ACCESSOR_DECL(ErrorType, yErrorType, YErrorType)
-		POINTER_D_ACCESSOR_DECL(const AbstractColumn, yErrorPlusColumn, YErrorPlusColumn)
-		QString& yErrorPlusColumnPath() const;
-		POINTER_D_ACCESSOR_DECL(const AbstractColumn, yErrorMinusColumn, \
                YErrorMinusColumn)
-		QString& yErrorMinusColumnPath() const;
-		BASIC_D_ACCESSOR_DECL(ErrorBarsType, errorBarsType, ErrorBarsType)
-		BASIC_D_ACCESSOR_DECL(qreal, errorBarsCapSize, ErrorBarsCapSize)
-		CLASS_D_ACCESSOR_DECL(QPen, errorBarsPen, ErrorBarsPen)
-		BASIC_D_ACCESSOR_DECL(qreal, errorBarsOpacity, ErrorBarsOpacity)
-
+		
 		virtual void setVisible(bool on);
 		virtual bool isVisible() const;
 		virtual void setPrinting(bool on);
@@ -131,18 +105,14 @@ class Histogram: public WorksheetElement {
 	public slots:
 		virtual void retransform();
 		virtual void handlePageResize(double horizontalRatio, double verticalRatio);
-
+		void scaleAutoX();
+		void scaleAutoY();
+		
 	private slots:
 		void updateValues();
-		void updateErrorBars();
 		void xColumnAboutToBeRemoved(const AbstractAspect*);
 		void yColumnAboutToBeRemoved(const AbstractAspect*);
 		void valuesColumnAboutToBeRemoved(const AbstractAspect*);
-		void xErrorPlusColumnAboutToBeRemoved(const AbstractAspect*);
-		void xErrorMinusColumnAboutToBeRemoved(const AbstractAspect*);
-		void yErrorPlusColumnAboutToBeRemoved(const AbstractAspect*);
-		void yErrorMinusColumnAboutToBeRemoved(const AbstractAspect*);
-
 		//SLOTs for changes triggered via QActions in the context menu
 		void visibilityChanged();
 
@@ -160,8 +130,8 @@ class Histogram: public WorksheetElement {
 	signals:
 		//General-Tab
 		void dataChanged();
-		void xDataChanged();
-		void yDataChanged();
+		void xHistogramDataChanged();
+		void yHistogramDataChanged();
 		void visibilityChanged(bool);
 
 		friend class HistogramSetXColumnCmd;
@@ -169,38 +139,6 @@ class Histogram: public WorksheetElement {
 		void xColumnChanged(const AbstractColumn*);
 		void yColumnChanged(const AbstractColumn*);
 
-		//Line-Tab
-		friend class HistogramSetLineTypeCmd;
-		friend class HistogramSetLineSkipGapsCmd;
-		friend class HistogramSetLineInterpolationPointsCountCmd;
-		friend class HistogramSetLinePenCmd;
-		friend class HistogramSetLineOpacityCmd;
-		friend class HistogramSetDropLineTypeCmd;
-		friend class HistogramSetDropLinePenCmd;
-		friend class HistogramSetDropLineOpacityCmd;
-		void lineTypeChanged(Histogram::LineType);
-		void lineSkipGapsChanged(bool);
-		void lineInterpolationPointsCountChanged(int);
-		void linePenChanged(const QPen&);
-		void lineOpacityChanged(qreal);
-		void dropLineTypeChanged(Histogram::DropLineType);
-		void dropLinePenChanged(const QPen&);
-		void dropLineOpacityChanged(qreal);
-
-		//Symbol-Tab
-		friend class HistogramSetSymbolsStyleCmd;
-		friend class HistogramSetSymbolsSizeCmd;
-		friend class HistogramSetSymbolsRotationAngleCmd;
-		friend class HistogramSetSymbolsOpacityCmd;
-		friend class HistogramSetSymbolsBrushCmd;
-		friend class HistogramSetSymbolsPenCmd;
-		void symbolsStyleChanged(Symbol::Style);
-		void symbolsSizeChanged(qreal);
-		void symbolsRotationAngleChanged(qreal);
-		void symbolsOpacityChanged(qreal);
-		void symbolsBrushChanged(QBrush);
-		void symbolsPenChanged(const QPen&);
-
 		//Values-Tab
 		friend class HistogramSetValuesColumnCmd;
 		friend class HistogramSetValuesTypeCmd;
@@ -243,27 +181,6 @@ class Histogram: public WorksheetElement {
 		void fillingFileNameChanged(QString&);
 		void fillingOpacityChanged(float);
 
-		//Error bars
-		friend class HistogramSetXErrorTypeCmd;
-		friend class HistogramSetXErrorPlusColumnCmd;
-		friend class HistogramSetXErrorMinusColumnCmd;
-		friend class HistogramSetYErrorTypeCmd;
-		friend class HistogramSetYErrorPlusColumnCmd;
-		friend class HistogramSetYErrorMinusColumnCmd;
-		friend class HistogramSetErrorBarsCapSizeCmd;
-		friend class HistogramSetErrorBarsTypeCmd;
-		friend class HistogramSetErrorBarsPenCmd;
-		friend class HistogramSetErrorBarsOpacityCmd;
-		void xErrorTypeChanged(Histogram::ErrorType);
-		void xErrorPlusColumnChanged(const AbstractColumn*);
-		void xErrorMinusColumnChanged(const AbstractColumn*);
-		void yErrorTypeChanged(Histogram::ErrorType);
-		void yErrorPlusColumnChanged(const AbstractColumn*);
-		void yErrorMinusColumnChanged(const AbstractColumn*);
-		void errorBarsCapSizeChanged(qreal);
-		void errorBarsTypeChanged(Histogram::ErrorBarsType);
-		void errorBarsPenChanged(QPen);
-		void errorBarsOpacityChanged(qreal);
 };
 
 #endif
diff --git a/src/backend/worksheet/plots/cartesian/HistogramPrivate.h \
b/src/backend/worksheet/plots/cartesian/HistogramPrivate.h index a5a8da8..47f61b9 \
                100644
--- a/src/backend/worksheet/plots/cartesian/HistogramPrivate.h
+++ b/src/backend/worksheet/plots/cartesian/HistogramPrivate.h
@@ -50,12 +50,8 @@ class HistogramPrivate: public QGraphicsItem {
 		bool m_selectionEffectImageIsDirty;
 
 		void retransform();
-		void updateLines();
-		void updateDropLines();
-		void updateSymbols();
 		void updateValues();
 		void updateFilling();
-		void updateErrorBars();
 		bool swapVisible(bool on);
 		void recalcShapeAndBoundingRect();
 		void drawSymbols(QPainter*);
@@ -63,6 +59,7 @@ class HistogramPrivate: public QGraphicsItem {
 		void drawFilling(QPainter*);
 		void draw(QPainter*);
 		void updatePixmap();
+		bool autoScaleX, autoScaleY;
 
 		virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget* widget = \
0);  
@@ -72,26 +69,6 @@ class HistogramPrivate: public QGraphicsItem {
 		QString xColumnPath;
 		QString yColumnPath;
 
-		//line
-		Histogram::LineType lineType;
-		bool lineSkipGaps;
-		int lineInterpolationPointsCount;
-		QPen linePen;
-		qreal lineOpacity;
-
-		//drop lines
-		Histogram::DropLineType dropLineType;
-		QPen dropLinePen;
-		qreal dropLineOpacity;
-
-		//symbols
-		Symbol::Style symbolsStyle;
-		QBrush symbolsBrush;
-		QPen symbolsPen;
-		qreal symbolsOpacity;
-		qreal symbolsRotationAngle;
-		qreal symbolsSize;
-
 		//values
 		Histogram::ValuesType valuesType;
 		const AbstractColumn* valuesColumn;
@@ -116,29 +93,7 @@ class HistogramPrivate: public QGraphicsItem {
 		QString fillingFileName;
 		qreal fillingOpacity;
 
-		//error bars
-		Histogram::ErrorType xErrorType;
-		const AbstractColumn* xErrorPlusColumn;
-		QString xErrorPlusColumnPath;
-		const AbstractColumn* xErrorMinusColumn;
-		QString xErrorMinusColumnPath;
-
-		Histogram::ErrorType yErrorType;
-		const AbstractColumn* yErrorPlusColumn;
-		QString yErrorPlusColumnPath;
-		const AbstractColumn* yErrorMinusColumn;
-		QString yErrorMinusColumnPath;
-
-		Histogram::ErrorBarsType errorBarsType;
-		double errorBarsCapSize;
-		QPen errorBarsPen;
-		qreal errorBarsOpacity;
-
-		QPainterPath linePath;
-		QPainterPath dropLinePath;
 		QPainterPath valuesPath;
-		QPainterPath errorBarsPath;
-		QPainterPath symbolsPath;
 		QRectF boundingRectangle;
 		QPainterPath curveShape;
 		QList<QLineF> lines;
@@ -150,8 +105,17 @@ class HistogramPrivate: public QGraphicsItem {
 											       //false otherwise (don't connect because of a gap (NAN) \
in-between)  QList<QString> valuesStrings;
 		QList<QPolygonF> fillPolygons;
-
+		
+		//cached values of minimum and maximum for all visible curves
+		bool curvesXMinMaxIsDirty, curvesYMinMaxIsDirty;
+		double curvesXMin, curvesXMax, curvesYMin, curvesYMax;
+		
+		float xMin, xMax, yMin, yMax;
+		float xMinPrev, xMaxPrev, yMinPrev, yMaxPrev;
+		bool autoScaleHistogramX, autoScaleHistogramY;
+		
 		Histogram* const q;
+		
 
 	private:
         void contextMenuEvent(QGraphicsSceneContextMenuEvent*);
diff --git a/src/kdefrontend/dockwidgets/HistogramDock.cpp \
b/src/kdefrontend/dockwidgets/HistogramDock.cpp index 933105d..e331644 100644
--- a/src/kdefrontend/dockwidgets/HistogramDock.cpp
+++ b/src/kdefrontend/dockwidgets/HistogramDock.cpp
@@ -76,21 +76,6 @@ HistogramDock::HistogramDock(QWidget *parent): QWidget(parent),
 
 	ui.kleFillingFileName->setCompletionObject(m_completion);
 
-	//Tab "Error bars"
-	gridLayout = qobject_cast<QGridLayout*>(ui.tabErrorBars->layout());
-
-	cbXErrorPlusColumn = new TreeViewComboBox(ui.tabErrorBars);
-	gridLayout->addWidget(cbXErrorPlusColumn, 2, 2, 1, 1);
-
-	cbXErrorMinusColumn = new TreeViewComboBox(ui.tabErrorBars);
-	gridLayout->addWidget(cbXErrorMinusColumn, 3, 2, 1, 1);
-
-	cbYErrorPlusColumn = new TreeViewComboBox(ui.tabErrorBars);
-	gridLayout->addWidget(cbYErrorPlusColumn, 7, 2, 1, 1);
-
-	cbYErrorMinusColumn = new TreeViewComboBox(ui.tabErrorBars);
-	gridLayout->addWidget(cbYErrorMinusColumn, 8, 2, 1, 1);
-
 	//adjust layouts in the tabs
 	for (int i=0; i<ui.tabWidget->count(); ++i){
 	  QGridLayout* layout = \
dynamic_cast<QGridLayout*>(ui.tabWidget->widget(i)->layout()); @@ -102,36 +87,7 @@ \
HistogramDock::HistogramDock(QWidget *parent): QWidget(parent),  \
layout->setVerticalSpacing(2);  }
 
-	//Slots
-
-	//Lines
-	connect( ui.cbLineType, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(lineTypeChanged(int)) );
-	connect( ui.sbLineInterpolationPointsCount, SIGNAL(valueChanged(int)), this, \
                SLOT(lineInterpolationPointsCountChanged(int)) );
-	connect( ui.chkLineSkipGaps, SIGNAL(clicked(bool)), this, \
                SLOT(lineSkipGapsChanged(bool)) );
-	connect( ui.cbLineStyle, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(lineStyleChanged(int)) );
-	connect( ui.kcbLineColor, SIGNAL(changed(QColor)), this, \
                SLOT(lineColorChanged(QColor)) );
-	connect( ui.sbLineWidth, SIGNAL(valueChanged(double)), this, \
                SLOT(lineWidthChanged(double)) );
-	connect( ui.sbLineOpacity, SIGNAL(valueChanged(int)), this, \
                SLOT(lineOpacityChanged(int)) );
-
-	connect( ui.cbDropLineType, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(dropLineTypeChanged(int)) );
-	connect( ui.cbDropLineStyle, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(dropLineStyleChanged(int)) );
-	connect( ui.kcbDropLineColor, SIGNAL(changed(QColor)), this, \
                SLOT(dropLineColorChanged(QColor)) );
-	connect( ui.sbDropLineWidth, SIGNAL(valueChanged(double)), this, \
                SLOT(dropLineWidthChanged(double)) );
-	connect( ui.sbDropLineOpacity, SIGNAL(valueChanged(int)), this, \
                SLOT(dropLineOpacityChanged(int)) );
-
-	//Symbol
-	connect( ui.cbSymbolStyle, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(symbolsStyleChanged(int)) );
-	connect( ui.sbSymbolSize, SIGNAL(valueChanged(double)), this, \
                SLOT(symbolsSizeChanged(double)) );
-	connect( ui.sbSymbolRotation, SIGNAL(valueChanged(int)), this, \
                SLOT(symbolsRotationChanged(int)) );
-	connect( ui.sbSymbolOpacity, SIGNAL(valueChanged(int)), this, \
                SLOT(symbolsOpacityChanged(int)) );
-
-	connect( ui.cbSymbolFillingStyle, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(symbolsFillingStyleChanged(int)) );
-	connect( ui.kcbSymbolFillingColor, SIGNAL(changed(QColor)), this, \
                SLOT(symbolsFillingColorChanged(QColor)) );
-
-	connect( ui.cbSymbolBorderStyle, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(symbolsBorderStyleChanged(int)) );
-	connect( ui.kcbSymbolBorderColor, SIGNAL(changed(QColor)), this, \
                SLOT(symbolsBorderColorChanged(QColor)) );
-	connect( ui.sbSymbolBorderWidth, SIGNAL(valueChanged(double)), this, \
                SLOT(symbolsBorderWidthChanged(double)) );
-
+	//Slots	
 	//Values
 	connect( ui.cbValuesType, SIGNAL(currentIndexChanged(int)), this, \
SLOT(valuesTypeChanged(int)) );  connect( cbValuesColumn, \
SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
SLOT(valuesColumnChanged(QModelIndex)) ); @@ -159,22 +115,9 @@ \
HistogramDock::HistogramDock(QWidget *parent): QWidget(parent),  connect( \
ui.kcbFillingSecondColor, SIGNAL(changed(QColor)), this, \
SLOT(fillingSecondColorChanged(QColor)) );  connect( ui.sbFillingOpacity, \
SIGNAL(valueChanged(int)), this, SLOT(fillingOpacityChanged(int)) );  
-	//Error bars
-	connect( ui.cbXErrorType, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(xErrorTypeChanged(int)) );
-	connect( cbXErrorPlusColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
                SLOT(xErrorPlusColumnChanged(QModelIndex)) );
-	connect( cbXErrorMinusColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
                SLOT(xErrorMinusColumnChanged(QModelIndex)) );
-	connect( ui.cbYErrorType, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(yErrorTypeChanged(int)) );
-	connect( cbYErrorPlusColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
                SLOT(yErrorPlusColumnChanged(QModelIndex)) );
-	connect( cbYErrorMinusColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
                SLOT(yErrorMinusColumnChanged(QModelIndex)) );
-	connect( ui.cbErrorBarsType, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(errorBarsTypeChanged(int)) );
-	connect( ui.sbErrorBarsCapSize, SIGNAL(valueChanged(double)), this, \
                SLOT(errorBarsCapSizeChanged(double)) );
-	connect( ui.cbErrorBarsStyle, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(errorBarsStyleChanged(int)) );
-	connect( ui.kcbErrorBarsColor, SIGNAL(changed(QColor)), this, \
                SLOT(errorBarsColorChanged(QColor)) );
-	connect( ui.sbErrorBarsWidth, SIGNAL(valueChanged(double)), this, \
                SLOT(errorBarsWidthChanged(double)) );
-	connect( ui.sbErrorBarsOpacity, SIGNAL(valueChanged(int)), this, \
                SLOT(errorBarsOpacityChanged(int)) );
-
+	
 	//template handler
-	TemplateHandler* templateHandler = new TemplateHandler(this, \
TemplateHandler::XYCurve); +	TemplateHandler* templateHandler = new \
TemplateHandler(this, TemplateHandler::Histogram);  \
ui.verticalLayout->addWidget(templateHandler);  templateHandler->show();
 	connect(templateHandler, SIGNAL(loadConfigRequested(KConfig&)), this, \
SLOT(loadConfigFromTemplate(KConfig&))); @@ -208,6 +151,14 @@ void \
HistogramDock::retranslateUi(){  
 	//TODO updatePenStyles, updateBrushStyles for all comboboxes
 }
+// "General"-tab
+void HistogramDock::nameChanged(){
+  if (m_initializing)
+	return;
+
+  m_curve->setName(uiGeneralTab.leName->text());
+}
+
 void HistogramDock::init(){
   	dateStrings<<"yyyy-MM-dd";
 	dateStrings<<"yyyy/MM/dd";
@@ -229,174 +180,6 @@ void HistogramDock::init(){
 	timeStrings<<"mm:ss.zzz";
 	timeStrings<<"hhmmss";
 
-	m_initializing = true;
-
-	//Line
-	ui.cbLineType->addItem(i18n("none"));
-	ui.cbLineType->addItem(i18n("line"));
-	ui.cbLineType->addItem(i18n("horiz. start"));
-	ui.cbLineType->addItem(i18n("vert. start"));
-	ui.cbLineType->addItem(i18n("horiz. midpoint"));
-	ui.cbLineType->addItem(i18n("vert. midpoint"));
-	ui.cbLineType->addItem(i18n("2-segments"));
-	ui.cbLineType->addItem(i18n("3-segments"));
-	ui.cbLineType->addItem(i18n("cubic spline (natural)"));
-	ui.cbLineType->addItem(i18n("cubic spline (periodic)"));
-	ui.cbLineType->addItem(i18n("Akima-spline (natural)"));
-	ui.cbLineType->addItem(i18n("Akima-spline (periodic)"));
-
-	QPainter pa;
-	//TODO size of the icon depending on the actuall height of the combobox?
-	int iconSize = 20;
-	QPixmap pm(iconSize, iconSize);
-	ui.cbLineType->setIconSize(QSize(iconSize, iconSize));
-
-	QPen pen(Qt::SolidPattern, 0);
- 	pa.setPen( pen );
-
-	//no line
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.end();
-	ui.cbLineType->setItemIcon(0, pm);
-
-	//line
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.drawLine(3,3,17,17);
-	pa.end();
-	ui.cbLineType->setItemIcon(1, pm);
-
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.drawLine(3,3,17,3);
-	pa.drawLine(17,3,17,17);
-	pa.end();
-	ui.cbLineType->setItemIcon(2, pm);
-
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.drawLine(3,3,3,17);
-	pa.drawLine(3,17,17,17);
-	pa.end();
-	ui.cbLineType->setItemIcon(3, pm);
-
-	//horizontal midpoint
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.drawLine(3,3,10,3);
-	pa.drawLine(10,3,10,17);
-	pa.drawLine(10,17,17,17);
-	pa.end();
-	ui.cbLineType->setItemIcon(4, pm);
-
-	//vertical midpoint
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.drawLine(3,3,3,10);
-	pa.drawLine(3,10,17,10);
-	pa.drawLine(17,10,17,17);
-	pa.end();
-	ui.cbLineType->setItemIcon(5, pm);
-
-	//2-segments
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 8,8,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.drawLine(3,3,10,10);
-	pa.end();
-	ui.cbLineType->setItemIcon(6, pm);
-
-	//3-segments
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 8,8,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.drawLine(3,3,17,17);
-	pa.end();
-	ui.cbLineType->setItemIcon(7, pm);
-
-	//natural spline
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawEllipse( 1,1,4,4);
-	pa.drawEllipse( 15,15,4,4);
-	pa.rotate(45);
-  	pa.drawArc(2*sqrt(2),-4,17*sqrt(2),20,30*16,120*16);
-
-	pa.end();
-	ui.cbLineType->setItemIcon(8, pm);
-	ui.cbLineType->setItemIcon(9, pm);
-	ui.cbLineType->setItemIcon(10, pm);
-	ui.cbLineType->setItemIcon(11, pm);
-
-	GuiTools::updatePenStyles(ui.cbLineStyle, Qt::black);
-
-	//Drop lines
-	ui.cbDropLineType->addItem(i18n("no drop lines"));
-	ui.cbDropLineType->addItem(i18n("drop lines, X"));
-	ui.cbDropLineType->addItem(i18n("drop lines, Y"));
-	ui.cbDropLineType->addItem(i18n("drop lines, XY"));
-	ui.cbDropLineType->addItem(i18n("drop lines, X, zero baseline"));
-	ui.cbDropLineType->addItem(i18n("drop lines, X, min baseline"));
-	ui.cbDropLineType->addItem(i18n("drop lines, X, max baseline"));
-	GuiTools::updatePenStyles(ui.cbDropLineStyle, Qt::black);
-
-	//Symbols
-	GuiTools::updatePenStyles(ui.cbSymbolBorderStyle, Qt::black);
-
-	ui.cbSymbolStyle->setIconSize(QSize(iconSize, iconSize));
-	QTransform trafo;
-	trafo.scale(15, 15);
-
-	ui.cbSymbolStyle->addItem(i18n("none"));
-	for (int i=1; i<19; ++i) {
-		Symbol::Style style = (Symbol::Style)i;
-		pm.fill(Qt::transparent);
-		pa.begin(&pm);
-		pa.setRenderHint(QPainter::Antialiasing);
-		pa.translate(iconSize/2,iconSize/2);
-		pa.drawPath(trafo.map(Symbol::pathFromStyle(style)));
-		pa.end();
-        ui.cbSymbolStyle->addItem(QIcon(pm), Symbol::nameFromStyle(style));
-	}
-
- 	GuiTools::updateBrushStyles(ui.cbSymbolFillingStyle, Qt::black);
-	m_initializing = false;
-
 	//Values
 	ui.cbValuesType->addItem(i18n("no values"));
 	ui.cbValuesType->addItem("x");
@@ -441,44 +224,11 @@ void HistogramDock::init(){
 	ui.cbFillingImageStyle->addItem(i18n("center tiled"));
 	GuiTools::updateBrushStyles(ui.cbFillingBrushStyle, Qt::SolidPattern);
 
-	//Error-bars
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.drawLine(3,10,17,10);//vert. line
-	pa.drawLine(10,3,10,17);//hor. line
-	pa.end();
-	ui.cbErrorBarsType->addItem(i18n("bars"));
-	ui.cbErrorBarsType->setItemIcon(0, pm);
-
-	pm.fill(Qt::transparent);
-	pa.begin( &pm );
-	pa.setRenderHint(QPainter::Antialiasing);
-	pa.setBrush(Qt::SolidPattern);
-	pa.drawLine(3,10,17,10); //vert. line
-	pa.drawLine(10,3,10,17); //hor. line
-	pa.drawLine(7,3,13,3); //upper cap
-	pa.drawLine(7,17,13,17); //bottom cap
-	pa.drawLine(3,7,3,13); //left cap
-	pa.drawLine(17,7,17,13); //right cap
-	pa.end();
-	ui.cbErrorBarsType->addItem(i18n("bars with ends"));
-	ui.cbErrorBarsType->setItemIcon(1, pm);
-
-	ui.cbXErrorType->addItem(i18n("no"));
-	ui.cbXErrorType->addItem(i18n("symmetric"));
-	ui.cbXErrorType->addItem(i18n("asymmetric"));
-
-	ui.cbYErrorType->addItem(i18n("no"));
-	ui.cbYErrorType->addItem(i18n("symmetric"));
-	ui.cbYErrorType->addItem(i18n("asymmetric"));
-
-	GuiTools::updatePenStyles(ui.cbErrorBarsStyle, Qt::black);
 }
 void HistogramDock::setModel() {
 	QList<const char*>  list;
 	list<<"Folder"<<"Workbook"<<"Datapicker"<<"DatapickerCurve"<<"Spreadsheet"
-		<<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"
+		<<"FileDataSource"<<"Column"<<"Worksheet"<<"CartesianPlot"<< "Histogram"
 		<<"XYInterpolationCurve"<<"XYFitCurve"<<"XYFourierFilterCurve";
 
 	if (cbXColumn) {
@@ -486,10 +236,6 @@ void HistogramDock::setModel() {
 		cbYColumn->setTopLevelClasses(list);
 	}
 	cbValuesColumn->setTopLevelClasses(list);
-	cbXErrorMinusColumn->setTopLevelClasses(list);
-	cbXErrorPlusColumn->setTopLevelClasses(list);
-	cbYErrorMinusColumn->setTopLevelClasses(list);
-	cbYErrorPlusColumn->setTopLevelClasses(list);
 
  	list.clear();
 	list<<"Column";
@@ -499,20 +245,11 @@ void HistogramDock::setModel() {
 		cbYColumn->setSelectableClasses(list);
 	}
 	cbValuesColumn->setSelectableClasses(list);
-	cbXErrorMinusColumn->setSelectableClasses(list);
-	cbXErrorPlusColumn->setSelectableClasses(list);
-	cbYErrorMinusColumn->setSelectableClasses(list);
-	cbYErrorPlusColumn->setSelectableClasses(list);
-
 	if (cbXColumn) {
 		cbXColumn->setModel(m_aspectTreeModel);
 		cbYColumn->setModel(m_aspectTreeModel);
 	}
 	cbValuesColumn->setModel(m_aspectTreeModel);
-	cbXErrorMinusColumn->setModel(m_aspectTreeModel);
-	cbXErrorPlusColumn->setModel(m_aspectTreeModel);
-	cbYErrorMinusColumn->setModel(m_aspectTreeModel);
-	cbYErrorPlusColumn->setModel(m_aspectTreeModel);
 }
 void HistogramDock::setCurves(QList<Histogram*> list){
 	m_initializing=true;
@@ -569,6 +306,7 @@ void HistogramDock::initGeneralTab(){
 
 	//Slots
 	connect(m_curve, SIGNAL(aspectDescriptionChanged(const AbstractAspect*)),this, \
SLOT(curveDescriptionChanged(const AbstractAspect*))); +	
 	connect(m_curve, SIGNAL(xColumnChanged(const AbstractColumn*)), this, \
SLOT(curveXColumnChanged(const AbstractColumn*)));  connect(m_curve, \
SIGNAL(yColumnChanged(const AbstractColumn*)), this, SLOT(curveYColumnChanged(const \
AbstractColumn*)));  connect(m_curve, SIGNAL(visibilityChanged(bool)), this, \
SLOT(curveVisibilityChanged(bool))); @@ -579,20 +317,111 @@ void \
HistogramDock::initGeneralTab(){  
 }
 
+//Values-Tab
+void HistogramDock::curveValuesTypeChanged(Histogram::ValuesType type) {
+	m_initializing = true;
+  	ui.cbValuesType->setCurrentIndex((int) type);
+	m_initializing = false;
+}
+void HistogramDock::curveValuesColumnChanged(const AbstractColumn* column) {
+	m_initializing = true;
+	this->setModelIndexFromColumn(cbValuesColumn, column);
+	m_initializing = false;
+}
+void HistogramDock::curveValuesPositionChanged(Histogram::ValuesPosition position) {
+	m_initializing = true;
+  	ui.cbValuesPosition->setCurrentIndex((int) position);
+	m_initializing = false;
+}
+void HistogramDock::curveValuesDistanceChanged(qreal distance) {
+	m_initializing = true;
+  	ui.sbValuesDistance->setValue( Worksheet::convertFromSceneUnits(distance, \
Worksheet::Point) ); +	m_initializing = false;
+}
+void HistogramDock::curveValuesRotationAngleChanged(qreal angle) {
+	m_initializing = true;
+	ui.sbValuesRotation->setValue(angle);
+	m_initializing = false;
+}
+void HistogramDock::curveValuesOpacityChanged(qreal opacity) {
+	m_initializing = true;
+	ui.sbValuesOpacity->setValue( round(opacity*100.0) );
+	m_initializing = false;
+}
+void HistogramDock::curveValuesPrefixChanged(QString prefix) {
+	m_initializing = true;
+  	ui.leValuesPrefix->setText(prefix);
+	m_initializing = false;
+}
+void HistogramDock::curveValuesSuffixChanged(QString suffix) {
+	m_initializing = true;
+  	ui.leValuesSuffix->setText(suffix);
+	m_initializing = false;
+}
+void HistogramDock::curveValuesFontChanged(QFont font) {
+	m_initializing = true;
+	font.setPointSizeF( round(Worksheet::convertFromSceneUnits(font.pixelSize(), \
Worksheet::Point)) ); +  	ui.kfrValuesFont->setFont(font);
+	m_initializing = false;
+}
+void HistogramDock::curveValuesColorChanged(QColor color) {
+	m_initializing = true;
+  	ui.kcbValuesColor->setColor(color);
+	m_initializing = false;
+}
+
+//Filling
+void HistogramDock::curveFillingPositionChanged(Histogram::FillingPosition position) \
{ +	m_initializing = true;
+	ui.cbFillingPosition->setCurrentIndex((int)position);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingTypeChanged(PlotArea::BackgroundType type){
+	m_initializing = true;
+	ui.cbFillingType->setCurrentIndex(type);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingColorStyleChanged(PlotArea::BackgroundColorStyle \
style){ +	m_initializing = true;
+	ui.cbFillingColorStyle->setCurrentIndex(style);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingImageStyleChanged(PlotArea::BackgroundImageStyle \
style){ +	m_initializing = true;
+	ui.cbFillingImageStyle->setCurrentIndex(style);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingBrushStyleChanged(Qt::BrushStyle style){
+	m_initializing = true;
+	ui.cbFillingBrushStyle->setCurrentIndex(style);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingFirstColorChanged(QColor& color){
+	m_initializing = true;
+	ui.kcbFillingFirstColor->setColor(color);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingSecondColorChanged(QColor& color){
+	m_initializing = true;
+	ui.kcbFillingSecondColor->setColor(color);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingFileNameChanged(QString& filename){
+	m_initializing = true;
+	ui.kleFillingFileName->setText(filename);
+	m_initializing = false;
+}
+void HistogramDock::curveFillingOpacityChanged(float opacity){
+	m_initializing = true;
+	ui.sbFillingOpacity->setValue( round(opacity*100.0) );
+	m_initializing = false;
+}
 void HistogramDock::initTabs() {
 	//if there are more then one curve in the list, disable the tab "general"
 	if (m_curvesList.size()==1){
 		/*this->setModelIndexFromColumn(cbValuesColumn, m_curve->valuesColumn());
-		this->setModelIndexFromColumn(cbXErrorPlusColumn, m_curve->xErrorPlusColumn());
-		this->setModelIndexFromColumn(cbXErrorMinusColumn, m_curve->xErrorMinusColumn());
-		this->setModelIndexFromColumn(cbYErrorPlusColumn, m_curve->yErrorPlusColumn());
-		this->setModelIndexFromColumn(cbYErrorMinusColumn, m_curve->yErrorMinusColumn());
 	*/}else {
 		cbValuesColumn->setCurrentModelIndex(QModelIndex());
-		cbXErrorPlusColumn->setCurrentModelIndex(QModelIndex());
-		cbXErrorMinusColumn->setCurrentModelIndex(QModelIndex());
-		cbYErrorPlusColumn->setCurrentModelIndex(QModelIndex());
-		cbYErrorMinusColumn->setCurrentModelIndex(QModelIndex());
 	}
 
 	//show the properties of the first curve
@@ -600,25 +429,6 @@ void HistogramDock::initTabs() {
 	loadConfig(config);
 
 	//Slots
-
-	//Line-Tab
-	connect(m_curve, SIGNAL(lineTypeChanged(Histogram::LineType)), this, \
                SLOT(curveLineTypeChanged(Histogram::LineType)));
-	connect(m_curve, SIGNAL(lineSkipGapsChanged(bool)), this, \
                SLOT(curveLineSkipGapsChanged(bool)));
-	connect(m_curve, SIGNAL(lineInterpolationPointsCountChanged(int)), this, \
                SLOT(curveLineInterpolationPointsCountChanged(int)));
-	connect(m_curve, SIGNAL(linePenChanged(QPen)), this, \
                SLOT(curveLinePenChanged(QPen)));
-	connect(m_curve, SIGNAL(lineOpacityChanged(qreal)), this, \
                SLOT(curveLineOpacityChanged(qreal)));
-	connect(m_curve, SIGNAL(dropLineTypeChanged(Histogram::DropLineType)), this, \
                SLOT(curveDropLineTypeChanged(Histogram::DropLineType)));
-	connect(m_curve, SIGNAL(dropLinePenChanged(QPen)), this, \
                SLOT(curveDropLinePenChanged(QPen)));
-	connect(m_curve, SIGNAL(dropLineOpacityChanged(qreal)), this, \
                SLOT(curveDropLineOpacityChanged(qreal)));
-
-	//Symbol-Tab
-	connect(m_curve, SIGNAL(symbolsStyleChanged(Symbol::Style)), this, \
                SLOT(curveSymbolsStyleChanged(Symbol::Style)));
-	connect(m_curve, SIGNAL(symbolsSizeChanged(qreal)), this, \
                SLOT(curveSymbolsSizeChanged(qreal)));
-	connect(m_curve, SIGNAL(symbolsRotationAngleChanged(qreal)), this, \
                SLOT(curveSymbolsRotationAngleChanged(qreal)));
-	connect(m_curve, SIGNAL(symbolsOpacityChanged(qreal)), this, \
                SLOT(curveSymbolsOpacityChanged(qreal)));
-	connect(m_curve, SIGNAL(symbolsBrushChanged(QBrush)), this, \
                SLOT(curveSymbolsBrushChanged(QBrush)));
-	connect(m_curve, SIGNAL(symbolsPenChanged(QPen)), this, \
                SLOT(curveSymbolsPenChanged(QPen)));
-
 	//Values-Tab
 	connect(m_curve, SIGNAL(valuesTypeChanged(Histogram::ValuesType)), this, \
SLOT(curveValuesTypeChanged(Histogram::ValuesType)));  connect(m_curve, \
SIGNAL(valuesColumnChanged(const AbstractColumn*)), this, \
SLOT(curveValuesColumnChanged(const AbstractColumn*))); @@ -641,20 +451,195 @@ void \
HistogramDock::initTabs() {  connect( m_curve, \
SIGNAL(fillingSecondColorChanged(QColor&)), this, \
SLOT(curveFillingSecondColorChanged(QColor&)) );  connect( m_curve, \
SIGNAL(fillingFileNameChanged(QString&)), this, \
SLOT(curveFillingFileNameChanged(QString&)) );  connect( m_curve, \
SIGNAL(fillingOpacityChanged(float)), this, SLOT(curveFillingOpacityChanged(float)) \
); +}
 
-	//"Error bars"-Tab
-	connect(m_curve, SIGNAL(xErrorTypeChanged(Histogram::ErrorType)), this, \
                SLOT(curveXErrorTypeChanged(Histogram::ErrorType)));
-	connect(m_curve, SIGNAL(xErrorPlusColumnChanged(const AbstractColumn*)), this, \
                SLOT(curveXErrorPlusColumnChanged(const AbstractColumn*)));
-	connect(m_curve, SIGNAL(xErrorMinusColumnChanged(const AbstractColumn*)), this, \
                SLOT(curveXErrorMinusColumnChanged(const AbstractColumn*)));
-	connect(m_curve, SIGNAL(yErrorTypeChanged(Histogram::ErrorType)), this, \
                SLOT(curveYErrorTypeChanged(Histogram::ErrorType)));
-	connect(m_curve, SIGNAL(yErrorPlusColumnChanged(const AbstractColumn*)), this, \
                SLOT(curveYErrorPlusColumnChanged(const AbstractColumn*)));
-	connect(m_curve, SIGNAL(yErrorMinusColumnChanged(const AbstractColumn*)), this, \
                SLOT(curveYErrorMinusColumnChanged(const AbstractColumn*)));
-	connect(m_curve, SIGNAL(errorBarsCapSizeChanged(qreal)), this, \
                SLOT(curveErrorBarsCapSizeChanged(qreal)));
-	connect(m_curve, SIGNAL(errorBarsTypeChanged(Histogram::ErrorBarsType)), this, \
                SLOT(curveErrorBarsTypeChanged(Histogram::ErrorBarsType)));
-	connect(m_curve, SIGNAL(errorBarsPenChanged(QPen)), this, \
                SLOT(curveErrorBarsPenChanged(QPen)));
-	connect(m_curve, SIGNAL(errorBarsOpacityChanged(qreal)), this, \
SLOT(curveErrorBarsOpacityChanged(qreal))); +//Filling-tab
+void HistogramDock::fillingPositionChanged(int index){
+	Histogram::FillingPosition fillingPosition = Histogram::FillingPosition(index);
+
+	bool b = (fillingPosition != Histogram::NoFilling);
+	ui.cbFillingType->setEnabled(b);
+	ui.cbFillingColorStyle->setEnabled(b);
+	ui.cbFillingBrushStyle->setEnabled(b);
+	ui.cbFillingImageStyle->setEnabled(b);
+	ui.kcbFillingFirstColor->setEnabled(b);
+	ui.kcbFillingSecondColor->setEnabled(b);
+	ui.kleFillingFileName->setEnabled(b);
+	ui.bFillingOpen->setEnabled(b);
+	ui.sbFillingOpacity->setEnabled(b);
+
+	if (m_initializing)
+		return;
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingPosition(fillingPosition);
 }
 
+void HistogramDock::fillingTypeChanged(int index){
+	PlotArea::BackgroundType type = (PlotArea::BackgroundType)index;
+
+	if (type == PlotArea::Color){
+		ui.lFillingColorStyle->show();
+		ui.cbFillingColorStyle->show();
+		ui.lFillingImageStyle->hide();
+		ui.cbFillingImageStyle->hide();
+		ui.lFillingBrushStyle->hide();
+		ui.cbFillingBrushStyle->hide();
+
+		ui.lFillingFileName->hide();
+		ui.kleFillingFileName->hide();
+		ui.bFillingOpen->hide();
+
+		ui.lFillingFirstColor->show();
+		ui.kcbFillingFirstColor->show();
+
+		PlotArea::BackgroundColorStyle style =
+			(PlotArea::BackgroundColorStyle) ui.cbFillingColorStyle->currentIndex();
+		if (style == PlotArea::SingleColor){
+			ui.lFillingFirstColor->setText(i18n("Color"));
+			ui.lFillingSecondColor->hide();
+			ui.kcbFillingSecondColor->hide();
+		}else{
+			ui.lFillingFirstColor->setText(i18n("First Color"));
+			ui.lFillingSecondColor->show();
+			ui.kcbFillingSecondColor->show();
+		}
+	}else if(type == PlotArea::Image){
+		ui.lFillingColorStyle->hide();
+		ui.cbFillingColorStyle->hide();
+		ui.lFillingImageStyle->show();
+		ui.cbFillingImageStyle->show();
+		ui.lFillingBrushStyle->hide();
+		ui.cbFillingBrushStyle->hide();
+		ui.lFillingFileName->show();
+		ui.kleFillingFileName->show();
+		ui.bFillingOpen->show();
+
+		ui.lFillingFirstColor->hide();
+		ui.kcbFillingFirstColor->hide();
+		ui.lFillingSecondColor->hide();
+		ui.kcbFillingSecondColor->hide();
+	}else if(type == PlotArea::Pattern) {
+		ui.lFillingFirstColor->setText(i18n("Color"));
+		ui.lFillingColorStyle->hide();
+		ui.cbFillingColorStyle->hide();
+		ui.lFillingImageStyle->hide();
+		ui.cbFillingImageStyle->hide();
+		ui.lFillingBrushStyle->show();
+		ui.cbFillingBrushStyle->show();
+		ui.lFillingFileName->hide();
+		ui.kleFillingFileName->hide();
+		ui.bFillingOpen->hide();
+
+		ui.lFillingFirstColor->show();
+		ui.kcbFillingFirstColor->show();
+		ui.lFillingSecondColor->hide();
+		ui.kcbFillingSecondColor->hide();
+	}
+
+	if (m_initializing)
+		return;
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingType(type);
+}
+
+void HistogramDock::fillingColorStyleChanged(int index){
+	PlotArea::BackgroundColorStyle style = (PlotArea::BackgroundColorStyle)index;
+
+	if (style == PlotArea::SingleColor){
+		ui.lFillingFirstColor->setText(i18n("Color"));
+		ui.lFillingSecondColor->hide();
+		ui.kcbFillingSecondColor->hide();
+	}else{
+		ui.lFillingFirstColor->setText(i18n("First Color"));
+		ui.lFillingSecondColor->show();
+		ui.kcbFillingSecondColor->show();
+		ui.lFillingBrushStyle->hide();
+		ui.cbFillingBrushStyle->hide();
+	}
+
+	if (m_initializing)
+		return;
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingColorStyle(style);
+}
+
+void HistogramDock::fillingImageStyleChanged(int index){
+	if (m_initializing)
+		return;
+
+	PlotArea::BackgroundImageStyle style = (PlotArea::BackgroundImageStyle)index;
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingImageStyle(style);
+}
+
+void HistogramDock::fillingBrushStyleChanged(int index){
+	if (m_initializing)
+		return;
+
+	Qt::BrushStyle style = (Qt::BrushStyle)index;
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingBrushStyle(style);
+}
+
+void HistogramDock::fillingFirstColorChanged(const QColor& c){
+	if (m_initializing)
+		return;
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingFirstColor(c);
+}
+
+void HistogramDock::fillingSecondColorChanged(const QColor& c){
+	if (m_initializing)
+		return;
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingSecondColor(c);
+}
+
+/*!
+	opens a file dialog and lets the user select the image file.
+*/
+void HistogramDock::selectFile() {
+	KConfigGroup conf(KSharedConfig::openConfig(), "HistogramDock");
+	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);
+	}
+
+    ui.kleFillingFileName->setText( path );
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingFileName(path);
+}
+
+void HistogramDock::fileNameChanged(){
+	if (m_initializing)
+		return;
+
+	QString fileName = ui.kleFillingFileName->text();
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingFileName(fileName);
+}
+
+void HistogramDock::fillingOpacityChanged(int value){
+	if (m_initializing)
+		return;
+
+	qreal opacity = (float)value/100.;
+	foreach(Histogram* curve, m_curvesList)
+		curve->setFillingOpacity(opacity);
+}
 void HistogramDock::loadConfig(KConfig& config) {
 	KConfigGroup group = config.group( "Histogram" );
 
@@ -663,35 +648,7 @@ void HistogramDock::loadConfig(KConfig& config) {
 	//It doesn't make sense to load/save them in the template.
 	//This data is read in HistogramDock::setCurves().
 
-  	//Line
-	ui.cbLineType->setCurrentIndex( group.readEntry("LineType", (int) \
                m_curve->lineType()) );
-	ui.chkLineSkipGaps->setChecked( group.readEntry("LineSkipGaps", \
                m_curve->lineSkipGaps()) );
-	ui.sbLineInterpolationPointsCount->setValue( \
group.readEntry("LineInterpolationPointsCount", \
                m_curve->lineInterpolationPointsCount()) );
-	ui.cbLineStyle->setCurrentIndex( group.readEntry("LineStyle", (int) \
                m_curve->linePen().style()) );
-	ui.kcbLineColor->setColor( group.readEntry("LineColor", m_curve->linePen().color()) \
                );
-	ui.sbLineWidth->setValue( \
Worksheet::convertFromSceneUnits(group.readEntry("LineWidth", \
                m_curve->linePen().widthF()), Worksheet::Point) );
-	ui.sbLineOpacity->setValue( round(group.readEntry("LineOpacity", \
                m_curve->lineOpacity())*100.0) );
-
-	//Drop lines
-	ui.cbDropLineType->setCurrentIndex( group.readEntry("DropLineType", (int) \
                m_curve->dropLineType()) );
-	ui.cbDropLineStyle->setCurrentIndex( group.readEntry("DropLineStyle", (int) \
                m_curve->dropLinePen().style()) );
-	ui.kcbDropLineColor->setColor( group.readEntry("DropLineColor", \
                m_curve->dropLinePen().color()) );
-	ui.sbDropLineWidth->setValue( \
Worksheet::convertFromSceneUnits(group.readEntry("DropLineWidth", \
                m_curve->dropLinePen().widthF()),Worksheet::Point) );
-	ui.sbDropLineOpacity->setValue( round(group.readEntry("DropLineOpacity", \
                m_curve->dropLineOpacity())*100.0) );
-
-	//Symbols
-	//TODO: character
-	ui.cbSymbolStyle->setCurrentIndex( group.readEntry("SymbolStyle", \
                (int)m_curve->symbolsStyle()) );
-  	ui.sbSymbolSize->setValue( \
Worksheet::convertFromSceneUnits(group.readEntry("SymbolSize", \
                m_curve->symbolsSize()), Worksheet::Point) );
-	ui.sbSymbolRotation->setValue( group.readEntry("SymbolRotation", \
                m_curve->symbolsRotationAngle()) );
-	ui.sbSymbolOpacity->setValue( round(group.readEntry("SymbolOpacity", \
                m_curve->symbolsOpacity())*100.0) );
-  	ui.cbSymbolFillingStyle->setCurrentIndex( group.readEntry("SymbolFillingStyle", \
                (int) m_curve->symbolsBrush().style()) );
-  	ui.kcbSymbolFillingColor->setColor(  group.readEntry("SymbolFillingColor", \
                m_curve->symbolsBrush().color()) );
-  	ui.cbSymbolBorderStyle->setCurrentIndex( group.readEntry("SymbolBorderStyle", \
                (int) m_curve->symbolsPen().style()) );
-  	ui.kcbSymbolBorderColor->setColor( group.readEntry("SymbolBorderColor", \
                m_curve->symbolsPen().color()) );
-  	ui.sbSymbolBorderWidth->setValue( \
Worksheet::convertFromSceneUnits(group.readEntry("SymbolBorderWidth",m_curve->symbolsPen().widthF()), \
                Worksheet::Point) );
-
-	//Values
+  	//Values
   	ui.cbValuesType->setCurrentIndex( group.readEntry("ValuesType", (int) \
m_curve->valuesType()) );  ui.cbValuesPosition->setCurrentIndex( \
group.readEntry("ValuesPosition", (int) m_curve->valuesPosition()) );  \
ui.sbValuesDistance->setValue( \
Worksheet::convertFromSceneUnits(group.readEntry("ValuesDistance", \
m_curve->valuesDistance()), Worksheet::Point) ); @@ -715,22 +672,7 @@ void \
HistogramDock::loadConfig(KConfig& config) {  ui.kcbFillingSecondColor->setColor( \
group.readEntry("FillingSecondColor", m_curve->fillingSecondColor()) );  \
ui.sbFillingOpacity->setValue( round(group.readEntry("FillingOpacity", \
m_curve->fillingOpacity())*100.0) );  
-	//Error bars
-	ui.cbXErrorType->setCurrentIndex( group.readEntry("XErrorType", (int) \
                m_curve->xErrorType()) );
-	ui.cbYErrorType->setCurrentIndex( group.readEntry("YErrorType", (int) \
                m_curve->yErrorType()) );
-	ui.cbErrorBarsType->setCurrentIndex( group.readEntry("ErrorBarsType", (int) \
                m_curve->errorBarsType()) );
-	ui.sbErrorBarsCapSize->setValue( \
Worksheet::convertFromSceneUnits(group.readEntry("ErrorBarsCapSize", \
                m_curve->errorBarsCapSize()), Worksheet::Point) );
-	ui.cbErrorBarsStyle->setCurrentIndex( group.readEntry("ErrorBarsStyle", (int) \
                m_curve->errorBarsPen().style()) );
-	ui.kcbErrorBarsColor->setColor( group.readEntry("ErrorBarsColor", \
                m_curve->errorBarsPen().color()) );
-	ui.sbErrorBarsWidth->setValue( \
Worksheet::convertFromSceneUnits(group.readEntry("ErrorBarsWidth", \
                m_curve->errorBarsPen().widthF()),Worksheet::Point) );
-	ui.sbErrorBarsOpacity->setValue( round(group.readEntry("ErrorBarsOpacity", \
                m_curve->errorBarsOpacity())*100.0) );
-
 	m_initializing=true;
-	GuiTools::updatePenStyles(ui.cbLineStyle, ui.kcbLineColor->color());
-	GuiTools::updatePenStyles(ui.cbDropLineStyle, ui.kcbDropLineColor->color());
-	GuiTools::updateBrushStyles(ui.cbSymbolFillingStyle, \
                ui.kcbSymbolFillingColor->color());
-	GuiTools::updatePenStyles(ui.cbSymbolBorderStyle, \
                ui.kcbSymbolBorderColor->color());
-	GuiTools::updatePenStyles(ui.cbErrorBarsStyle, ui.kcbErrorBarsColor->color());
 	m_initializing=false;
 }
 void HistogramDock::setupGeneral() {
@@ -753,6 +695,46 @@ void HistogramDock::setupGeneral() {
 	connect( uiGeneralTab.leName, SIGNAL(returnPressed()), this, SLOT(nameChanged()) );
 	connect( uiGeneralTab.leComment, SIGNAL(returnPressed()), this, \
SLOT(commentChanged()) );  connect( uiGeneralTab.chkVisible, SIGNAL(clicked(bool)), \
this, SLOT(visibilityChanged(bool)) ); +	qDebug() << "colo";
 	connect( cbXColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
SLOT(xColumnChanged(QModelIndex)) ); +	qDebug() << "colo1";
 	connect( cbYColumn, SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
SLOT(yColumnChanged(QModelIndex)) ); +
+}
+
+void HistogramDock::xColumnChanged(const QModelIndex& index) {
+	
+	qDebug() << "here";
+	if (m_initializing)
+		return;
+	
+	qDebug() << "here";
+
+	AbstractAspect* aspect = static_cast<AbstractAspect*>(index.internalPointer());
+	AbstractColumn* column = 0;
+	if (aspect) {
+		qDebug() << "here as[ect";
+		column = dynamic_cast<AbstractColumn*>(aspect);
+		Q_ASSERT(column);
+	}
+
+	foreach(Histogram* curve, m_curvesList) {
+		qDebug() << "here as well";
+		curve->setXColumn(column);
+	}
 }
+
+void HistogramDock::yColumnChanged(const QModelIndex& index) {
+	if (m_initializing)
+		return;
+
+	AbstractAspect* aspect = static_cast<AbstractAspect*>(index.internalPointer());
+	AbstractColumn* column = 0;
+	if (aspect) {
+		column = dynamic_cast<AbstractColumn*>(aspect);
+		Q_ASSERT(column);
+	}
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setYColumn(column);
+}
\ No newline at end of file
diff --git a/src/kdefrontend/dockwidgets/HistogramDock.h \
b/src/kdefrontend/dockwidgets/HistogramDock.h index 90c55c8..48eb964 100644
--- a/src/kdefrontend/dockwidgets/HistogramDock.h
+++ b/src/kdefrontend/dockwidgets/HistogramDock.h
@@ -44,7 +44,7 @@ class Column;
 class KUrlCompletion;
 
 class HistogramDock : public QWidget {
-    //Q_OBJECT
+    Q_OBJECT
   
 public:
     explicit HistogramDock(QWidget*);
@@ -61,10 +61,6 @@ private:
 	TreeViewComboBox* cbXColumn;
 	TreeViewComboBox* cbYColumn;
 	TreeViewComboBox* cbValuesColumn;
-	TreeViewComboBox* cbXErrorPlusColumn;
-	TreeViewComboBox* cbXErrorMinusColumn;
-	TreeViewComboBox* cbYErrorPlusColumn;
-	TreeViewComboBox* cbYErrorMinusColumn;
 
 	virtual void initGeneralTab();
 	void updateValuesFormatWidgets(const AbstractColumn::ColumnMode);
@@ -90,40 +86,15 @@ private slots:
 
 	//SLOTs for changes triggered in HistogramDock
 	void nameChanged();
-	void commentChanged();
+	//void commentChanged();
 	void xColumnChanged(const QModelIndex&);
 	void yColumnChanged(const QModelIndex&);
-	void visibilityChanged(bool);
+//	void visibilityChanged(bool);
 	//Histogram-types
-	void histogramTypeChanged(int);
-	//Line-Tab
-	void lineTypeChanged(int);
-	void lineSkipGapsChanged(bool);
-	void lineInterpolationPointsCountChanged(int);
-  	void lineStyleChanged(int);
-	void lineColorChanged(const QColor&);
-	void lineWidthChanged(double);
-	void lineOpacityChanged(int);
-
-	void dropLineTypeChanged(int);
-  	void dropLineStyleChanged(int);
-	void dropLineColorChanged(const QColor&);
-	void dropLineWidthChanged(double);
-	void dropLineOpacityChanged(int);
-
-	//Symbol-tab
-  	void symbolsStyleChanged(int);
-	void symbolsSizeChanged(double);
-	void symbolsRotationChanged(int);
-	void symbolsOpacityChanged(int);
-	void symbolsFillingStyleChanged(int);
-	void symbolsFillingColorChanged(const QColor&);
-	void symbolsBorderStyleChanged(int);
-	void symbolsBorderColorChanged(const QColor&);
-	void symbolsBorderWidthChanged(double);
+	//void histogramTypeChanged(int);
 
 	//Values-Tab
-	void valuesTypeChanged(int);
+	/*void valuesTypeChanged(int);
 	void valuesColumnChanged(const QModelIndex&);
 	void valuesPositionChanged(int);
 	void valuesDistanceChanged(double);
@@ -132,7 +103,7 @@ private slots:
 	void valuesPrefixChanged();
 	void valuesSuffixChanged();
 	void valuesFontChanged(const QFont&);
-	void valuesColorChanged(const QColor&);
+	void valuesColorChanged(const QColor&);*/
 
 	//Filling-tab
 	void fillingPositionChanged(int);
@@ -146,44 +117,12 @@ private slots:
 	void fileNameChanged();
 	void fillingOpacityChanged(int);
 
-	//"Error bars"-Tab
-	void xErrorTypeChanged(int) const;
-	void yErrorTypeChanged(int) const;
-	void xErrorPlusColumnChanged(const QModelIndex&) const;
-	void xErrorMinusColumnChanged(const QModelIndex&) const;
-	void yErrorPlusColumnChanged(const QModelIndex&) const;
-	void yErrorMinusColumnChanged(const QModelIndex&) const;
-	void errorBarsTypeChanged(int) const;
-	void errorBarsCapSizeChanged(double) const;
-  	void errorBarsStyleChanged(int) const;
-	void errorBarsColorChanged(const QColor&);
-	void errorBarsWidthChanged(double) const;
-	void errorBarsOpacityChanged(int) const;
-
 	//SLOTs for changes triggered in Histogram
 	//General-Tab
-	void curveDescriptionChanged(const AbstractAspect*);
+	/*void curveDescriptionChanged(const AbstractAspect*);
 	void curveXColumnChanged(const AbstractColumn*);
 	void curveYColumnChanged(const AbstractColumn*);
-	void curveVisibilityChanged(bool);
-
-	//Line-Tab
-	void curveLineTypeChanged(Histogram::LineType);
-	void curveLineSkipGapsChanged(bool);
-	void curveLineInterpolationPointsCountChanged(int);
-	void curveLinePenChanged(const QPen&);
-	void curveLineOpacityChanged(qreal);
-	void curveDropLineTypeChanged(Histogram::DropLineType);
-	void curveDropLinePenChanged(const QPen&);
-	void curveDropLineOpacityChanged(qreal);
-
-	//Symbol-Tab
-	void curveSymbolsStyleChanged(Symbol::Style);
-	void curveSymbolsSizeChanged(qreal);
-	void curveSymbolsRotationAngleChanged(qreal);
-	void curveSymbolsOpacityChanged(qreal);
-	void curveSymbolsBrushChanged(QBrush);
-	void curveSymbolsPenChanged(const QPen&);
+	void curveVisibilityChanged(bool);*/
 
 	//Values-Tab
 	void curveValuesTypeChanged(Histogram::ValuesType);
@@ -208,21 +147,10 @@ private slots:
 	void curveFillingFileNameChanged(QString&);
 	void curveFillingOpacityChanged(float);
 
-	//"Error bars"-Tab
-	void curveXErrorTypeChanged(Histogram::ErrorType);
-	void curveXErrorPlusColumnChanged(const AbstractColumn*);
-	void curveXErrorMinusColumnChanged(const AbstractColumn*);
-	void curveYErrorTypeChanged(Histogram::ErrorType);
-	void curveYErrorPlusColumnChanged(const AbstractColumn*);
-	void curveYErrorMinusColumnChanged(const AbstractColumn*);
-	void curveErrorBarsCapSizeChanged(qreal);
-	void curveErrorBarsTypeChanged(Histogram::ErrorBarsType);
-	void curveErrorBarsPenChanged(QPen);
-	void curveErrorBarsOpacityChanged(qreal);
 
 	//load and save
-	void loadConfigFromTemplate(KConfig&);
-	void saveConfigAsTemplate(KConfig&);
+//	void loadConfigFromTemplate(KConfig&);
+//	void saveConfigAsTemplate(KConfig&);
 
 signals:
 	void info(const QString&);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic