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

List:       kde-commits
Subject:    [labplot/histogram_chart] src: Functioning Ordinary histogram
From:       Anu Mittal <anu22mittal () gmail ! com>
Date:       2016-07-31 16:32:33
Message-ID: E1bTtfF-00021J-1H () code ! kde ! org
[Download RAW message or body]

Git commit 051d507ad5544039a3cd0dc7caadf8870c0dca76 by Anu Mittal.
Committed on 31/07/2016 at 16:32.
Pushed by anumittal into branch 'histogram_chart'.

Functioning Ordinary histogram

M  +49   -11   src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
M  +147  -117  src/backend/worksheet/plots/cartesian/Histogram.cpp
M  +4    -2    src/backend/worksheet/plots/cartesian/Histogram.h
M  +5    -0    src/backend/worksheet/plots/cartesian/HistogramPrivate.h
M  +16   -1    src/kdefrontend/dockwidgets/HistogramDock.cpp
M  +3    -1    src/kdefrontend/dockwidgets/HistogramDock.h

http://commits.kde.org/labplot/051d507ad5544039a3cd0dc7caadf8870c0dca76

diff --git a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp \
b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp index f336166..59462f9 \
                100644
--- a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
+++ b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
@@ -830,12 +830,10 @@ void CartesianPlot::HistogramdataChanged(){
 	Q_ASSERT(curve);
 	d->curvesXMinMaxIsDirty = true;
 	d->curvesYMinMaxIsDirty = true;
-	if (d->autoScaleX && d->autoScaleY)
+	if (d->autoScaleX)
 		this->scaleAuto();
 	else if (d->autoScaleX)
 		this->scaleAutoX();
-	else if (d->autoScaleY)
-		this->scaleAutoY();
 	else
 		curve->retransform();
 }
@@ -865,9 +863,10 @@ void CartesianPlot::xHistogramDataChanged(){
 	Histogram* curve = dynamic_cast<Histogram*>(QObject::sender());
 	Q_ASSERT(curve);
 	d->curvesXMinMaxIsDirty = true;
-	if (d->autoScaleX)
+	if (d->autoScaleX) {
 		this->scaleAutoX();
-	else
+		this->scaleAutoY();
+	} else
 		curve->retransform();
 }
 /*!
@@ -946,7 +945,6 @@ void CartesianPlot::setMouseMode(const MouseMode mouseMode) {
 
 void CartesianPlot::scaleAutoX(){
 	Q_D(CartesianPlot);
-
 	//loop over all xy-curves and determine the maximum x-value
 	if (d->curvesXMinMaxIsDirty) {
 		d->curvesXMin = INFINITY;
@@ -957,7 +955,6 @@ void CartesianPlot::scaleAutoX(){
 				continue;
 			if (!curve->xColumn())
 				continue;
-
 			if (curve->xColumn()->minimum() != INFINITY){
 				if (curve->xColumn()->minimum() < d->curvesXMin)
 					d->curvesXMin = curve->xColumn()->minimum();
@@ -974,17 +971,17 @@ void CartesianPlot::scaleAutoX(){
 				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();
 			}
 		}
+		//qDebug() << "autoscalx Max Y, X: " << d->curvesYMax << d->curvesXMax;
+		//qDebug() << "autoscalex Min Y, X: " << d->curvesYMin << d->curvesXMin;
 		d->curvesXMinMaxIsDirty = false;
 	}
 
@@ -1020,6 +1017,18 @@ void CartesianPlot::scaleAutoX(){
 
 void CartesianPlot::scaleAutoY(){
 	Q_D(CartesianPlot);
+	
+	QList<const Histogram*> childrenHistogram = this->children<const Histogram>();
+	foreach(const Histogram* curve, childrenHistogram) {
+		if (!curve->isVisible())
+			continue;
+			
+		d->curvesYMin = 0.0;
+		if (curve->getYMaximum() != -INFINITY) {
+			if ( curve->getYMaximum() > d->curvesYMax)
+				d->curvesYMax = curve->getYMaximum(); 
+		}
+	}
 
 	//loop over all xy-curves and determine the maximum y-value
 	if (d->curvesYMinMaxIsDirty) {
@@ -1042,6 +1051,8 @@ void CartesianPlot::scaleAutoY(){
 					d->curvesYMax = curve->yColumn()->maximum();
 			}
 		}
+		//qDebug() << "autoscaley Max Y, X: " << d->curvesYMax << d->curvesXMax;
+		//qDebug() << "autoscaley Min Y, X: " << d->curvesYMin << d->curvesXMin;
 		d->curvesYMinMaxIsDirty = false;
 	}
 
@@ -1079,6 +1090,7 @@ void CartesianPlot::scaleAuto(){
 
 	//loop over all xy-curves and determine the maximum x-value
 	QList<const XYCurve*> children = this->children<const XYCurve>();
+	QList<const Histogram*> childrenHistogram = this->children<const Histogram>();
 	if (d->curvesXMinMaxIsDirty) {
 		d->curvesXMin = INFINITY;
 		d->curvesXMax = -INFINITY;
@@ -1087,7 +1099,6 @@ void CartesianPlot::scaleAuto(){
 				continue;
 			if (!curve->xColumn())
 				continue;
-
 			if (curve->xColumn()->minimum() != INFINITY){
 				if (curve->xColumn()->minimum() < d->curvesXMin)
 					d->curvesXMin = curve->xColumn()->minimum();
@@ -1097,9 +1108,26 @@ void CartesianPlot::scaleAuto(){
 				if (curve->xColumn()->maximum() > d->curvesXMax)
 					d->curvesXMax = curve->xColumn()->maximum();
 			}
+		}
+		foreach(const Histogram* curve, childrenHistogram) {
+			if (!curve->isVisible())
+				continue;
+			if (!curve->xColumn())
+				continue;
+
+			if (curve->xColumn()->minimum() != INFINITY){
+				if (curve->xColumn()->minimum() < d->curvesXMin)
+					d->curvesXMin = curve->xColumn()->minimum();
+			}
 
-			d->curvesXMinMaxIsDirty = false;
+			if (curve->xColumn()->maximum() != -INFINITY){
+				if (curve->xColumn()->maximum() > d->curvesXMax)
+					d->curvesXMax = curve->xColumn()->maximum();
+			}
 		}
+		qDebug() << "Max Y, X: " << d->curvesYMax << d->curvesXMax;
+		qDebug() << "Min Y, X: " << d->curvesYMin << d->curvesXMin;
+		d->curvesXMinMaxIsDirty = false;
 	}
 
 	if (d->curvesYMinMaxIsDirty) {
@@ -1121,6 +1149,16 @@ void CartesianPlot::scaleAuto(){
 					d->curvesYMax = curve->yColumn()->maximum();
 			}
 		}
+		foreach(const Histogram* curve, childrenHistogram) {
+			if (!curve->isVisible())
+				continue;
+			
+			d->curvesYMin = 0.0;
+			if (curve->getYMaximum() != -INFINITY){
+				if ( curve->getYMaximum() > d->curvesYMax)
+					d->curvesYMax = curve->getYMaximum();
+			}
+		}
 	}
 
 	bool updateX = false;
diff --git a/src/backend/worksheet/plots/cartesian/Histogram.cpp \
b/src/backend/worksheet/plots/cartesian/Histogram.cpp index 35a975b..69e8d21 100644
--- a/src/backend/worksheet/plots/cartesian/Histogram.cpp
+++ b/src/backend/worksheet/plots/cartesian/Histogram.cpp
@@ -89,6 +89,14 @@ void Histogram::init(){
 
 	d->xColumn = NULL;
 
+	d->histogramType = (Histogram::TypeHistogram) group.readEntry("histogramType", \
(int)Histogram::Ordinary); +	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->valuesType = (Histogram::ValuesType) group.readEntry("ValuesType", \
(int)Histogram::NoValues);  d->valuesColumn = NULL;
 	d->valuesPosition = (Histogram::ValuesPosition) group.readEntry("ValuesPosition", \
(int)Histogram::ValuesAbove); @@ -155,6 +163,10 @@ void Histogram::setPrinting(bool \
on) {  d->m_printing = on;
 }
 
+void Histogram::setHistrogramType(Histogram::TypeHistogram histogramType) {
+	d_ptr->histogramType = histogramType;
+}
+
 //##############################################################################
 //##########################  getter methods  ##################################
 //##############################################################################
@@ -185,6 +197,11 @@ 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)  
+double Histogram::getYMaximum() const {
+	return d_ptr->getYMaximum();
+}
+
+
 //##############################################################################
 //#################  setter methods and undo commands ##########################
 //##############################################################################
@@ -415,6 +432,13 @@ QRectF HistogramPrivate::boundingRect() const {
 	return QRectF(0, 0, 100, 100);
 	return boundingRectangle;
 }
+double HistogramPrivate::getYMaximum() {
+	if (histogram){
+		size_t maxYAddes= gsl_histogram_max_bin(histogram);
+		return gsl_histogram_get(histogram, maxYAddes);
+	}
+	return -INFINITY;
+}
 
 /*!
   Returns the shape of the Histogram as a QPainterPath in local coordinates
@@ -449,6 +473,7 @@ void HistogramPrivate::retransform(){
 	connectedPointsLogical.clear();
 
 	if (NULL == xColumn){
+		linePath = QPainterPath();
 		valuesPath = QPainterPath();
 //		dropLinePath = QPainterPath();
 		recalcShapeAndBoundingRect();
@@ -514,9 +539,75 @@ void HistogramPrivate::updateLines(){
 
 	//nothing to do, if no data points available
 	if (count<=1){
-	  	recalcShapeAndBoundingRect();
+		recalcShapeAndBoundingRect();
 		return;
 	}
+	int startRow = 0;
+	int endRow = xColumn->rowCount() - 1;
+	QPointF tempPoint,tempPoint1;
+
+	double xAxisMin= xColumn->minimum();
+	double xAxisMax= xColumn->maximum();
+
+	bins = 10; //temprary
+
+	double width = (xAxisMax-xAxisMin)/bins;
+
+	histogram = gsl_histogram_alloc (bins); // demo- number of bins
+	gsl_histogram_set_ranges_uniform (histogram, xAxisMin,xAxisMax+1);
+
+	for (int row = startRow; row <= endRow; row++ ){
+		if ( xColumn->isValid(row) && !xColumn->isMasked(row) )
+			gsl_histogram_increment(histogram,xColumn->valueAt(row));
+	}
+
+	//checking height of each column
+	/*for(int i=0;i < bins; ++i) {
+		qDebug() <<i<< " height "<< gsl_histogram_get(histogram,i);
+	}
+	*/
+	switch(histogramType) {
+		case Histogram::Ordinary:
+	for(int i=0;i < bins; ++i) {
+		tempPoint.setX(xAxisMin);
+		tempPoint.setY(0.0);
+
+		tempPoint1.setX(xAxisMin);
+		tempPoint1.setY(gsl_histogram_get(histogram,i));
+
+		lines.append(QLineF(tempPoint, tempPoint1));
+
+		tempPoint.setX(xAxisMin);
+		tempPoint.setY(gsl_histogram_get(histogram,i));
+
+		tempPoint1.setX(xAxisMin+width);
+		tempPoint1.setY(gsl_histogram_get(histogram,i));
+
+		lines.append(QLineF(tempPoint,tempPoint1));
+
+		tempPoint.setX(xAxisMin+width);
+		tempPoint.setY(gsl_histogram_get(histogram,i));
+
+		tempPoint1.setX(xAxisMin+width);
+		tempPoint1.setY(0.0);
+
+		lines.append(QLineF(tempPoint, tempPoint1));
+
+		tempPoint.setX(xAxisMin+width);
+		tempPoint.setY(0.0);
+
+		tempPoint1.setX(xAxisMin);
+		tempPoint1.setY(0.0);
+
+		lines.append(QLineF(tempPoint, tempPoint1));
+		xAxisMin+= width;
+	}
+	break;
+		case Histogram::Cummulative:
+			break;
+		case Histogram::AvgShift:
+			break;
+	}
 
 	//calculate the lines connecting the data points
 		for (int i=0; i<count-1; i++){
@@ -535,7 +626,7 @@ void HistogramPrivate::updateLines(){
 		linePath.lineTo(line.p2());
 	}
 
-	//updateFilling();
+	updateFilling();
 	recalcShapeAndBoundingRect();
 }
 /*!
@@ -557,7 +648,7 @@ void HistogramPrivate::updateValues() {
 	  case Histogram::ValuesX:{
 		for(int i=0; i<symbolPointsLogical.size(); ++i){
 			if (!visiblePoints[i]) continue;
- 			valuesStrings << valuesPrefix + QString::number(symbolPointsLogical.at(i).x()) + \
valuesSuffix; +			valuesStrings << valuesPrefix + \
QString::number(symbolPointsLogical.at(i).x()) + valuesSuffix;  }
 	  break;
 	  }
@@ -943,8 +1034,14 @@ void HistogramPrivate::recalcShapeAndBoundingRect() {
 }
 
 void HistogramPrivate::draw(QPainter *painter) {
+
+	painter->setOpacity(lineOpacity);
+	painter->setPen(linePen);
+	painter->setBrush(Qt::NoBrush);
+	painter->drawPath(linePath);
+
 	//draw filling
-	
+
 	if (fillingPosition != Histogram::NoFilling) {
 		painter->setOpacity(fillingOpacity);
 		painter->setPen(Qt::SolidLine);
@@ -987,7 +1084,7 @@ void HistogramPrivate::updatePixmap() {
 
 
 //TODO: move this to a central place
-QImage HistogramPrivate::blurred(const QImage& image, const QRect& rect, int radius, \
bool alphaOnly) +QImage HistogramPrivate::blurred(const QImage& image, const QRect& \
rect, int radius, bool alphaOnly = false)  {
     int tab[] = { 14, 10, 8, 6, 5, 5, 4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 };
     int alpha = (radius < 1)  ? 16 : (radius > 17) ? 1 : tab[radius-1];
@@ -1062,120 +1159,53 @@ QImage HistogramPrivate::blurred(const QImage& image, const \
QRect& rect, int rad  void HistogramPrivate::paint(QPainter* painter, const \
QStyleOptionGraphicsItem* option, QWidget* widget){  //  \
qDebug()<<"HistogramPrivate::paint, " + q->name();  Q_UNUSED(option);
-    Q_UNUSED(widget);
-   
-    //Ordinary histogram logic
-    QPainterPath LinePath = QPainterPath();
-    QList<QLineF> lines;
-    lines.clear();
-    //double bins[] = {5.0, 6.0, 2.0, 9.0, 10.0};
-   
-    QPointF tempPoint, tempPoint1;
-	double xAxisMin= xColumn->minimum();
-	double xAxisMax= xColumn->maximum();
-	
-	qDebug()<< "axis value" << xAxisMax << xAxisMin;	
-	
-	int startRow = 0;
-	int endRow = xColumn->rowCount() - 1;
-	
-	gsl_histogram * h = gsl_histogram_alloc (10); // demo- number of bins
-	gsl_histogram_set_ranges_uniform (h, xAxisMin,xAxisMax);
-	
-	for (int row = startRow; row <= endRow; row++ ){
-		if ( xColumn->isValid(row) && !xColumn->isMasked(row) )
-		gsl_histogram_increment(h,xColumn->valueAt(row));
+	Q_UNUSED(widget);
+	if (!isVisible())
+		return;
+
+// 	QTime timer;
+// 	timer.start();
+	painter->setPen(Qt::NoPen);
+	painter->setBrush(Qt::NoBrush);
+	painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
+
+// TODO: draw directly
+	draw(painter);
+// or use pixmap for double buffering
+// 	painter->drawPixmap(boundingRectangle.topLeft(), m_pixmap);
+// 	qDebug() << "Paint the pixmap: " << timer.elapsed() << "ms";
+
+	if (m_hovered && !isSelected() && !m_printing){
+// 		timer.start();
+		if (m_hoverEffectImageIsDirty) {
+			QPixmap pix = m_pixmap;
+			pix.fill(q->hoveredPen.color());
+			pix.setAlphaChannel(m_pixmap.alphaChannel());
+			m_hoverEffectImage = blurred(pix.toImage(), m_pixmap.rect(), 5);
+			m_hoverEffectImageIsDirty = false;
+		}
+
+		painter->setOpacity(q->hoveredOpacity*2);
+		painter->drawImage(boundingRectangle.topLeft(), m_hoverEffectImage, \
m_pixmap.rect()); +// 		qDebug() << "Paint hovering effect: " << timer.elapsed() << \
"ms"; +		return;
 	}
-	
-	//checking height of each column 
-	for(int i=0;i < 10; ++i) {
-		qDebug() << gsl_histogram_get(h,i);
+
+	if (isSelected() && !m_printing){
+// 		timer.start();
+		if (m_selectionEffectImageIsDirty) {
+			QPixmap pix = m_pixmap;
+			pix.fill(q->selectedPen.color());
+			pix.setAlphaChannel(m_pixmap.alphaChannel());
+			m_selectionEffectImage = blurred(pix.toImage(), m_pixmap.rect(), 5,false);
+			m_selectionEffectImageIsDirty = false;
+		}
+
+		painter->setOpacity(q->selectedOpacity*2);
+		painter->drawImage(boundingRectangle.topLeft(), m_selectionEffectImage, \
m_pixmap.rect()); +// 		qDebug() << "Paint selection effect: " << timer.elapsed() << \
"ms"; +		return;
 	}
-	double width = (xAxisMax-xAxisMin)/10;
-	
-	for(int i=0;i < 10; ++i) {
-        tempPoint.setX(xAxisMin);
-        tempPoint.setY(0.0);
-       
-        tempPoint1.setX(xAxisMin);
-        tempPoint1.setY(gsl_histogram_get(h,i));
-       
-        lines.append(QLineF(tempPoint, tempPoint1));
-       
-        tempPoint.setX(xAxisMin);
-        tempPoint.setY(gsl_histogram_get(h,i));
-       
-        tempPoint1.setX(xAxisMin+width);
-        tempPoint1.setY(gsl_histogram_get(h,i));
-       
-        lines.append(QLineF(tempPoint,tempPoint1));
-       
-        tempPoint.setX(xAxisMin+width);
-        tempPoint.setY(gsl_histogram_get(h,i));
-       
-        tempPoint1.setX(xAxisMin+width);
-        tempPoint1.setY(0.0);
-       
-        lines.append(QLineF(tempPoint, tempPoint1));
-		xAxisMin+= width;
-    }
-   
-    const CartesianPlot* plot = dynamic_cast<const \
                CartesianPlot*>(q->parentAspect());
-    const AbstractCoordinateSystem* cSystem = plot->coordinateSystem();
-    lines = cSystem->mapLogicalToScene(lines);
-   
-    foreach (const QLineF& line, lines){
-        LinePath.moveTo(line.p1());
-        LinePath.lineTo(line.p2());
-    }
-   
-    QPen linePen;
-   
-    linePen.setStyle( Qt::SolidLine );
-    linePen.setColor( QColor(Qt::black) );
-    linePen.setWidthF( Worksheet::convertToSceneUnits(1.0, Worksheet::Point) );
-   
-   // prepareGeometryChange(); 
-    curveShape = QPainterPath();
-    curveShape.addPath(WorksheetElement::shapeFromPath(LinePath, linePen));
-    boundingRectangle = curveShape.boundingRect();
-   
-   
-    QPixmap pixmap(boundingRectangle.width(), boundingRectangle.height());
-    if (boundingRectangle.width()==0 || boundingRectangle.width()==0) {
-        m_pixmap = pixmap;
-        m_hoverEffectImageIsDirty = true;
-        m_selectionEffectImageIsDirty = true;
-        return;
-    }
-    pixmap.fill(Qt::transparent);
-    QPainter temp_painter(&pixmap);
-    temp_painter.setRenderHint(QPainter::Antialiasing, true);
-    temp_painter.translate(-boundingRectangle.topLeft());
- 
-    temp_painter.setOpacity(1.0);
-    temp_painter.setPen(linePen);
-    temp_painter.setBrush(Qt::NoBrush);
-    temp_painter.drawPath(LinePath);
-       
-    temp_painter.end();
- 
-    m_pixmap = pixmap;
-   
-    painter->setPen(Qt::NoPen);
-    painter->setBrush(Qt::NoBrush);
-    painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
-   
-    draw(painter);
-   
-    QPixmap pix = m_pixmap;
-    m_selectionEffectImage = blurred(pix.toImage(), m_pixmap.rect(), 5.0, true);
-   
-    painter->setOpacity(1.0*2);
-    painter->drawImage(boundingRectangle.topLeft(), m_selectionEffectImage, \
                m_pixmap.rect());
-   
-    return;
-  //ends my logic
 }
 
 /*!
diff --git a/src/backend/worksheet/plots/cartesian/Histogram.h \
b/src/backend/worksheet/plots/cartesian/Histogram.h index f74d6f3..404f408 100644
--- a/src/backend/worksheet/plots/cartesian/Histogram.h
+++ b/src/backend/worksheet/plots/cartesian/Histogram.h
@@ -42,10 +42,11 @@ class Histogram: public WorksheetElement {
 	Q_OBJECT
 
 	public:
+		enum BinsOption {Number,Width,SquareRoot,RiceRule,SturgisRule};
 		enum ValuesType {NoValues, ValuesX, ValuesY, ValuesXY, ValuesXYBracketed, \
ValuesCustomColumn};  enum ValuesPosition {ValuesAbove, ValuesUnder, ValuesLeft, \
ValuesRight};  enum FillingPosition {NoFilling, FillingAbove, FillingBelow, \
                FillingZeroBaseline, FillingLeft, FillingRight};
-		
+		enum TypeHistogram {Ordinary,Cummulative, AvgShift};
 		explicit Histogram(const QString &name);
 		virtual ~Histogram();
 
@@ -92,6 +93,8 @@ class Histogram: public WorksheetElement {
 		virtual bool isVisible() const;
 		virtual void setPrinting(bool on);
 		void suppressRetransform(bool);
+		double getYMaximum() const;
+		void setHistrogramType(Histogram::TypeHistogram);
 
 		typedef WorksheetElement BaseClass;
 		typedef HistogramPrivate Private;
@@ -115,7 +118,6 @@ class Histogram: public WorksheetElement {
     	Q_DECLARE_PRIVATE(Histogram)
 		void init();
 		void initActions();
-
 		QAction* visibilityAction;
 
 	signals:
diff --git a/src/backend/worksheet/plots/cartesian/HistogramPrivate.h \
b/src/backend/worksheet/plots/cartesian/HistogramPrivate.h index 10a0127..c829b5a \
                100644
--- a/src/backend/worksheet/plots/cartesian/HistogramPrivate.h
+++ b/src/backend/worksheet/plots/cartesian/HistogramPrivate.h
@@ -30,6 +30,7 @@
 #define HISTOGRAMPRIVATE_H
 
 #include <vector>
+#include <gsl_histogram.h>
 
 class HistogramPrivate: public QGraphicsItem {
   public:
@@ -60,7 +61,9 @@ class HistogramPrivate: public QGraphicsItem {
 		void drawFilling(QPainter*);
 		void draw(QPainter*);
 		void updatePixmap();
+		double getYMaximum();
 		bool autoScaleX, autoScaleY;
+		Histogram::TypeHistogram histogramType;
 
 		virtual void paint(QPainter*, const QStyleOptionGraphicsItem*, QWidget* widget = \
0);  
@@ -100,6 +103,7 @@ class HistogramPrivate: public QGraphicsItem {
 		qreal fillingOpacity;
 
 		QPainterPath linePath;
+		long long int bins;
 		QPainterPath valuesPath;
 		QRectF boundingRectangle;
 		QPainterPath curveShape;
@@ -125,6 +129,7 @@ class HistogramPrivate: public QGraphicsItem {
 		
 
 	private:
+		gsl_histogram * histogram;
         void contextMenuEvent(QGraphicsSceneContextMenuEvent*);
 		virtual void hoverEnterEvent(QGraphicsSceneHoverEvent*);
 		virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent*);
diff --git a/src/kdefrontend/dockwidgets/HistogramDock.cpp \
b/src/kdefrontend/dockwidgets/HistogramDock.cpp index 97b322d..9c22996 100644
--- a/src/kdefrontend/dockwidgets/HistogramDock.cpp
+++ b/src/kdefrontend/dockwidgets/HistogramDock.cpp
@@ -412,6 +412,7 @@ void HistogramDock::initGeneralTab(){
 	//show the properties of the first curve
 	uiGeneralTab.chkVisible->setChecked( m_curve->isVisible() );
 	//bins option
+	uiGeneralTab.cbBins->clear();
 	uiGeneralTab.cbBins->addItem(i18n("By Number"));
 	uiGeneralTab.cbBins->addItem(i18n("By width"));
 	uiGeneralTab.cbBins->addItem(i18n("Square-root rule"));
@@ -420,6 +421,7 @@ void HistogramDock::initGeneralTab(){
 	
 	//connect( uiGeneralTab.cbHistogramType, SIGNAL(currentIndexChanged(int)), this, \
SLOT(histogramTypeChanged(int)) );  //types options
+	uiGeneralTab.cbHistogramType->clear();
 	uiGeneralTab.cbHistogramType->addItem(i18n("Ordinary Histogram"));
 	uiGeneralTab.cbHistogramType->addItem(i18n("Cummulative Histogram"));
 	uiGeneralTab.cbHistogramType->addItem(i18n("AvgShifted Histogram"));
@@ -479,7 +481,14 @@ void HistogramDock::curveValuesColorChanged(QColor color) {
 	m_initializing = false;
 }
 //Values-tab
+void HistogramDock::binsOptionChanged(int index){
+	Histogram::BinsOption binOption = Histogram::BinsOption(index);
+	if(binOption==Histogram::Number)
+	{
 
+	}
+
+}
 /*!
   called when the type of the values (none, x, y, (x,y) etc.) was changed.
 */
@@ -936,11 +945,17 @@ void HistogramDock::setupGeneral() {
 	connect( uiGeneralTab.leComment, SIGNAL(returnPressed()), this, \
SLOT(commentChanged()) );  connect( uiGeneralTab.chkVisible, SIGNAL(clicked(bool)), \
this, SLOT(visibilityChanged(bool)) );  connect( cbXColumn, \
SIGNAL(currentModelIndexChanged(QModelIndex)), this, \
SLOT(xColumnChanged(QModelIndex)) ); +	connect( uiGeneralTab.cbHistogramType, \
SIGNAL(currentIndexChanged(int)), this, SLOT(histogramTypeChanged(int)) );  
 }
 
+void HistogramDock::histogramTypeChanged(int index) {
+	Histogram::TypeHistogram histogramType = Histogram::TypeHistogram(index);
+	m_curve->setHistrogramType(histogramType);
+}
+
 void HistogramDock::xColumnChanged(const QModelIndex& index) {
-	
+
 	if (m_initializing)
 		return;
 
diff --git a/src/kdefrontend/dockwidgets/HistogramDock.h \
b/src/kdefrontend/dockwidgets/HistogramDock.h index 138906f..b372a52 100644
--- a/src/kdefrontend/dockwidgets/HistogramDock.h
+++ b/src/kdefrontend/dockwidgets/HistogramDock.h
@@ -89,7 +89,9 @@ private slots:
 	void xColumnChanged(const QModelIndex&);
 	void visibilityChanged(bool);
 	//Histogram-types
-	//void histogramTypeChanged(int);
+	void histogramTypeChanged(int);
+	//bins setting
+	void binsOptionChanged(int);
 
 	//Values-Tab
 	void valuesTypeChanged(int);


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

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