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/Abstrac= tColumn.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/AbstractC= olumn.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") << QLatin1Strin= g("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/da= tasources/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/kdefron= tend/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::separator= Characters()); asciiOptionsWidget.cbCommentCharacter->addItems(AsciiFilter::commentChara= cters()); asciiOptionsWidget.cbNumbersFormat->addItems(AsciiFilter::numberFormats()= ); - asciiOptionsWidget.cbDateTimeFormat->addItems(AsciiFilter::dateTimeFormat= s()); + asciiOptionsWidget.cbDateTimeFormat->addItems(AbstractColumn::dateTimeFor= mats()); asciiOptionsWidget.chbTranspose->hide(); //TODO: enable later ui.swOptions->insertWidget(FileDataSource::Ascii, asciiw); = diff --git a/src/kdefrontend/dockwidgets/ColumnDock.cpp b/src/kdefrontend/d= ockwidgets/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.sem= ke@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(typeChang= ed(int))); @@ -81,13 +61,13 @@ ColumnDock::ColumnDock(QWidget* parent) : QWidget(paren= t), m_column(0), m_initia } = void ColumnDock::setColumns(QList list) { - m_initializing=3Dtrue; + m_initializing =3D true; m_columnsList =3D list; m_column =3D list.first(); = //check whether we have non-editable columns (e.g. columns for residuals = calculated in XYFitCurve) bool nonEditable =3D false; - foreach (Column* col, m_columnsList) { + for (auto* col: m_columnsList) { Spreadsheet* s =3D dynamic_cast(col->parentAspect()); if (s) { if (dynamic_cast(s)) { @@ -102,7 +82,7 @@ void ColumnDock::setColumns(QList list) { = if (list.size() =3D=3D 1) { //names and comments of non-editable columns in a file data source can b= e changed. - if ( !nonEditable && dynamic_cast(m_column->parentAspec= t())!=3D0 ) { + if (!nonEditable && dynamic_cast(m_column->parentAspect= ()) !=3D 0) { ui.leName->setEnabled(false); ui.leComment->setEnabled(false); } else { @@ -198,19 +178,10 @@ void ColumnDock::updateFormatWidgets(const AbstractCo= lumn::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 =3D=3D AbstractColumn::Numeric) { @@ -295,7 +266,7 @@ void ColumnDock::typeChanged(int index) { switch(columnMode) { case AbstractColumn::Numeric: { int digits =3D 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 =3D static_cast(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 =3D ui.cbFormat->currentText(); + QString format =3D ui.cbFormat->currentText(); col->setColumnMode(columnMode); DateTime2StringFilter* filter =3D static_cast(= 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 =3D static_cast(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 =3D ui.cbFormat->itemData( ui.cbFormat->currentIndex() )= .toString(); - foreach(Column* col, m_columnsList) { + for (auto* col: m_columnsList) { DateTime2StringFilter* filter =3D static_cast(= 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 =3D static_cast(col->= outputFilter()); filter->setNumDigits(digits); } @@ -374,7 +344,7 @@ void ColumnDock::plotDesignationChanged(int index) { return; = AbstractColumn::PlotDesignation pd=3DAbstractColumn::PlotDesignation(inde= x); - foreach(Column* col, m_columnsList) + for (auto* col: m_columnsList) col->setPlotDesignation(pd); } = diff --git a/src/kdefrontend/dockwidgets/ColumnDock.h b/src/kdefrontend/doc= kwidgets/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.d= e) + Copyright : (C) 2017 Stefan Gerlach (stefan.gerlach@uni.kn) = *************************************************************************= **/ = @@ -31,9 +31,10 @@ #define COLUMNDOCK_H = #include "backend/core/column/Column.h" -#include #include "ui_columndock.h" = +template class QList; + class ColumnDock : public QWidget { Q_OBJECT = @@ -46,8 +47,6 @@ private: QList 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/kdefront= end/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): QWid= get(parent), m_spreadshee } = /*! - + set the current spreadsheet(s) */ -void SpreadsheetDock::setSpreadsheets(QList list){ +void SpreadsheetDock::setSpreadsheets(QList list) { m_initializing =3D true; m_spreadsheetList =3D list; m_spreadsheet =3D list.first(); = - if (list.size()=3D=3D1){ + if (list.size() =3D=3D 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 spr= eadsheet ui.leName->setEnabled(false); ui.leComment->setEnabled(false); @@ -99,42 +99,41 @@ void SpreadsheetDock::setSpreadsheets(QList 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 spreads= heets. */ -void SpreadsheetDock::commentsShownChanged(int state){ - Spreadsheet* spreadsheet; - foreach(spreadsheet, m_spreadsheetList) +void SpreadsheetDock::commentsShownChanged(int state) { + for (auto* spreadsheet: m_spreadsheetList) qobject_cast(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=3D qobject_cast(m_spreadsheet->vi= ew()); + SpreadsheetView* view =3D qobject_cast(m_spreadsheet->v= iew()); ui.cbShowComments->setChecked(view->areCommentsShown()); } = @@ -187,7 +186,7 @@ void SpreadsheetDock::loadConfigFromTemplate(KConfig& c= onfig) { //extract the name of the template from the file name QString name; int index =3D config.name().lastIndexOf(QDir::separator()); - if (index!=3D-1) + if (index !=3D -1) name =3D config.name().right(config.name().size() - index - 1); else name =3D 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 =3D config.group( "Spreadsheet" ); = ui.sbColumnCount->setValue(group.readEntry("ColumnCount", m_spreadsheet->= columnCount())); ui.sbRowCount->setValue(group.readEntry("RowCount", m_spreadsheet->rowCou= nt())); = - SpreadsheetView* view=3D qobject_cast(m_spreadsheet->vi= ew()); + SpreadsheetView* view =3D qobject_cast(m_spreadsheet->v= iew()); ui.cbShowComments->setChecked(group.readEntry("ShowComments", view->areCo= mmentsShown())); } =20