diff --git a/ApplicationCode/Application/CMakeLists_files.cmake b/ApplicationCode/Application/CMakeLists_files.cmake index 08afb25286..e248cc1d8d 100644 --- a/ApplicationCode/Application/CMakeLists_files.cmake +++ b/ApplicationCode/Application/CMakeLists_files.cmake @@ -17,6 +17,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiaMemoryCleanup.h ${CMAKE_CURRENT_LIST_DIR}/RiaFontCache.h ${CMAKE_CURRENT_LIST_DIR}/RiaEclipseFileNameTools.h ${CMAKE_CURRENT_LIST_DIR}/RiaFeatureCommandContext.h +${CMAKE_CURRENT_LIST_DIR}/RiaStringListSerializer.h ) set (SOURCE_GROUP_SOURCE_FILES @@ -38,6 +39,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RiaMemoryCleanup.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaFontCache.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaEclipseFileNameTools.cpp ${CMAKE_CURRENT_LIST_DIR}/RiaFeatureCommandContext.cpp +${CMAKE_CURRENT_LIST_DIR}/RiaStringListSerializer.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/Application/RiaStringListSerializer.cpp b/ApplicationCode/Application/RiaStringListSerializer.cpp new file mode 100644 index 0000000000..6e0cb9f3a9 --- /dev/null +++ b/ApplicationCode/Application/RiaStringListSerializer.cpp @@ -0,0 +1,69 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2019- Equinor 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RiaStringListSerializer.h" + +#include +#include + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaStringListSerializer::RiaStringListSerializer( const QString& key ) + : m_key( key ) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiaStringListSerializer::addString( const QString& textString, int maxStringCount ) +{ + QSettings settings; + QStringList stringList = settings.value( m_key ).toStringList(); + + stringList.removeAll( textString ); + stringList.prepend( textString ); + while ( stringList.size() > maxStringCount ) + stringList.removeLast(); + + settings.setValue( m_key, stringList ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiaStringListSerializer::removeString( const QString& textString ) +{ + QSettings settings; + QStringList files = settings.value( m_key ).toStringList(); + files.removeAll( textString ); + + settings.setValue( m_key, files ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QStringList RiaStringListSerializer::textStrings() +{ + QSettings settings; + QStringList stringList = settings.value( m_key ).toStringList(); + + return stringList; +} diff --git a/ApplicationCode/Application/RiaStringListSerializer.h b/ApplicationCode/Application/RiaStringListSerializer.h new file mode 100644 index 0000000000..4db179c458 --- /dev/null +++ b/ApplicationCode/Application/RiaStringListSerializer.h @@ -0,0 +1,40 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2019- Equinor 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include + +class QStringList; + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +class RiaStringListSerializer +{ +public: + RiaStringListSerializer( const QString& key ); + + void addString( const QString& textString, int maxStringCount ); + void removeString( const QString& textString ); + + QStringList textStrings(); + +private: + QString m_key; +}; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp index 8aba5de9da..89f31c11b7 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.cpp @@ -21,6 +21,7 @@ #include "RiaApplication.h" #include "RiaGuiApplication.h" #include "RiaLogging.h" +#include "RiaStringListSerializer.h" #include "RiaSummaryCurveDefinition.h" #include "RifSummaryReaderInterface.h" @@ -384,14 +385,10 @@ void RimSummaryPlotFilterTextCurveSetEditor::fieldChangedByUi( const caf::PdmFie m_curveFilterText = curveFilterTextWithoutOutdatedLabel(); { - if ( m_historyItems.indexOf( m_curveFilterText ) == -1 ) - { - m_historyItems.push_front( m_curveFilterText ); - while ( m_historyItems.size() > 10 ) - { - m_historyItems.pop_back(); - } - } + RiaStringListSerializer stringListSerializer( curveFilterRecentlyUsedRegistryKey() ); + + int maxItemCount = 10; + stringListSerializer.addString( m_curveFilterText, maxItemCount ); } m_curveFilterText.uiCapability()->updateConnectedEditors(); @@ -485,7 +482,9 @@ QList if ( fieldNeedingOptions == &m_curveFilterText ) { - for ( const auto& s : m_historyItems ) + RiaStringListSerializer stringListSerializer( curveFilterRecentlyUsedRegistryKey() ); + + for ( const auto& s : stringListSerializer.textStrings() ) { options.push_back( caf::PdmOptionItemInfo( s, s ) ); } @@ -607,3 +606,11 @@ QString RimSummaryPlotFilterTextCurveSetEditor::curveFilterTextWithoutOutdatedLa return filterText; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimSummaryPlotFilterTextCurveSetEditor::curveFilterRecentlyUsedRegistryKey() +{ + return "curveFilterRecentlyUsedStrings"; +} diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h index 33ffe8ed64..21aa84ee16 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotFilterTextCurveSetEditor.h @@ -57,11 +57,13 @@ private: std::vector selectedSummarySources() const; QString curveFilterTextWithoutOutdatedLabel() const; + static QString curveFilterRecentlyUsedRegistryKey(); + +private: caf::PdmPtrArrayField m_selectedSources; caf::PdmField m_curveFilterLabelText; caf::PdmField m_curveFilterText; - QStringList m_historyItems; bool m_isFieldRecentlyChangedFromGui; };