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

List:       kde-commits
Subject:    [labplot/histogram_chart] src: Demo- Ordinary Histogram
From:       Anu Mittal <anu22mittal () gmail ! com>
Date:       2016-07-12 10:03:22
Message-ID: E1bMuXC-0003TX-Bp () code ! kde ! org
[Download RAW message or body]

Git commit a25afe58cc1c1ba9e141014456270a255c4cfbc6 by Anu Mittal.
Committed on 12/07/2016 at 10:02.
Pushed by anumittal into branch 'histogram_chart'.

Demo- Ordinary Histogram

M  +0    -1    src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
M  +98   -49   src/backend/worksheet/plots/cartesian/Histogram.cpp
M  +1    -7    src/backend/worksheet/plots/cartesian/Histogram.h
M  +306  -11   src/kdefrontend/dockwidgets/HistogramDock.cpp
M  +6    -6    src/kdefrontend/dockwidgets/HistogramDock.h

http://commits.kde.org/labplot/a25afe58cc1c1ba9e141014456270a255c4cfbc6

diff --git a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp \
b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp index 494e8be..429d971 \
                100644
--- a/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
+++ b/src/backend/worksheet/plots/cartesian/CartesianPlot.cpp
@@ -841,7 +841,6 @@ void CartesianPlot::xDataChanged(){
 		curve->retransform();
 }
 
-#include <QDebug>
 void CartesianPlot::xHistogramDataChanged(){
 	if (project()->isLoading())
 		return;
diff --git a/src/backend/worksheet/plots/cartesian/Histogram.cpp \
b/src/backend/worksheet/plots/cartesian/Histogram.cpp index 46be04f..54594bf 100644
--- a/src/backend/worksheet/plots/cartesian/Histogram.cpp
+++ b/src/backend/worksheet/plots/cartesian/Histogram.cpp
@@ -377,6 +377,7 @@ void Histogram::setFillingOpacity(qreal opacity) {
 //#################################  SLOTS  ####################################
 //##############################################################################
 void Histogram::retransform() {
+	qDebug() << "Retransform begins";
 	d_ptr->retransform();
 }
 
@@ -559,6 +560,7 @@ QString HistogramPrivate::name() const {
 }
 
 QRectF HistogramPrivate::boundingRect() const {
+	return QRectF(0, 0, 100, 100);
 	return boundingRectangle;
 }
 
@@ -658,6 +660,7 @@ void HistogramPrivate::retransform(){
 	m_suppressRecalc = true;
 	updateValues();
 	m_suppressRecalc = false;
+	qDebug() << "Retransform end";
 }
 
 /*!
@@ -1065,6 +1068,8 @@ void HistogramPrivate::recalcShapeAndBoundingRect() {
 
 void HistogramPrivate::draw(QPainter *painter) {
 	//draw filling
+	
+	qDebug() << "drawing Histogram";
 	if (fillingPosition != Histogram::NoFilling) {
 		painter->setOpacity(fillingOpacity);
 		painter->setPen(Qt::SolidLine);
@@ -1180,55 +1185,99 @@ QImage HistogramPrivate::blurred(const QImage& image, const \
QRect& rect, int rad  \sa QGraphicsItem::paint().
 */
 void HistogramPrivate::paint(QPainter* painter, const QStyleOptionGraphicsItem* \
                option, QWidget* widget){
-// 	qDebug()<<"HistogramPrivate::paint, " + q->name();
-	Q_UNUSED(option);
-	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,false);
-			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;
-	}
-
-	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;
-	}
+//  qDebug()<<"HistogramPrivate::paint, " + q->name();
+    Q_UNUSED(option);
+    Q_UNUSED(widget);
+   
+    //Ordinary logic
+    QPainterPath LinePath = QPainterPath();
+    QList<QLineF> lines;
+    lines.clear();
+    double bins[] = {5.0, 6.0, 2.0, 9.0, 10.0};
+   
+    QPointF tempPoint, tempPoint1;
+   
+    for(int i=0;i < 4; ++i) {
+        tempPoint.setX((double) i);
+        tempPoint.setY(0.0);
+       
+        tempPoint1.setX((double) i);
+        tempPoint1.setY(bins[i]);
+       
+        lines.append(QLineF(tempPoint, tempPoint1));
+       
+        tempPoint.setX((double) i);
+        tempPoint.setY(bins[i]);
+       
+        tempPoint1.setX((double) i+1);
+        tempPoint1.setY(bins[i]);
+       
+        lines.append(QLineF(tempPoint,tempPoint1));
+       
+        tempPoint.setX((double) i+1);
+        tempPoint.setY(bins[i]);
+       
+        tempPoint1.setX((double) i+1);
+        tempPoint1.setY(0.0);
+       
+        lines.append(QLineF(tempPoint, tempPoint1));
+    }
+   
+    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;
 }
 
 /*!
diff --git a/src/backend/worksheet/plots/cartesian/Histogram.h \
b/src/backend/worksheet/plots/cartesian/Histogram.h index 72de473..2b798de 100644
--- a/src/backend/worksheet/plots/cartesian/Histogram.h
+++ b/src/backend/worksheet/plots/cartesian/Histogram.h
@@ -30,7 +30,6 @@
 #define HISTOGRAM_H
 
 #include "backend/worksheet/WorksheetElement.h"
-#include "backend/worksheet/plots/cartesian/Symbol.h"
 #include "backend/worksheet/plots/PlotArea.h"
 #include "backend/lib/macros.h"
 #include "backend/core/AbstractColumn.h"
@@ -43,15 +42,10 @@ class Histogram: public WorksheetElement {
 	Q_OBJECT
 
 	public:
-		enum LineType {NoLine, Line, StartHorizontal, StartVertical, MidpointHorizontal, \
                MidpointVertical, Segments2, Segments3,
-					   SplineCubicNatural, SplineCubicPeriodic, SplineAkimaNatural, \
                SplineAkimaPeriodic};
-		enum DropLineType {NoDropLine, DropLineX, DropLineY, DropLineXY, \
DropLineXZeroBaseline, DropLineXMinBaseline, DropLineXMaxBaseline};  enum ValuesType \
{NoValues, ValuesX, ValuesY, ValuesXY, ValuesXYBracketed, ValuesCustomColumn};  enum \
                ValuesPosition {ValuesAbove, ValuesUnder, ValuesLeft, ValuesRight};
-		enum ErrorType {NoError, SymmetricError, AsymmetricError};
 		enum FillingPosition {NoFilling, FillingAbove, FillingBelow, FillingZeroBaseline, \
                FillingLeft, FillingRight};
-		enum ErrorBarsType {ErrorBarsSimple, ErrorBarsWithEnds};
-
+		
 		explicit Histogram(const QString &name);
 		virtual ~Histogram();
 
diff --git a/src/kdefrontend/dockwidgets/HistogramDock.cpp \
b/src/kdefrontend/dockwidgets/HistogramDock.cpp index e331644..b495c35 100644
--- a/src/kdefrontend/dockwidgets/HistogramDock.cpp
+++ b/src/kdefrontend/dockwidgets/HistogramDock.cpp
@@ -135,6 +135,107 @@ HistogramDock::~HistogramDock()
 	delete m_completion;
 
 }
+
+void HistogramDock::updateValuesFormatWidgets(const AbstractColumn::ColumnMode \
columnMode){ +  ui.cbValuesFormat->clear();
+
+  switch (columnMode){
+	case AbstractColumn::Numeric:
+	  ui.cbValuesFormat->addItem(i18n("Decimal"), QVariant('f'));
+	  ui.cbValuesFormat->addItem(i18n("Scientific (e)"), QVariant('e'));
+	  ui.cbValuesFormat->addItem(i18n("Scientific (E)"), QVariant('E'));
+	  ui.cbValuesFormat->addItem(i18n("Automatic (e)"), QVariant('g'));
+	  ui.cbValuesFormat->addItem(i18n("Automatic (E)"), QVariant('G'));
+	  break;
+	case AbstractColumn::Text:
+	  ui.cbValuesFormat->addItem(i18n("Text"), QVariant());
+	  break;
+	case AbstractColumn::Month:
+	  ui.cbValuesFormat->addItem(i18n("Number without leading zero"), QVariant("M"));
+	  ui.cbValuesFormat->addItem(i18n("Number with leading zero"), QVariant("MM"));
+	  ui.cbValuesFormat->addItem(i18n("Abbreviated month name"), QVariant("MMM"));
+	  ui.cbValuesFormat->addItem(i18n("Full month name"), QVariant("MMMM"));
+	  break;
+	case AbstractColumn::Day:
+	  ui.cbValuesFormat->addItem(i18n("Number without leading zero"), QVariant("d"));
+	  ui.cbValuesFormat->addItem(i18n("Number with leading zero"), QVariant("dd"));
+	  ui.cbValuesFormat->addItem(i18n("Abbreviated day name"), QVariant("ddd"));
+	  ui.cbValuesFormat->addItem(i18n("Full day name"), QVariant("dddd"));
+	  break;
+	case AbstractColumn::DateTime:{
+	  foreach(const QString& s, dateStrings)
+		ui.cbValuesFormat->addItem(s, QVariant(s));
+
+	  foreach(const QString& s, timeStrings)
+		ui.cbValuesFormat->addItem(s, QVariant(s));
+
+	  foreach(const QString& s1, dateStrings){
+		foreach(const QString& s2, timeStrings)
+		  ui.cbValuesFormat->addItem(s1 + ' ' + s2, QVariant(s1 + ' ' + s2));
+	  }
+	  break;
+	}
+  }
+
+  ui.cbValuesFormat->setCurrentIndex(0);
+
+  if (columnMode == AbstractColumn::Numeric){
+	ui.lValuesPrecision->show();
+	ui.sbValuesPrecision->show();
+  }else{
+	ui.lValuesPrecision->hide();
+	ui.sbValuesPrecision->hide();
+  }
+
+  if (columnMode == AbstractColumn::Text){
+	ui.lValuesFormatTop->hide();
+	ui.lValuesFormat->hide();
+	ui.cbValuesFormat->hide();
+  }else{
+	ui.lValuesFormatTop->show();
+	ui.lValuesFormat->show();
+	ui.cbValuesFormat->show();
+	ui.cbValuesFormat->setCurrentIndex(0);
+  }
+
+  if (columnMode == AbstractColumn::DateTime){
+	ui.cbValuesFormat->setEditable( true );
+  }else{
+	ui.cbValuesFormat->setEditable( false );
+  }
+}
+
+void HistogramDock::showValuesColumnFormat(const Column* column){
+  if (!column){
+	// no valid column is available
+	// -> hide all the format properties widgets (equivalent to showing the properties \
of the column mode "Text") +	this->updateValuesFormatWidgets(AbstractColumn::Text);
+  }else{
+	AbstractColumn::ColumnMode columnMode = column->columnMode();
+
+	//update the format widgets for the new column mode
+	this->updateValuesFormatWidgets(columnMode);
+
+	 //show the actuall formating properties
+	switch(columnMode) {
+		case AbstractColumn::Numeric:{
+		  Double2StringFilter * filter = \
static_cast<Double2StringFilter*>(column->outputFilter()); +		  \
ui.cbValuesFormat->setCurrentIndex(ui.cbValuesFormat->findData(filter->numericFormat()));
 +		  ui.sbValuesPrecision->setValue(filter->numDigits());
+		  break;
+		}
+		case AbstractColumn::Text:
+			break;
+		case AbstractColumn::Month:
+		case AbstractColumn::Day:
+		case AbstractColumn::DateTime: {
+				DateTime2StringFilter * filter = \
static_cast<DateTime2StringFilter*>(column->outputFilter()); \
+				ui.cbValuesFormat->setCurrentIndex(ui.cbValuesFormat->findData(filter->format()));
 +				break;
+			}
+	}
+  }
+}
 void HistogramDock::setModelIndexFromColumn(TreeViewComboBox* cb, const \
AbstractColumn* column){  if (column)
 		cb->setCurrentModelIndex(m_aspectTreeModel->modelIndexOfAspect(column));
@@ -158,7 +259,27 @@ void HistogramDock::nameChanged(){
 
   m_curve->setName(uiGeneralTab.leName->text());
 }
+void HistogramDock::commentChanged(){
+  if (m_initializing)
+	return;
+
+  m_curve->setComment(uiGeneralTab.leComment->text());
+}
+
+void HistogramDock::visibilityChanged(bool state){
+	if (m_initializing)
+		return;
+
+	foreach(Histogram* curve, m_curvesList)
+		curve->setVisible(state);
+}
+void HistogramDock::valuesColorChanged(const QColor& color){
+	if (m_initializing)
+		return;
 
+	foreach(Histogram* curve, m_curvesList)
+		curve->setValuesColor(color);
+}
 void HistogramDock::init(){
   	dateStrings<<"yyyy-MM-dd";
 	dateStrings<<"yyyy/MM/dd";
@@ -301,15 +422,7 @@ void HistogramDock::initGeneralTab(){
 	//show the properties of the first curve
 	uiGeneralTab.chkVisible->setChecked( m_curve->isVisible() );
 	
-	connect( uiGeneralTab.cbHistogramType, SIGNAL(currentIndexChanged(int)), this, \
                SLOT(histogramTypeChanged(int)) );
-	
-
-	//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))); +	//connect( uiGeneralTab.cbHistogramType, \
SIGNAL(currentIndexChanged(int)), this, SLOT(histogramTypeChanged(int)) );  //types \
options  uiGeneralTab.cbHistogramType->addItem(i18n("Ordinary Histogram"));
 	uiGeneralTab.cbHistogramType->addItem(i18n("Cummulative Histogram"));
@@ -369,6 +482,144 @@ void HistogramDock::curveValuesColorChanged(QColor color) {
   	ui.kcbValuesColor->setColor(color);
 	m_initializing = false;
 }
+//Values-tab
+
+/*!
+  called when the type of the values (none, x, y, (x,y) etc.) was changed.
+*/
+void HistogramDock::valuesTypeChanged(int index){
+  Histogram::ValuesType valuesType = Histogram::ValuesType(index);
+
+  if (valuesType==Histogram::NoValues){
+	//no values are to paint -> deactivate all the pertinent widgets
+	ui.cbValuesPosition->setEnabled(false);
+	ui.lValuesColumn->hide();
+	cbValuesColumn->hide();
+	ui.sbValuesDistance->setEnabled(false);
+	ui.sbValuesRotation->setEnabled(false);
+	ui.sbValuesOpacity->setEnabled(false);
+	ui.cbValuesFormat->setEnabled(false);
+	ui.cbValuesFormat->setEnabled(false);
+	ui.sbValuesPrecision->setEnabled(false);
+	ui.leValuesPrefix->setEnabled(false);
+	ui.leValuesSuffix->setEnabled(false);
+	ui.kfrValuesFont->setEnabled(false);
+	ui.kcbValuesColor->setEnabled(false);
+  }else{
+	ui.cbValuesPosition->setEnabled(true);
+	ui.sbValuesDistance->setEnabled(true);
+	ui.sbValuesRotation->setEnabled(true);
+	ui.sbValuesOpacity->setEnabled(true);
+	ui.cbValuesFormat->setEnabled(true);
+	ui.sbValuesPrecision->setEnabled(true);
+	ui.leValuesPrefix->setEnabled(true);
+	ui.leValuesSuffix->setEnabled(true);
+	ui.kfrValuesFont->setEnabled(true);
+	ui.kcbValuesColor->setEnabled(true);
+
+	const Column* column;
+	if (valuesType==Histogram::ValuesCustomColumn){
+	  ui.lValuesColumn->show();
+	  cbValuesColumn->show();
+
+	  column= static_cast<Column*>(cbValuesColumn->currentModelIndex().internalPointer());
 +	}else{
+	  ui.lValuesColumn->hide();
+	  cbValuesColumn->hide();
+
+	  if (valuesType==Histogram::ValuesY){
+		column = static_cast<const Column*>(m_curve->yColumn());
+	  }else{
+		column = static_cast<const Column*>(m_curve->xColumn());
+	  }
+	}
+	this->showValuesColumnFormat(column);
+  }
+
+
+  if (m_initializing)
+	return;
+
+  foreach(Histogram* curve, m_curvesList)
+	curve->setValuesType(valuesType);
+}
+
+/*!
+  called when the custom column for the values was changed.
+*/
+void HistogramDock::valuesColumnChanged(const QModelIndex& index){
+  if (m_initializing)
+	return;
+
+  Column* column= static_cast<Column*>(index.internalPointer());
+  this->showValuesColumnFormat(column);
+
+  foreach(Histogram* curve, m_curvesList){
+	//TODO save also the format of the currently selected column for the values \
(precision etc.) +	curve->setValuesColumn(column);
+  }
+}
+
+void HistogramDock::valuesPositionChanged(int index){
+  if (m_initializing)
+	return;
+
+  foreach(Histogram* curve, m_curvesList)
+	curve->setValuesPosition(Histogram::ValuesPosition(index));
+}
+
+void HistogramDock::valuesDistanceChanged(double  value){
+  if (m_initializing)
+	return;
+
+  foreach(Histogram* curve, m_curvesList)
+	curve->setValuesDistance( Worksheet::convertToSceneUnits(value, Worksheet::Point) \
); +}
+
+void HistogramDock::valuesRotationChanged(int value){
+  if (m_initializing)
+	return;
+
+  foreach(Histogram* curve, m_curvesList)
+	curve->setValuesRotationAngle(value);
+}
+
+void HistogramDock::valuesOpacityChanged(int value){
+	if (m_initializing)
+		return;
+
+	qreal opacity = (float)value/100.;
+	foreach(Histogram* curve, m_curvesList)
+		curve->setValuesOpacity(opacity);
+}
+
+void HistogramDock::valuesPrefixChanged(){
+  if (m_initializing)
+	return;
+
+  QString prefix = ui.leValuesPrefix->text();
+  foreach(Histogram* curve, m_curvesList)
+	curve->setValuesPrefix(prefix);
+}
+
+void HistogramDock::valuesSuffixChanged(){
+  if (m_initializing)
+	return;
+
+  QString suffix = ui.leValuesSuffix->text();
+  foreach(Histogram* curve, m_curvesList)
+	curve->setValuesSuffix(suffix);
+}
+
+void HistogramDock::valuesFontChanged(const QFont& font){
+	if (m_initializing)
+		return;
+
+	QFont valuesFont = font;
+	valuesFont.setPixelSize( Worksheet::convertToSceneUnits(font.pointSizeF(), \
Worksheet::Point) ); +	foreach(Histogram* curve, m_curvesList)
+		curve->setValuesFont(valuesFont);
+}
 
 //Filling
 void HistogramDock::curveFillingPositionChanged(Histogram::FillingPosition position) \
{ @@ -695,9 +946,7 @@ 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)) );  
 }
@@ -737,4 +986,50 @@ void HistogramDock::yColumnChanged(const QModelIndex& index) {
 
 	foreach(Histogram* curve, m_curvesList)
 		curve->setYColumn(column);
+}
+
+void HistogramDock::loadConfigFromTemplate(KConfig& config) {
+	//extract the name of the template from the file name
+	QString name;
+	int index = config.name().lastIndexOf(QDir::separator());
+	if (index!=-1)
+		name = config.name().right(config.name().size() - index - 1);
+	else
+		name = config.name();
+
+	int size = m_curvesList.size();
+	if (size>1)
+		m_curve->beginMacro(i18n("%1 xy-curves: template \"%2\" loaded", size, name));
+	else
+		m_curve->beginMacro(i18n("%1: template \"%2\" loaded", m_curve->name(), name));
+
+	this->loadConfig(config);
+
+	m_curve->endMacro();
+}
+void HistogramDock::saveConfigAsTemplate(KConfig& config) {
+	KConfigGroup group = config.group( "Histogram" );
+	//Values
+	group.writeEntry("ValuesType", ui.cbValuesType->currentIndex());
+	group.writeEntry("ValuesPosition", ui.cbValuesPosition->currentIndex());
+	group.writeEntry("ValuesDistance", \
Worksheet::convertToSceneUnits(ui.sbValuesDistance->value(),Worksheet::Point)); \
+	group.writeEntry("ValuesRotation", ui.sbValuesRotation->value()); \
+	group.writeEntry("ValuesOpacity", ui.sbValuesOpacity->value()/100); \
+	group.writeEntry("ValuesPrefix", ui.leValuesPrefix->text()); \
+	group.writeEntry("ValuesSuffix", ui.leValuesSuffix->text()); \
+	group.writeEntry("ValuesFont", ui.kfrValuesFont->font()); \
+	group.writeEntry("ValuesColor", ui.kcbValuesColor->color()); +
+	//Filling
+	group.writeEntry("FillingPosition", ui.cbFillingPosition->currentIndex());
+	group.writeEntry("FillingType", ui.cbFillingType->currentIndex());
+	group.writeEntry("FillingColorStyle", ui.cbFillingColorStyle->currentIndex());
+	group.writeEntry("FillingImageStyle", ui.cbFillingImageStyle->currentIndex());
+	group.writeEntry("FillingBrushStyle", ui.cbFillingBrushStyle->currentIndex());
+	group.writeEntry("FillingFileName", ui.kleFillingFileName->text());
+	group.writeEntry("FillingFirstColor", ui.kcbFillingFirstColor->color());
+	group.writeEntry("FillingSecondColor", ui.kcbFillingSecondColor->color());
+	group.writeEntry("FillingOpacity", ui.sbFillingOpacity->value()/100.0);
+	
+	config.sync();
 }
\ No newline at end of file
diff --git a/src/kdefrontend/dockwidgets/HistogramDock.h \
b/src/kdefrontend/dockwidgets/HistogramDock.h index 48eb964..152c1a8 100644
--- a/src/kdefrontend/dockwidgets/HistogramDock.h
+++ b/src/kdefrontend/dockwidgets/HistogramDock.h
@@ -86,15 +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);
 
 	//Values-Tab
-	/*void valuesTypeChanged(int);
+	void valuesTypeChanged(int);
 	void valuesColumnChanged(const QModelIndex&);
 	void valuesPositionChanged(int);
 	void valuesDistanceChanged(double);
@@ -103,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);
@@ -149,8 +149,8 @@ private slots:
 
 
 	//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