Minor issues related to release

* Add shortcut for Plot Editor, and modify how command features are triggered
Use Ctrl-E to launch the Plot Editor.

* Add optional use of NOECHO and ECHO keywords in GRDECL files
* Add ECHO keywords to sector model export
* Add Help button to Preferences
This commit is contained in:
Magne Sjaastad 2023-02-20 08:18:08 +01:00
parent f761f1e816
commit 1654fe8c9c
28 changed files with 219 additions and 95 deletions

View File

@ -232,6 +232,9 @@ RiaPreferences::RiaPreferences()
CAF_PDM_InitField( &m_openExportedPdfInViewer, "openExportedPdfInViewer", false, "Open Exported PDF in Viewer" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_openExportedPdfInViewer );
CAF_PDM_InitField( &m_writeEchoInGrdeclFiles, "writeEchoInGrdeclFiles", false, "Write NOECHO and ECHO in GRDECL files" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_writeEchoInGrdeclFiles );
CAF_PDM_InitField( &m_useQtChartsPlotByDefault, "useQtChartsPlotByDefault", false, "Use QtChart as Default Plot Type" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_useQtChartsPlotByDefault );
@ -446,6 +449,7 @@ void RiaPreferences::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
caf::PdmUiGroup* exportGroup = uiOrdering.addNewGroup( "Export" );
exportGroup->add( &csvTextExportFieldSeparator );
exportGroup->add( &m_openExportedPdfInViewer );
exportGroup->add( &m_writeEchoInGrdeclFiles );
}
else if ( RiaApplication::enableDevelopmentFeatures() && uiConfigName == RiaPreferences::tabNameSystem() )
{
@ -753,6 +757,14 @@ bool RiaPreferences::useQtChartsAsDefaultPlotType() const
return m_useQtChartsPlotByDefault;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaPreferences::writeEchoInGrdeclFiles() const
{
return m_writeEchoInGrdeclFiles;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -85,6 +85,7 @@ public:
void setLastUsedPlotTemplatePath( const QString& templatePath );
bool openExportedPdfInViewer() const;
bool useQtChartsAsDefaultPlotType() const;
bool writeEchoInGrdeclFiles() const;
RiaDefines::ThemeEnum guiTheme() const;
@ -184,6 +185,7 @@ private:
caf::PdmField<double> m_pageTopMargin;
caf::PdmField<double> m_pageBottomMargin;
caf::PdmField<bool> m_openExportedPdfInViewer;
caf::PdmField<bool> m_writeEchoInGrdeclFiles;
caf::PdmField<QString> m_plotTemplateFolders;
caf::PdmField<int> m_maxPlotTemplateFoldersDepth;

View File

@ -19,6 +19,7 @@
#include "RiaNetworkTools.h"
#include <QDesktopServices>
#include <QErrorMessage>
#include <QEventLoop>
#include <QNetworkAccessManager>
#include <QNetworkReply>
@ -26,6 +27,28 @@
#include <QStringList>
#include <QUrl>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaNetworkTools::openSearchPage( const QString& searchText )
{
QString url = QString( "https://resinsight.org/search/?q=" ) + searchText;
RiaNetworkTools::openUrl( url );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiaNetworkTools::openUrlWithErrorReporting( const QString& urlString )
{
if ( !QDesktopServices::openUrl( urlString ) )
{
QErrorMessage* errorHandler = QErrorMessage::qtHandler();
errorHandler->showMessage( "Failed open browser with the following url\n\n" + urlString );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -28,6 +28,8 @@
class RiaNetworkTools
{
public:
static void openSearchPage( const QString& searchText );
static void openUrlWithErrorReporting( const QString& urlString );
static void openUrl( const QString& urlString );
static void createAndOpenUrlWithFallback( const QString& urlSubString );
static void openUrlWithFallback( const QStringList& urlList );

View File

@ -110,6 +110,7 @@ caf::PdmScriptResponse RicfExportProperty::execute()
eclipseKeyword = m_propertyName;
}
bool writeEchoKeywords = false;
QString errMsg;
if ( !RicEclipseCellResultToFileImpl::writePropertyToTextFile( filePath,
eclipseCase->eclipseCaseData(),
@ -117,6 +118,7 @@ caf::PdmScriptResponse RicfExportProperty::execute()
m_propertyName,
eclipseKeyword,
m_undefinedValue,
writeEchoKeywords,
&errMsg ) )
{
return caf::PdmScriptResponse( caf::PdmScriptResponse::COMMAND_ERROR, errMsg );

View File

@ -152,12 +152,14 @@ caf::PdmScriptResponse RicfExportPropertyInViews::execute()
QString errorMsg;
bool worked = RicEclipseCellResultToFileImpl::writeResultToTextFile( filePath,
bool writeEchoKeywords = false;
bool worked = RicEclipseCellResultToFileImpl::writeResultToTextFile( filePath,
eclipseCase->eclipseCaseData(),
resultAccessor.p(),
propertyName,
m_undefinedValue,
"exportPropertiesInViews",
writeEchoKeywords,
&errorMsg );
if ( !worked )
{

View File

@ -19,7 +19,9 @@
#include "RicEditPreferencesFeature.h"
#include "RiaGuiApplication.h"
#include "RiaNetworkTools.h"
#include "RiaPreferences.h"
#include "RimProject.h"
#include "RiuPropertyViewTabWidget.h"
@ -28,6 +30,8 @@
#include "cafPdmUiModelChangeDetector.h"
#include <QAction>
#include <QDialogButtonBox>
#include <QPushButton>
CAF_CMD_SOURCE_INIT( RicEditPreferencesFeature, "RicEditPreferencesFeature" );
@ -70,6 +74,10 @@ void RicEditPreferencesFeature::onActionTriggered( bool isChecked )
RiuPropertyViewTabWidget propertyDialog( nullptr, app->preferences(), "Preferences", tabNames );
propertyDialog.setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred );
auto pushButton = propertyDialog.dialogButtonBox()->addButton( "Help", QDialogButtonBox::HelpRole );
connect( pushButton, &QPushButton::clicked, this, &RicEditPreferencesFeature::showHelp );
if ( propertyDialog.exec() == QDialog::Accepted )
{
// Write preferences using QSettings and apply them to the application
@ -109,3 +117,11 @@ std::unique_ptr<RiaPreferences> RicEditPreferencesFeature::clonePreferences( con
return std::unique_ptr<RiaPreferences>( dynamic_cast<RiaPreferences*>( pdmClone ) );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicEditPreferencesFeature::showHelp()
{
RiaNetworkTools::openSearchPage( "preferences" );
}

View File

@ -36,4 +36,7 @@ protected:
void setupActionLook( QAction* actionToSetup ) override;
static std::unique_ptr<RiaPreferences> clonePreferences( const RiaPreferences* preferences );
private:
void showHelp();
};

View File

@ -22,6 +22,7 @@
#include "RiaApplication.h"
#include "RiaBaseDefs.h"
#include "RiaNetworkTools.h"
#include "RiaVersionInfo.h"
#include "RiuMainWindow.h"
@ -243,12 +244,7 @@ void RicHelpOpenUsersGuideFeature::onActionTriggered( bool isChecked )
this->disableModelChangeContribution();
QString usersGuideUrl = "https://resinsight.org/getting-started/overview/";
if ( !QDesktopServices::openUrl( usersGuideUrl ) )
{
QErrorMessage* errorHandler = QErrorMessage::qtHandler();
errorHandler->showMessage( "Failed open browser with the following url\n\n" + usersGuideUrl );
}
RiaNetworkTools::openUrlWithErrorReporting( usersGuideUrl );
}
//--------------------------------------------------------------------------------------------------
@ -258,7 +254,6 @@ void RicHelpOpenUsersGuideFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "&Users Guide" );
actionToSetup->setIcon( QIcon( ":/HelpCircle.svg" ) );
// applyShortcutWithHintToAction( actionToSetup, QKeySequence::HelpContents );
}
//--------------------------------------------------------------------------------------------------
@ -284,11 +279,7 @@ void RicSearchHelpFeature::onActionTriggered( bool isChecked )
usersGuideUrl = "https://resinsight.org/search/?q=" + uiItem->uiName();
}
if ( !QDesktopServices::openUrl( usersGuideUrl ) )
{
QErrorMessage* errorHandler = QErrorMessage::qtHandler();
errorHandler->showMessage( "Failed open browser with the following url\n\n" + usersGuideUrl );
}
RiaNetworkTools::openUrlWithErrorReporting( usersGuideUrl );
}
//--------------------------------------------------------------------------------------------------
@ -325,12 +316,7 @@ bool RicSearchIssuesHelpFeature::isCommandEnabled()
void RicSearchIssuesHelpFeature::onActionTriggered( bool isChecked )
{
QString usersGuideUrl = "https://github.com/OPM/ResInsight/issues";
if ( !QDesktopServices::openUrl( usersGuideUrl ) )
{
QErrorMessage* errorHandler = QErrorMessage::qtHandler();
errorHandler->showMessage( "Failed open browser with the following url\n\n" + usersGuideUrl );
}
RiaNetworkTools::openUrlWithErrorReporting( usersGuideUrl );
}
//--------------------------------------------------------------------------------------------------
@ -356,12 +342,7 @@ bool RicCreateNewIssueHelpFeature::isCommandEnabled()
void RicCreateNewIssueHelpFeature::onActionTriggered( bool isChecked )
{
QString usersGuideUrl = "https://github.com/OPM/ResInsight/issues/new";
if ( !QDesktopServices::openUrl( usersGuideUrl ) )
{
QErrorMessage* errorHandler = QErrorMessage::qtHandler();
errorHandler->showMessage( "Failed open browser with the following url\n\n" + usersGuideUrl );
}
RiaNetworkTools::openUrlWithErrorReporting( usersGuideUrl );
}
//--------------------------------------------------------------------------------------------------

View File

@ -40,6 +40,7 @@ bool RicEclipseCellResultToFileImpl::writePropertyToTextFile( const QString&
const QString& resultName,
const QString& eclipseKeyword,
const double undefinedValue,
bool writeEchoKeywords,
QString* errorMsg )
{
CVF_TIGHT_ASSERT( eclipseCase );
@ -62,6 +63,7 @@ bool RicEclipseCellResultToFileImpl::writePropertyToTextFile( const QString&
eclipseKeyword,
undefinedValue,
"writePropertyToTextFile",
writeEchoKeywords,
errorMsg );
}
@ -75,6 +77,7 @@ bool RicEclipseCellResultToFileImpl::writeBinaryResultToTextFile( const QString&
const QString& eclipseKeyword,
const double undefinedValue,
const QString& logPrefix,
bool writeEchoKeywords,
QString* errorMsg )
{
CVF_TIGHT_ASSERT( eclipseCase );
@ -86,7 +89,14 @@ bool RicEclipseCellResultToFileImpl::writeBinaryResultToTextFile( const QString&
return false;
}
return writeResultToTextFile( fileName, eclipseCase, resultAccessor.p(), eclipseKeyword, undefinedValue, logPrefix, errorMsg );
return writeResultToTextFile( fileName,
eclipseCase,
resultAccessor.p(),
eclipseKeyword,
undefinedValue,
logPrefix,
writeEchoKeywords,
errorMsg );
}
//--------------------------------------------------------------------------------------------------
@ -98,6 +108,7 @@ bool RicEclipseCellResultToFileImpl::writeResultToTextFile( const QString&
const QString& eclipseKeyword,
const double undefinedValue,
const QString& logPrefix,
bool writeEchoKeywords,
QString* errorMsg )
{
CAF_ASSERT( errorMsg != nullptr );
@ -127,7 +138,7 @@ bool RicEclipseCellResultToFileImpl::writeResultToTextFile( const QString&
resultData.push_back( resultValue );
}
writeDataToTextFile( &file, eclipseKeyword, resultData );
writeDataToTextFile( &file, writeEchoKeywords, eclipseKeyword, resultData );
return true;
}
@ -136,6 +147,7 @@ bool RicEclipseCellResultToFileImpl::writeResultToTextFile( const QString&
///
//--------------------------------------------------------------------------------------------------
void RicEclipseCellResultToFileImpl::writeDataToTextFile( QFile* file,
bool writeEchoKeywords,
const QString& eclipseKeyword,
const std::vector<double>& resultData )
{
@ -143,14 +155,20 @@ void RicEclipseCellResultToFileImpl::writeDataToTextFile( QFile*
textstream << "\n";
textstream << "-- Exported from ResInsight"
<< "\n";
textstream << eclipseKeyword << "\n" << qSetFieldWidth( 16 );
if ( writeEchoKeywords )
{
textstream << "NOECHO\n";
}
textstream << eclipseKeyword << "\n";
textstream.setFieldWidth( 16 );
textstream.setFieldAlignment( QTextStream::AlignRight );
caf::ProgressInfo pi( resultData.size(), QString( "Writing data to file %1" ).arg( file->fileName() ) );
size_t progressSteps = resultData.size() / 20;
size_t i;
for ( i = 0; i < resultData.size(); i++ )
for ( size_t i = 0; i < resultData.size(); i++ )
{
textstream << resultData[i];
@ -168,4 +186,10 @@ void RicEclipseCellResultToFileImpl::writeDataToTextFile( QFile*
textstream << "\n"
<< "/"
<< "\n";
if ( writeEchoKeywords )
{
textstream.setFieldWidth( 0 );
textstream << "ECHO\n";
}
}

View File

@ -40,6 +40,7 @@ public:
const QString& resultName,
const QString& eclipseKeyword,
const double undefinedValue,
bool writeEchoKeywords,
QString* errorMsg );
static bool writeBinaryResultToTextFile( const QString& fileName,
@ -49,6 +50,7 @@ public:
const QString& eclipseKeyword,
const double undefinedValue,
const QString& logPrefix,
bool writeEchoKeywords,
QString* errorMsg );
static bool writeResultToTextFile( const QString& fileName,
@ -57,7 +59,11 @@ public:
const QString& eclipseKeyword,
const double undefinedValue,
const QString& logPrefix,
bool writeEchoKeywords,
QString* errorMsg );
static void writeDataToTextFile( QFile* file, const QString& eclipseKeyword, const std::vector<double>& resultData );
static void writeDataToTextFile( QFile* file,
bool writeEchoKeywords,
const QString& eclipseKeyword,
const std::vector<double>& resultData );
};

View File

@ -156,15 +156,14 @@ void RicExportEclipseSectorModelFeature::executeCommand( RimEclipseView*
if ( exportSettings.exportParameters == RicExportEclipseSectorModelUi::EXPORT_TO_SEPARATE_FILE_PER_RESULT )
{
QFileInfo info( exportSettings.exportGridFilename() );
QDir dirPath = info.absoluteDir();
QString fileWriteMode = "w";
for ( QString keyword : keywords )
QDir dirPath = info.absoluteDir();
for ( const QString& keyword : keywords )
{
QString fileName = dirPath.absoluteFilePath( keyword + ".GRDECL" );
bool worked = RifEclipseInputFileTools::exportKeywords( fileName,
view->eclipseCase()->eclipseCaseData(),
{ keyword },
fileWriteMode,
exportSettings.writeEchoKeywords(),
min,
max,
refinement );
@ -176,18 +175,16 @@ void RicExportEclipseSectorModelFeature::executeCommand( RimEclipseView*
}
else
{
QString fileWriteMode = "w";
QString fileName = exportSettings.exportParametersFilename();
QString fileName = exportSettings.exportParametersFilename();
if ( exportSettings.exportParameters() == RicExportEclipseSectorModelUi::EXPORT_TO_GRID_FILE )
{
fileWriteMode = "a";
fileName = exportSettings.exportGridFilename();
fileName = exportSettings.exportGridFilename();
}
bool worked = RifEclipseInputFileTools::exportKeywords( fileName,
view->eclipseCase()->eclipseCaseData(),
keywords,
fileWriteMode,
exportSettings.writeEchoKeywords(),
min,
max,
refinement );
@ -204,7 +201,7 @@ void RicExportEclipseSectorModelFeature::executeCommand( RimEclipseView*
auto task = progress.task( "Export Faults", faultsProgressPercentage );
if ( exportSettings.exportFaults == RicExportEclipseSectorModelUi::EXPORT_TO_SEPARATE_FILE_PER_RESULT )
{
for ( auto faultInView : view->faultCollection()->faults() )
for ( const auto& faultInView : view->faultCollection()->faults() )
{
auto rigFault = faultInView->faultGeometry();
QString fileName = QString( "%1.GRDECL" ).arg( rigFault->name() );
@ -299,17 +296,14 @@ void RicExportEclipseSectorModelFeature::setupActionLook( QAction* actionToSetup
RimEclipseView* RicExportEclipseSectorModelFeature::selectedView() const
{
auto contextViewer = dynamic_cast<RiuViewer*>( caf::CmdFeatureManager::instance()->currentContextMenuTargetWidget() );
if ( contextViewer != nullptr )
{
// Command is triggered from viewer
Rim3dView* activeView = RiaApplication::instance()->activeMainOrComparisonGridView();
return dynamic_cast<RimEclipseView*>( activeView );
}
else
{
// Command triggered from project tree or file menu
RimEclipseView* view = caf::SelectionManager::instance()->selectedItemAncestorOfType<RimEclipseView>();
return view;
}
// Command triggered from project tree or file menu
auto view = caf::SelectionManager::instance()->selectedItemAncestorOfType<RimEclipseView>();
return view;
}

View File

@ -19,6 +19,7 @@
#include "RicExportEclipseSectorModelUi.h"
#include "RiaApplication.h"
#include "RiaPreferences.h"
#include "RiaResultNames.h"
#include "RigActiveCellInfo.h"
@ -118,6 +119,11 @@ RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi()
CAF_PDM_InitFieldNoDefault( &selectedKeywords, "ExportMainKeywords", "Keywords to Export" );
CAF_PDM_InitField( &m_writeEchoInGrdeclFiles,
"WriteEchoInGrdeclFiles",
RiaPreferences::current()->writeEchoInGrdeclFiles(),
"Write NOECHO and ECHO" );
CAF_PDM_InitFieldNoDefault( &m_exportFolder, "ExportFolder", "Export Folder" );
m_exportFolder = defaultFolder();
@ -355,6 +361,8 @@ void RicExportEclipseSectorModelUi::defineUiOrdering( QString uiConfigName, caf:
{
caf::PdmUiGroup* resultsGroup = uiOrdering.addNewGroup( "Parameter Export" );
resultsGroup->add( &m_writeEchoInGrdeclFiles );
resultsGroup->add( &exportParameters );
if ( exportParameters() != EXPORT_NO_RESULTS )
{
@ -608,3 +616,11 @@ QString RicExportEclipseSectorModelUi::exportParametersFilename() const
{
return m_exportFolder().path() + "/" + m_exportParametersFilename();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicExportEclipseSectorModelUi::writeEchoKeywords() const
{
return m_writeEchoInGrdeclFiles;
}

View File

@ -77,6 +77,7 @@ public:
QString exportFaultsFilename() const;
QString exportGridFilename() const;
QString exportParametersFilename() const;
bool writeEchoKeywords() const;
caf::PdmField<bool> exportGrid;
caf::PdmField<bool> exportInLocalCoordinates;
@ -120,6 +121,7 @@ private:
caf::PdmField<QString> m_exportFaultsFilename;
caf::PdmField<QString> m_exportParametersFilename;
caf::PdmField<QString> m_exportGridFilename;
caf::PdmField<bool> m_writeEchoInGrdeclFiles;
RigEclipseCaseData* m_caseData;
cvf::Vec3i m_visibleMin;

View File

@ -122,6 +122,7 @@ void RicSaveEclipseInputPropertyFeature::onActionTriggered( bool isChecked )
inputProperty->resultName,
exportSettings.eclipseKeyword,
undefinedValue,
exportSettings.writeEchoInGrdeclFiles,
&errorMsg );
if ( isOk )
{

View File

@ -105,7 +105,10 @@ void RicSaveEclipseInputVisibleCellsFeature::executeCommand( RimEclipseView*
return;
}
RicEclipseCellResultToFileImpl::writeDataToTextFile( &exportFile, exportSettings.exportKeyword().text(), values );
RicEclipseCellResultToFileImpl::writeDataToTextFile( &exportFile,
exportSettings.writeEchoInGrdeclFiles,
exportSettings.exportKeyword().text(),
values );
}
//--------------------------------------------------------------------------------------------------

View File

@ -19,6 +19,7 @@
#include "RicSaveEclipseInputVisibleCellsUi.h"
#include "RiaApplication.h"
#include "RiaPreferences.h"
#include "cafPdmUiFilePathEditor.h"
#include "cafPdmUiOrdering.h"
@ -54,6 +55,11 @@ RicSaveEclipseInputVisibleCellsUi::RicSaveEclipseInputVisibleCellsUi()
CAF_PDM_InitField( &hiddenActiveCellsValue, "HiddenActiveCellsValue", 0, "Hidden Active Cells Value" );
CAF_PDM_InitField( &inactiveCellsValue, "InactiveCellsValue", 0, "Inactive Cells Value" );
CAF_PDM_InitField( &writeEchoInGrdeclFiles,
"WriteEchoInGrdeclFiles",
RiaPreferences::current()->writeEchoInGrdeclFiles(),
"Write NOECHO and ECHO" );
exportFilename = getDefaultExportPath();
}
@ -89,6 +95,7 @@ void RicSaveEclipseInputVisibleCellsUi::defineUiOrdering( QString uiConfigName,
{
uiOrdering.add( &exportFilename );
uiOrdering.add( &exportKeyword );
uiOrdering.add( &writeEchoInGrdeclFiles );
uiOrdering.add( &visibleActiveCellsValue );
uiOrdering.add( &hiddenActiveCellsValue );
uiOrdering.add( &inactiveCellsValue );

View File

@ -49,6 +49,7 @@ public:
caf::PdmField<int> visibleActiveCellsValue;
caf::PdmField<int> hiddenActiveCellsValue;
caf::PdmField<int> inactiveCellsValue;
caf::PdmField<bool> writeEchoInGrdeclFiles;
protected:
void defineEditorAttribute( const caf::PdmFieldHandle* field,

View File

@ -110,6 +110,7 @@ void RicSaveEclipseResultAsInputPropertyExec::redo()
exportSettings.eclipseKeyword,
exportSettings.undefinedValue,
"saveEclipseResultAsInputPropertyExec",
exportSettings.writeEchoInGrdeclFiles,
&errMsg );
if ( !isOk )
{

View File

@ -93,9 +93,6 @@ void RicOpenSummaryPlotEditorFeature::onActionTriggered( bool isChecked )
RimProject* project = RimProject::current();
CVF_ASSERT( project );
RimSummaryMultiPlot* multiPlot =
dynamic_cast<RimSummaryMultiPlot*>( caf::SelectionManager::instance()->selectedItem() );
std::vector<RimSummaryCase*> selectedCases = caf::selectedObjectsByType<RimSummaryCase*>();
std::vector<RimSummaryCaseCollection*> selectedGroups = caf::selectedObjectsByType<RimSummaryCaseCollection*>();
@ -144,6 +141,12 @@ void RicOpenSummaryPlotEditorFeature::onActionTriggered( bool isChecked )
dialog->raise();
}
RimSummaryMultiPlot* multiPlot = nullptr;
if ( auto uiItem = dynamic_cast<caf::PdmObjectHandle*>( caf::SelectionManager::instance()->selectedItem() ) )
{
uiItem->firstAncestorOrThisOfType( multiPlot );
}
if ( multiPlot )
{
if ( multiPlot->summaryPlots().size() > 0 )
@ -168,4 +171,6 @@ void RicOpenSummaryPlotEditorFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setText( "Open Summary Plot Editor" );
actionToSetup->setIcon( QIcon( ":/SummaryPlotLight16x16.png" ) );
applyShortcutWithHintToAction( actionToSetup, QKeySequence( tr( "Ctrl+E" ) ) );
}

View File

@ -23,6 +23,9 @@
#include "RiaCellDividingTools.h"
#include "RiaLogging.h"
#include "RiaStringEncodingTools.h"
#include "RiaTextStringTools.h"
#include "ExportCommands/RicEclipseCellResultToFileImpl.h"
#include "RifEclipseInputPropertyLoader.h"
#include "RifEclipseKeywordContent.h"
@ -48,7 +51,6 @@
#include <QFileInfo>
#include <QTextStream>
#include "RiaTextStringTools.h"
#include "ert/ecl/ecl_box.hpp"
#include "ert/ecl/ecl_grid.hpp"
#include "ert/ecl/ecl_kw.h"
@ -392,17 +394,23 @@ bool RifEclipseInputFileTools::exportGrid( const QString& fileName,
bool RifEclipseInputFileTools::exportKeywords( const QString& resultFileName,
RigEclipseCaseData* eclipseCase,
const std::vector<QString>& keywords,
const QString& fileWriteMode,
bool writeEchoKeywords,
const cvf::Vec3st& min,
const cvf::Vec3st& maxIn,
const cvf::Vec3st& refinement )
{
FILE* filePtr = util_fopen( RiaStringEncodingTools::toNativeEncoded( resultFileName ).data(),
RiaStringEncodingTools::toNativeEncoded( fileWriteMode ).data() );
if ( !filePtr )
QFile exportFile( resultFileName );
if ( !exportFile.open( QIODevice::WriteOnly | QIODevice::Text ) )
{
return false;
}
if ( writeEchoKeywords )
{
QTextStream stream( &exportFile );
stream << "NOECHO\n";
}
RigCaseCellResultsData* cellResultsData = eclipseCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL );
RigActiveCellInfo* activeCells = cellResultsData->activeCellInfo();
RigMainGrid* mainGrid = eclipseCase->mainGrid();
@ -464,39 +472,22 @@ bool RifEclipseInputFileTools::exportKeywords( const QString& resul
}
}
ecl_kw_type* ecl_kw = nullptr;
// Multiple keywords can be exported to same file, so write ECHO keywords outside the loop
bool writeEchoKeywordsInExporterObject = false;
RicEclipseCellResultToFileImpl::writeDataToTextFile( &exportFile,
writeEchoKeywordsInExporterObject,
keyword,
filteredResults );
if ( keyword.endsWith( "NUM" ) )
{
std::vector<int> resultValuesInt;
resultValuesInt.reserve( filteredResults.size() );
for ( double val : filteredResults )
{
resultValuesInt.push_back( static_cast<int>( val ) );
}
ecl_kw =
ecl_kw_alloc_new( keyword.toLatin1().data(), (int)resultValuesInt.size(), ECL_INT, resultValuesInt.data() );
}
else
{
std::vector<float> resultValuesFloat;
resultValuesFloat.reserve( filteredResults.size() );
for ( double val : filteredResults )
{
resultValuesFloat.push_back( static_cast<float>( val ) );
}
ecl_kw = ecl_kw_alloc_new( keyword.toLatin1().data(),
(int)resultValuesFloat.size(),
ECL_FLOAT,
resultValuesFloat.data() );
}
ecl_kw_fprintf_grdecl( ecl_kw, filePtr );
ecl_kw_free( ecl_kw );
progress.incrementProgress();
}
fclose( filePtr );
if ( writeEchoKeywords )
{
QTextStream stream( &exportFile );
stream << "ECHO\n";
}
return true;
}
@ -738,7 +729,8 @@ bool RifEclipseInputFileTools::importFaultsFromFile( RigEclipseCaseData* eclipse
if ( f->name() == RiaResultNames::undefinedGridFaultName() ||
f->name() == RiaResultNames::undefinedGridFaultName() )
{
// Do not include undefined grid faults, as these are recomputed based on the imported faults from files
// Do not include undefined grid faults, as these are recomputed based on the imported faults from
// files
continue;
}

View File

@ -70,7 +70,7 @@ public:
static bool exportKeywords( const QString& resultFileName,
RigEclipseCaseData* eclipseCase,
const std::vector<QString>& keywords,
const QString& fileWriteMode,
bool writeEchoKeywords,
const cvf::Vec3st& min = cvf::Vec3st::ZERO,
const cvf::Vec3st& max = cvf::Vec3st::UNDEFINED,
const cvf::Vec3st& refinement = cvf::Vec3st( 1, 1, 1 ) );
@ -142,10 +142,6 @@ private:
static void readKeywordDataContent( QFile& data, qint64 filePos, QStringList* textContent, bool* isEditKeywordDetected );
static bool readDataFromKeyword( ecl_kw_type* eclipseKeywordData,
RigEclipseCaseData* caseData,
const QString& resultName,
QString* errMsg );
static void findGridKeywordPositions( const std::vector<RifKeywordAndFilePos>& keywords,
qint64* coordPos,
qint64* zcornPos,

View File

@ -17,6 +17,9 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RimBinaryExportSettings.h"
#include "RiaPreferences.h"
#include "cafPdmUiFilePathEditor.h"
CAF_PDM_SOURCE_INIT( RimBinaryExportSettings, "RimBinaryExportSettings" );
@ -32,6 +35,11 @@ RimBinaryExportSettings::RimBinaryExportSettings()
fileName.uiCapability()->setUiEditorTypeName( caf::PdmUiFilePathEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &eclipseKeyword, "EclipseKeyword", "Eclipse Keyword" );
CAF_PDM_InitField( &undefinedValue, "UndefinedValue", 0.0, "Undefined Value" );
CAF_PDM_InitField( &writeEchoInGrdeclFiles,
"WriteEchoInGrdeclFiles",
RiaPreferences::current()->writeEchoInGrdeclFiles(),
"Write NOECHO and ECHO" );
}
//--------------------------------------------------------------------------------------------------

View File

@ -35,6 +35,7 @@ public:
caf::PdmField<QString> fileName;
caf::PdmField<QString> eclipseKeyword;
caf::PdmField<double> undefinedValue;
caf::PdmField<bool> writeEchoInGrdeclFiles;
protected:
void defineEditorAttribute( const caf::PdmFieldHandle* field,

View File

@ -17,6 +17,9 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RimExportInputPropertySettings.h"
#include "RiaPreferences.h"
#include "cafPdmUiFilePathEditor.h"
CAF_PDM_SOURCE_INIT( RimExportInputSettings, "RimExportInputSettings" );
@ -31,6 +34,11 @@ RimExportInputSettings::RimExportInputSettings()
CAF_PDM_InitFieldNoDefault( &fileName, "Filename", "Export Filename" );
fileName.uiCapability()->setUiEditorTypeName( caf::PdmUiFilePathEditor::uiEditorTypeName() );
CAF_PDM_InitFieldNoDefault( &eclipseKeyword, "Keyword", "Eclipse Keyword" );
CAF_PDM_InitField( &writeEchoInGrdeclFiles,
"WriteEchoInGrdeclFiles",
RiaPreferences::current()->writeEchoInGrdeclFiles(),
"Write NOECHO and ECHO" );
}
//--------------------------------------------------------------------------------------------------

View File

@ -34,6 +34,7 @@ public:
caf::PdmField<QString> fileName;
caf::PdmField<QString> eclipseKeyword;
caf::PdmField<bool> writeEchoInGrdeclFiles;
protected:
void defineEditorAttribute( const caf::PdmFieldHandle* field,

View File

@ -57,9 +57,22 @@ bool RiuTreeViewEventFilter::activateFeatureFromKeyEvent( QKeyEvent* keyEvent )
{
QKeySequence keySeq( keyEvent->modifiers() + keyEvent->key() );
auto matches = caf::CmdFeatureManager::instance()->commandFeaturesMatchingKeyboardShortcut( keySeq );
bool wasFeatureActivated = false;
auto matches = caf::CmdFeatureManager::instance()->commandFeaturesMatchingKeyboardShortcut( keySeq );
if ( matches.size() == 1 )
{
// If a single command feature is found, trigger without checking canFeatureBeExecuted(), as the main task for
// this function to control visibility of menu items. A key event should always trigger the command.
matches.front()->actionTriggered( false );
wasFeatureActivated = true;
}
else
{
wasFeatureActivated = activateFirstEnabledFeature( matches );
}
bool wasFeatureActivated = activateFirstEnabledFeature( matches );
if ( wasFeatureActivated )
{
keyEvent->setAccepted( true );

View File

@ -40,11 +40,13 @@ public:
explicit RiuTreeViewEventFilter( QObject* parent, caf::PdmUiTreeView* treeView );
static bool activateFeatureFromKeyEvent( QKeyEvent* keyEvent );
static bool activateFirstEnabledFeature( const std::vector<caf::CmdFeature*>& features );
protected:
bool eventFilter( QObject* obj, QEvent* event ) override;
private:
static bool activateFirstEnabledFeature( const std::vector<caf::CmdFeature*>& features );
private:
caf::PdmUiTreeView* m_projectTreeView;
};