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

List:       kde-commits
Subject:    [labplot] src: improve supported datetime formats
From:       Stefan Gerlach <null () kde ! org>
Date:       2017-06-30 22:21:03
Message-ID: E1dR4Hg-0004A5-00 () code ! kde ! org
[Download RAW message or body]

Git commit 334ab4801c50165f81a621abcc6624defd52283c by Stefan Gerlach.
Committed on 30/06/2017 at 22:20.
Pushed by sgerlach into branch 'master'.

improve supported datetime formats

M  +45   -0    src/backend/core/AbstractColumn.cpp
M  +3    -0    src/backend/core/AbstractColumn.h
M  +0    -8    src/backend/datasources/filters/AsciiFilter.cpp
M  +0    -1    src/backend/datasources/filters/AsciiFilter.h
M  +1    -1    src/kdefrontend/datasources/ImportFileWidget.cpp
M  +14   -44   src/kdefrontend/dockwidgets/ColumnDock.cpp
M  +5    -6    src/kdefrontend/dockwidgets/ColumnDock.h
M  +16   -17   src/kdefrontend/dockwidgets/SpreadsheetDock.cpp

https://commits.kde.org/labplot/334ab4801c50165f81a621abcc6624defd52283c

diff --git a/src/backend/core/AbstractColumn.cpp \
b/src/backend/core/AbstractColumn.cpp index 2cb5a2c4..4cafdf0c 100644
--- a/src/backend/core/AbstractColumn.cpp
+++ b/src/backend/core/AbstractColumn.cpp
@@ -91,6 +91,51 @@ AbstractColumn::~AbstractColumn() {
 	delete m_abstract_column_private;
 }
 
+QStringList AbstractColumn::dateFormats() {
+	QStringList dates;
+	dates << "yyyy-MM-dd";
+	dates << "yyyy/MM/dd";
+	dates << "dd/MM/yyyy";
+	dates << "dd/MM/yy";
+	dates << "dd.MM.yyyy";
+	dates << "dd.MM.yy";
+	dates << "MM/yyyy";
+	dates << "dd.MM.";
+	dates << "yyyyMMdd";
+
+	return dates;
+}
+
+QStringList AbstractColumn::timeFormats() {
+	QStringList times;
+	times << "hh";
+	times << "hh ap";
+	times << "hh:mm";
+	times << "hh:mm ap";
+	times << "hh:mm:ss";
+	times << "hh:mm:ss.zzz";
+	times << "hh:mm:ss:zzz";
+	times << "mm:ss.zzz";
+	times << "hhmmss";
+
+	return times;
+}
+
+QStringList AbstractColumn::dateTimeFormats() {
+	QStringList dateTimes;
+	
+	// any combination of date and times
+	for (auto d: dateFormats())
+		dateTimes << d;
+	for (auto t: timeFormats())
+		dateTimes << t;
+	for (auto d: dateFormats())
+		for (auto t: timeFormats())
+			dateTimes << d + ' ' + t;
+
+	return dateTimes;
+}
+
 /**
  * \brief Convenience method for mode-dependent icon
  */
diff --git a/src/backend/core/AbstractColumn.h b/src/backend/core/AbstractColumn.h
index 93e78d68..dd38d3c6 100644
--- a/src/backend/core/AbstractColumn.h
+++ b/src/backend/core/AbstractColumn.h
@@ -130,6 +130,9 @@ public:
 	explicit AbstractColumn(const QString& name);
 	virtual ~AbstractColumn();
 
+	static QStringList dateFormats();	// supported date formats
+	static QStringList timeFormats();	// supported time formats
+	static QStringList dateTimeFormats();	// supported datetime formats
 	static QIcon iconForMode(ColumnMode mode);
 
 	virtual bool isReadOnly() const { return true; };
diff --git a/src/backend/datasources/filters/AsciiFilter.cpp \
b/src/backend/datasources/filters/AsciiFilter.cpp index a64c9ff6..f6734f0c 100644
--- a/src/backend/datasources/filters/AsciiFilter.cpp
+++ b/src/backend/datasources/filters/AsciiFilter.cpp
@@ -129,14 +129,6 @@ QStringList AsciiFilter::numberFormats() {
 }
 
 /*!
-returns the list of all supported datetime formats
-*/
-QStringList AsciiFilter::dateTimeFormats() {
-	// TODO: more formats
-	return (QStringList() << QLatin1String("hh:mm:ss") << \
QLatin1String("YYYY-MM-DD|T|hh:mm:ss") << QLatin1String("DD/MM/YY| |hh:mm:ss") << \
                QLatin1String("DD/MM/YY| |hh:mm:ss"));
-}
-
-/*!
 returns the list of all predefined data types.
 */
 QStringList AsciiFilter::dataTypes() {
diff --git a/src/backend/datasources/filters/AsciiFilter.h \
b/src/backend/datasources/filters/AsciiFilter.h index d775cb14..771324e9 100644
--- a/src/backend/datasources/filters/AsciiFilter.h
+++ b/src/backend/datasources/filters/AsciiFilter.h
@@ -45,7 +45,6 @@ public:
 	static QStringList separatorCharacters();
 	static QStringList commentCharacters();
 	static QStringList numberFormats();
-	static QStringList dateTimeFormats();
 	static QStringList dataTypes();
 	static QStringList predefinedFilters();
 
diff --git a/src/kdefrontend/datasources/ImportFileWidget.cpp \
b/src/kdefrontend/datasources/ImportFileWidget.cpp index b07322d2..5864a1a3 100644
--- a/src/kdefrontend/datasources/ImportFileWidget.cpp
+++ b/src/kdefrontend/datasources/ImportFileWidget.cpp
@@ -75,7 +75,7 @@ ImportFileWidget::ImportFileWidget(QWidget* parent, const QString& \
fileName) : Q  asciiOptionsWidget.cbSeparatingCharacter->addItems(AsciiFilter::separatorCharacters());
  asciiOptionsWidget.cbCommentCharacter->addItems(AsciiFilter::commentCharacters());
 	asciiOptionsWidget.cbNumbersFormat->addItems(AsciiFilter::numberFormats());
-	asciiOptionsWidget.cbDateTimeFormat->addItems(AsciiFilter::dateTimeFormats());
+	asciiOptionsWidget.cbDateTimeFormat->addItems(AbstractColumn::dateTimeFormats());
 	asciiOptionsWidget.chbTranspose->hide(); //TODO: enable later
 	ui.swOptions->insertWidget(FileDataSource::Ascii, asciiw);
 
diff --git a/src/kdefrontend/dockwidgets/ColumnDock.cpp \
b/src/kdefrontend/dockwidgets/ColumnDock.cpp index 6dff6fd2..c0826cb2 100644
--- a/src/kdefrontend/dockwidgets/ColumnDock.cpp
+++ b/src/kdefrontend/dockwidgets/ColumnDock.cpp
@@ -3,7 +3,7 @@
     Project              : LabPlot
     --------------------------------------------------------------------
     Copyright            : (C) 2011-2017 by Alexander Semke (alexander.semke@web.de)
-    Copyright            : (C) 2013 by Stefan Gerlach (stefan.gerlach@uni.kn)
+    Copyright            : (C) 2013-2017 by Stefan Gerlach (stefan.gerlach@uni.kn)
     Description          : widget for column properties
 
  ***************************************************************************/
@@ -50,26 +50,6 @@
 ColumnDock::ColumnDock(QWidget* parent) : QWidget(parent), m_column(0), \
m_initializing(false) {  ui.setupUi(this);
 
-	dateStrings<<"yyyy-MM-dd";
-	dateStrings<<"yyyy/MM/dd";
-	dateStrings<<"dd/MM/yyyy";
-	dateStrings<<"dd/MM/yy";
-	dateStrings<<"dd.MM.yyyy";
-	dateStrings<<"dd.MM.yy";
-	dateStrings<<"MM/yyyy";
-	dateStrings<<"dd.MM.";
-	dateStrings<<"yyyyMMdd";
-
-	timeStrings<<"hh";
-	timeStrings<<"hh ap";
-	timeStrings<<"hh:mm";
-	timeStrings<<"hh:mm ap";
-	timeStrings<<"hh:mm:ss";
-	timeStrings<<"hh:mm:ss.zzz";
-	timeStrings<<"hh:mm:ss:zzz";
-	timeStrings<<"mm:ss.zzz";
-	timeStrings<<"hhmmss";
-
 	connect(ui.leName, SIGNAL(returnPressed()), this, SLOT(nameChanged()));
 	connect(ui.leComment, SIGNAL(returnPressed()), this, SLOT(commentChanged()));
 	connect(ui.cbType, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged(int)));
@@ -81,13 +61,13 @@ ColumnDock::ColumnDock(QWidget* parent) : QWidget(parent), \
m_column(0), m_initia  }
 
 void ColumnDock::setColumns(QList<Column*> list) {
-	m_initializing=true;
+	m_initializing = true;
 	m_columnsList = list;
 	m_column = list.first();
 
 	//check whether we have non-editable columns (e.g. columns for residuals calculated \
in XYFitCurve)  bool nonEditable = false;
-	foreach (Column* col, m_columnsList) {
+	for (auto* col: m_columnsList) {
 		Spreadsheet* s = dynamic_cast<Spreadsheet*>(col->parentAspect());
 		if (s) {
 			if (dynamic_cast<FileDataSource*>(s)) {
@@ -102,7 +82,7 @@ void ColumnDock::setColumns(QList<Column*> list) {
 
 	if (list.size() == 1) {
 		//names and comments of non-editable columns in a file data source can be changed.
-		if ( !nonEditable && dynamic_cast<FileDataSource*>(m_column->parentAspect())!=0 ) \
{ +		if (!nonEditable && dynamic_cast<FileDataSource*>(m_column->parentAspect()) != \
0) {  ui.leName->setEnabled(false);
 			ui.leComment->setEnabled(false);
 		} else {
@@ -198,19 +178,10 @@ void ColumnDock::updateFormatWidgets(const \
AbstractColumn::ColumnMode columnMode  ui.cbFormat->addItem(i18n("Abbreviated day \
name"), QVariant("ddd"));  ui.cbFormat->addItem(i18n("Full day name"), \
QVariant("dddd"));  break;
-	case AbstractColumn::DateTime: {
-			foreach(const QString& s, dateStrings)
-				ui.cbFormat->addItem(s, QVariant(s));
-
-			foreach(const QString& s, timeStrings)
+	case AbstractColumn::DateTime:
+			for (const auto& s: AbstractColumn::dateTimeFormats())
 				ui.cbFormat->addItem(s, QVariant(s));
-
-			foreach(const QString& s1, dateStrings) {
-				foreach(const QString& s2, timeStrings)
-					ui.cbFormat->addItem(s1 + ' ' + s2, QVariant(s1 + ' ' + s2));
-			}
 			break;
-		}
 	}
 
 	if (columnMode == AbstractColumn::Numeric) {
@@ -295,7 +266,7 @@ void ColumnDock::typeChanged(int index) {
 	switch(columnMode) {
 	case AbstractColumn::Numeric: {
 			int digits = ui.sbPrecision->value();
-			foreach(Column* col, m_columnsList) {
+			for (auto* col: m_columnsList) {
 				col->beginMacro(i18n("%1: change column type", col->name()));
 				col->setColumnMode(columnMode);
 				Double2StringFilter* filter = \
static_cast<Double2StringFilter*>(col->outputFilter()); @@ -306,16 +277,15 @@ void \
ColumnDock::typeChanged(int index) {  break;
 		}
 	case AbstractColumn::Text:
-		foreach(Column* col, m_columnsList)
+		for (auto* col: m_columnsList)
 			col->setColumnMode(columnMode);
 		break;
 	case AbstractColumn::Month:
 	case AbstractColumn::Day:
 	case AbstractColumn::DateTime: {
-			QString format;
-			foreach(Column* col, m_columnsList) {
+			for (auto* col: m_columnsList) {
 				col->beginMacro(i18n("%1: change column type", col->name()));
-				format = ui.cbFormat->currentText();
+				QString format = ui.cbFormat->currentText();
 				col->setColumnMode(columnMode);
 				DateTime2StringFilter* filter = \
static_cast<DateTime2StringFilter*>(col->outputFilter());  filter->setFormat(format);
@@ -338,7 +308,7 @@ void ColumnDock::formatChanged(int index) {
 
 	switch(mode) {
 	case AbstractColumn::Numeric: {
-			foreach(Column* col, m_columnsList) {
+			for (auto* col: m_columnsList) {
 				Double2StringFilter* filter = \
                static_cast<Double2StringFilter*>(col->outputFilter());
 				filter->setNumericFormat(ui.cbFormat->itemData(format_index).toChar().toLatin1());
  }
@@ -350,7 +320,7 @@ void ColumnDock::formatChanged(int index) {
 	case AbstractColumn::Day:
 	case AbstractColumn::DateTime: {
 			QString format = ui.cbFormat->itemData( ui.cbFormat->currentIndex() ).toString();
-			foreach(Column* col, m_columnsList) {
+			for (auto* col: m_columnsList) {
 				DateTime2StringFilter* filter = \
static_cast<DateTime2StringFilter*>(col->outputFilter());  filter->setFormat(format);
 			}
@@ -363,7 +333,7 @@ void ColumnDock::precisionChanged(int digits) {
 	if (m_initializing)
 		return;
 
-	foreach(Column* col, m_columnsList) {
+	for (auto* col: m_columnsList) {
 		Double2StringFilter * filter = \
static_cast<Double2StringFilter*>(col->outputFilter());  \
filter->setNumDigits(digits);  }
@@ -374,7 +344,7 @@ void ColumnDock::plotDesignationChanged(int index) {
 		return;
 
 	AbstractColumn::PlotDesignation pd=AbstractColumn::PlotDesignation(index);
-	foreach(Column* col, m_columnsList)
+	for (auto* col: m_columnsList)
 		col->setPlotDesignation(pd);
 }
 
diff --git a/src/kdefrontend/dockwidgets/ColumnDock.h \
b/src/kdefrontend/dockwidgets/ColumnDock.h index 800d78b6..00990bc5 100644
--- a/src/kdefrontend/dockwidgets/ColumnDock.h
+++ b/src/kdefrontend/dockwidgets/ColumnDock.h
@@ -1,10 +1,10 @@
 /***************************************************************************
     File                 : ColumnDock.h
     Project              : LabPlot
-    --------------------------------------------------------------------
-    Copyright            : (C) 2011 Alexander Semke
-    Email (use @ for *)  : alexander.semke*web.de
     Description          : widget for column properties
+    --------------------------------------------------------------------
+    Copyright            : (C) 2011 Alexander Semke (alexander.semke@web.de)
+    Copyright            : (C) 2017 Stefan Gerlach (stefan.gerlach@uni.kn)
 
  ***************************************************************************/
 
@@ -31,9 +31,10 @@
 #define COLUMNDOCK_H
 
 #include "backend/core/column/Column.h"
-#include <QList>
 #include "ui_columndock.h"
 
+template <class T> class QList;
+
 class ColumnDock : public QWidget {
 	Q_OBJECT
 
@@ -46,8 +47,6 @@ private:
 	QList<Column*> m_columnsList;
 	Column* m_column;
 	bool m_initializing;
-	QStringList dateStrings;
-	QStringList timeStrings;
 
 	void updateFormatWidgets(const AbstractColumn::ColumnMode);
 
diff --git a/src/kdefrontend/dockwidgets/SpreadsheetDock.cpp \
b/src/kdefrontend/dockwidgets/SpreadsheetDock.cpp index 31c03a10..ea1b2213 100644
--- a/src/kdefrontend/dockwidgets/SpreadsheetDock.cpp
+++ b/src/kdefrontend/dockwidgets/SpreadsheetDock.cpp
@@ -61,20 +61,20 @@ SpreadsheetDock::SpreadsheetDock(QWidget* parent): \
QWidget(parent), m_spreadshee  }
 
 /*!
-
+	set the current spreadsheet(s)
 */
-void SpreadsheetDock::setSpreadsheets(QList<Spreadsheet*> list){
+void SpreadsheetDock::setSpreadsheets(QList<Spreadsheet*> list) {
 	m_initializing = true;
 	m_spreadsheetList = list;
 	m_spreadsheet = list.first();
 
-	if (list.size()==1){
+	if (list.size() == 1) {
 		ui.leName->setEnabled(true);
 		ui.leComment->setEnabled(true);
 
 		ui.leName->setText(m_spreadsheet->name());
 		ui.leComment->setText(m_spreadsheet->comment());
-	}else{
+	} else {
 		//disable the fields "Name" and "Comment" if there are more then one spreadsheet
 		ui.leName->setEnabled(false);
 		ui.leComment->setEnabled(false);
@@ -99,42 +99,41 @@ void SpreadsheetDock::setSpreadsheets(QList<Spreadsheet*> list){
 //*************************************************************
 //****** SLOTs for changes triggered in SpreadsheetDock *******
 //*************************************************************
-void SpreadsheetDock::nameChanged(){
+void SpreadsheetDock::nameChanged() {
 	if (m_initializing)
 		return;
 
 	m_spreadsheet->setName(ui.leName->text());
 }
 
-void SpreadsheetDock::commentChanged(){
+void SpreadsheetDock::commentChanged() {
 	if (m_initializing)
 		return;
 
 	m_spreadsheet->setComment(ui.leComment->text());
 }
 
-void SpreadsheetDock::rowCountChanged(int rows){
+void SpreadsheetDock::rowCountChanged(int rows) {
 	if (m_initializing)
 		return;
 
-	foreach(Spreadsheet* spreadsheet, m_spreadsheetList)
+	for (auto* spreadsheet: m_spreadsheetList)
 		spreadsheet->setRowCount(rows);
 }
 
-void SpreadsheetDock::columnCountChanged(int columns){
+void SpreadsheetDock::columnCountChanged(int columns) {
 	if (m_initializing)
 		return;
 
-	foreach(Spreadsheet* spreadsheet, m_spreadsheetList)
+	for (auto* spreadsheet: m_spreadsheetList)
 		spreadsheet->setColumnCount(columns);
 }
 
 /*!
   switches on/off  the comment header in the views of the selected spreadsheets.
 */
-void SpreadsheetDock::commentsShownChanged(int state){
-	Spreadsheet* spreadsheet;
-	foreach(spreadsheet, m_spreadsheetList)
+void SpreadsheetDock::commentsShownChanged(int state) {
+	for (auto* spreadsheet: m_spreadsheetList)
 		qobject_cast<SpreadsheetView*>(spreadsheet->view())->showComments(state);
 }
 
@@ -179,7 +178,7 @@ void SpreadsheetDock::load() {
 	ui.sbColumnCount->setValue(m_spreadsheet->columnCount());
 	ui.sbRowCount->setValue(m_spreadsheet->rowCount());
 
-	SpreadsheetView* view= qobject_cast<SpreadsheetView*>(m_spreadsheet->view());
+	SpreadsheetView* view = qobject_cast<SpreadsheetView*>(m_spreadsheet->view());
 	ui.cbShowComments->setChecked(view->areCommentsShown());
 }
 
@@ -187,7 +186,7 @@ void SpreadsheetDock::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)
+	if (index != -1)
 		name = config.name().right(config.name().size() - index - 1);
 	else
 		name = config.name();
@@ -206,13 +205,13 @@ void SpreadsheetDock::loadConfigFromTemplate(KConfig& config) {
 /*!
 	loads saved spreadsheet properties from \c config.
  */
-void SpreadsheetDock::loadConfig(KConfig& config){
+void SpreadsheetDock::loadConfig(KConfig& config) {
 	KConfigGroup group = config.group( "Spreadsheet" );
 
 	ui.sbColumnCount->setValue(group.readEntry("ColumnCount", \
m_spreadsheet->columnCount()));  ui.sbRowCount->setValue(group.readEntry("RowCount", \
m_spreadsheet->rowCount()));  
-	SpreadsheetView* view= qobject_cast<SpreadsheetView*>(m_spreadsheet->view());
+	SpreadsheetView* view = qobject_cast<SpreadsheetView*>(m_spreadsheet->view());
 	ui.cbShowComments->setChecked(group.readEntry("ShowComments", \
view->areCommentsShown()));  }
 


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

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