mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1690 Add import settings to pasting ASCII data to summary plot
This commit is contained in:
@@ -10,6 +10,7 @@ ${CEE_CURRENT_LIST_DIR}RicNewSummaryPlotFeature.h
|
||||
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFeature.h
|
||||
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFilterFeature.h
|
||||
${CEE_CURRENT_LIST_DIR}RicPasteAsciiDataToSummaryPlotFeature.h
|
||||
${CEE_CURRENT_LIST_DIR}RicPasteAsciiDataToSummaryPlotFeatureUi.h
|
||||
${CEE_CURRENT_LIST_DIR}RicViewZoomAllFeature.h
|
||||
${CEE_CURRENT_LIST_DIR}RicSummaryCurveSwitchAxisFeature.h
|
||||
${CEE_CURRENT_LIST_DIR}RicPasteSummaryPlotFeature.h
|
||||
@@ -25,6 +26,7 @@ ${CEE_CURRENT_LIST_DIR}RicNewSummaryPlotFeature.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFeature.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RicNewSummaryCurveFilterFeature.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RicPasteAsciiDataToSummaryPlotFeature.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RicPasteAsciiDataToSummaryPlotFeatureUi.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RicViewZoomAllFeature.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RicSummaryCurveSwitchAxisFeature.cpp
|
||||
${CEE_CURRENT_LIST_DIR}RicPasteSummaryPlotFeature.cpp
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include "OperationsUsingObjReferences/RicPasteFeatureImpl.h"
|
||||
#include "RicNewSummaryPlotFeature.h"
|
||||
#include "RicPasteAsciiDataToSummaryPlotFeatureUi.h"
|
||||
|
||||
#include "RiaLogging.h"
|
||||
|
||||
@@ -32,6 +33,8 @@
|
||||
#include "cafPdmDocument.h"
|
||||
#include "cafPdmObjectGroup.h"
|
||||
#include "cafSelectionManager.h"
|
||||
#include "cafPdmUiPropertyViewDialog.h"
|
||||
#include "cafPdmSettings.h"
|
||||
|
||||
#include "cvfAssert.h"
|
||||
#include "cvfColor3.h"
|
||||
@@ -89,9 +92,18 @@ void RicPasteAsciiDataToSummaryPlotFeature::onActionTriggered(bool isChecked)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
RicPasteAsciiDataToSummaryPlotFeatureUi pasteOptions;
|
||||
caf::PdmSettings::readFieldsFromApplicationStore(&pasteOptions);
|
||||
|
||||
caf::PdmUiPropertyViewDialog propertyDialog(NULL, &pasteOptions, "Set Paste Options", "");
|
||||
if (propertyDialog.exec() != QDialog::Accepted) return;
|
||||
|
||||
caf::PdmSettings::writeFieldsToApplicationStore(&pasteOptions);
|
||||
|
||||
QString text = getPastedData();
|
||||
|
||||
std::vector<RimAsciiDataCurve*> curves = parseCurves(text);
|
||||
std::vector<RimAsciiDataCurve*> curves = parseCurves(text, pasteOptions);
|
||||
|
||||
for (RimAsciiDataCurve* curve : curves)
|
||||
{
|
||||
@@ -138,7 +150,7 @@ bool RicPasteAsciiDataToSummaryPlotFeature::hasPastedText()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurves(QString& data)
|
||||
std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurves(QString& data, const RicPasteAsciiDataToSummaryPlotFeatureUi& settings)
|
||||
{
|
||||
std::vector<RimAsciiDataCurve*> curves;
|
||||
std::vector<QString> headers;
|
||||
@@ -180,7 +192,7 @@ std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurv
|
||||
// Skip empty lines
|
||||
if (line.isEmpty()) continue;
|
||||
|
||||
QStringList columns = line.split('\t');
|
||||
QStringList columns = line.split(settings.cellSeparator());
|
||||
|
||||
if (columns.size() != numColumns + 1)
|
||||
{
|
||||
@@ -188,7 +200,7 @@ std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurv
|
||||
continue;
|
||||
}
|
||||
|
||||
QDateTime date = parseDateString(columns[0]);
|
||||
QDateTime date = QDateTime::fromString(columns[0], settings.dateFormat());
|
||||
if (!date.isValid())
|
||||
{
|
||||
RiaLogging::warning(QString("First column of row %1 could not be parsed as a date: %2").arg(row).arg(columns[0]));
|
||||
@@ -199,7 +211,7 @@ std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurv
|
||||
for (size_t col = 1; col < columns.size(); ++col)
|
||||
{
|
||||
bool ok;
|
||||
values[col - 1].push_back(columns[static_cast<int>(col)].toDouble(&ok));
|
||||
values[col - 1].push_back(settings.decimalLocale().toDouble(columns[static_cast<int>(col)], &ok));
|
||||
if (!ok)
|
||||
{
|
||||
RiaLogging::warning(QString("Could not parse value at row %1 column %2 as double: %3. Defaulting to 0.0").arg(row).arg(col).arg(columns[static_cast<int>(col)]));
|
||||
@@ -227,10 +239,10 @@ std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurv
|
||||
switch (it.first)
|
||||
{
|
||||
case CURVE_GAS:
|
||||
color = RimSummaryCurveAppearanceCalculator::cycledRedColor(i);
|
||||
color = RimSummaryCurveAppearanceCalculator::cycledGreenColor(i);
|
||||
break;
|
||||
case CURVE_OIL:
|
||||
color = RimSummaryCurveAppearanceCalculator::cycledGreenColor(i);
|
||||
color = RimSummaryCurveAppearanceCalculator::cycledRedColor(i);
|
||||
break;
|
||||
case CURVE_WAT:
|
||||
color = RimSummaryCurveAppearanceCalculator::cycledBlueColor(i);
|
||||
@@ -246,21 +258,6 @@ std::vector<RimAsciiDataCurve*> RicPasteAsciiDataToSummaryPlotFeature::parseCurv
|
||||
return curves;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QDateTime RicPasteAsciiDataToSummaryPlotFeature::parseDateString(const QString& date)
|
||||
{
|
||||
QDateTime parsedDate;
|
||||
|
||||
parsedDate = QDateTime::fromString(date, "dd.MM.yyyy hh:mm");
|
||||
if (parsedDate.isValid()) return parsedDate;
|
||||
|
||||
parsedDate = QDateTime::fromString(date, "dd.MM.yyyy");
|
||||
|
||||
return parsedDate;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
class RimSummaryCurve;
|
||||
class RimSummaryCurveFilter;
|
||||
class RimAsciiDataCurve;
|
||||
class RicPasteAsciiDataToSummaryPlotFeatureUi;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@@ -55,9 +56,7 @@ private:
|
||||
static QString getPastedData();
|
||||
static bool hasPastedText();
|
||||
|
||||
static std::vector<RimAsciiDataCurve*> parseCurves(QString& data);
|
||||
|
||||
static QDateTime parseDateString(const QString& date);
|
||||
static std::vector<RimAsciiDataCurve*> parseCurves(QString& data, const RicPasteAsciiDataToSummaryPlotFeatureUi& settings);
|
||||
|
||||
static CurveType guessCurveType(const QString& curveName);
|
||||
};
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2017 Statoil ASA
|
||||
//
|
||||
// ResInsight is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
// FITNESS FOR A PARTICULAR PURPOSE.
|
||||
//
|
||||
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
||||
// for more details.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "RicPasteAsciiDataToSummaryPlotFeatureUi.h"
|
||||
|
||||
namespace caf {
|
||||
|
||||
template<>
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::DecimalSeparatorEnum::setUp()
|
||||
{
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DECIMAL_DOT, "DOT", "Dot: .");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DECIMAL_COMMA, "COMMA", "Comma: ,");
|
||||
setDefault(RicPasteAsciiDataToSummaryPlotFeatureUi::DECIMAL_DOT);
|
||||
}
|
||||
|
||||
template<>
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::DateFormatEnum::setUp()
|
||||
{
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_DDMMYYYY_DOT_SEPARATED, "dd.MM.yyyy", "Day.Month.Year (dd.MM.yyyy)");
|
||||
setDefault(RicPasteAsciiDataToSummaryPlotFeatureUi::DATE_DDMMYYYY_DOT_SEPARATED);
|
||||
}
|
||||
|
||||
template<>
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::TimeFormatEnum::setUp()
|
||||
{
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_NONE, "NONE", "None");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_HHMM, "hh:mm", "Hour:Minute (hh:mm)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_HHMMSS, "hh:mm:ss", "Hour:Minute:Second (hh:mm:ss)");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_HHMMSSZZZ, "hh:mm:ss.zzz", "Hour:Minute:Second.Millisecond (hh:mm:ss.zzz)");
|
||||
setDefault(RicPasteAsciiDataToSummaryPlotFeatureUi::TIME_NONE);
|
||||
}
|
||||
|
||||
template<>
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::CellSeparatorEnum::setUp()
|
||||
{
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::CELL_TAB, "TAB", "Tab");
|
||||
addItem(RicPasteAsciiDataToSummaryPlotFeatureUi::CELL_COMMA, "COMMA", "Comma");
|
||||
setDefault(RicPasteAsciiDataToSummaryPlotFeatureUi::CELL_TAB);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CAF_PDM_SOURCE_INIT(RicPasteAsciiDataToSummaryPlotFeatureUi, "RicPasteExcelToSummaryPlotFeatureUi");
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RicPasteAsciiDataToSummaryPlotFeatureUi::RicPasteAsciiDataToSummaryPlotFeatureUi()
|
||||
{
|
||||
CAF_PDM_InitObject("RicPasteAsciiDataToSummaryPlotFeatureUi", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_decimalSeparator, "DecimalSeparator", "Decimal Separator", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_dateFormat, "DateFormat", "Date Format", "", "", "");
|
||||
CAF_PDM_InitFieldNoDefault(&m_timeFormat, "TimeFormat", "Time Format", "", "", "");
|
||||
CAF_PDM_InitField(&m_useCustomDateFormat, "UseCustomDateFormat", false, "Use Custom Date Format", "", "", "");
|
||||
CAF_PDM_InitField(&m_customDateFormat, "CustomDateFormat", QString(), "Custom Date Format", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_cellSeparator, "CellSeparator", "Cell Separator", "", "", "");
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RicPasteAsciiDataToSummaryPlotFeatureUi::dateFormat() const
|
||||
{
|
||||
if (m_useCustomDateFormat())
|
||||
{
|
||||
return m_customDateFormat();
|
||||
}
|
||||
else
|
||||
{
|
||||
QString format = m_dateFormat().text();
|
||||
if (m_timeFormat() != TIME_NONE)
|
||||
{
|
||||
format += " " + m_timeFormat().text();
|
||||
}
|
||||
return format;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QLocale RicPasteAsciiDataToSummaryPlotFeatureUi::decimalLocale() const
|
||||
{
|
||||
switch (m_decimalSeparator())
|
||||
{
|
||||
case DECIMAL_COMMA:
|
||||
return QLocale::Norwegian;
|
||||
case DECIMAL_DOT:
|
||||
default:
|
||||
return QLocale::c();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RicPasteAsciiDataToSummaryPlotFeatureUi::cellSeparator() const
|
||||
{
|
||||
switch (m_cellSeparator())
|
||||
{
|
||||
case CELL_COMMA:
|
||||
return ",";
|
||||
case CELL_TAB:
|
||||
default:
|
||||
return "\t";
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicPasteAsciiDataToSummaryPlotFeatureUi::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
|
||||
{
|
||||
{
|
||||
caf::PdmUiGroup* valuesGroup = uiOrdering.addNewGroup("Values");
|
||||
valuesGroup->add(&m_decimalSeparator);
|
||||
}
|
||||
|
||||
{
|
||||
caf::PdmUiGroup* dateGroup = uiOrdering.addNewGroup("Dates");
|
||||
dateGroup->add(&m_useCustomDateFormat);
|
||||
if (m_useCustomDateFormat())
|
||||
{
|
||||
dateGroup->add(&m_customDateFormat);
|
||||
}
|
||||
else
|
||||
{
|
||||
dateGroup->add(&m_dateFormat);
|
||||
dateGroup->add(&m_timeFormat);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
caf::PdmUiGroup* cellGroup = uiOrdering.addNewGroup("Cells");
|
||||
|
||||
cellGroup->add(&m_cellSeparator);
|
||||
}
|
||||
|
||||
uiOrdering.skipRemainingFields();
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2017 Statoil ASA
|
||||
//
|
||||
// ResInsight is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
// FITNESS FOR A PARTICULAR PURPOSE.
|
||||
//
|
||||
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
||||
// for more details.
|
||||
//
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cafPdmObject.h"
|
||||
#include "cafPdmField.h"
|
||||
#include "cafAppEnum.h"
|
||||
|
||||
#include <QString>
|
||||
#include <QLocale>
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
//==================================================================================================
|
||||
class RicPasteAsciiDataToSummaryPlotFeatureUi : public caf::PdmObject
|
||||
{
|
||||
CAF_PDM_HEADER_INIT;
|
||||
|
||||
public:
|
||||
enum DecimalSeparator
|
||||
{
|
||||
DECIMAL_COMMA,
|
||||
DECIMAL_DOT,
|
||||
};
|
||||
|
||||
typedef caf::AppEnum<DecimalSeparator> DecimalSeparatorEnum;
|
||||
|
||||
enum DateFormat
|
||||
{
|
||||
DATE_DDMMYYYY_DOT_SEPARATED,
|
||||
};
|
||||
|
||||
typedef caf::AppEnum<DateFormat> DateFormatEnum;
|
||||
|
||||
enum TimeFormat
|
||||
{
|
||||
TIME_NONE,
|
||||
TIME_HHMM,
|
||||
TIME_HHMMSS,
|
||||
TIME_HHMMSSZZZ,
|
||||
};
|
||||
|
||||
typedef caf::AppEnum<TimeFormat> TimeFormatEnum;
|
||||
|
||||
enum CellSeparator
|
||||
{
|
||||
CELL_COMMA,
|
||||
CELL_TAB,
|
||||
};
|
||||
|
||||
typedef caf::AppEnum<CellSeparator> CellSeparatorEnum;
|
||||
|
||||
public:
|
||||
RicPasteAsciiDataToSummaryPlotFeatureUi();
|
||||
|
||||
QString dateFormat() const;
|
||||
QLocale decimalLocale() const;
|
||||
QString cellSeparator() const;
|
||||
|
||||
protected:
|
||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||
|
||||
private:
|
||||
caf::PdmField<DecimalSeparatorEnum> m_decimalSeparator;
|
||||
caf::PdmField<DateFormatEnum> m_dateFormat;
|
||||
caf::PdmField<TimeFormatEnum> m_timeFormat;
|
||||
caf::PdmField<bool> m_useCustomDateFormat;
|
||||
caf::PdmField<QString> m_customDateFormat;
|
||||
caf::PdmField<CellSeparatorEnum> m_cellSeparator;
|
||||
};
|
||||
Reference in New Issue
Block a user