From 9398ac7c0a08cf5f0d946e138d303114c5c6e7db Mon Sep 17 00:00:00 2001 From: Vladyslav Goncharuk Date: Fri, 6 Sep 2024 16:51:02 +0300 Subject: [PATCH] [ISSUE #26][SEARCH] Add the history of used regexp-s Signed-off-by: Vladyslav Goncharuk --- .../src/common/Definitions.cpp | 10 +- .../src/components/CMakeLists.txt | 1 + .../components/analyzer/api/Definitions.hpp | 14 +- .../api/IDLTMessageAnalyzerController.hpp | 8 + .../analyzer/src/CContinuousAnalyzer.cpp | 16 +- .../analyzer/src/CContinuousAnalyzer.hpp | 6 +- .../analyzer/src/CDLTRegexAnalyzerWorker.cpp | 2 +- .../components/analyzer/src/CMTAnalyzer.cpp | 10 +- .../components/analyzer/src/CMTAnalyzer.hpp | 6 +- .../components/analyzer/src/Definitions.cpp | 12 +- .../IDLTMessageAnalyzerControllerConsumer.cpp | 1 + .../filtersView/src/CFilterItemDelegate.cpp | 3 +- .../filtersView/src/CFiltersModel.cpp | 10 +- .../filtersView/src/CFiltersView.cpp | 4 +- .../groupedView/src/CGroupedView.cpp | 2 +- .../patternsView/api/CPatternsView.hpp | 4 +- .../patternsView/api/IPatternsModel.hpp | 2 +- .../patternsView/src/CPatternsModel.cpp | 10 +- .../patternsView/src/CPatternsView.cpp | 46 +- .../src/components/plotView/doc/doc.md | 8 + .../plotView/src/CCustomPlotExtended.cpp | 1 + .../plotView/src/CPlotViewComponent.cpp | 1 + .../src/components/plotView/src/QCPGantt.cpp | 12 + .../components/regexHistory/CMakeLists.txt | 1 + .../api/CRegexHistoryComponent.hpp | 35 ++ .../api/CRegexHistoryLineEdit.hpp | 26 + .../api/IRegexHistoryProvider.hpp | 23 + .../src/components/regexHistory/doc/doc.md | 25 + .../regexHistory/src/CMakeLists.txt | 20 + .../src/CRegexHistoryComponent.cpp | 82 ++++ .../src/CRegexHistoryLineEdit.cpp | 106 +++++ .../src/CRegexHistoryProvider.cpp | 449 ++++++++++++++++++ .../src/CRegexHistoryProvider.hpp | 104 ++++ .../src/IRegexHistoryProvider.cpp | 15 + .../src/CSearchResultHighlightingDelegate.cpp | 4 +- .../settings/api/ISettingsManager.hpp | 49 +- .../settings/src/CSettingsComponent.cpp | 7 +- .../settings/src/CSettingsManager.cpp | 318 +++++++++++-- .../settings/src/CSettingsManager.hpp | 65 ++- .../settings/src/ISettingsManager.cpp | 37 ++ .../src/dltmessageanalyzerplugin.cpp | 40 +- .../src/dltmessageanalyzerplugin.hpp | 4 + .../src/plugin/api/CDLTMessageAnalyzer.hpp | 5 +- .../src/plugin/api/form.h | 4 +- .../src/plugin/src/CDLTMessageAnalyzer.cpp | 128 ++++- .../src/plugin/src/CMakeLists.txt | 1 + .../src/plugin/src/form.cpp | 24 +- .../src/plugin/src/form.ui | 25 +- .../src/resources/dltmessageanalyzer.qrc | 2 + .../src/resources/png/alias_sug.png | Bin 0 -> 13998 bytes .../src/resources/png/regex_sug.png | Bin 0 -> 11994 bytes md/dev_docs/dev_docs.md | 1 + md/dev_docs/puml/DLT.puml | 14 + md/dev_docs/puml/DLT.svg | 49 +- md/dev_docs/puml/DLT_standalone.puml | 4 + md/dev_docs/puml/DLT_standalone.svg | 27 +- md/dev_docs/puml/DMA_Analyzer.svg | 33 +- md/dev_docs/puml/DMA_Analyzer_API.puml | 20 + md/dev_docs/puml/DMA_Analyzer_API.svg | 72 ++- .../puml/DMA_Analyzer_API_standalone.svg | 24 +- md/dev_docs/puml/DMA_Analyzer_standalone.svg | 26 +- md/dev_docs/puml/DMA_Common.svg | 40 +- md/dev_docs/puml/DMA_Common_standalone.svg | 17 +- md/dev_docs/puml/DMA_FiltersView.svg | 33 +- md/dev_docs/puml/DMA_FiltersView_API.svg | 43 +- .../puml/DMA_FiltersView_API_standalone.svg | 25 +- .../puml/DMA_FiltersView_standalone.svg | 21 +- md/dev_docs/puml/DMA_Framework_Base.svg | 16 +- .../puml/DMA_Framework_Base_standalone.svg | 12 +- md/dev_docs/puml/DMA_Framework_Component.puml | 10 + md/dev_docs/puml/DMA_Framework_Component.svg | 60 ++- .../DMA_Framework_Component_standalone.svg | 14 +- md/dev_docs/puml/DMA_GroupedView.svg | 23 +- md/dev_docs/puml/DMA_GroupedView_API.svg | 35 +- .../puml/DMA_GroupedView_API_standalone.svg | 23 +- .../puml/DMA_GroupedView_standalone.svg | 18 +- md/dev_docs/puml/DMA_Log.svg | 25 +- md/dev_docs/puml/DMA_Log_API.svg | 25 +- md/dev_docs/puml/DMA_Log_API_standalone.svg | 16 +- md/dev_docs/puml/DMA_Log_standalone.svg | 14 +- md/dev_docs/puml/DMA_Logo_API.svg | 23 +- md/dev_docs/puml/DMA_Logo_API_standalone.svg | 17 +- md/dev_docs/puml/DMA_LogsWrapper.svg | 30 +- md/dev_docs/puml/DMA_LogsWrapper_API.svg | 60 ++- .../puml/DMA_LogsWrapper_API_standalone.svg | 25 +- .../puml/DMA_LogsWrapper_standalone.svg | 19 +- md/dev_docs/puml/DMA_PatternsView.svg | 22 +- md/dev_docs/puml/DMA_PatternsView_API.puml | 20 + md/dev_docs/puml/DMA_PatternsView_API.svg | 71 ++- .../puml/DMA_PatternsView_API_standalone.svg | 29 +- .../puml/DMA_PatternsView_standalone.svg | 15 +- md/dev_docs/puml/DMA_PlantumlView.svg | 17 +- md/dev_docs/puml/DMA_PlantumlView_API.svg | 34 +- .../puml/DMA_PlantumlView_API_standalone.svg | 21 +- .../puml/DMA_PlantumlView_standalone.svg | 12 +- md/dev_docs/puml/DMA_PlotView.puml | 45 ++ md/dev_docs/puml/DMA_PlotView.svg | 66 +++ md/dev_docs/puml/DMA_PlotView_API.puml | 10 + md/dev_docs/puml/DMA_PlotView_API.svg | 48 +- .../puml/DMA_PlotView_API_standalone.svg | 20 +- md/dev_docs/puml/DMA_PlotView_standalone.puml | 25 + md/dev_docs/puml/DMA_PlotView_standalone.svg | 40 ++ md/dev_docs/puml/DMA_Plugin.puml | 10 + md/dev_docs/puml/DMA_Plugin.svg | 70 ++- md/dev_docs/puml/DMA_Plugin_API.puml | 10 + md/dev_docs/puml/DMA_Plugin_API.svg | 89 +++- .../puml/DMA_Plugin_API_standalone.svg | 22 +- md/dev_docs/puml/DMA_Plugin_standalone.svg | 19 +- md/dev_docs/puml/DMA_RegexHistory.puml | 103 ++++ md/dev_docs/puml/DMA_RegexHistory.svg | 140 ++++++ md/dev_docs/puml/DMA_RegexHistory_API.puml | 120 +++++ md/dev_docs/puml/DMA_RegexHistory_API.svg | 163 +++++++ .../puml/DMA_RegexHistory_API_standalone.puml | 54 +++ .../puml/DMA_RegexHistory_API_standalone.svg | 77 +++ .../puml/DMA_RegexHistory_standalone.puml | 54 +++ .../puml/DMA_RegexHistory_standalone.svg | 76 +++ md/dev_docs/puml/DMA_SearchView.svg | 30 +- md/dev_docs/puml/DMA_SearchView_API.svg | 47 +- .../puml/DMA_SearchView_API_standalone.svg | 24 +- .../puml/DMA_SearchView_standalone.svg | 23 +- md/dev_docs/puml/DMA_Settings.svg | 20 +- md/dev_docs/puml/DMA_Settings_API.puml | 21 + md/dev_docs/puml/DMA_Settings_API.svg | 107 ++++- .../puml/DMA_Settings_API_standalone.svg | 19 +- md/dev_docs/puml/DMA_Settings_standalone.svg | 18 +- md/dev_docs/puml/Qt.puml | 30 ++ md/dev_docs/puml/Qt.svg | 168 ++++++- md/dev_docs/puml/Qt_standalone.svg | 43 +- md/dev_docs/puml/TO_DO.puml | 3 - md/dev_docs/puml/TO_DO.svg | 14 - md/dev_docs/puml/qcustomplot.puml | 20 + md/dev_docs/puml/qcustomplot.svg | 52 +- md/dev_docs/puml/qcustomplot_standalone.puml | 10 + md/dev_docs/puml/qcustomplot_standalone.svg | 33 +- 134 files changed, 4505 insertions(+), 381 deletions(-) create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/CMakeLists.txt create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryComponent.hpp create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryLineEdit.hpp create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/api/IRegexHistoryProvider.hpp create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/doc/doc.md create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/src/CMakeLists.txt create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryComponent.cpp create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryLineEdit.cpp create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.cpp create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.hpp create mode 100644 dltmessageanalyzerplugin/src/components/regexHistory/src/IRegexHistoryProvider.cpp create mode 100755 dltmessageanalyzerplugin/src/resources/png/alias_sug.png create mode 100755 dltmessageanalyzerplugin/src/resources/png/regex_sug.png create mode 100644 md/dev_docs/puml/DMA_PlotView.puml create mode 100644 md/dev_docs/puml/DMA_PlotView.svg create mode 100644 md/dev_docs/puml/DMA_PlotView_standalone.puml create mode 100644 md/dev_docs/puml/DMA_PlotView_standalone.svg create mode 100644 md/dev_docs/puml/DMA_RegexHistory.puml create mode 100644 md/dev_docs/puml/DMA_RegexHistory.svg create mode 100644 md/dev_docs/puml/DMA_RegexHistory_API.puml create mode 100644 md/dev_docs/puml/DMA_RegexHistory_API.svg create mode 100644 md/dev_docs/puml/DMA_RegexHistory_API_standalone.puml create mode 100644 md/dev_docs/puml/DMA_RegexHistory_API_standalone.svg create mode 100644 md/dev_docs/puml/DMA_RegexHistory_standalone.puml create mode 100644 md/dev_docs/puml/DMA_RegexHistory_standalone.svg delete mode 100644 md/dev_docs/puml/TO_DO.puml delete mode 100644 md/dev_docs/puml/TO_DO.svg diff --git a/dltmessageanalyzerplugin/src/common/Definitions.cpp b/dltmessageanalyzerplugin/src/common/Definitions.cpp index e7bf7f1c..821ff9e4 100644 --- a/dltmessageanalyzerplugin/src/common/Definitions.cpp +++ b/dltmessageanalyzerplugin/src/common/Definitions.cpp @@ -3603,6 +3603,8 @@ PUML_PACKAGE_BEGIN(DLT) PUML_CLASS_END() PUML_CLASS_BEGIN(QDltMsg) PUML_CLASS_END() + PUML_CLASS_BEGIN(QListView) + PUML_CLASS_END() PUML_PACKAGE_END() PUML_PACKAGE_BEGIN(qcustomplot) @@ -3612,9 +3614,15 @@ PUML_PACKAGE_BEGIN(qcustomplot) PUML_CLASS_BEGIN(QCPLegend) PUML_INHERITANCE(QObject, extends) PUML_CLASS_END() - PUML_CLASS_BEGIN(QCPAxisRect) + PUML_CLASS_BEGIN(QCPAxis) + PUML_INHERITANCE(QCPLayerable, extends) + PUML_CLASS_END() + PUML_CLASS_BEGIN(QCPLayerable) PUML_INHERITANCE(QObject, extends) PUML_CLASS_END() + PUML_CLASS_BEGIN(QCPAxisRect) + PUML_INHERITANCE(QObject, extends) +PUML_CLASS_END() PUML_CLASS_BEGIN(QCPGraph) PUML_INHERITANCE(QObject, extends) PUML_CLASS_END() diff --git a/dltmessageanalyzerplugin/src/components/CMakeLists.txt b/dltmessageanalyzerplugin/src/components/CMakeLists.txt index 3ea213e0..091a6404 100644 --- a/dltmessageanalyzerplugin/src/components/CMakeLists.txt +++ b/dltmessageanalyzerplugin/src/components/CMakeLists.txt @@ -7,5 +7,6 @@ DMA_add_subdirectory_with_clang_tidy(logsWrapper) DMA_add_subdirectory_with_clang_tidy(patternsView) DMA_add_subdirectory_with_clang_tidy(plant_uml) DMA_add_subdirectory_with_clang_tidy(plotView) +DMA_add_subdirectory_with_clang_tidy(regexHistory) DMA_add_subdirectory_with_clang_tidy(searchView) DMA_add_subdirectory_with_clang_tidy(settings) diff --git a/dltmessageanalyzerplugin/src/components/analyzer/api/Definitions.hpp b/dltmessageanalyzerplugin/src/components/analyzer/api/Definitions.hpp index 6f811058..94c632b2 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/api/Definitions.hpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/api/Definitions.hpp @@ -13,14 +13,16 @@ struct tRequestParameters tRequestParameters(); /** - * @param pClient - client, which should be notified about the progress * @param pFile - file, which is used for analysis * @param fromMessage - from which message to analyze * @param numberOfMessages - until which message to analyze * @param regex - regex, to be used for analysis * @param numberOfThreads - number of threads to be used for analysis - * @param regexScriptingMetadata - scripting metadata - * @param isContinuous - whether search is continuous. This parameter can be ignored by one-shot implementations + * @param isContinuous - whether search is continuous. This parameter + * can be ignored by one-shot implementations + * @param searchColumns - the seaarch columns visibility map + * @param regexStr - regex string that was queried for the search + * @param selectedAliases - the selected alises that were used to form a regex */ tRequestParameters( const tFileWrapperPtr& pFile_, @@ -29,7 +31,9 @@ struct tRequestParameters const QRegularExpression& regex_, const int& numberOfThreads_, bool isContinuous_, - const tSearchResultColumnsVisibilityMap& searchColumns_); + const tSearchResultColumnsVisibilityMap& searchColumns_, + const QString& regexStr_, + const QStringList& selectedAliases_); tFileWrapperPtr pFile; int fromMessage; @@ -38,6 +42,8 @@ struct tRequestParameters int numberOfThreads; bool isContinuous; tSearchResultColumnsVisibilityMap searchColumns; + QString regexStr; + QStringList selectedAliases; }; Q_DECLARE_METATYPE(tRequestParameters) diff --git a/dltmessageanalyzerplugin/src/components/analyzer/api/IDLTMessageAnalyzerController.hpp b/dltmessageanalyzerplugin/src/components/analyzer/api/IDLTMessageAnalyzerController.hpp index fbd54e16..8a8eb08a 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/api/IDLTMessageAnalyzerController.hpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/api/IDLTMessageAnalyzerController.hpp @@ -66,6 +66,14 @@ class IDLTMessageAnalyzerController: public QObject * Client might not remember about this fact, so we provide this information back to the client, to simplify the client's logic. */ void progressNotification( const tProgressNotificationData& progressNotificationData ); + + /** + * @brief analysisStarted - signal, which notifies client about the start of the analysis. + * @param requestId - the request id of the search + * @param usedRegex - the regex with which the anlysis was started + * @oaram selectedAliases - the selected regex alises that ere used to form the search query + */ + void analysisStarted( const tRequestId& requestId, const QString& usedRegex, const QStringList& selectedAliases ); }; typedef std::shared_ptr tDLTMessageAnalyzerControllerPtr; diff --git a/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.cpp b/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.cpp index a6b3ddca..4bcb00bd 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.cpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.cpp @@ -192,7 +192,9 @@ tRequestId CContinuousAnalyzer::requestAnalyze( const std::weak_ptrregex, inputIt->numberOfThreads, inputIt->bIsContinuousAnalysis, - inputIt->searchColumns + inputIt->searchColumns, + inputIt->regexStr, + inputIt->selectedAlises ); tRequestId subRequestId = mpSubAnalyzer->requestAnalyze(mpSubConsumer, @@ -340,7 +344,9 @@ CContinuousAnalyzer::tRequestData::tRequestData(const tRequestId& requestId_, const QRegularExpression& regex_, const int& numberOfThreads_, const tRegexScriptingMetadata& regexScriptingMetadata_, - const tSearchResultColumnsVisibilityMap& searchColumns_): requestId(requestId_), + const tSearchResultColumnsVisibilityMap& searchColumns_, + const QString& regexStr_, + const QStringList& selectedAlises_): requestId(requestId_), pClient(pClient_), subRequestId(subRequestId_), bIsContinuousAnalysis(bIsContinuousAnalysis_), @@ -351,7 +357,9 @@ CContinuousAnalyzer::tRequestData::tRequestData(const tRequestId& requestId_, regexScriptingMetadata(regexScriptingMetadata_), numberOfThreads(numberOfThreads_), bContinuousModeActive(false), - searchColumns(searchColumns_) + searchColumns(searchColumns_), + regexStr(regexStr_), + selectedAlises(selectedAlises_) {} PUML_PACKAGE_BEGIN(DMA_Analyzer) diff --git a/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.hpp b/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.hpp index 8174fcec..b787b6be 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.hpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/src/CContinuousAnalyzer.hpp @@ -81,7 +81,9 @@ class CContinuousAnalyzer : public IDLTMessageAnalyzerController const QRegularExpression& regex_, const int& numberOfThreads_, const tRegexScriptingMetadata& regexScriptingMetadata_, - const tSearchResultColumnsVisibilityMap& searchColumns_); + const tSearchResultColumnsVisibilityMap& searchColumns_, + const QString& regexStr_, + const QStringList& selectedAlises_); tRequestId requestId; std::weak_ptr pClient; tRequestId subRequestId; @@ -94,6 +96,8 @@ class CContinuousAnalyzer : public IDLTMessageAnalyzerController int numberOfThreads; bool bContinuousModeActive; tSearchResultColumnsVisibilityMap searchColumns; + QString regexStr; + QStringList selectedAlises; }; tRequestDataMap mRequestDataMap; diff --git a/dltmessageanalyzerplugin/src/components/analyzer/src/CDLTRegexAnalyzerWorker.cpp b/dltmessageanalyzerplugin/src/components/analyzer/src/CDLTRegexAnalyzerWorker.cpp index e6fef3eb..19a1df3d 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/src/CDLTRegexAnalyzerWorker.cpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/src/CDLTRegexAnalyzerWorker.cpp @@ -42,7 +42,7 @@ mColors() qRegisterMetaType("tAnalyzePortionData"); connect( getSettingsManager().get(), &ISettingsManager::searchResultHighlightingGradientChanged, - [this]( const tHighlightingGradient& gradient ) + this, [this]( const tHighlightingGradient& gradient ) { mColors = generateColors(gradient); }); diff --git a/dltmessageanalyzerplugin/src/components/analyzer/src/CMTAnalyzer.cpp b/dltmessageanalyzerplugin/src/components/analyzer/src/CMTAnalyzer.cpp index 14042973..dd9b7a30 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/src/CMTAnalyzer.cpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/src/CMTAnalyzer.cpp @@ -102,7 +102,9 @@ tRequestId CMTAnalyzer::requestAnalyze( const std::weak_ptr pClient; tFileWrapperPtr pFile; // file, which should be analyzed int requestedRegexMatches; // number of strings, which were requested to be analyzed from the regex analyzer thread @@ -62,6 +64,8 @@ private slots: tRegexScriptingMetadata regexScriptingMetadata; int numberOfThreads; // number of threads, to be used for analysis tSearchResultColumnsVisibilityMap searchColumns; // columns in which we search for the match. + QString regexStr; + QStringList selectedLiases; int fromMessage; // from which message to start analysis tWorkerThreadCookie workerThreadCookieCounter; bool bUML_Req_Res_Ev_DuplicateFound = false; diff --git a/dltmessageanalyzerplugin/src/components/analyzer/src/Definitions.cpp b/dltmessageanalyzerplugin/src/components/analyzer/src/Definitions.cpp index 4cd3e2aa..40b20111 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/src/Definitions.cpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/src/Definitions.cpp @@ -7,7 +7,9 @@ numberOfMessages(0), regex(), numberOfThreads(0), isContinuous(false), -searchColumns() +searchColumns(), +regexStr(), +selectedAliases() { } @@ -18,14 +20,18 @@ const int& numberOfMessages_, const QRegularExpression& regex_, const int& numberOfThreads_, bool isContinuous_, -const tSearchResultColumnsVisibilityMap& searchColumns_): +const tSearchResultColumnsVisibilityMap& searchColumns_, +const QString& regexStr_, +const QStringList& selectedAliases_): pFile(pFile_), fromMessage(fromMessage_), numberOfMessages(numberOfMessages_), regex(regex_), numberOfThreads(numberOfThreads_), isContinuous(isContinuous_), -searchColumns(searchColumns_) +searchColumns(searchColumns_), +regexStr(regexStr_), +selectedAliases(selectedAliases_) { } diff --git a/dltmessageanalyzerplugin/src/components/analyzer/src/IDLTMessageAnalyzerControllerConsumer.cpp b/dltmessageanalyzerplugin/src/components/analyzer/src/IDLTMessageAnalyzerControllerConsumer.cpp index 4bbd5e9d..5e0ed8d4 100644 --- a/dltmessageanalyzerplugin/src/components/analyzer/src/IDLTMessageAnalyzerControllerConsumer.cpp +++ b/dltmessageanalyzerplugin/src/components/analyzer/src/IDLTMessageAnalyzerControllerConsumer.cpp @@ -75,6 +75,7 @@ tRequestId IDLTMessageAnalyzerControllerConsumer::requestAnalyze( const tRequest } requestId = mpController.lock()->requestAnalyze(shared_from_this(), requestParameters, regexMetadata); + mpController.lock()->analysisStarted(requestId, requestParameters.regexStr, requestParameters.selectedAliases); mbGroupedViewFeatureActiveForCurrentAnalysis = bGroupedViewFeatureActive; } diff --git a/dltmessageanalyzerplugin/src/components/filtersView/src/CFilterItemDelegate.cpp b/dltmessageanalyzerplugin/src/components/filtersView/src/CFilterItemDelegate.cpp index 50e165e5..4291ff65 100644 --- a/dltmessageanalyzerplugin/src/components/filtersView/src/CFilterItemDelegate.cpp +++ b/dltmessageanalyzerplugin/src/components/filtersView/src/CFilterItemDelegate.cpp @@ -45,7 +45,6 @@ class CRegexLineEdit : public QLineEdit //SEND_MSG(QString("%1").arg(__FUNCTION__)); tParent::focusInEvent(event); - //disconnect(completer(), SIGNAL(QCompleter::activated(QString)), this, SLOT(QLineEdit::setText)); if(nullptr != completer()) { //SEND_MSG(QString("%1 completer not nullptr").arg(__FUNCTION__)); @@ -168,7 +167,7 @@ void CFilterItemDelegate::updateSuggestions(const QString& input) if(true == parentIndex.isValid()) //if parent index is valid { - if(1 == mpModel->rowCount(parentIndex)) // if parent haas only 1 child + if(1 == mpModel->rowCount(parentIndex)) // if parent has only 1 child { auto parentRowType = parentIndex.sibling(parentIndex.row(), static_cast(eRegexFiltersColumn::RowType)).data().value(); diff --git a/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersModel.cpp b/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersModel.cpp index accaad29..3a8053c2 100644 --- a/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersModel.cpp +++ b/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersModel.cpp @@ -127,7 +127,7 @@ CFiltersModel::CFiltersModel(const tSettingsManagerPtr& pSettingsManager, }; connect(getSettingsManager().get(), &ISettingsManager::filterVariablesChanged, - [this](bool) + this, [this](bool) { filterRegexTokensInternal(); }); @@ -774,12 +774,12 @@ QStringList CFiltersModel::getCompletionData( const int& groupIndex, { int numberOfSuggestions = 0; + auto caseSensitiveOption = getSettingsManager()->getFiltersCompletion_CaseSensitive() ? + Qt::CaseSensitive : + Qt::CaseInsensitive; + for(const auto& completionItem : foundCompletionSet->second) { - auto caseSensitiveOption = getSettingsManager()->getFiltersCompletion_CaseSensitive() ? - Qt::CaseSensitive : - Qt::CaseInsensitive; - bool bStringFound = false; if(false == getSettingsManager()->getFiltersCompletion_SearchPolicy()) diff --git a/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersView.cpp b/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersView.cpp index a46fab0e..dafeeb64 100644 --- a/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersView.cpp +++ b/dltmessageanalyzerplugin/src/components/filtersView/src/CFiltersView.cpp @@ -394,8 +394,6 @@ void CFiltersView::handleSettingsManagerChange() { QMenu* pSubMenu = new QMenu("Completion settings", this); -// TSettingItem mSetting_FiltersCompletion_SearchPolicy; // 0 - startWith; 1 - contains - { QAction* pAction = new QAction("Case sensitive", this); connect(pAction, &QAction::triggered, [this](bool checked) @@ -545,7 +543,7 @@ void CFiltersView::handleSettingsManagerChange() connect( getSettingsManager().get(), &ISettingsManager::regexFiltersColumnsVisibilityMapChanged, - [this](const tRegexFiltersColumnsVisibilityMap&) + this, [this](const tRegexFiltersColumnsVisibilityMap&) { updateColumnsVisibility(); updateWidth(); diff --git a/dltmessageanalyzerplugin/src/components/groupedView/src/CGroupedView.cpp b/dltmessageanalyzerplugin/src/components/groupedView/src/CGroupedView.cpp index 259d3886..26d2c963 100644 --- a/dltmessageanalyzerplugin/src/components/groupedView/src/CGroupedView.cpp +++ b/dltmessageanalyzerplugin/src/components/groupedView/src/CGroupedView.cpp @@ -223,7 +223,7 @@ void CGroupedView::handleSettingsManagerChange() { connect( getSettingsManager().get(), &ISettingsManager::groupedViewColumnsVisibilityMapChanged, - [this](const tGroupedViewColumnsVisibilityMap&) + this, [this](const tGroupedViewColumnsVisibilityMap&) { updateColumnsVisibility(); updateWidth(); diff --git a/dltmessageanalyzerplugin/src/components/patternsView/api/CPatternsView.hpp b/dltmessageanalyzerplugin/src/components/patternsView/api/CPatternsView.hpp index 34434e56..c7a1418d 100644 --- a/dltmessageanalyzerplugin/src/components/patternsView/api/CPatternsView.hpp +++ b/dltmessageanalyzerplugin/src/components/patternsView/api/CPatternsView.hpp @@ -60,7 +60,7 @@ public slots: void applyPatternsCombination(); signals: - void patternSelected( const QString& regexCandidate ); + void patternSelected( const QString& regexCandidate, const QStringList& selectedAliases ); void deletePatternTriggered(); void editPatternTriggered(); void overwriteFromInputFieldTriggered(); @@ -71,7 +71,7 @@ public slots: private: // methods void setModel(QAbstractItemModel *model) override; - QString createCombinedRegex(); + QString createCombinedRegex(QStringList& selectedAliases); void updateColumnsVisibility(); void copySelectedRow(); void pasteSelectedRow(); diff --git a/dltmessageanalyzerplugin/src/components/patternsView/api/IPatternsModel.hpp b/dltmessageanalyzerplugin/src/components/patternsView/api/IPatternsModel.hpp index fccc8c1b..949ac311 100644 --- a/dltmessageanalyzerplugin/src/components/patternsView/api/IPatternsModel.hpp +++ b/dltmessageanalyzerplugin/src/components/patternsView/api/IPatternsModel.hpp @@ -26,7 +26,7 @@ class IPatternsModel : public QAbstractItemModel QModelIndex foundIdx; }; /** - * @brief search - searches pattern by irs alias + * @brief search - searches pattern by its alias * @param alias - alias to be searched * @return - instance of tSearchResult, which provides result status of the search */ diff --git a/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsModel.cpp b/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsModel.cpp index 96b0cd8c..e67a6e03 100644 --- a/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsModel.cpp +++ b/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsModel.cpp @@ -838,9 +838,9 @@ void CPatternsModel::updatePatternsInPersistency() { if(nullptr != mpRootItem) { - ISettingsManager::tAliasItemVec aliasVec; + ISettingsManager::tAliasItemMap aliasMap; - auto preVisitFunction = [&aliasVec](const tTreeItem* pItem) + auto preVisitFunction = [&aliasMap](const tTreeItem* pItem) { if(nullptr != pItem) { @@ -858,7 +858,7 @@ void CPatternsModel::updatePatternsInPersistency() const QString& alias = pItem->data(static_cast(ePatternsColumn::Alias)).get(); ISettingsManager::tAliasItem aliasItem(isDefault == Qt::Checked, alias, regex); - aliasVec.push_back(aliasItem); + aliasMap.insert(alias, aliasItem); } } } @@ -869,10 +869,10 @@ void CPatternsModel::updatePatternsInPersistency() mpRootItem->visit(preVisitFunction, CTreeItem::tVisitFunction(), false); // if something has changed - if(aliasVec != getSettingsManager()->getAliases()) + if(aliasMap != getSettingsManager()->getAliases()) { // let's update them in the persistency - getSettingsManager()->setAliases( aliasVec ); + getSettingsManager()->setAliases( aliasMap ); } } } diff --git a/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsView.cpp b/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsView.cpp index 99c51ec9..b6e6fde7 100644 --- a/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsView.cpp +++ b/dltmessageanalyzerplugin/src/components/patternsView/src/CPatternsView.cpp @@ -381,7 +381,7 @@ bool CPatternsView::eventFilter(QObject* pObj, QEvent* pEvent) return bResult; } -QString CPatternsView::createCombinedRegex() +QString CPatternsView::createCombinedRegex(QStringList& selectedAliases) { QString finalRegex; @@ -391,7 +391,11 @@ QString CPatternsView::createCombinedRegex() QSet usedPatterns; - auto fillInPatterns = [this, &firstInjection, &finalRegex, &usedPatterns](const tComparator comparator, bool animate, const QColor& initialColor) + auto fillInPatterns = [this, + &firstInjection, + &finalRegex, + &usedPatterns, + &selectedAliases](const tComparator comparator, bool animate, const QColor& initialColor) { QVector highlightedRows; @@ -401,7 +405,8 @@ QString CPatternsView::createCombinedRegex() &usedPatterns, &comparator, &animate, - &highlightedRows](const QModelIndex& idx) + &highlightedRows, + &selectedAliases](const QModelIndex& idx) { auto alias = idx.sibling(idx.row(), static_cast(ePatternsColumn::Alias)).data().value(); @@ -411,6 +416,8 @@ QString CPatternsView::createCombinedRegex() if(foundUsedPattern == usedPatterns.end()) { + selectedAliases.append(alias); + if( false == firstInjection ) { finalRegex.append("|"); @@ -507,8 +514,9 @@ void CPatternsView::applyPatternsCombination() { if( true == mpModel->areAnyCombinedPatternsAvailable() ) { - QString finalRegex = createCombinedRegex(); - patternSelected( finalRegex ); + QStringList selectedAliases; + QString finalRegex = createCombinedRegex(selectedAliases); + patternSelected( finalRegex, selectedAliases ); } } @@ -518,8 +526,9 @@ void CPatternsView::keyPressEvent ( QKeyEvent * pEvent ) { if( true == mpModel->areAnyCombinedPatternsAvailable() ) { - QString finalRegex = createCombinedRegex(); - patternSelected( finalRegex ); + QStringList selectedAliases; + QString finalRegex = createCombinedRegex(selectedAliases); + patternSelected( finalRegex, selectedAliases ); } } else if(NShortcuts::isSetCombineShortcut(pEvent)) @@ -800,12 +809,18 @@ void CPatternsView::handleSettingsManagerChange() if(ePatternsRowType::ePatternsRowType_Alias == rowType) { + auto aliasName = selectedRows[0].sibling(selectedRows[0].row(), + static_cast(ePatternsColumn::Alias)) + .data().value(); + QStringList selectedAliases; + selectedAliases.append(aliasName); + const QString regex = selectedRows[0].data().value(); // we are applying selection only to those elements which have non-empty regex value if(false == regex.isEmpty()) { - patternSelected( regex ); + patternSelected( regex, selectedAliases ); } } } @@ -977,8 +992,9 @@ void CPatternsView::handleSettingsManagerChange() pAction->setShortcut(QKeySequence(Qt::Key_Enter)); connect(pAction, &QAction::triggered, [this]() { - QString finalRegex = createCombinedRegex(); - patternSelected( finalRegex ); + QStringList selectedAliases; + QString finalRegex = createCombinedRegex(selectedAliases); + patternSelected( finalRegex, selectedAliases ); }); pSubMenu->addAction(pAction); } @@ -991,7 +1007,13 @@ void CPatternsView::handleSettingsManagerChange() QAction* pAction = new QAction("Run selected item ( double click )", this); connect(pAction, &QAction::triggered, [this, selectedRows]() { - patternSelected( selectedRows[0].data().value() ); + auto aliasName = selectedRows[0].sibling(selectedRows[0].row(), + static_cast(ePatternsColumn::Alias)) + .data().value(); + QStringList selectedAliases; + selectedAliases.append(aliasName); + + patternSelected( selectedRows[0].data().value(), selectedAliases ); }); pSubMenu->addAction(pAction); } @@ -1201,7 +1223,7 @@ void CPatternsView::handleSettingsManagerChange() connect( getSettingsManager().get(), &ISettingsManager::patternsColumnsVisibilityMapChanged, - [this](const tPatternsColumnsVisibilityMap&) + this, [this](const tPatternsColumnsVisibilityMap&) { updateColumnsVisibility(); }); diff --git a/dltmessageanalyzerplugin/src/components/plotView/doc/doc.md b/dltmessageanalyzerplugin/src/components/plotView/doc/doc.md index 18ba07e1..f25cc03e 100644 --- a/dltmessageanalyzerplugin/src/components/plotView/doc/doc.md +++ b/dltmessageanalyzerplugin/src/components/plotView/doc/doc.md @@ -12,6 +12,14 @@ ![Class diagram with dependencies](../../../../../md/dev_docs/puml/DMA_PlotView_API.svg) +## Standalone package diagram + +![Class diagram with dependencies](../../../../../md/dev_docs/puml/DMA_PlotView_standalone.svg) + +## Package diagram with the first-level dependencies + +![Class diagram with dependencies](../../../../../md/dev_docs/puml/DMA_PlotView_API.svg) + ---- [**Go to the previous page**](../../../../../md/dev_docs/dev_docs.md) \ No newline at end of file diff --git a/dltmessageanalyzerplugin/src/components/plotView/src/CCustomPlotExtended.cpp b/dltmessageanalyzerplugin/src/components/plotView/src/CCustomPlotExtended.cpp index 8f93edb4..c297f0bb 100644 --- a/dltmessageanalyzerplugin/src/components/plotView/src/CCustomPlotExtended.cpp +++ b/dltmessageanalyzerplugin/src/components/plotView/src/CCustomPlotExtended.cpp @@ -101,6 +101,7 @@ CCustomPlotExtended::CCustomPlotExtended(QWidget *pParent): } }); + pAction->setEnabled(!mPlotAxisRectDataMap.empty()); contextMenu.addAction(pAction); } diff --git a/dltmessageanalyzerplugin/src/components/plotView/src/CPlotViewComponent.cpp b/dltmessageanalyzerplugin/src/components/plotView/src/CPlotViewComponent.cpp index 27cfe705..ec0b60a1 100644 --- a/dltmessageanalyzerplugin/src/components/plotView/src/CPlotViewComponent.cpp +++ b/dltmessageanalyzerplugin/src/components/plotView/src/CPlotViewComponent.cpp @@ -938,6 +938,7 @@ PUML_PACKAGE_BEGIN(DMA_PlotView_API) PUML_INHERITANCE_CHECKED(DMA::IComponent, implements) PUML_INHERITANCE_CHECKED(CSettingsManagerClient, extends) PUML_AGGREGATION_DEPENDENCY_CHECKED(CCustomPlotExtended, 1, 1, uses) + PUML_AGGREGATION_DEPENDENCY_CHECKED(QCPGanttRow, 1, many, uses) PUML_AGGREGATION_DEPENDENCY_CHECKED(ISearchResultModel, 1, 1, uses) PUML_AGGREGATION_DEPENDENCY_CHECKED(QPushButton, 1, 1, uses) PUML_CLASS_END() diff --git a/dltmessageanalyzerplugin/src/components/plotView/src/QCPGantt.cpp b/dltmessageanalyzerplugin/src/components/plotView/src/QCPGantt.cpp index d9371cad..affe2907 100644 --- a/dltmessageanalyzerplugin/src/components/plotView/src/QCPGantt.cpp +++ b/dltmessageanalyzerplugin/src/components/plotView/src/QCPGantt.cpp @@ -6,6 +6,8 @@ #include "QCPGantt.hpp" +#include "DMA_Plantuml.hpp" + //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////// QCPGanttBarsData //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -590,3 +592,13 @@ void QCPGanttRow::getPixelWidth(double key, double &lower, double &upper) const } } /* end of 'src/plottables/plottable-bars.cpp' */ + +PUML_PACKAGE_BEGIN(DMA_PlotView) + PUML_CLASS_BEGIN(QCPGanttBarsData) + PUML_CLASS_END() + PUML_CLASS_BEGIN(QCPGanttRow) + PUML_INHERITANCE_CHECKED(QCPAbstractPlottable1D, extends) + PUML_COMPOSITION_DEPENDENCY_CHECKED(QCPGanttBarsData, 1, many, contains) + PUML_AGGREGATION_DEPENDENCY_CHECKED(QCPAxis, 1, 2, uses) + PUML_CLASS_END() +PUML_PACKAGE_END() diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/CMakeLists.txt b/dltmessageanalyzerplugin/src/components/regexHistory/CMakeLists.txt new file mode 100644 index 00000000..c66dd7e6 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/CMakeLists.txt @@ -0,0 +1 @@ +DMA_add_subdirectory_with_clang_tidy(src) diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryComponent.hpp b/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryComponent.hpp new file mode 100644 index 00000000..00ebd9cf --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryComponent.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include "memory" + +#include "QLineEdit" + +#include "common/Definitions.hpp" +#include "dma/component/IComponent.hpp" +#include "components/settings/api/ISettingsManager.hpp" +#include "components/analyzer/api/IDLTMessageAnalyzerController.hpp" +#include "components/regexHistory/api/IRegexHistoryProvider.hpp" +#include "components/regexHistory/api/CRegexHistoryLineEdit.hpp" + +class CPatternsView; + +class CRegexHistoryComponent : public DMA::IComponent +{ +public: + + CRegexHistoryComponent( const tSettingsManagerPtr& pSettingsManager, + CRegexHistoryLineEdit* pRegexHistoryLineEdit, + CPatternsView* pPatternsView, + const tDLTMessageAnalyzerControllerPtr& pDLTMessageAnalyzerController); + ~CRegexHistoryComponent(); + virtual const char* getName() const override; + + const tRegexHistoryProviderPtr& getRegexHistoryProvider(); + +protected: + virtual DMA::tSyncInitOperationResult init() override; + virtual DMA::tSyncInitOperationResult shutdown() override; + +private: + tRegexHistoryProviderPtr mpRegexHistoryProvider; +}; diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryLineEdit.hpp b/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryLineEdit.hpp new file mode 100644 index 00000000..c3594b9f --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryLineEdit.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include "QLineEdit" +#include "QKeyEvent" +#include "QWidget" + +#include "components/regexHistory/api/IRegexHistoryProvider.hpp" + +class CRegexHistoryLineEdit : public QLineEdit +{ + Q_OBJECT + +public: + explicit CRegexHistoryLineEdit(QWidget *parent = nullptr); + void setRegexHistoryProvider(const tRegexHistoryProviderPtr& pRegexHistoryProviderPtr); + void setIgnoreReturnKeyEvent(bool val); + bool getIgnoreReturnKeyEvent() const; + +protected: + virtual void focusInEvent(QFocusEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + +private: + tRegexHistoryProviderPtr mpRegexHistoryProvider; + bool mbIgnoreReturnKeyEvent; +}; diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/api/IRegexHistoryProvider.hpp b/dltmessageanalyzerplugin/src/components/regexHistory/api/IRegexHistoryProvider.hpp new file mode 100644 index 00000000..f2e10d56 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/api/IRegexHistoryProvider.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include "memory" + +#include "QObject" +#include "QString" + +class IRegexHistoryProvider : public QObject +{ + Q_OBJECT + +public: + IRegexHistoryProvider(); + virtual ~IRegexHistoryProvider(); + + virtual int updateSuggestions(const QString& input) = 0; + virtual void clearSuggestions() = 0; + virtual bool getSuggestionActive() = 0; + virtual void setSuggestionActive(bool val) = 0; + +}; + +typedef std::shared_ptr tRegexHistoryProviderPtr; diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/doc/doc.md b/dltmessageanalyzerplugin/src/components/regexHistory/doc/doc.md new file mode 100644 index 00000000..210a490e --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/doc/doc.md @@ -0,0 +1,25 @@ +[**Go to the previous page**](../../../../../md/dev_docs/dev_docs.md) + +---- + +# DMA_RegexHistory + +## Standalone package API diagram + +![Class diagram with dependencies](../../../../../md/dev_docs/puml/DMA_RegexHistory_API_standalone.svg) + +## Package API diagram with the first-level dependencies + +![Class diagram with dependencies](../../../../../md/dev_docs/puml/DMA_RegexHistory_API.svg) + +## Standalone package diagram + +![Class diagram with dependencies](../../../../../md/dev_docs/puml/DMA_RegexHistory_standalone.svg) + +## Package diagram with the first-level dependencies + +![Class diagram with dependencies](../../../../../md/dev_docs/puml/DMA_RegexHistory.svg) + +---- + +[**Go to the previous page**](../../../../../md/dev_docs/dev_docs.md) \ No newline at end of file diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/src/CMakeLists.txt b/dltmessageanalyzerplugin/src/components/regexHistory/src/CMakeLists.txt new file mode 100644 index 00000000..763de6c1 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CMakeLists.txt @@ -0,0 +1,20 @@ +set(WRAP_SRC ../api/IRegexHistoryProvider.hpp + CRegexHistoryProvider.hpp + ../api/CRegexHistoryLineEdit.hpp) + +DMA_qt_wrap_cpp(PROCESSED_MOCS WRAP_SRC) + +add_library(DMA_regexHistory STATIC + CRegexHistoryComponent.cpp + CRegexHistoryProvider.cpp + IRegexHistoryProvider.cpp + CRegexHistoryLineEdit.cpp + ${PROCESSED_MOCS}) + +target_link_libraries( DMA_regexHistory PUBLIC + ${QT_PREFIX}::Widgets + DMA_settings + DMA_framework_base + DMA_framework_component + DMA_Plantuml ) + diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryComponent.cpp b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryComponent.cpp new file mode 100644 index 00000000..5e8f9fb1 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryComponent.cpp @@ -0,0 +1,82 @@ +#include "../api/CRegexHistoryComponent.hpp" + +#include "components/log/api/CLog.hpp" +#include "CRegexHistoryProvider.hpp" + +#include "DMA_Plantuml.hpp" + +CRegexHistoryComponent::CRegexHistoryComponent( const tSettingsManagerPtr& pSettingsManager, + CRegexHistoryLineEdit* pRegexHistoryLineEdit, CPatternsView* pPatternsView, + const tDLTMessageAnalyzerControllerPtr& pDLTMessageAnalyzerController ): +mpRegexHistoryProvider(std::make_shared(pSettingsManager, + pRegexHistoryLineEdit, + pPatternsView, + pDLTMessageAnalyzerController)) +{ + if(nullptr != pRegexHistoryLineEdit) + { + pRegexHistoryLineEdit->setRegexHistoryProvider(mpRegexHistoryProvider); + } +} + +CRegexHistoryComponent::~CRegexHistoryComponent() +{ +} + +const char* CRegexHistoryComponent::getName() const +{ + return "CRegexHistoryComponent"; +} + +DMA::tSyncInitOperationResult CRegexHistoryComponent::init() +{ + DMA::tSyncInitOperationResult result; + + try + { + result.bIsOperationSuccessful = true; + result.returnCode = 0; + } + catch (...) + { + result.bIsOperationSuccessful = false; + result.returnCode = -1; + } + + return result; +} + +DMA::tSyncInitOperationResult CRegexHistoryComponent::shutdown() +{ + DMA::tSyncInitOperationResult result; + + try + { + mpRegexHistoryProvider.reset(); + result.bIsOperationSuccessful = true; + result.returnCode = 0; + } + catch (...) + { + result.bIsOperationSuccessful = false; + result.returnCode = -1; + } + + return result; +} + +const tRegexHistoryProviderPtr& CRegexHistoryComponent::getRegexHistoryProvider() +{ + return mpRegexHistoryProvider; +} + +PUML_PACKAGE_BEGIN(DMA_RegexHistory_API) + PUML_CLASS_BEGIN(CRegexHistoryComponent) + PUML_INHERITANCE_CHECKED(DMA::IComponent, implements) + PUML_AGGREGATION_DEPENDENCY_CHECKED(CPatternsView, 1, 1, uses) + PUML_USE_DEPENDENCY_CHECKED(ISettingsManager, 1, 1, passes) + PUML_USE_DEPENDENCY_CHECKED(CRegexHistoryLineEdit, 1, 1, passes) + PUML_USE_DEPENDENCY_CHECKED(IDLTMessageAnalyzerController, 1, 1, passes) + PUML_COMPOSITION_DEPENDENCY_CHECKED(CRegexHistoryProvider, 1, 1, creates) + PUML_CLASS_END() +PUML_PACKAGE_END() diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryLineEdit.cpp b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryLineEdit.cpp new file mode 100644 index 00000000..0f14f54e --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryLineEdit.cpp @@ -0,0 +1,106 @@ +#include "QCompleter" + +#include "../api/CRegexHistoryLineEdit.hpp" + +#include "DMA_Plantuml.hpp" + +CRegexHistoryLineEdit::CRegexHistoryLineEdit(QWidget *parent): + QLineEdit(parent), + mpRegexHistoryProvider(nullptr), + mbIgnoreReturnKeyEvent(false) +{} + +void CRegexHistoryLineEdit::focusInEvent(QFocusEvent *event) +{ + //SEND_MSG(QString("%1").arg(__FUNCTION__)); + QLineEdit::focusInEvent(event); + + if(nullptr != completer()) + { + //SEND_MSG(QString("%1 completer not nullptr").arg(__FUNCTION__)); + disconnect(completer(), QOverload::of(&QCompleter::activated), + static_cast(this), nullptr); + disconnect(completer(), QOverload::of(&QCompleter::activated), + static_cast(this), nullptr); + disconnect(completer(), QOverload::of(&QCompleter::highlighted), + static_cast(this), nullptr); + disconnect(completer(), QOverload::of(&QCompleter::highlighted), + static_cast(this), nullptr); + } +} + +void CRegexHistoryLineEdit::setRegexHistoryProvider(const tRegexHistoryProviderPtr& pRegexHistoryProviderPtr) +{ + mpRegexHistoryProvider = pRegexHistoryProviderPtr; +} + +void CRegexHistoryLineEdit::setIgnoreReturnKeyEvent(bool val) +{ + mbIgnoreReturnKeyEvent = val; +} + +bool CRegexHistoryLineEdit::getIgnoreReturnKeyEvent() const +{ + return mbIgnoreReturnKeyEvent; +} + +void CRegexHistoryLineEdit::keyPressEvent(QKeyEvent *event) +{ + if(nullptr != event) + { + if (event->key() == Qt::Key_Space && event->modifiers() == Qt::ControlModifier) + { + if(nullptr != mpRegexHistoryProvider) + { + mpRegexHistoryProvider->setSuggestionActive(true); + int numberOfSuggestions = mpRegexHistoryProvider->updateSuggestions(text()); + + if(0 == numberOfSuggestions) + { + mpRegexHistoryProvider->setSuggestionActive(false); + } + + update(); + } + } + else if(event->key() == Qt::Key_Escape) + { + if(nullptr != mpRegexHistoryProvider && + true == mpRegexHistoryProvider->getSuggestionActive()) + { + mpRegexHistoryProvider->setSuggestionActive(false); + update(); + } + else + { + QLineEdit::keyPressEvent(event); + } + } + else + { + QString prevText = text(); + + // Pass the event to the base class for normal processing + QLineEdit::keyPressEvent(event); + + QString newText = text(); + + if(prevText != newText) + { + if(nullptr != mpRegexHistoryProvider && + true == mpRegexHistoryProvider->getSuggestionActive()) + { + static_cast(mpRegexHistoryProvider->updateSuggestions(text())); + update(); + } + } + } + } +} + +PUML_PACKAGE_BEGIN(DMA_RegexHistory_API) + PUML_CLASS_BEGIN(CRegexHistoryLineEdit) + PUML_INHERITANCE_CHECKED(QLineEdit, extends) + PUML_AGGREGATION_DEPENDENCY_CHECKED(IRegexHistoryProvider, 1, 1, uses) + PUML_CLASS_END() +PUML_PACKAGE_END() diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.cpp b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.cpp new file mode 100644 index 00000000..abb3388a --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.cpp @@ -0,0 +1,449 @@ +#include "QCompleter" +#include "QStandardItemModel" +#include "QStandardItem" +#include "QIcon" +#include "QVariant" +#include "QEvent" +#include "QMouseEvent" + +#include "CRegexHistoryProvider.hpp" +#include "components/settings/api/ISettingsManager.hpp" +#include "components/regexHistory/api/CRegexHistoryLineEdit.hpp" + +#include "components/log/api/CLog.hpp" + +#include "DMA_Plantuml.hpp" + +const static QRegularExpression sFindLastPipeRegex("(.*)(?type() == QEvent::MouseButtonPress) + { + // Get the popup and check if the mouse click occurred outside it + if (popup() && popup()->isVisible() && !popup()->underMouse()) { + // If clicked outside the popup, hide it and emit the loseFocus signal + emit loseFocus(); + } + } + else if (e->type() == QEvent::KeyPress) + { + QKeyEvent *ke = static_cast(e); + if (ke->key() == Qt::Key_Return || ke->key() == Qt::Key_Enter) + { + // Handle the key press, prevent further propagation + if (popup()->isVisible()) + { + mpRegexLineEdit->setIgnoreReturnKeyEvent(true); + bool bResult = QCompleter::eventFilter(o, e); + mpRegexLineEdit->setIgnoreReturnKeyEvent(false); + return bResult; + } + } + } + + // Default behavior for other events + return QCompleter::eventFilter(o, e); +} + +// CExtendedCompleter implementation end + +static bool reachedTheSizeLimit(ISettingsManager::tRegexUsageStatisticsItemMap& map) +{ + return map[ISettingsManager::eRegexUsageStatisticsItemType::TEXT].size() + + map[ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN].size() >= + sMaximumRegexHistorySize; +} + +static void deleteOldestElement(ISettingsManager::tRegexUsageStatisticsItemMap& map) +{ + // Find the element with the oldest updateDateTime + auto oldestItemIterator = map.end(); + QDateTime oldestDateTime = QDateTime::currentDateTime(); // Initialize to current time for comparison + + for (auto it = map.begin(); it != map.end(); ++it) + { + const ISettingsManager::tRegexUsageStatisticsItemData& itemData = it.value(); + for (auto dataIt = itemData.begin(); dataIt != itemData.end(); ++dataIt) + { + if (oldestItemIterator == map.end() || dataIt.value().updateDateTime < oldestDateTime) + { + oldestItemIterator = it; + oldestDateTime = dataIt.value().updateDateTime; + } + } + } + + // If we found an element to remove, erase it + if (oldestItemIterator != map.end()) { + map.erase(oldestItemIterator); + } +} + +CRegexHistoryProvider::CRegexHistoryProvider(const tSettingsManagerPtr& pSettingsManager, + CRegexHistoryLineEdit* pRegexLineEdit, CPatternsView* pPatternsView, + const tDLTMessageAnalyzerControllerPtr& pDLTMessageAnalyzerController): +CSettingsManagerClient(pSettingsManager), +mpRegexLineEdit(pRegexLineEdit), +mpPatternsView(pPatternsView), +mpDLTMessageAnalyzerController(pDLTMessageAnalyzerController), +mbSuggestionActive(false) +{ + if(nullptr != mpRegexLineEdit) + { + CExtendedCompleter* pCompleter = new CExtendedCompleter(this, mpRegexLineEdit); + + QStandardItemModel* pModel = new QStandardItemModel(pCompleter); + pCompleter->setModel(pModel); + pCompleter->setCompletionMode(QCompleter::UnfilteredPopupCompletion); + mCompletionData.pCompleter = pCompleter; + auto* pExtendedListView = new QListView(mpRegexLineEdit); + + mCompletionData.pPopUp = pExtendedListView; + mCompletionData.pPopUp->setIconSize(QSize(50, 50)); + mCompletionData.pPopUp->setEditTriggers(QAbstractItemView::NoEditTriggers); + mCompletionData.pPopUp->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + mCompletionData.pPopUp->setSelectionBehavior(QAbstractItemView::SelectRows); + mCompletionData.pPopUp->setSelectionMode(QAbstractItemView::SingleSelection); + mCompletionData.pCompleter->setPopup(mCompletionData.pPopUp); + + mpRegexLineEdit->setCompleter(mCompletionData.pCompleter); + + connect(pCompleter, &CExtendedCompleter::loseFocus, + this, [this]() + { + setSuggestionActive(false); + }); + + connect(mCompletionData.pCompleter, QOverload::of(&QCompleter::activated), + this, [this](const QModelIndex& index) + { + auto resolveText = [this, &index]()->QString + { + QString result; + + if(nullptr != mCompletionData.pPopUp) + { + if(index.isValid()) + { + // Retrieve the custom data using the QModelIndex and the TypeRole + QVariant typeData = index.data(sSuggestionTypeRole); + + switch(static_cast(typeData.toInt())) + { + case ISettingsManager::eRegexUsageStatisticsItemType::TEXT: + { + result = index.data(Qt::DisplayRole).toString(); + incrementRegexTextCounter(result); + } + break; + case ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN: + { + QString aliasName = index.data(Qt::DisplayRole).toString(); + + const auto& aliases = getSettingsManager()->getAliases(); + + auto foundAlias = aliases.find(aliasName); + + if(foundAlias != aliases.end()) + { + result = foundAlias->regex; + QStringList aliases; + aliases.append(foundAlias->alias); + incrementPatternsCounter(aliases); + } + } + } + } + } + + return result; + }; + + if(true == mCompletionData.bAppendMode) + { + QString previousText = mpRegexLineEdit->text(); + + if(true == sFindLastPipeRegex.isValid()) + { + auto foundMatch = sFindLastPipeRegex.match(previousText); + + if(foundMatch.hasMatch()) + { + if(foundMatch.lastCapturedIndex() >= 3) + { + mpRegexLineEdit->setText(foundMatch.captured(1) + "|" + resolveText()); + } + } + else + { + mpRegexLineEdit->setText(resolveText()); + } + } + } + else + { + mpRegexLineEdit->setText(resolveText()); + } + }); + + pCompleter->initFinished(); + } + + connect(mpDLTMessageAnalyzerController.get(), &IDLTMessageAnalyzerController::analysisStarted, + this, [this](const tRequestId&, const QString& usedRegex, const QStringList& selectedAliases) + { + setSuggestionActive(false); + + if(true == selectedAliases.empty()) + { + incrementRegexTextCounter(usedRegex); + } + + incrementPatternsCounter(selectedAliases); + }); +} + +CRegexHistoryProvider::~CRegexHistoryProvider() +{ +} + +void CRegexHistoryProvider::handleSettingsManagerChange() +{ + if(nullptr != getSettingsManager()) + { + disconnect(getSettingsManager().get(), nullptr, this, nullptr); + connect(getSettingsManager().get(), &ISettingsManager::aliasesChanged, + this, [this]( const ISettingsManager::tAliasItemMap& aliases ) + { + handleAliasesChange(aliases); + }); + } +} + +CRegexHistoryProvider::tSuggestionsMap CRegexHistoryProvider::getSuggestions(const QString& input) +{ + tSuggestionsMap result; + + auto normalizedInput = input; + + if(true == sFindLastPipeRegex.isValid()) + { + auto foundMatch = sFindLastPipeRegex.match(input); + + if(foundMatch.hasMatch()) + { + mCompletionData.bAppendMode = true; + + if(foundMatch.lastCapturedIndex() >= 3) + { + normalizedInput = foundMatch.captured(3); + } + } + else + { + mCompletionData.bAppendMode = false; + } + } + + const auto& regexUsageStatistics = getSettingsManager()->getRegexUsageStatistics(); + + auto caseSensitiveOption = getSettingsManager()->getRegexCompletion_CaseSensitive() ? + Qt::CaseSensitive : + Qt::CaseInsensitive; + + for (auto it = regexUsageStatistics.keyValueBegin(); it != regexUsageStatistics.keyValueEnd(); ++it) + { + for(auto jt = it->second.keyValueBegin(); jt != it->second.keyValueEnd(); ++jt) + { + bool bStringFound = false; + + if(false == getSettingsManager()->getRegexCompletion_SearchPolicy()) + { + bStringFound = jt->first.startsWith(normalizedInput, caseSensitiveOption); + } + else + { + bStringFound = jt->first.contains(normalizedInput, caseSensitiveOption); + } + + if(true == bStringFound) + { + tSuggestionData suggestionData; + suggestionData.regexUsageStatisticsItemType = it->first; + suggestionData.suggestionKey = jt->first; + result.insert(std::make_pair(jt->second.usageCounter, suggestionData)); + } + } + } + + return result; +} + +int CRegexHistoryProvider::updateSuggestions(const QString& input) +{ + int result = 0; + + if(nullptr != mCompletionData.pCompleter + && nullptr != mpRegexLineEdit) + { + QStandardItemModel* pModel = static_cast(mCompletionData.pCompleter->model()); + pModel->clear(); + + auto suggestions = getSuggestions(input); + + auto numberOfAssignedSuggestions = 0; + for(const auto& suggestion_pair : suggestions) + { + QStandardItem* pStandardItem = nullptr; + + switch(suggestion_pair.second.regexUsageStatisticsItemType) + { + case ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN: + { + pStandardItem = new QStandardItem(QIcon(":/dltmessageanalyzer/png/alias_sug.png"), + suggestion_pair.second.suggestionKey); + } + break; + case ISettingsManager::eRegexUsageStatisticsItemType::TEXT: + { + pStandardItem = new QStandardItem(QIcon(":/dltmessageanalyzer/png/regex_sug.png"), + suggestion_pair.second.suggestionKey); + } + break; + } + + QVariant additionalData = static_cast(suggestion_pair.second.regexUsageStatisticsItemType); + pStandardItem->setData(additionalData, sSuggestionTypeRole); + pModel->appendRow(pStandardItem); + + ++numberOfAssignedSuggestions; + } + + result = numberOfAssignedSuggestions; + + mCompletionData.pCompleter->complete(); + } + + return result; +} + +void CRegexHistoryProvider::clearSuggestions() +{ + if(nullptr != mCompletionData.pCompleter) + { + QStandardItemModel* pModel = static_cast(mCompletionData.pCompleter->model()); + pModel->clear(); + mCompletionData.pCompleter->complete(); + } +} + +void CRegexHistoryProvider::incrementPatternsCounter(const QStringList& aliases) +{ + auto regexUsageStatistics = getSettingsManager()->getRegexUsageStatistics(); + + for(const auto& item : aliases) + { + if(true == reachedTheSizeLimit(regexUsageStatistics)) + { + deleteOldestElement(regexUsageStatistics); + } + + auto& updateItem = regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN][item]; + ++updateItem.usageCounter; + updateItem.updateDateTime = QDateTime::currentDateTime(); + } + + getSettingsManager()->setRegexUsageStatistics(regexUsageStatistics); +} + +void CRegexHistoryProvider::incrementRegexTextCounter(const QString& regex) +{ + auto regexUsageStatistics = getSettingsManager()->getRegexUsageStatistics(); + + if(true == reachedTheSizeLimit(regexUsageStatistics)) + { + deleteOldestElement(regexUsageStatistics); + } + + auto& updateItem = regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::TEXT][regex]; + ++updateItem.usageCounter; + updateItem.updateDateTime = QDateTime::currentDateTime(); + getSettingsManager()->setRegexUsageStatistics(regexUsageStatistics); +} + +void CRegexHistoryProvider::handleAliasesChange(const ISettingsManager::tAliasItemMap& aliases) +{ + auto regexUsageStatistics = getSettingsManager()->getRegexUsageStatistics(); + auto& aliasesUsageStatistics = regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN]; + QSet aliasesSet; + + for(const auto& item : aliases) + { + aliasesSet.insert(item.alias); + } + + QList keysToRemove; + + // Iterate over the QMap + for (auto it = aliasesUsageStatistics.begin(); it != aliasesUsageStatistics.end(); ++it) { + if (!aliasesSet.contains(it.key())) { + keysToRemove.append(it.key()); // Collect keys that are not in QSet + } + } + + // Remove the collected keys from the QMap + for (const QString& key : keysToRemove) { + aliasesUsageStatistics.remove(key); + } + + getSettingsManager()->setRegexUsageStatistics(regexUsageStatistics); +} + +bool CRegexHistoryProvider::getSuggestionActive() +{ + return mbSuggestionActive; +} + +void CRegexHistoryProvider::setSuggestionActive(bool val) +{ + if(false == val) + { + clearSuggestions(); + } + + mbSuggestionActive = val; +} + +PUML_PACKAGE_BEGIN(DMA_RegexHistory) + PUML_CLASS_BEGIN_CHECKED(CExtendedCompleter) + PUML_INHERITANCE_CHECKED(QCompleter, extends) + PUML_CLASS_END() + PUML_CLASS_BEGIN_CHECKED(CRegexHistoryProvider) + PUML_INHERITANCE_CHECKED(IRegexHistoryProvider, implements) + PUML_INHERITANCE_CHECKED(CSettingsManagerClient, extends) + PUML_AGGREGATION_DEPENDENCY_CHECKED(CRegexHistoryLineEdit, 1, 1, uses) + PUML_AGGREGATION_DEPENDENCY_CHECKED(CPatternsView, 1, 1, uses) + PUML_AGGREGATION_DEPENDENCY_CHECKED(IDLTMessageAnalyzerController, 1, 1, uses) + PUML_AGGREGATION_DEPENDENCY_CHECKED(ISettingsManager, 1, 1, uses) + PUML_COMPOSITION_DEPENDENCY_CHECKED(CExtendedCompleter, 1, 1, creates) + PUML_COMPOSITION_DEPENDENCY_CHECKED(QListView, 1, 1, creates) + PUML_CLASS_END() +PUML_PACKAGE_END() diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.hpp b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.hpp new file mode 100644 index 00000000..72bbb0f2 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.hpp @@ -0,0 +1,104 @@ +#pragma once + +#include + +#include "QLineEdit" +#include "QListView" +#include "QTimer" +#include "QCompleter" + +#include "components/regexHistory/api/IRegexHistoryProvider.hpp" +#include "components/settings/api/CSettingsManagerClient.hpp" +#include "components/patternsView/api/CPatternsView.hpp" +#include "components/analyzer/api/IDLTMessageAnalyzerController.hpp" + +class CRegexHistoryLineEdit; + +class CExtendedCompleter : public QCompleter +{ + Q_OBJECT +public: + CExtendedCompleter(QObject *parent, + CRegexHistoryLineEdit* pRegexLineEdit); + void initFinished(); + +signals: + void loseFocus(); + +protected: + bool eventFilter(QObject *o, QEvent *e) override; + +private: + bool mbStartProcessEventFilter; + CRegexHistoryLineEdit* mpRegexLineEdit; +}; + +class CRegexHistoryProvider : public IRegexHistoryProvider, + public CSettingsManagerClient +{ + Q_OBJECT + +public: + + + /** + * @brief IRegexHistoryProvider - contructor + * @param pSettingsManager - instance of the settings manager + * @param pLineEdit - instance of the taraget line edit + */ + CRegexHistoryProvider(const tSettingsManagerPtr& pSettingsManager, + CRegexHistoryLineEdit* pRegexLineEdit, CPatternsView* pPatternsView, + const tDLTMessageAnalyzerControllerPtr& pDLTMessageAnalyzerController); + + ~CRegexHistoryProvider(); + +public: + int updateSuggestions(const QString& input) override; + void clearSuggestions() override; + bool getSuggestionActive() override; + void setSuggestionActive(bool val) override; + + +protected: + void handleSettingsManagerChange() override; + + struct DescendingOrder + { + bool operator()(const int &a, const int &b) const + { + return a > b; // Return true if 'a' should go before 'b' + } + }; + + typedef int tUsageCount; + typedef QString tSuggestionKey; + struct tSuggestionData + { + ISettingsManager::eRegexUsageStatisticsItemType regexUsageStatisticsItemType; + tSuggestionKey suggestionKey; + }; + + typedef std::multimap tSuggestionsMap; + + tSuggestionsMap getSuggestions(const QString& input); + +private: + void incrementPatternsCounter(const QStringList& aliases); + void incrementRegexTextCounter(const QString& regex); + void handleAliasesChange(const ISettingsManager::tAliasItemMap& aliases); + +private: + struct tCompletionData + { + CExtendedCompleter* pCompleter = nullptr; + QListView* pPopUp = nullptr; + bool bAppendMode = false; + }; + + tCompletionData mCompletionData; + + CRegexHistoryLineEdit* mpRegexLineEdit; + CPatternsView* mpPatternsView; + tDLTMessageAnalyzerControllerPtr mpDLTMessageAnalyzerController; + bool mbSuggestionActive; +}; diff --git a/dltmessageanalyzerplugin/src/components/regexHistory/src/IRegexHistoryProvider.cpp b/dltmessageanalyzerplugin/src/components/regexHistory/src/IRegexHistoryProvider.cpp new file mode 100644 index 00000000..546258e3 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/IRegexHistoryProvider.cpp @@ -0,0 +1,15 @@ +#include "../api/IRegexHistoryProvider.hpp" + +#include "DMA_Plantuml.hpp" + +IRegexHistoryProvider::IRegexHistoryProvider() +{} + +IRegexHistoryProvider::~IRegexHistoryProvider() +{} + +PUML_PACKAGE_BEGIN(DMA_RegexHistory_API) + PUML_CLASS_BEGIN(IRegexHistoryProvider) + PUML_INHERITANCE_CHECKED(QObject, extends) + PUML_CLASS_END() +PUML_PACKAGE_END() diff --git a/dltmessageanalyzerplugin/src/components/searchView/src/CSearchResultHighlightingDelegate.cpp b/dltmessageanalyzerplugin/src/components/searchView/src/CSearchResultHighlightingDelegate.cpp index 06da3942..407de941 100644 --- a/dltmessageanalyzerplugin/src/components/searchView/src/CSearchResultHighlightingDelegate.cpp +++ b/dltmessageanalyzerplugin/src/components/searchView/src/CSearchResultHighlightingDelegate.cpp @@ -603,7 +603,7 @@ void CSearchResultHighlightingDelegate::handleSettingsManagerChange() connect( getSettingsManager().get(), &ISettingsManager::markTimeStampWithBoldChanged, - [this](bool val) + this, [this](bool val) { mbMarkTimestampWithBold = val; }); @@ -612,7 +612,7 @@ void CSearchResultHighlightingDelegate::handleSettingsManagerChange() connect( getSettingsManager().get(), &ISettingsManager::searchResultColumnsSearchMapChanged, - [this](tSearchResultColumnsVisibilityMap val) + this, [this](tSearchResultColumnsVisibilityMap val) { mSearchResultColumnsSearchMap = val; }); diff --git a/dltmessageanalyzerplugin/src/components/settings/api/ISettingsManager.hpp b/dltmessageanalyzerplugin/src/components/settings/api/ISettingsManager.hpp index 4c8cce85..647542ca 100644 --- a/dltmessageanalyzerplugin/src/components/settings/api/ISettingsManager.hpp +++ b/dltmessageanalyzerplugin/src/components/settings/api/ISettingsManager.hpp @@ -6,6 +6,8 @@ #include "QVector" #include "QColor" #include "QFont" +#include "QDateTime" +#include "QMap" #include "common/Definitions.hpp" #include "common/cpp_extensions.hpp" @@ -54,7 +56,26 @@ class ISettingsManager : public QObject QString alias; QString regex; }; - typedef QVector tAliasItemVec; + typedef QMap tAliasItemMap; + + enum class eRegexUsageStatisticsItemType + { + TEXT = 0, + STORED_REGEX_PATTERN + }; + + typedef QString tRegexUsageStatisticsKey; + + struct tRegexUsageStatisticsItem + { + tRegexUsageStatisticsItem(); + tRegexUsageStatisticsItem(const uint32_t& usageCounter_, const QDateTime& updateDateTime_); + bool operator==(const tRegexUsageStatisticsItem&) const; + int usageCounter; + QDateTime updateDateTime; + }; + typedef QMap tRegexUsageStatisticsItemData; + typedef QMap tRegexUsageStatisticsItemMap; //helpers virtual bool areAnyDefaultAliasesAvailable() const = 0; @@ -81,9 +102,12 @@ class ISettingsManager : public QObject virtual void setSettingsManagerVersion(const tSettingsManagerVersion& val) = 0; // regex settings - virtual void setAliases(const tAliasItemVec& val) = 0; + virtual void setAliases(const tAliasItemMap& val) = 0; virtual void setAliasIsDefault(const QString& alias, bool isDefault) = 0; + // regex usage statistics + virtual void setRegexUsageStatistics(const tRegexUsageStatisticsItemMap& val) = 0; + // general settings virtual void setNumberOfThreads(const int& val) = 0; virtual void setContinuousSearch(bool val) = 0; @@ -132,6 +156,9 @@ class ISettingsManager : public QObject virtual void setJavaPathEnvVar(const QString& val) = 0; virtual void setJavaCustomPath(const QString& val) = 0; virtual void setGroupedViewFeatureActive(bool val) = 0; + virtual void setRegexCompletion_CaseSensitive(const bool& val) = 0; + virtual void setRegexCompletion_CompletionPopUpWidth(const int& val) = 0; + virtual void setRegexCompletion_SearchPolicy(const bool& val) = 0; /** * @brief setSelectedRegexFile - updates selected regex file @@ -146,7 +173,10 @@ class ISettingsManager : public QObject virtual const tSettingsManagerVersion& getSettingsManagerVersion() const = 0; // regex settings - virtual const tAliasItemVec& getAliases() const = 0; + virtual const tAliasItemMap& getAliases() const = 0; + + // regex usage statistics + virtual const tRegexUsageStatisticsItemMap& getRegexUsageStatistics() const = 0; // general settings virtual const int& getNumberOfThreads() const = 0; @@ -197,6 +227,9 @@ class ISettingsManager : public QObject virtual const QString& getJavaPathEnvVar() const = 0; virtual const QString& getJavaCustomPath() const = 0; virtual const bool& getGroupedViewFeatureActive() const = 0; + virtual const bool& getRegexCompletion_CaseSensitive() const = 0; + virtual const int& getRegexCompletion_CompletionPopUpWidth() const = 0; + virtual const bool& getRegexCompletion_SearchPolicy() const = 0; // allowed ranges virtual const TOptional>& getSetting_NumberOfThreads_AllowedRange() const = 0; @@ -204,6 +237,7 @@ class ISettingsManager : public QObject virtual const TOptional>& getFiltersCompletion_MaxNumberOfSuggestions_AllowedRange() const = 0; virtual const TOptional>& getFiltersCompletion_MaxCharactersInSuggestion_AllowedRange() const = 0; virtual const TOptional>& getFiltersCompletion_CompletionPopUpWidth_AllowedRange() const = 0; + virtual const TOptional>& getRegexCompletion_CompletionPopUpWidth_AllowedRange() const = 0; ////////////////////////NOTIFICATIONS///////////////////////////// @@ -213,7 +247,10 @@ class ISettingsManager : public QObject void settingsManagerVersionChanged( const tSettingsManagerVersion& settingsManagerVersion ) const; // regex settings - void aliasesChanged( const tAliasItemVec& aliases ); + void aliasesChanged( const tAliasItemMap& aliases ); + + // regex usage statistics + void regexUsageStatisticsChanged( const tRegexUsageStatisticsItemMap& regexUsageStatistics ); // general settings void numberOfThreadsChanged( int numberOfThreads ); @@ -262,4 +299,8 @@ class ISettingsManager : public QObject void javaPathEnvVarChanged(const QString& plantumlPathEnvVar); void javaCustomPathChanged(const QString& plantumlPathEnvVar); void groupedViewFeatureActiveChanged(const bool& groupedViewFeatureActive); + void regexCompletion_CaseSensitiveChanged(const bool& regexCompletion_CaseSensitive); + void regexCompletion_MaxNumberOfSuggestionsChanged(const int& regexCompletion_MaxNumberOfSuggestions); + void regexCompletion_CompletionPopUpWidthChanged(const int& regexCompletion_CompletionPopUpWidth); + void regexCompletion_SearchPolicyChanged(const bool& regexCompletion_SearchPolicy); }; diff --git a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsComponent.cpp b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsComponent.cpp index 5f335ad6..ca932905 100644 --- a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsComponent.cpp +++ b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsComponent.cpp @@ -62,7 +62,12 @@ DMA::tSyncInitOperationResult CSettingsComponent::shutdown() try { - mpSettingsManager.reset(); + if(nullptr != mpSettingsManager) + { + mpSettingsManager->storeConfigs(); + mpSettingsManager.reset(); + } + result.bIsOperationSuccessful = true; result.returnCode = 0; } diff --git a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.cpp b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.cpp index c2063850..d96289f4 100644 --- a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.cpp +++ b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.cpp @@ -27,9 +27,13 @@ static const QString sSettingsManager_Root_SettingsFile = "root_settings.json"; static const QString sSettingsManagerVersionKey = "settingsManagerVersion"; static const QString sAliasesKey = "aliases"; +static const QString sRegexUsageStatisticsKey = "regexUsageStatistics"; static const QString sAliasKey = "alias"; static const QString sRegexKey = "regex"; static const QString sIsDefaultKey = "isDefault"; +static const QString sUsageCounterKey = "usageCounter"; +static const QString sUpdateDateTimeKey = "updateDateTimeKey"; +static const QString sRegexUsageStatisticsItemTypeKey = "regexUsageStatisticsItemType"; static const QString sNumberOfThreadsKey = "numberOfThreads"; static const QString sIsContinuousSearchKey = "isContinuousSearch"; static const QString sCopySearchResultAsHTMLKey = "copySearchResultAsHTML"; @@ -86,6 +90,10 @@ static const QString sJavaCustomPath = "JavaCustomPath"; static const QString sGroupedViewFeatureActive = "GroupedViewFeatureActive"; +static const QString sRegexCompletion_CaseSensitiveKey = "RegexCompletion_CaseSensitive"; +static const QString sRegexCompletion_CompletionPopUpWidthKey = "RegexCompletion_CompletionPopUpWidth"; +static const QString sRegexCompletion_SearchPolicyKey = "RegexCompletion_SearchPolicy"; + static const tSettingsManagerVersion sDefaultSettingsManagerVersion = static_cast(-1); static const tSettingsManagerVersion sCurrentSettingsManagerVersion = 1u; // current version of settings manager used by SW. @@ -253,13 +261,13 @@ CSettingsManager::CSettingsManager(): [this](){tryStoreRootConfig();}, sDefaultSettingsManagerVersion)), mSetting_Aliases(createAliasItemVecSettingsItem(sAliasesKey, - [this](const tAliasItemVec& data){ aliasesChanged(data); }, + [this](const tAliasItemMap& data){ aliasesChanged(data); }, [this]() { QString regexSettingsFilePath = getRegexDirectory() + QDir::separator() + mSetting_SelectedRegexFile.getData(); storeRegexConfigCustomPath(regexSettingsFilePath); }, - tAliasItemVec())), + tAliasItemMap())), mSetting_NumberOfThreads(createRangedArithmeticSettingsItem(sNumberOfThreadsKey, [this](const int& data){numberOfThreadsChanged(data);}, [this](){tryStoreSettingsConfig();}, @@ -428,6 +436,19 @@ CSettingsManager::CSettingsManager(): [this](const bool& data){filtersCompletion_SearchPolicyChanged(data);}, [this](){tryStoreSettingsConfig();}, false)), + mSetting_RegexCompletion_CaseSensitive(createBooleanSettingsItem(sRegexCompletion_CaseSensitiveKey, + [this](const bool& data){regexCompletion_CaseSensitiveChanged(data);}, + [this](){tryStoreSettingsConfig();}, + false)), + mSetting_RegexCompletion_CompletionPopUpWidth(createRangedArithmeticSettingsItem(sRegexCompletion_CompletionPopUpWidthKey, + [this](const int& data){regexCompletion_CompletionPopUpWidthChanged(data);}, + [this](){tryStoreSettingsConfig();}, + TRangedSettingItem::tOptionalAllowedRange(TRangedSettingItem::tAllowedRange(100, 1000)), + 400)), + mSetting_RegexCompletion_SearchPolicy(createBooleanSettingsItem(sRegexCompletion_SearchPolicyKey, + [this](const bool& data){regexCompletion_SearchPolicyChanged(data);}, + [this](){tryStoreSettingsConfig();}, + false)), mSetting_SearchViewLastColumnWidthStrategy(createRangedArithmeticSettingsItem(sSearchViewLastColumnWidthStrategyKey, [this](const int& data){searchViewLastColumnWidthStrategyChanged(data);}, [this](){tryStoreSettingsConfig();}, @@ -466,9 +487,17 @@ CSettingsManager::CSettingsManager(): [this](const bool& data){groupedViewFeatureActiveChanged(data);}, [this](){tryStoreSettingsConfig();}, true)), + mSetting_RegexUsageStatistics(createRegexUsageStatisticsItemMapSettingsItem(sRegexUsageStatisticsKey, + [this](const tRegexUsageStatisticsItemMap& data){ regexUsageStatisticsChanged(data); }, + []() + { + // this data is not critical and is stored to file ONLY during exit. + }, + tRegexUsageStatisticsItemMap())), mRootSettingItemPtrVec(), mUserSettingItemPtrVec(), mPatternsSettingItemPtrVec(), + mRegexUsageStatisticsDataItemPtrVec(), mbRootConfigInitialised(false) { /////////////// ROOT SETTINGS /////////////// @@ -513,6 +542,9 @@ CSettingsManager::CSettingsManager(): mUserSettingItemPtrVec.push_back(&mSetting_FiltersCompletion_MaxCharactersInSuggestion); mUserSettingItemPtrVec.push_back(&mSetting_FiltersCompletion_CompletionPopUpWidth); mUserSettingItemPtrVec.push_back(&mSetting_FiltersCompletion_SearchPolicy); + mUserSettingItemPtrVec.push_back(&mSetting_RegexCompletion_CaseSensitive); + mUserSettingItemPtrVec.push_back(&mSetting_RegexCompletion_CompletionPopUpWidth); + mUserSettingItemPtrVec.push_back(&mSetting_RegexCompletion_SearchPolicy); mUserSettingItemPtrVec.push_back(&mSetting_SearchViewLastColumnWidthStrategy); mUserSettingItemPtrVec.push_back(&mSetting_PlantumlPathMode); mUserSettingItemPtrVec.push_back(&mSetting_PlantumlPathEnvVar); @@ -524,6 +556,9 @@ CSettingsManager::CSettingsManager(): /////////////// PATTERNS SETTINGS /////////////// mPatternsSettingItemPtrVec.push_back(&mSetting_Aliases); + + /////////////// REGEX USAGE STATISTICS ////////// + mRegexUsageStatisticsDataItemPtrVec.push_back(&mSetting_RegexUsageStatistics); } void CSettingsManager::tryStoreSettingsConfig() @@ -725,12 +760,12 @@ TSettingItem CSettingsManager::createHighlightingGradient updateFileFunc); } -TSettingItem CSettingsManager::createAliasItemVecSettingsItem(const QString& key, - const TSettingItem::tUpdateDataFunc& updateDataFunc, - const TSettingItem::tUpdateSettingsFileFunc& updateFileFunc, - const tAliasItemVec& defaultValue) const +TSettingItem CSettingsManager::createAliasItemVecSettingsItem(const QString& key, + const TSettingItem::tUpdateDataFunc& updateDataFunc, + const TSettingItem::tUpdateSettingsFileFunc& updateFileFunc, + const tAliasItemMap& defaultValue) const { - auto writeFunc = [&key](const tAliasItemVec& value)->QJsonObject + auto writeFunc = [&key](const tAliasItemMap& value)->QJsonObject { QJsonObject aliases; QJsonArray arrayAliases; @@ -750,8 +785,8 @@ TSettingItem CSettingsManager::createAliasItemV }; auto readFunc = [](const QJsonValueRef& JSONItem, - tAliasItemVec& data, - const tAliasItemVec&)->bool + tAliasItemMap& data, + const tAliasItemMap&)->bool { bool bResult = false; @@ -784,7 +819,104 @@ TSettingItem CSettingsManager::createAliasItemV bIsDefault = isDefault->toBool(); } - data.push_back(tAliasItem(bIsDefault, alias->toString(), regex->toString())); + QString aliasStr = alias->toString(); + data.insert(aliasStr, tAliasItem(bIsDefault, aliasStr, regex->toString())); + } + } + } + + bResult = true; + } + } + + return bResult; + }; + + return TSettingItem(key, + defaultValue, + writeFunc, + readFunc, + updateDataFunc, + updateFileFunc); +} + +TSettingItem CSettingsManager::createRegexUsageStatisticsItemMapSettingsItem(const QString& key, + const TSettingItem::tUpdateDataFunc& updateDataFunc, + const TSettingItem::tUpdateSettingsFileFunc& updateFileFunc, + const tRegexUsageStatisticsItemMap& defaultValue) const +{ + auto writeFunc = [&key](const tRegexUsageStatisticsItemMap& value)->QJsonObject + { + QJsonObject aliases; + QJsonArray arrayRegexUsageSttistics; + + for (auto it = value.keyValueBegin(); it != value.keyValueEnd(); ++it) + { + for(auto jt = it->second.keyValueBegin(); jt != it->second.keyValueEnd(); ++jt) + { + QJsonObject obj; + obj.insert( sRegexUsageStatisticsItemTypeKey, static_cast(it->first) ); + obj.insert( sRegexKey, QJsonValue( jt->first ) ); + obj.insert( sUsageCounterKey, jt->second.usageCounter ); + obj.insert( sUpdateDateTimeKey, jt->second.updateDateTime.toString("yyyy-MM-dd HH:mm:ss.zzz") ); + arrayRegexUsageSttistics.append( obj ); + } + } + + QJsonObject result; + result.insert( key, QJsonValue( arrayRegexUsageSttistics ) ); + + return result; + }; + + auto readFunc = [](const QJsonValueRef& JSONItem, + tRegexUsageStatisticsItemMap& data, + const tRegexUsageStatisticsItemMap&)->bool + { + bool bResult = false; + + if(true == JSONItem.isArray()) + { + data.clear(); + + auto aliasesArray = JSONItem.toArray(); + + for( const auto aliasObj : aliasesArray) + { + if(true == aliasObj.isObject()) + { + QJsonObject obj = aliasObj.toObject(); + + auto regexObj = obj.find(sRegexKey); + + if(regexObj != obj.end() && regexObj->isString()) + { + auto usageCounterObj = obj.find(sUsageCounterKey); + + if(usageCounterObj != obj.end() && usageCounterObj->isDouble()) + { + int usageCounter = static_cast(usageCounterObj->toDouble()); + + auto itemTypeObj = obj.find(sRegexUsageStatisticsItemTypeKey); + if(itemTypeObj != obj.end() && itemTypeObj->isDouble()) + { + eRegexUsageStatisticsItemType itemType = + static_cast(itemTypeObj->toDouble()); + + auto updateDateTimeObj = obj.find(sUpdateDateTimeKey); + + if(updateDateTimeObj != obj.end() && updateDateTimeObj->isString()) + { + auto updateDateTime = QDateTime::fromString(updateDateTimeObj->toString(), "yyyy-MM-dd HH:mm:ss.zzz"); + + if(true == updateDateTime.isValid()) + { + auto& updteItem = data[itemType][regexObj->toString()]; + updteItem.usageCounter = usageCounter; + updteItem.updateDateTime = updateDateTime; + } + } + } } } } @@ -796,7 +928,7 @@ TSettingItem CSettingsManager::createAliasItemV return bResult; }; - return TSettingItem(key, + return TSettingItem(key, defaultValue, writeFunc, readFunc, @@ -1287,6 +1419,12 @@ CSettingsManager::tOperationResult CSettingsManager::storeConfigs() { QString regexSettingsFilePath = getRegexDirectory() + QDir::separator() + mSetting_SelectedRegexFile.getData(); result = storeRegexConfigCustomPath(regexSettingsFilePath); + + if(true == result.bResult) + { + QString regexUsageStataisticsFilePath = getRegexDirectory() + QDir::separator() + sRegexUsageStatisticsKey + mSetting_SelectedRegexFile.getData(); + result = storeRegexUsageStatisticsDataCustomPath(regexUsageStataisticsFilePath); + } } } @@ -1307,6 +1445,12 @@ CSettingsManager::tOperationResult CSettingsManager::loadConfigs() { QString regexSettingsFilePath = getRegexDirectory() + QDir::separator() + mSetting_SelectedRegexFile.getData(); result = loadRegexConfigCustomPath(regexSettingsFilePath); // load regexes + + if( true == result.bResult ) + { + QString regexUsageStataisticsFilePath = getRegexDirectory() + QDir::separator() + sRegexUsageStatisticsKey + mSetting_SelectedRegexFile.getData(); + result = loadRegexUsageStatisticsDataCustomPath(regexUsageStataisticsFilePath); // load regex usage statistics + } } } } @@ -1436,7 +1580,7 @@ void CSettingsManager::setSettingsManagerVersion(const tSettingsManagerVersion& mSetting_SettingsManagerVersion.setData(val); } -void CSettingsManager::setAliases(const tAliasItemVec& val) +void CSettingsManager::setAliases(const tAliasItemMap& val) { mSetting_Aliases.setData(val); } @@ -1458,6 +1602,11 @@ void CSettingsManager::setAliasIsDefault(const QString& alias, bool isDefault) mSetting_Aliases.setData(aliases); } +void CSettingsManager::setRegexUsageStatistics(const tRegexUsageStatisticsItemMap& val) +{ + mSetting_RegexUsageStatistics.setData(val); +} + void CSettingsManager::setNumberOfThreads(const int& val) { mSetting_NumberOfThreads.setData(val); @@ -1646,6 +1795,21 @@ void CSettingsManager::setFiltersCompletion_SearchPolicy(const bool& val) mSetting_FiltersCompletion_SearchPolicy.setData(val); } +void CSettingsManager::setRegexCompletion_CaseSensitive(const bool& val) +{ + mSetting_RegexCompletion_CaseSensitive.setData(val); +} + +void CSettingsManager::setRegexCompletion_CompletionPopUpWidth(const int& val) +{ + mSetting_RegexCompletion_CompletionPopUpWidth.setData(val); +} + +void CSettingsManager::setRegexCompletion_SearchPolicy(const bool& val) +{ + mSetting_RegexCompletion_SearchPolicy.setData(val); +} + void CSettingsManager::setSearchViewLastColumnWidthStrategy(const int& val) { mSetting_SearchViewLastColumnWidthStrategy.setData(val); @@ -1696,11 +1860,16 @@ const tSettingsManagerVersion& CSettingsManager::getSettingsManagerVersion() con return mSetting_SettingsManagerVersion.getData(); } -const CSettingsManager::tAliasItemVec& CSettingsManager::getAliases() const +const CSettingsManager::tAliasItemMap& CSettingsManager::getAliases() const { return mSetting_Aliases.getData(); } +const CSettingsManager::tRegexUsageStatisticsItemMap& CSettingsManager::getRegexUsageStatistics() const +{ + return mSetting_RegexUsageStatistics.getData(); +} + const int& CSettingsManager::getNumberOfThreads() const { return mSetting_NumberOfThreads.getData(); @@ -1894,6 +2063,21 @@ const bool& CSettingsManager::getFiltersCompletion_SearchPolicy() const return mSetting_FiltersCompletion_SearchPolicy.getData(); } +const bool& CSettingsManager::getRegexCompletion_CaseSensitive() const +{ + return mSetting_RegexCompletion_CaseSensitive.getData(); +} + +const int& CSettingsManager::getRegexCompletion_CompletionPopUpWidth() const +{ + return mSetting_RegexCompletion_CompletionPopUpWidth.getData(); +} + +const bool& CSettingsManager::getRegexCompletion_SearchPolicy() const +{ + return mSetting_RegexCompletion_SearchPolicy.getData(); +} + const int& CSettingsManager::getSearchViewLastColumnWidthStrategy() const { return mSetting_SearchViewLastColumnWidthStrategy.getData(); @@ -1978,10 +2162,34 @@ void CSettingsManager::refreshRegexConfiguration() mSetting_SelectedRegexFile.setData(mSetting_SelectedRegexFile.getData(), true); } -void CSettingsManager::clearRegexConfig() +CSettingsManager::tOperationResult CSettingsManager::storeRegexConfigCustomPath(const QString &filePath) const { - mSetting_Aliases.setDataSilent(tAliasItemVec()); - aliasesChanged(mSetting_Aliases.getData()); + CSettingsManager::tOperationResult result; + result.bResult = false; + + QFile jsonFile(filePath); + + if(jsonFile.open(QFile::WriteOnly)) + { + QJsonArray settingsArray; + + for(auto* pSettingItem : mPatternsSettingItemPtrVec) + { + settingsArray.append(pSettingItem->writeData()); + } + + QJsonDocument jsonDoc( settingsArray ); + jsonFile.write( jsonDoc.toJson() ); + + result.bResult = true; + } + else + { + result.bResult = false; + result.err = QString("[%1] Failed to open file - \"%2\"").arg(__FUNCTION__).arg(filePath); + } + + return result; } CSettingsManager::tOperationResult CSettingsManager::loadRegexConfigCustomPath(const QString &filePath) @@ -2015,7 +2223,14 @@ CSettingsManager::tOperationResult CSettingsManager::loadRegexConfigCustomPath(c return result; } -CSettingsManager::tOperationResult CSettingsManager::storeRegexConfigCustomPath(const QString &filePath) const +void CSettingsManager::clearRegexConfig() +{ + mSetting_Aliases.setDataSilent(tAliasItemMap()); + aliasesChanged(mSetting_Aliases.getData()); +} + +CSettingsManager::tOperationResult +CSettingsManager::storeRegexUsageStatisticsDataCustomPath( const QString& filePath ) const { CSettingsManager::tOperationResult result; result.bResult = false; @@ -2026,7 +2241,7 @@ CSettingsManager::tOperationResult CSettingsManager::storeRegexConfigCustomPath( { QJsonArray settingsArray; - for(auto* pSettingItem : mPatternsSettingItemPtrVec) + for(auto* pSettingItem : mRegexUsageStatisticsDataItemPtrVec) { settingsArray.append(pSettingItem->writeData()); } @@ -2045,7 +2260,46 @@ CSettingsManager::tOperationResult CSettingsManager::storeRegexConfigCustomPath( return result; } -CSettingsManager::tOperationResult CSettingsManager::loadSettingsConfig() + +CSettingsManager::tOperationResult +CSettingsManager::loadRegexUsageStatisticsDataCustomPath( const QString& filePath ) +{ + CSettingsManager::tOperationResult result; + result.bResult = false; + + QFile jsonFile(filePath); + if(jsonFile.open(QFile::ReadOnly)) + { + auto jsonDoc = QJsonDocument().fromJson(jsonFile.readAll()); + + if( true == jsonDoc.isArray() ) + { + QJsonArray arrayRows = jsonDoc.array(); + + for(auto* pSettingItem : mRegexUsageStatisticsDataItemPtrVec) + { + pSettingItem->readDataFromArray(arrayRows); + } + } + + result.bResult = true; + } + else + { + result.bResult = false; + result.err = QString("[%1] Failed to open file - \"%2\"").arg(__FUNCTION__).arg(filePath); + } + + return result; +} + +void CSettingsManager::clearRegexUsageStatisticsData() +{ + mSetting_RegexUsageStatistics.setDataSilent(tRegexUsageStatisticsItemMap()); + regexUsageStatisticsChanged(mSetting_RegexUsageStatistics.getData()); +} + +CSettingsManager::tOperationResult CSettingsManager::loadSettingsConfig() { return loadSettingsConfigCustomPath(getUserSettingsFilepath()); } @@ -2134,27 +2388,6 @@ CSettingsManager::tOperationResult CSettingsManager::loadSettingsConfigCustomPat return result; } -// tAliasItem -CSettingsManager::tAliasItem::tAliasItem(): - isDefault(false), - alias(), - regex() -{} - -CSettingsManager::tAliasItem::tAliasItem(bool isDefault_, const QString& alias_, const QString& regex_): - isDefault(isDefault_), - alias(alias_), - regex(regex_) -{} - -// tAliasItem -bool CSettingsManager::tAliasItem::operator==(const tAliasItem& val) const -{ - return isDefault == val.isDefault && - alias == val.alias && - regex == val.regex; -} - bool CSettingsManager::areAnyDefaultAliasesAvailable() const { bool bResult = false; @@ -2238,6 +2471,11 @@ const TRangedSettingItem::tOptionalAllowedRange& CSettingsManager::getFilte return mSetting_FiltersCompletion_CompletionPopUpWidth.getAllowedTange(); } +const TRangedSettingItem::tOptionalAllowedRange& CSettingsManager::getRegexCompletion_CompletionPopUpWidth_AllowedRange() const +{ + return mSetting_RegexCompletion_CompletionPopUpWidth.getAllowedTange(); +} + PUML_PACKAGE_BEGIN(DMA_Settings) PUML_CLASS_BEGIN_CHECKED(CSettingsManager) PUML_INHERITANCE_CHECKED(ISettingsManager, implements) diff --git a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp index 24535752..63a1d485 100644 --- a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp +++ b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp @@ -51,9 +51,12 @@ class CSettingsManager : public ISettingsManager void setSettingsManagerVersion(const tSettingsManagerVersion& val) override; // regex settings - void setAliases(const tAliasItemVec& val) override; + void setAliases(const tAliasItemMap& val) override; void setAliasIsDefault(const QString& alias, bool isDefault) override; + // regex usage statistics + virtual void setRegexUsageStatistics(const tRegexUsageStatisticsItemMap& val) override; + // general settings void setNumberOfThreads(const int& val) override; void setContinuousSearch(bool val) override; @@ -102,6 +105,9 @@ class CSettingsManager : public ISettingsManager void setJavaPathEnvVar(const QString& val) override; void setJavaCustomPath(const QString& val) override; void setGroupedViewFeatureActive(bool val) override; + void setRegexCompletion_CaseSensitive(const bool& val) override; + void setRegexCompletion_CompletionPopUpWidth(const int& val) override; + void setRegexCompletion_SearchPolicy(const bool& val) override; void setSelectedRegexFile(const QString& val) override; @@ -111,7 +117,10 @@ class CSettingsManager : public ISettingsManager const tSettingsManagerVersion& getSettingsManagerVersion() const override; // regex settings - const tAliasItemVec& getAliases() const override; + const tAliasItemMap& getAliases() const override; + + // regex usage statistics + const tRegexUsageStatisticsItemMap& getRegexUsageStatistics() const override; // general settings const int& getNumberOfThreads() const override; @@ -162,6 +171,9 @@ class CSettingsManager : public ISettingsManager const QString& getJavaPathEnvVar() const override; const QString& getJavaCustomPath() const override; const bool& getGroupedViewFeatureActive() const override; + const bool& getRegexCompletion_CaseSensitive() const override; + const int& getRegexCompletion_CompletionPopUpWidth() const override; + const bool& getRegexCompletion_SearchPolicy() const override; // allowed ranges const TRangedSettingItem::tOptionalAllowedRange& getSetting_NumberOfThreads_AllowedRange() const override; @@ -169,6 +181,7 @@ class CSettingsManager : public ISettingsManager const TRangedSettingItem::tOptionalAllowedRange& getFiltersCompletion_MaxNumberOfSuggestions_AllowedRange() const override; const TRangedSettingItem::tOptionalAllowedRange& getFiltersCompletion_MaxCharactersInSuggestion_AllowedRange() const override; const TRangedSettingItem::tOptionalAllowedRange& getFiltersCompletion_CompletionPopUpWidth_AllowedRange() const override; + const TRangedSettingItem::tOptionalAllowedRange& getRegexCompletion_CompletionPopUpWidth_AllowedRange() const override; tOperationResult setUp() override; @@ -247,9 +260,33 @@ class CSettingsManager : public ISettingsManager /** * @brief clearRegexConfig - clears regex configuration + * that is stored in the RAM */ void clearRegexConfig(); + ////////////////REGEX_COMPLETION_DATA///////////////////////////////////// + + /** + * @brief storeRegexUsageStatisticsDataCustomPath - stores regex + * usage statistics to a specified config file + * @return - result of the operation + */ + tOperationResult storeRegexUsageStatisticsDataCustomPath( const QString& filePath ) const; + + /** + * @brief loadaRegexUsageStatisticsDataCustomPath - loads regex + * usage statistics from a specified config file + * @param filePath - path to a file with configuration + * @return - result of the operation + */ + tOperationResult loadRegexUsageStatisticsDataCustomPath( const QString& filePath ); + + /** + * @brief clearRegexUsageStatisticsData - clears regex usage + * statistics that is stored in the RAM + */ + void clearRegexUsageStatisticsData(); + private: // methods /** @@ -279,10 +316,15 @@ class CSettingsManager : public ISettingsManager const TSettingItem::tUpdateSettingsFileFunc& updateFileFunc, const tHighlightingGradient& defaultValue) const; - TSettingItem createAliasItemVecSettingsItem(const QString& key, - const TSettingItem::tUpdateDataFunc& updateDataFunc, - const TSettingItem::tUpdateSettingsFileFunc& updateFileFunc, - const tAliasItemVec& defaultValue) const; + TSettingItem createAliasItemVecSettingsItem(const QString& key, + const TSettingItem::tUpdateDataFunc& updateDataFunc, + const TSettingItem::tUpdateSettingsFileFunc& updateFileFunc, + const tAliasItemMap& defaultValue) const; + + TSettingItem createRegexUsageStatisticsItemMapSettingsItem(const QString& key, + const TSettingItem::tUpdateDataFunc& updateDataFunc, + const TSettingItem::tUpdateSettingsFileFunc& updateFileFunc, + const tRegexUsageStatisticsItemMap& defaultValue) const; TSettingItem createSearchResultColumnsVisibilityMapSettingsItem(const QString& key, const TSettingItem::tUpdateDataFunc& updateDataFunc, @@ -391,7 +433,7 @@ class CSettingsManager : public ISettingsManager private: // fields TSettingItem mSetting_SettingsManagerVersion; - TSettingItem mSetting_Aliases; + TSettingItem mSetting_Aliases; TRangedSettingItem mSetting_NumberOfThreads; TSettingItem mSetting_ContinuousSearch; TSettingItem mSetting_CopySearchResultAsHTML; @@ -444,6 +486,11 @@ class CSettingsManager : public ISettingsManager TRangedSettingItem mSetting_FiltersCompletion_CompletionPopUpWidth; TSettingItem mSetting_FiltersCompletion_SearchPolicy; // 0 - startWith; 1 - contains + // Regex completion settings + TSettingItem mSetting_RegexCompletion_CaseSensitive; + TRangedSettingItem mSetting_RegexCompletion_CompletionPopUpWidth; + TSettingItem mSetting_RegexCompletion_SearchPolicy; // 0 - startWith; 1 - contains + TRangedSettingItem mSetting_SearchViewLastColumnWidthStrategy; // Plantuml path settings @@ -459,12 +506,16 @@ class CSettingsManager : public ISettingsManager // Grouped view settings TSettingItem mSetting_GroupedViewFeatureActive; + // Regex usage statistics + TSettingItem mSetting_RegexUsageStatistics; + typedef ISettingItem* tSettingItemPtr; typedef std::vector tSettingItemsPtrVec; tSettingItemsPtrVec mRootSettingItemPtrVec; tSettingItemsPtrVec mUserSettingItemPtrVec; tSettingItemsPtrVec mPatternsSettingItemPtrVec; + tSettingItemsPtrVec mRegexUsageStatisticsDataItemPtrVec; bool mbRootConfigInitialised; }; diff --git a/dltmessageanalyzerplugin/src/components/settings/src/ISettingsManager.cpp b/dltmessageanalyzerplugin/src/components/settings/src/ISettingsManager.cpp index 35e714fe..5aad22ed 100644 --- a/dltmessageanalyzerplugin/src/components/settings/src/ISettingsManager.cpp +++ b/dltmessageanalyzerplugin/src/components/settings/src/ISettingsManager.cpp @@ -14,6 +14,43 @@ ISettingsManager::~ISettingsManager() } +// tAliasItem +ISettingsManager::tAliasItem::tAliasItem(): + isDefault(false), + alias(), + regex() +{} + +ISettingsManager::tAliasItem::tAliasItem(bool isDefault_, const QString& alias_, const QString& regex_): + isDefault(isDefault_), + alias(alias_), + regex(regex_) +{} + +bool ISettingsManager::tAliasItem::operator==(const tAliasItem& val) const +{ + return isDefault == val.isDefault && + alias == val.alias && + regex == val.regex; +} + +ISettingsManager::tRegexUsageStatisticsItem::tRegexUsageStatisticsItem(): +usageCounter(0), +updateDateTime() +{} + +ISettingsManager::tRegexUsageStatisticsItem::tRegexUsageStatisticsItem(const uint32_t& usageCounter_, + const QDateTime& updateDateTime_): +usageCounter(usageCounter_), +updateDateTime(updateDateTime_) +{} + +bool ISettingsManager::tRegexUsageStatisticsItem::operator== +(const ISettingsManager::tRegexUsageStatisticsItem& val) const +{ + return usageCounter == val.usageCounter && updateDateTime == val.updateDateTime; +} + DMA_FORCE_LINK_ANCHOR_CPP(ISettingsManager) PUML_PACKAGE_BEGIN(DMA_Settings_API) diff --git a/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.cpp b/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.cpp index 64c78e4f..e5a7b28f 100644 --- a/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.cpp +++ b/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.cpp @@ -37,6 +37,7 @@ #include "components/logsWrapper/api/IMsgWrapper.hpp" #include "components/filtersView/api/CFiltersView.hpp" +#include "components/regexHistory/api/CRegexHistoryComponent.hpp" #include "DMA_Plantuml.hpp" @@ -58,7 +59,9 @@ mpFiltersViewComponent(nullptr), mpUMLViewComponent(nullptr), mpLogoComponent(nullptr), mpLogsWrapperComponent(nullptr), +mpRegexHistoryComponent(nullptr), mpSettingsComponent(nullptr), +mpAnalyzerComponent(nullptr), mDisconnectionTimer() #ifndef PLUGIN_API_COMPATIBILITY_MODE_1_0_0 ,mpMainTableView(nullptr) @@ -158,6 +161,8 @@ QWidget* DLTMessageAnalyzerPlugin::initViewer() { auto pAnalyzerComponent = std::make_shared(mpSettingsComponent->getSettingsManager()); + mpAnalyzerComponent = pAnalyzerComponent; + auto initResult = pAnalyzerComponent->startInit(); if(true == initResult.bIsOperationSuccessful) @@ -321,13 +326,25 @@ QWidget* DLTMessageAnalyzerPlugin::initViewer() mComponents.push_back(pLogsWrapperComponent); } - connect( qApp, &QApplication::aboutToQuit, [this]() { - if(nullptr != mpSettingsComponent->getSettingsManager()) + auto pRegexHistoryComponent = std::make_shared(mpSettingsComponent->getSettingsManager(), + mpForm->getRegexLineEdit(), + mpPatternsViewComponent->getPatternsView(), + mpAnalyzerComponent->getAnalyzerController()); + mpRegexHistoryComponent = pRegexHistoryComponent; + + auto initResult = pRegexHistoryComponent->startInit(); + + if(false == initResult.bIsOperationSuccessful) { - mpSettingsComponent->getSettingsManager()->storeConfigs(); + SEND_ERR(QString("Failed to initialize %1").arg(pRegexHistoryComponent->getName())); } + mComponents.push_back(pRegexHistoryComponent); + } + + connect( qApp, &QApplication::aboutToQuit, [this]() + { for(auto& pComponent : mComponents) { if(nullptr != pComponent) @@ -389,6 +406,22 @@ QWidget* DLTMessageAnalyzerPlugin::initViewer() mpSettingsComponent->getSettingsManager(), mpPlotViewComponent->getPlot()); + connect(mpForm->getRegexLineEdit(), &QLineEdit::returnPressed, + this, [this]() + { + if(nullptr != mpDLTMessageAnalyzer) + { + if(nullptr != mpForm) + { + auto pRegexLineEdit = mpForm->getRegexLineEdit(); + if(nullptr != pRegexLineEdit && false == pRegexLineEdit->getIgnoreReturnKeyEvent() ) + { + mpDLTMessageAnalyzer->analyze(); + } + } + } + }); + #ifndef PLUGIN_API_COMPATIBILITY_MODE_1_0_0 if(nullptr != mpDLTMessageAnalyzer) { @@ -824,6 +857,7 @@ PUML_PACKAGE_BEGIN(DMA_Plugin) PUML_COMPOSITION_DEPENDENCY_CHECKED(CLogoComponent, 1, 1, contains) PUML_COMPOSITION_DEPENDENCY_CHECKED(CLogsWrapperComponent, 1, 1, contains) PUML_COMPOSITION_DEPENDENCY_CHECKED(CPlotViewComponent, 1, 1, contains) + PUML_COMPOSITION_DEPENDENCY_CHECKED(CRegexHistoryComponent, 1, 1, contains) PUML_COMPOSITION_DEPENDENCY_CHECKED(QTimer, 1, 1, contains) PUML_CLASS_END() PUML_PACKAGE_END() diff --git a/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.hpp b/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.hpp index 1e7ebd7e..9bd9a630 100644 --- a/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.hpp +++ b/dltmessageanalyzerplugin/src/dltmessageanalyzerplugin.hpp @@ -32,7 +32,9 @@ class CUMLViewComponent; class CPlotViewComponent; class CLogoComponent; class CLogsWrapperComponent; +class CRegexHistoryComponent; class CSettingsComponent; +class CAnalyzerComponent; class Form; namespace DMA @@ -150,7 +152,9 @@ public slots: std::shared_ptr mpPlotViewComponent; std::shared_ptr mpLogoComponent; std::shared_ptr mpLogsWrapperComponent; + std::shared_ptr mpRegexHistoryComponent; std::shared_ptr mpSettingsComponent; + std::shared_ptr mpAnalyzerComponent; QTimer mDisconnectionTimer; diff --git a/dltmessageanalyzerplugin/src/plugin/api/CDLTMessageAnalyzer.hpp b/dltmessageanalyzerplugin/src/plugin/api/CDLTMessageAnalyzer.hpp index c3bfd74e..4a165dc1 100644 --- a/dltmessageanalyzerplugin/src/plugin/api/CDLTMessageAnalyzer.hpp +++ b/dltmessageanalyzerplugin/src/plugin/api/CDLTMessageAnalyzer.hpp @@ -101,11 +101,12 @@ class CDLTMessageAnalyzer : public IDLTMessageAnalyzerControllerConsumer, /** * @brief analyze - starts analysis - * @return - trye in case of successful start of analysis. + * @param pSelectedAliases - collection of aliases that were selected for search. + * @return - true in case of successful start of analysis. * False otherwise. * Note! This call will stop previous search, is one is already running. */ - bool analyze(); + bool analyze(const QStringList* pSelectedAliases = nullptr); /** * @brief cancel - cancels analysis, if one is running. diff --git a/dltmessageanalyzerplugin/src/plugin/api/form.h b/dltmessageanalyzerplugin/src/plugin/api/form.h index 83d6bd41..d8dd3614 100644 --- a/dltmessageanalyzerplugin/src/plugin/api/form.h +++ b/dltmessageanalyzerplugin/src/plugin/api/form.h @@ -40,6 +40,7 @@ class CFiltersView; class CUMLView; class CLogo; class CCustomPlotExtended; +class CRegexHistoryLineEdit; namespace Ui { class Form; @@ -59,7 +60,7 @@ class Form : public QWidget, CGroupedView* getGroupedResultView(); QProgressBar* getProgresBar(); QLabel* getProgresBarLabel(); - QLineEdit* getRegexLineEdit(); + CRegexHistoryLineEdit* getRegexLineEdit(); QLabel* getErrorLabel(); CPatternsView* getPatternsTableView(); QComboBox* getNumberOfThreadsComboBox(); @@ -89,7 +90,6 @@ class Form : public QWidget, private slots: void on_analyze_clicked(); - void on_regex_returnPressed(); void on_pushButton_clicked(); void on_hidePatterns_clicked(); void on_splitter_patterns_results_splitterMoved(int pos, int index); diff --git a/dltmessageanalyzerplugin/src/plugin/src/CDLTMessageAnalyzer.cpp b/dltmessageanalyzerplugin/src/plugin/src/CDLTMessageAnalyzer.cpp index 39c0bf42..ea39e4b2 100644 --- a/dltmessageanalyzerplugin/src/plugin/src/CDLTMessageAnalyzer.cpp +++ b/dltmessageanalyzerplugin/src/plugin/src/CDLTMessageAnalyzer.cpp @@ -47,6 +47,7 @@ #include "components/log/api/CLog.hpp" #include "components/plant_uml/api/CUMLView.hpp" #include "common/CTableMemoryJumper.hpp" +#include "common/CQtHelper.hpp" #include "components/plotView/api/CCustomPlotExtended.hpp" #include "components/logsWrapper/api/IDLTLogsWrapperCreator.hpp" @@ -183,11 +184,11 @@ CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptrsetHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); - connect ( mpPatternsTreeView, &CPatternsView::patternSelected, [this](const QString& regexCandidate) + connect ( mpPatternsTreeView, &CPatternsView::patternSelected, [this](const QString& regexCandidate, const QStringList& selectedAliases ) { mpRegexLineEdit->selectAll(); mpRegexLineEdit->insert( regexCandidate ); - static_cast(analyze()); + static_cast(analyze(&selectedAliases)); if(nullptr != mpFiltersSearchInput) { @@ -255,7 +256,7 @@ CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptraddSeparator(); { - QAction* pAction = new QAction("Case sensitive search", this); + QAction* pAction = new QAction("Case sensitive search", mpRegexLineEdit); connect(pAction, &QAction::triggered, [this](bool checked) { getSettingsManager()->setCaseSensitiveRegex(checked); @@ -282,6 +283,89 @@ CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptraddAction(pAction); } + { + QMenu* pSubMenu = new QMenu("Completion settings", mpRegexLineEdit); + + { + QAction* pAction = new QAction("Case sensitive", mpRegexLineEdit); + connect(pAction, &QAction::triggered, [this](bool checked) + { + getSettingsManager()->setRegexCompletion_CaseSensitive(checked); + }); + pAction->setCheckable(true); + pAction->setChecked(getSettingsManager()->getRegexCompletion_CaseSensitive()); + pSubMenu->addAction(pAction); + } + + { + QAction* pAction = new QAction("Pop-up width...", mpRegexLineEdit); + connect(pAction, &QAction::triggered, [this]() + { + int inputVal; + + const auto& allowedRange = getSettingsManager()->getRegexCompletion_CompletionPopUpWidth_AllowedRange(); + + if(true == allowedRange.isSet()) + { + bool bInputSuccess = getRangedArithmeticValue(inputVal, + allowedRange.getValue().from, + allowedRange.getValue().to, + getSettingsManager()->getRegexCompletion_CompletionPopUpWidth(), + mpRegexLineEdit, + "pop up width", + "Pop up width", + [](bool* ok, const QString& str)->int + { + return str.toInt(ok); + }); + + if(true == bInputSuccess) + { + getSettingsManager()->setRegexCompletion_CompletionPopUpWidth(inputVal); + } + } + }); + pSubMenu->addAction(pAction); + } + + { + QMenu* pSubSubMenu = new QMenu("Search policy", mpRegexLineEdit); + + QActionGroup* pActionGroup = new QActionGroup(mpRegexLineEdit); + pActionGroup->setExclusive(true); + + { + QAction* pAction = new QAction("\"Starts with\"", mpRegexLineEdit); + connect(pAction, &QAction::triggered, [this]() + { + getSettingsManager()->setRegexCompletion_SearchPolicy(false); + }); + pAction->setCheckable(true); + pAction->setChecked(!getSettingsManager()->getRegexCompletion_SearchPolicy()); + + pSubSubMenu->addAction(pAction); + pActionGroup->addAction(pAction); + } + + { + QAction* pAction = new QAction("\"Contains\"", mpRegexLineEdit); + connect(pAction, &QAction::triggered, [this]() + { + getSettingsManager()->setRegexCompletion_SearchPolicy(true); + }); + pAction->setCheckable(true); + pAction->setChecked(getSettingsManager()->getRegexCompletion_SearchPolicy()); + + pSubSubMenu->addAction(pAction); + pActionGroup->addAction(pAction); + } + + pSubMenu->addMenu(pSubSubMenu); + } + + pContextMenu->addMenu(pSubMenu); + } + pContextMenu->exec(mpRegexLineEdit->mapToGlobal(pos)); }; @@ -342,7 +426,8 @@ CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptrgetSearchResultMonoColorHighlighting()) { @@ -482,7 +571,7 @@ CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptrsetSubFilesHandlingStatus(getSettingsManager()->getSubFilesHandlingStatus()); mpFile->resetCache(); - connect( getSettingsManager().get(), &ISettingsManager::subFilesHandlingStatusChanged, [this](bool val) + connect( getSettingsManager().get(), &ISettingsManager::subFilesHandlingStatusChanged, + this, [this](bool val) { if(nullptr != mpFile) { @@ -821,7 +915,7 @@ void CDLTMessageAnalyzer::setFile(const tFileWrapperPtr& pFile) }); } -bool CDLTMessageAnalyzer::analyze() +bool CDLTMessageAnalyzer::analyze(const QStringList* pSelectedAliases) { if(!mpFile) { @@ -935,7 +1029,9 @@ bool CDLTMessageAnalyzer::analyze() *pRegex, mpNumberOfThreadsCombobBox->currentData().value(), isContinuousAnalysis(), - getSettingsManager()->getSearchResultColumnsSearchMap() + getSettingsManager()->getSearchResultColumnsSearchMap(), + regex, + nullptr != pSelectedAliases ? *pSelectedAliases : QStringList() ); auto requestId = requestAnalyze( requestParameters, diff --git a/dltmessageanalyzerplugin/src/plugin/src/CMakeLists.txt b/dltmessageanalyzerplugin/src/plugin/src/CMakeLists.txt index 7f577f4d..b441d2b4 100644 --- a/dltmessageanalyzerplugin/src/plugin/src/CMakeLists.txt +++ b/dltmessageanalyzerplugin/src/plugin/src/CMakeLists.txt @@ -29,6 +29,7 @@ target_link_libraries( DMA_plugin PUBLIC qcustomplot DMA_plotView DMA_PCRE + DMA_regexHistory qdlt ${QT_PREFIX}::Widgets DMA_framework_base diff --git a/dltmessageanalyzerplugin/src/plugin/src/form.cpp b/dltmessageanalyzerplugin/src/plugin/src/form.cpp index a2cb5492..2c62c26b 100644 --- a/dltmessageanalyzerplugin/src/plugin/src/form.cpp +++ b/dltmessageanalyzerplugin/src/plugin/src/form.cpp @@ -282,7 +282,7 @@ Form::Form(DLTMessageAnalyzerPlugin* pDLTMessageAnalyzerPlugin, if(nullptr != mpUI->patternsTreeView) { - connect(mpUI->patternsTreeView, &CPatternsView::patternSelected, this, [this]( const QString& ) + connect(mpUI->patternsTreeView, &CPatternsView::patternSelected, this, [this]( const QString&, const QStringList& ) { if(nullptr != mpDLTMessageAnalyzerPlugin) { @@ -332,7 +332,8 @@ Form::Form(DLTMessageAnalyzerPlugin* pDLTMessageAnalyzerPlugin, enableGroupedViewWidget(getSettingsManager()->getGroupedViewFeatureActive()); - connect(getSettingsManager().get(), &ISettingsManager::groupedViewFeatureActiveChanged, [enableGroupedViewWidget](bool val) + connect(getSettingsManager().get(), &ISettingsManager::groupedViewFeatureActiveChanged, + this, [enableGroupedViewWidget](bool val) { enableGroupedViewWidget(val); }); @@ -364,7 +365,8 @@ Form::Form(DLTMessageAnalyzerPlugin* pDLTMessageAnalyzerPlugin, enableUMLWidget(getSettingsManager()->getUML_FeatureActive()); - connect(getSettingsManager().get(), &ISettingsManager::UML_FeatureActiveChanged, [enableUMLWidget](bool val) + connect(getSettingsManager().get(), &ISettingsManager::UML_FeatureActiveChanged, + this, [enableUMLWidget](bool val) { enableUMLWidget(val); }); @@ -417,7 +419,8 @@ Form::Form(DLTMessageAnalyzerPlugin* pDLTMessageAnalyzerPlugin, enablePlotViewWidget(getSettingsManager()->getPlotViewFeatureActive()); - connect(getSettingsManager().get(), &ISettingsManager::plotViewFeatureActiveChanged, [enablePlotViewWidget](bool val) + connect(getSettingsManager().get(), &ISettingsManager::plotViewFeatureActiveChanged, + this, [enablePlotViewWidget](bool val) { enablePlotViewWidget(val); }); @@ -509,9 +512,9 @@ QLabel* Form::getProgresBarLabel() return pResult; } -QLineEdit* Form::getRegexLineEdit() +CRegexHistoryLineEdit* Form::getRegexLineEdit() { - QLineEdit* pResult = nullptr; + CRegexHistoryLineEdit* pResult = nullptr; if(mpUI) { @@ -827,14 +830,6 @@ QPlainTextEdit* Form::getUMLTextEditor() return pResult; } -void Form::on_regex_returnPressed() -{ - if(nullptr != mpDLTMessageAnalyzerPlugin) - { - mpDLTMessageAnalyzerPlugin->analyze(); - } -} - void Form::on_pushButton_clicked() { if(nullptr != mpDLTMessageAnalyzerPlugin) @@ -988,5 +983,6 @@ PUML_PACKAGE_BEGIN(DMA_Plugin_API) PUML_COMPOSITION_DEPENDENCY_CHECKED(CSearchResultView, 1, 1, contains) PUML_COMPOSITION_DEPENDENCY_CHECKED(CUMLView, 1, 1, contains) PUML_COMPOSITION_DEPENDENCY_CHECKED(CLogo, 1, 1, contains) + PUML_COMPOSITION_DEPENDENCY_CHECKED(CRegexHistoryLineEdit, 1, 1, contains) PUML_CLASS_END() PUML_PACKAGE_END() diff --git a/dltmessageanalyzerplugin/src/plugin/src/form.ui b/dltmessageanalyzerplugin/src/plugin/src/form.ui index dfeaecc5..dc014e1e 100644 --- a/dltmessageanalyzerplugin/src/plugin/src/form.ui +++ b/dltmessageanalyzerplugin/src/plugin/src/form.ui @@ -18,6 +18,7 @@ + 50 false @@ -137,6 +138,7 @@ + 75 true @@ -245,6 +247,7 @@ Courier 10 Pitch 8 + 50 false @@ -305,6 +308,7 @@ Courier 10 Pitch 8 + 50 false @@ -341,6 +345,7 @@ + 75 true @@ -606,6 +611,7 @@ QPushButton:hover:!pressed{ Times New Roman 8 + 50 false false @@ -633,6 +639,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -687,6 +694,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -731,6 +739,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -796,6 +805,7 @@ QPushButton:hover:!pressed{ + 75 false true false @@ -845,6 +855,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -878,7 +889,7 @@ QPushButton:hover:!pressed{ - + 190 @@ -907,6 +918,7 @@ QPushButton:hover:!pressed{ 8 + 75 true @@ -926,6 +938,7 @@ QPushButton:hover:!pressed{ 8 + 50 false @@ -1005,6 +1018,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -1035,6 +1049,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -1056,6 +1071,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -1074,6 +1090,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -1092,6 +1109,7 @@ QPushButton:hover:!pressed{ + 75 true @@ -1146,6 +1164,11 @@ QPushButton:hover:!pressed{
components/plotView/api/CCustomPlotExtended.hpp
1 + + CRegexHistoryLineEdit + QLineEdit +
components/regexHistory/api/CRegexHistoryLineEdit.hpp
+
diff --git a/dltmessageanalyzerplugin/src/resources/dltmessageanalyzer.qrc b/dltmessageanalyzerplugin/src/resources/dltmessageanalyzer.qrc index 6cebea05..9861d1d1 100644 --- a/dltmessageanalyzerplugin/src/resources/dltmessageanalyzer.qrc +++ b/dltmessageanalyzerplugin/src/resources/dltmessageanalyzer.qrc @@ -2,5 +2,7 @@ png/bug.png png/manuscript.png + png/alias_sug.png + png/regex_sug.png diff --git a/dltmessageanalyzerplugin/src/resources/png/alias_sug.png b/dltmessageanalyzerplugin/src/resources/png/alias_sug.png new file mode 100755 index 0000000000000000000000000000000000000000..9859152ce72c0e18f17adf0e81aacf08a392e648 GIT binary patch literal 13998 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 literal 0 HcmV?d00001 diff --git a/dltmessageanalyzerplugin/src/resources/png/regex_sug.png b/dltmessageanalyzerplugin/src/resources/png/regex_sug.png new file mode 100755 index 0000000000000000000000000000000000000000..da87c5d5aefbf1f94d8be834af5df9e69bd496c2 GIT binary patch literal 11994 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 "1" QDltMsg : uses IDLTLogsWrapperCreator "1" --> "*" QDltFile : uses IDLTLogsWrapperCreator "1" --> "*" QDltMsg : uses +CRegexHistoryProvider "1" *-- "1" QListView : creates @enduml \ No newline at end of file diff --git a/md/dev_docs/puml/DLT.svg b/md/dev_docs/puml/DLT.svg index c7a23d47..4fea9619 100644 --- a/md/dev_docs/puml/DLT.svg +++ b/md/dev_docs/puml/DLT.svg @@ -1,4 +1,32 @@ -DLTDMA_LogsWrapperDMA_LogsWrapper_APIDMA_PluginQDLTPluginInterfaceQDltFileQDltMsgQDltPluginQDltPluginControlInterfaceQDltPluginManagerQDltPluginViewerInterfaceCDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperIDLTLogsWrapperCreatorvirtual tFileWrapperPtr createDLTFileWrapper( QDltFile* pFile ) const = 0virtual tMsgDecoderPtr createMsgDecoder(QDltMessageDecoder* pMessageDecoder) const = 0virtual tMsgWrapperPtr createDLTMsgWrapper( QDltMsg& msg ) const = 0DLTMessageAnalyzerPluginimplementsimplementsimplementsuses11uses11uses11uses1*uses1*DLTDMA_LogsWrapperDMA_LogsWrapper_APIDMA_PluginDMA_RegexHistoryQDLTPluginInterfaceQDltFileQDltMsgQDltPluginQDltPluginControlInterfaceQDltPluginManagerQDltPluginViewerInterfaceQListViewCDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperIDLTLogsWrapperCreatorvirtual tFileWrapperPtr createDLTFileWrapper( QDltFile* pFile ) const = 0virtual tMsgDecoderPtr createMsgDecoder(QDltMessageDecoder* pMessageDecoder) const = 0virtual tMsgWrapperPtr createDLTMsgWrapper( QDltMsg& msg ) const = 0DLTMessageAnalyzerPluginCRegexHistoryProviderimplementsimplementsimplementsuses11uses11uses11uses1*uses1*creates11DLTQDLTPluginInterfaceQDltFileQDltMsgQDltPluginQDltPluginControlInterfaceQDltPluginManagerQDltPluginViewerInterfaceDLTQDLTPluginInterfaceQDltFileQDltMsgQDltPluginQDltPluginControlInterfaceQDltPluginManagerQDltPluginViewerInterfaceQListViewDMA_AnalyzerDMA_Analyzer_APIDMA_Settings_APIQtCContinuousAnalyzerCDLTRegexAnalyzerWorkerCMTAnalyzerCSubConsumerCAnalyzerComponentIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CSettingsManagerClientQObjectQThreadimplementsuses11extendsextendsextendsimplementsimplementscontains11contains1*contains1*contains11creates and feeds into CContinuousAnalyzer11DMA_AnalyzerDMA_Analyzer_APIDMA_Settings_APIQtCContinuousAnalyzerCDLTRegexAnalyzerWorkerCMTAnalyzerCSubConsumerCAnalyzerComponentIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CSettingsManagerClientQObjectQThreadimplementsuses11extendsextendsextendsimplementsimplementscontains11contains1*contains1*contains11creates and feeds into CContinuousAnalyzer11 "1" IFileWrapper : uses DLTMessageAnalyzerPlugin "1" *-- "1" CAnalyzerComponent : contains CDLTMessageAnalyzer "1" --> "1" IDLTMessageAnalyzerController : gets and feeds to IDLTMessageAnalyzerControllerConsumer +CRegexHistoryProvider "1" o-- "1" IDLTMessageAnalyzerController : uses +CRegexHistoryComponent "1" --> "1" IDLTMessageAnalyzerController : passes @enduml \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_Analyzer_API.svg b/md/dev_docs/puml/DMA_Analyzer_API.svg index c2aab39a..d2067626 100644 --- a/md/dev_docs/puml/DMA_Analyzer_API.svg +++ b/md/dev_docs/puml/DMA_Analyzer_API.svg @@ -1,4 +1,49 @@ -DMA_AnalyzerDMA_Analyzer_APIDMA_Framework_ComponentDMA_LogsWrapper_APIDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtCContinuousAnalyzerCMTAnalyzerCSubConsumerCAnalyzerComponentIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )std::enable_shared_from_thisIDLTMessageAnalyzerControllerConsumerDMA::IComponentIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerCSettingsManagerClientQObjectimplementsuses11implementsimplementsextendsimplementsextendsextendsextendsimplementscontains11contains11creates and feeds into CContinuousAnalyzer11uses11uses11uses11contains11gets and feeds to IDLTMessageAnalyzerControllerConsumer11DMA_AnalyzerDMA_Analyzer_APIDMA_Framework_ComponentDMA_LogsWrapper_APIDMA_PluginDMA_Plugin_APIDMA_RegexHistoryDMA_RegexHistory_APIDMA_Settings_APIQtCContinuousAnalyzerCMTAnalyzerCSubConsumerCAnalyzerComponentIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )std::enable_shared_from_thisIDLTMessageAnalyzerControllerConsumerDMA::IComponentIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerCRegexHistoryProviderCRegexHistoryComponentCSettingsManagerClientQObjectimplementsuses11implementsimplementsextendsimplementsextendsextendsextendsimplementscontains11contains11creates and feeds into CContinuousAnalyzer11uses11uses11uses11contains11gets and feeds to IDLTMessageAnalyzerControllerConsumer11uses11passes11DMA_Analyzer_APIDMA_Framework_ComponentDMA_Settings_APIQtCAnalyzerComponentIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )std::enable_shared_from_thisIDLTMessageAnalyzerControllerConsumerDMA::IComponentCSettingsManagerClientQObjectextendsimplementsextendsextendsextendsuses11DMA_Analyzer_APIDMA_Framework_ComponentDMA_Settings_APIQtCAnalyzerComponentIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )std::enable_shared_from_thisIDLTMessageAnalyzerControllerConsumerDMA::IComponentCSettingsManagerClientQObjectextendsimplementsextendsextendsextendsuses11DMA_AnalyzerDMA_Analyzer_APIDMA_Settings_APIQtCContinuousAnalyzerCDLTRegexAnalyzerWorkerCMTAnalyzerCSubConsumerIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CSettingsManagerClientQObjectimplementsextendsextendsextendsimplementsimplementscontains1*DMA_AnalyzerDMA_Analyzer_APIDMA_Settings_APIQtCContinuousAnalyzerCDLTRegexAnalyzerWorkerCMTAnalyzerCSubConsumerIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CSettingsManagerClientQObjectimplementsextendsextendsextendsimplementsimplementscontains1*DMA_CommonDMA_FiltersViewDMA_GroupedViewDMA_PatternsViewDMA_Plugin_APIDMA_SearchView_APIQtCBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCTreeItemCFiltersModelCGroupedViewModelCPatternsModelCDLTMessageAnalyzerCSearchViewComponentQFileSystemWatcherQObjectQTableViewQWidgetextendsextendsanimation widget11contains11contains11contains1*contains1*contains1*contains1*uses11contains11gets and uses11contains11DMA_CommonDMA_FiltersViewDMA_GroupedViewDMA_PatternsViewDMA_Plugin_APIDMA_SearchView_APIQtCBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCTreeItemCFiltersModelCGroupedViewModelCPatternsModelCDLTMessageAnalyzerCSearchViewComponentQFileSystemWatcherQObjectQTableViewQWidgetextendsextendsanimation widget11contains11contains11contains1*contains1*contains1*contains1*uses11contains11gets and uses11contains11DMA_CommonQtCBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCTreeItemQObjectextendsextendscontains1*DMA_CommonQtCBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCTreeItemQObjectextendsextendscontains1*DMA_CommonDMA_FiltersViewDMA_FiltersView_APIDMA_Settings_APIQtCTreeItemCFilterItemDelegateCFiltersModelCFiltersViewCFiltersViewComponentIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CSettingsManagerClientQCompleterQStyledItemDelegateQTreeViewextendsextendsextendsimplementsuses11uses11parent view11contains1*contains11uses11using to create IFiltersModel11DMA_CommonDMA_FiltersViewDMA_FiltersView_APIDMA_Settings_APIQtCTreeItemCFilterItemDelegateCFiltersModelCFiltersViewCFiltersViewComponentIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CSettingsManagerClientQCompleterQStyledItemDelegateQTreeViewextendsextendsextendsimplementsuses11uses11parent view11contains1*contains11uses11using to create IFiltersModel11DMA_FiltersViewDMA_FiltersView_APIDMA_Framework_ComponentDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtCFilterItemDelegateCFiltersModelCFiltersViewCFiltersViewComponentIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0DMA::IComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSettingsManagerClientQAbstractItemModelQLineEditQTreeViewimplementsextendsimplementsextendsimplementsimplementscontains11uses11regex input field11using to create IFiltersModel11uses11contains11contains11uses11uses11contains11DMA_FiltersViewDMA_FiltersView_APIDMA_Framework_ComponentDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtCFilterItemDelegateCFiltersModelCFiltersViewCFiltersViewComponentIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0DMA::IComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSettingsManagerClientQAbstractItemModelQLineEditQTreeViewimplementsextendsimplementsextendsimplementsimplementscontains11uses11regex input field11using to create IFiltersModel11uses11contains11contains11uses11uses11contains11DMA_FiltersView_APIDMA_Framework_ComponentDMA_Settings_APIQtCFiltersViewCFiltersViewComponentIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0DMA::IComponentCSettingsManagerClientQAbstractItemModelQTreeViewextendsimplementsextendsimplementsimplementsuses11contains11DMA_FiltersView_APIDMA_Framework_ComponentDMA_Settings_APIQtCFiltersViewCFiltersViewComponentIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0DMA::IComponentCSettingsManagerClientQAbstractItemModelQTreeViewextendsimplementsextendsimplementsimplementsuses11contains11DMA_FiltersViewDMA_FiltersView_APIDMA_Settings_APIQtCFilterItemDelegateCFiltersModelIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CSettingsManagerClientQStyledItemDelegateextendsextendsextendsimplementsuses11DMA_FiltersViewDMA_FiltersView_APIDMA_Settings_APIQtCFilterItemDelegateCFiltersModelIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CSettingsManagerClientQStyledItemDelegateextendsextendsextendsimplementsuses11DMA_Framework_BaseDMA_Framework_ComponentDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::ISynchronousInitializablevirtual virtual tSyncInitOperationResult startInit() = 0virtual virtual tSyncInitOperationResult startShutdown() = 0virtual virtual virtual bool isInitialized () const = 0DMA::IComponentimplementsextendsimplementsDMA_Framework_BaseDMA_Framework_ComponentDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::ISynchronousInitializablevirtual virtual tSyncInitOperationResult startInit() = 0virtual virtual tSyncInitOperationResult startShutdown() = 0virtual virtual virtual bool isInitialized () const = 0DMA::IComponentimplementsextendsimplementsDMA_Framework_BaseDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::ISynchronousInitializablevirtual virtual tSyncInitOperationResult startInit() = 0virtual virtual tSyncInitOperationResult startShutdown() = 0virtual virtual virtual bool isInitialized () const = 0implementsDMA_Framework_BaseDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::ISynchronousInitializablevirtual virtual tSyncInitOperationResult startInit() = 0virtual virtual tSyncInitOperationResult startShutdown() = 0virtual virtual virtual bool isInitialized () const = 0implementsDMA_Analyzer_APIDMA_FiltersView_APIDMA_Framework_BaseDMA_Framework_ComponentDMA_GroupedView_APIDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PlotView_APIDMA_SearchView_APIDMA_Settings_APICAnalyzerComponentCFiltersViewComponentDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::IComponentCGroupedViewComponentCLogComponentCLogoComponentCLogsWrapperComponentCPatternsViewComponentCUMLViewComponentCPlotViewComponentCSearchViewComponentCSettingsComponentimplementsimplementsextendsimplementsimplementsimplementsimplementsimplementsimplementsimplementsimplementsimplementsimplementsDMA_Analyzer_APIDMA_FiltersView_APIDMA_Framework_BaseDMA_Framework_ComponentDMA_GroupedView_APIDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PlotView_APIDMA_RegexHistory_APIDMA_SearchView_APIDMA_Settings_APICAnalyzerComponentCFiltersViewComponentDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::IComponentCGroupedViewComponentCLogComponentCLogoComponentCLogsWrapperComponentCPatternsViewComponentCUMLViewComponentCPlotViewComponentCRegexHistoryComponentCSearchViewComponentCSettingsComponentimplementsimplementsextendsimplementsimplementsimplementsimplementsimplementsimplementsimplementsimplementsimplementsimplementsimplementsDMA_Framework_BaseDMA_Framework_ComponentDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::IComponentextendsimplementsDMA_Framework_BaseDMA_Framework_ComponentDMA::CBaseSynchronousInitializablevirtual virtual tSyncInitOperationResult init() = 0virtual virtual tSyncInitOperationResult shutdown() = 0virtual virtual tSyncInitOperationResult startInit()virtual virtual tSyncInitOperationResult startShutdown()virtual virtual virtual bool isInitialized () constDMA::INamedObjectchar* getName() constDMA::IComponentextendsimplementsDMA_CommonDMA_GroupedViewDMA_GroupedView_APIDMA_Settings_APIQtCTreeItemCGroupedViewModelCGroupedViewComponentIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CSettingsManagerClientQAbstractItemModelextendsimplementsimplementscontains1*using to create IGroupedViewModel11DMA_CommonDMA_GroupedViewDMA_GroupedView_APIDMA_Settings_APIQtCTreeItemCGroupedViewModelCGroupedViewComponentIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CSettingsManagerClientQAbstractItemModelextendsimplementsimplementscontains1*using to create IGroupedViewModel11DMA_Framework_ComponentDMA_GroupedViewDMA_GroupedView_APIDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtDMA::IComponentCGroupedViewModelCGroupedViewCGroupedViewComponentIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSettingsManagerClientQTreeViewimplementsextendsextendsextendsimplementsuses11using to create IGroupedViewModel11contains11contains11uses11contains11DMA_Framework_ComponentDMA_GroupedViewDMA_GroupedView_APIDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtDMA::IComponentCGroupedViewModelCGroupedViewCGroupedViewComponentIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSettingsManagerClientQTreeViewimplementsextendsextendsextendsimplementsuses11using to create IGroupedViewModel11contains11contains11uses11contains11DMA_Framework_ComponentDMA_GroupedView_APIDMA_Settings_APIQtDMA::IComponentCGroupedViewCGroupedViewComponentIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CSettingsManagerClientQTreeViewextendsextendsextendsimplementsuses11contains11DMA_Framework_ComponentDMA_GroupedView_APIDMA_Settings_APIQtDMA::IComponentCGroupedViewCGroupedViewComponentIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CSettingsManagerClientQTreeViewextendsextendsextendsimplementsuses11contains11DMA_GroupedViewDMA_GroupedView_APIDMA_Settings_APIQtCGroupedViewModelIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CSettingsManagerClientQAbstractItemModelextendsimplementsimplementsDMA_GroupedViewDMA_GroupedView_APIDMA_Settings_APIQtCGroupedViewModelIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CSettingsManagerClientQAbstractItemModelextendsimplementsimplementsDMA_LogDMA_Log_APIQt«Singleton»CConsoleCtrlCConsoleInputProcessorCLogComponentQLineEditQObjectQPlainTextEditQTabWidgetQWidgetextendsextendsconsole text edit11console view tab widget11console tab11console input11contains11DMA_LogDMA_Log_APIQt«Singleton»CConsoleCtrlCConsoleInputProcessorCLogComponentQLineEditQObjectQPlainTextEditQTabWidgetQWidgetextendsextendsconsole text edit11console view tab widget11console tab11console input11contains11DMA_Framework_ComponentDMA_LogDMA_Log_APIDMA_PluginDMA_Plugin_APIQtDMA::IComponentCConsoleInputProcessorCConsoleViewCLogComponentDLTMessageAnalyzerPluginUi::FormQPlainTextEditextendsimplementscontains11contains11contains11DMA_Framework_ComponentDMA_LogDMA_Log_APIDMA_PluginDMA_Plugin_APIQtDMA::IComponentCConsoleInputProcessorCConsoleViewCLogComponentDLTMessageAnalyzerPluginUi::FormQPlainTextEditextendsimplementscontains11contains11contains11DMA_Framework_ComponentDMA_Log_APIQtDMA::IComponentCConsoleViewCLogComponentQPlainTextEditextendsimplementsDMA_Framework_ComponentDMA_Log_APIQtDMA::IComponentCConsoleViewCLogComponentQPlainTextEditextendsimplementsDMA_LogQt«Singleton»CConsoleCtrlCConsoleInputProcessorQObjectextendsextendsDMA_LogQt«Singleton»CConsoleCtrlCConsoleInputProcessorQObjectextendsextendsDMA_Framework_ComponentDMA_Logo_APIDMA_PluginDMA_Plugin_APIQtDMA::IComponentCLogoCLogoComponentDLTMessageAnalyzerPluginUi::FormQPushButtonextendsimplementsuses11contains11contains11DMA_Framework_ComponentDMA_Logo_APIDMA_PluginDMA_Plugin_APIQtDMA::IComponentCLogoCLogoComponentDLTMessageAnalyzerPluginUi::FormQPushButtonextendsimplementsuses11contains11contains11DMA_Framework_ComponentDMA_Logo_APIQtDMA::IComponentCLogoCLogoComponentQPushButtonextendsimplementsuses11DMA_Framework_ComponentDMA_Logo_APIQtDMA::IComponentCLogoCLogoComponentQPushButtonextendsimplementsuses11DLTDMA_LogsWrapperDMA_LogsWrapper_APIQDltFileQDltMsgCDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperCLogsWrapperComponentIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0implementsimplementsimplementscreates1*cache1*uses11uses11uses11creates instances1*creates instances1*creates instances1*DLTDMA_LogsWrapperDMA_LogsWrapper_APIQDltFileQDltMsgCDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperCLogsWrapperComponentIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0implementsimplementsimplementscreates1*cache1*uses11uses11uses11creates instances1*creates instances1*creates instances1*DLTDMA_Analyzer_APIDMA_Framework_ComponentDMA_LogsWrapperDMA_LogsWrapper_APIDMA_PluginDMA_Plugin_APIDMA_SearchViewDMA_SearchView_APIQtQDltFileQDltMsgIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )DMA::IComponentCDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperCLogsWrapperComponentIDLTLogsWrapperCreatorvirtual tFileWrapperPtr createDLTFileWrapper( QDltFile* pFile ) const = 0virtual tMsgDecoderPtr createMsgDecoder(QDltMessageDecoder* pMessageDecoder) const = 0virtual tMsgWrapperPtr createDLTMsgWrapper( QDltMsg& msg ) const = 0IFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerCSearchResultModelCSearchResultViewQObjectQDltMessageDecoderimplementsimplementsimplementsimplementsimplementsextendsuses11uses11cache1*creates instances1*creates instances1*creates instances1*creates1*creates1*creates1*uses1*uses11uses1*uses11provides11contains11uses11uses11uses11DLTDMA_Analyzer_APIDMA_Framework_ComponentDMA_LogsWrapperDMA_LogsWrapper_APIDMA_PluginDMA_Plugin_APIDMA_SearchViewDMA_SearchView_APIQtQDltFileQDltMsgIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )DMA::IComponentCDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperCLogsWrapperComponentIDLTLogsWrapperCreatorvirtual tFileWrapperPtr createDLTFileWrapper( QDltFile* pFile ) const = 0virtual tMsgDecoderPtr createMsgDecoder(QDltMessageDecoder* pMessageDecoder) const = 0virtual tMsgWrapperPtr createDLTMsgWrapper( QDltMsg& msg ) const = 0IFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerCSearchResultModelCSearchResultViewQObjectQDltMessageDecoderimplementsimplementsimplementsimplementsimplementsextendsuses11uses11cache1*creates instances1*creates instances1*creates instances1*creates1*creates1*creates1*uses1*uses11uses1*uses11provides11contains11uses11uses11uses11DMA_Framework_ComponentDMA_LogsWrapper_APIQtDMA::IComponentCLogsWrapperComponentIDLTLogsWrapperCreatorvirtual tFileWrapperPtr createDLTFileWrapper( QDltFile* pFile ) const = 0virtual tMsgDecoderPtr createMsgDecoder(QDltMessageDecoder* pMessageDecoder) const = 0virtual tMsgWrapperPtr createDLTMsgWrapper( QDltMsg& msg ) const = 0IFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0QObjectimplementsimplementsextendscreates1*creates1*creates1*uses11provides11DMA_Framework_ComponentDMA_LogsWrapper_APIQtDMA::IComponentCLogsWrapperComponentIDLTLogsWrapperCreatorvirtual tFileWrapperPtr createDLTFileWrapper( QDltFile* pFile ) const = 0virtual tMsgDecoderPtr createMsgDecoder(QDltMessageDecoder* pMessageDecoder) const = 0virtual tMsgWrapperPtr createDLTMsgWrapper( QDltMsg& msg ) const = 0IFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0QObjectimplementsimplementsextendscreates1*creates1*creates1*uses11provides11DMA_LogsWrapperDMA_LogsWrapper_APICDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0implementsimplementsimplementscreates1*DMA_LogsWrapperDMA_LogsWrapper_APICDLTFileWrapperCDLTMsgDecoderCDLTMsgWrapperIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0IMsgDecodervirtual void decodeMsg(QDltMsg&, int) = 0IMsgWrappervirtual QString getApid() const = 0virtual QString getCtid() const = 0virtual QString getCtrlReturnTypeString() const = 0virtual QString getCtrlServiceIdString() const = 0virtual QString getEcuid() const = 0virtual QString getModeString() const = 0virtual QString getPayload() const = 0virtual QString getSubtypeString() const = 0virtual QString getTimeString() const = 0virtual QString getTypeString() const = 0virtual const unsigned char& getMessageCounter() const = 0virtual const unsigned int& getMicroseconds() const = 0virtual const unsigned int& getNumberOfArguments() const = 0virtual const unsigned int& getSessionid() const = 0virtual const unsigned int& getTimestamp() const = 0virtual unsigned int getInitialMessageSize() const = 0virtual unsigned int getSize() const = 0virtual void dumpPayload() const = 0virtual void dumpSize() const = 0implementsimplementsimplementscreates1*DMA_CommonDMA_PatternsViewDMA_PatternsView_APIDMA_Settings_APICTreeItemCPatternsModelCPatternsViewCPatternsViewComponentIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine,Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault =Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex,Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CSettingsManagerClientextendsimplementscontains1*uses11using to create IPatternsModel11DMA_CommonDMA_PatternsViewDMA_PatternsView_APIDMA_Settings_APICTreeItemCPatternsModelCPatternsViewCPatternsViewComponentIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine, Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault = Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex, Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CSettingsManagerClientextendsimplementscontains1*uses11using to create IPatternsModel11DMA_Framework_ComponentDMA_PatternsViewDMA_PatternsView_APIDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtDMA::IComponentCPatternsModelCPatternsViewCPatternsViewComponentCTreeRepresentationDelegateIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine,Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault =Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex,Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSettingsManagerClientQAbstractItemModelQLineEditQStyledItemDelegateQTreeViewimplementsextendsextendsextendsimplementsextendsimplementsuses11contains11patterns search input11using to create IPatternsModel11uses11contains11contains11uses11uses11contains11DMA_Framework_ComponentDMA_PatternsViewDMA_PatternsView_APIDMA_PluginDMA_Plugin_APIDMA_RegexHistoryDMA_RegexHistory_APIDMA_Settings_APIQtDMA::IComponentCPatternsModelCPatternsViewCPatternsViewComponentCTreeRepresentationDelegateIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine, Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault = Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex, Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0DLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCRegexHistoryProviderCRegexHistoryComponentCSettingsManagerClientQAbstractItemModelQLineEditQStyledItemDelegateQTreeViewimplementsextendsextendsextendsimplementsextendsimplementsuses11contains11patterns search input11using to create IPatternsModel11uses11contains11contains11uses11uses11contains11uses11uses11DMA_Framework_ComponentDMA_PatternsView_APIDMA_Settings_APIQtDMA::IComponentCPatternsViewCPatternsViewComponentCTreeRepresentationDelegateIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine,Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault =Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex,Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CSettingsManagerClientQAbstractItemModelQStyledItemDelegateQTreeViewextendsextendsextendsimplementsextendsimplementscontains11uses11contains11DMA_Framework_ComponentDMA_PatternsView_APIDMA_Settings_APIQtDMA::IComponentCPatternsViewCPatternsViewComponentCTreeRepresentationDelegateIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine, Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault = Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex, Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CSettingsManagerClientQAbstractItemModelQStyledItemDelegateQTreeViewextendsextendsextendsimplementsextendsimplementscontains11uses11contains11DMA_PatternsViewDMA_PatternsView_APIDMA_Settings_APICPatternsModelIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine,Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault =Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex,Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CSettingsManagerClientextendsimplementsDMA_PatternsViewDMA_PatternsView_APIDMA_Settings_APICPatternsModelIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine, Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault = Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex, Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CSettingsManagerClientextendsimplementsDMA_PlantumlViewDMA_PlantumlView_APIQtCImageViewerCUMLViewQImageQWidgetextendscontains11contains11DMA_PlantumlViewDMA_PlantumlView_APIQtCImageViewerCUMLViewQImageQWidgetextendscontains11contains11DMA_Framework_ComponentDMA_PlantumlViewDMA_PlantumlView_APIDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtDMA::IComponentCImageViewerCUMLViewCUMLViewComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSettingsManagerClientQProcessQWidgetextendsextendsextendsimplementscontains11contains12uses11contains11uses11contains11DMA_Framework_ComponentDMA_PlantumlViewDMA_PlantumlView_APIDMA_PluginDMA_Plugin_APIDMA_Settings_APIQtDMA::IComponentCImageViewerCUMLViewCUMLViewComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSettingsManagerClientQProcessQWidgetextendsextendsextendsimplementscontains11contains12uses11contains11uses11contains11DMA_Framework_ComponentDMA_PlantumlView_APIDMA_Settings_APIQtDMA::IComponentCUMLViewCUMLViewComponentCSettingsManagerClientQWidgetextendsextendsextendsimplementsuses11DMA_Framework_ComponentDMA_PlantumlView_APIDMA_Settings_APIQtDMA::IComponentCUMLViewCUMLViewComponentCSettingsManagerClientQWidgetextendsextendsextendsimplementsuses11DMA_PlantumlViewQtCImageViewerQWidgetextendsDMA_PlantumlViewQtCImageViewerQWidgetextendsDMA_PlotViewDMA_PlotView_APIqcustomplotQCPGanttBarsDataQCPGanttRowCPlotViewComponentQCPAxisQCPAbstractPlottable1D_QCPGanttBarsData_extendsuses12contains1manyuses1many \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_PlotView_API.puml b/md/dev_docs/puml/DMA_PlotView_API.puml index 4fcf8c89..467b31be 100644 --- a/md/dev_docs/puml/DMA_PlotView_API.puml +++ b/md/dev_docs/puml/DMA_PlotView_API.puml @@ -12,6 +12,15 @@ class "DMA::IComponent" } +package "DMA_PlotView" #DDDDDD +{ + +class "QCPGanttRow" +{ +} + +} + package "DMA_PlotView_API" #DDDDDD { @@ -100,6 +109,7 @@ CCustomPlotExtended "1" *-- "*" QCPGraph : uses CCustomPlotExtended "1" o-- "*" QCPLegend : uses CPlotViewComponent "1" o-- "1" CCustomPlotExtended : uses CPlotViewComponent "1" o-- "1" ISearchResultModel : uses +CPlotViewComponent "1" o-- "many" QCPGanttRow : uses CPlotViewComponent "1" o-- "1" QPushButton : uses DLTMessageAnalyzerPlugin "1" *-- "1" CPlotViewComponent : contains diff --git a/md/dev_docs/puml/DMA_PlotView_API.svg b/md/dev_docs/puml/DMA_PlotView_API.svg index 3984c575..2186335c 100644 --- a/md/dev_docs/puml/DMA_PlotView_API.svg +++ b/md/dev_docs/puml/DMA_PlotView_API.svg @@ -1,4 +1,35 @@ -DMA_Framework_ComponentDMA_PlotView_APIDMA_PluginDMA_SearchView_APIDMA_Settings_APIQtqcustomplotDMA::IComponentCCustomPlotExtendedCPlotViewComponentDLTMessageAnalyzerPluginISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack&foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQPushButtonQCPAxisRectQCPGraphQCPLegendQCustomPlotextendsextendsimplementsuses1*uses1*uses1*uses11uses11uses11contains11DMA_Framework_ComponentDMA_PlotViewDMA_PlotView_APIDMA_PluginDMA_SearchView_APIDMA_Settings_APIQtqcustomplotDMA::IComponentQCPGanttRowCCustomPlotExtendedCPlotViewComponentDLTMessageAnalyzerPluginISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack& foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQPushButtonQCPAxisRectQCPGraphQCPLegendQCustomPlotextendsextendsimplementsuses1*uses1*uses1*uses11uses11uses1manyuses11contains11DMA_Framework_ComponentDMA_PlotView_APIDMA_Settings_APIqcustomplotDMA::IComponentCCustomPlotExtendedCPlotViewComponentCSettingsManagerClientQCustomPlotextendsextendsimplementsuses11DMA_Framework_ComponentDMA_PlotView_APIDMA_Settings_APIqcustomplotDMA::IComponentCCustomPlotExtendedCPlotViewComponentCSettingsManagerClientQCustomPlotextendsextendsimplementsuses11DMA_PlotViewQCPGanttBarsDataQCPGanttRowQCPAbstractPlottable1D_QCPGanttBarsData_extendscontains1many \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_Plugin.puml b/md/dev_docs/puml/DMA_Plugin.puml index 3e3eb224..ea3b627d 100644 --- a/md/dev_docs/puml/DMA_Plugin.puml +++ b/md/dev_docs/puml/DMA_Plugin.puml @@ -123,6 +123,15 @@ class "Form" } +package "DMA_RegexHistory_API" #DDDDDD +{ + +class "CRegexHistoryComponent" +{ +} + +} + package "DMA_SearchView_API" #DDDDDD { @@ -161,6 +170,7 @@ DLTMessageAnalyzerPlugin "1" *-- "1" CLogoComponent : contains DLTMessageAnalyzerPlugin "1" *-- "1" CLogsWrapperComponent : contains DLTMessageAnalyzerPlugin "1" *-- "1" CPatternsViewComponent : contains DLTMessageAnalyzerPlugin "1" *-- "1" CPlotViewComponent : contains +DLTMessageAnalyzerPlugin "1" *-- "1" CRegexHistoryComponent : contains DLTMessageAnalyzerPlugin "1" *-- "1" CSearchViewComponent : contains DLTMessageAnalyzerPlugin "1" *-- "1" CUMLViewComponent : contains DLTMessageAnalyzerPlugin "1" *-- "1" Form : contains diff --git a/md/dev_docs/puml/DMA_Plugin.svg b/md/dev_docs/puml/DMA_Plugin.svg index 09bd5a32..1796b3bf 100644 --- a/md/dev_docs/puml/DMA_Plugin.svg +++ b/md/dev_docs/puml/DMA_Plugin.svg @@ -1,4 +1,57 @@ -DLTDMA_Analyzer_APIDMA_FiltersView_APIDMA_GroupedView_APIDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PlotView_APIDMA_PluginDMA_Plugin_APIDMA_SearchView_APIQtQDLTPluginInterfaceQDltPluginControlInterfaceQDltPluginViewerInterfaceCAnalyzerComponentCFiltersViewComponentCGroupedViewComponentCLogComponentCLogoComponentCLogsWrapperComponentCPatternsViewComponentCUMLViewComponentCPlotViewComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerFormCSearchViewComponentQObjectQTimerimplementsimplementsimplementsextendscontains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11uses11contains11DLTDMA_Analyzer_APIDMA_FiltersView_APIDMA_GroupedView_APIDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PlotView_APIDMA_PluginDMA_Plugin_APIDMA_RegexHistory_APIDMA_SearchView_APIQtQDLTPluginInterfaceQDltPluginControlInterfaceQDltPluginViewerInterfaceCAnalyzerComponentCFiltersViewComponentCGroupedViewComponentCLogComponentCLogoComponentCLogsWrapperComponentCPatternsViewComponentCUMLViewComponentCPlotViewComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerFormCRegexHistoryComponentCSearchViewComponentQObjectQTimerimplementsimplementsimplementsextendscontains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11uses11contains11DMA_Analyzer_APIDMA_CommonDMA_FiltersView_APIDMA_GroupedView_APIDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PluginDMA_Plugin_APIDMA_SearchView_APIDMA_Settings_APIQtIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCFiltersViewIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CGroupedViewIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CConsoleViewCLogoIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CPatternsViewIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine,Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault =Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex,Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CUMLViewDLTMessageAnalyzerPluginCDLTMessageAnalyzerFormUi::FormCSearchResultViewISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack&foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientISettingsManagerQWidgetQDltMessageDecoderextendsimplementsextendsextendscontains11contains11uses11uses11uses11uses11contains11uses11gets and uses11uses11gets and feeds to IDLTMessageAnalyzerControllerConsumer11uses11uses11uses11uses11gets and uses11gets and uses11uses11contains11contains11contains11contains11contains11contains11contains11contains11DMA_Analyzer_APIDMA_CommonDMA_FiltersView_APIDMA_GroupedView_APIDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PluginDMA_Plugin_APIDMA_RegexHistory_APIDMA_SearchView_APIDMA_Settings_APIQtIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCFiltersViewIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CGroupedViewIGroupedViewModelvirtual int rowCount(const QModelIndex &parent = QModelIndex()) const = 0virtual std::pair<bool__QString> exportToHTML(QString& resultHTML) = 0virtual void addMatches( const tFoundMatches& matches, bool update ) = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regex) = 0CConsoleViewCLogoIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CPatternsViewIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine, Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault = Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex, Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CUMLViewDLTMessageAnalyzerPluginCDLTMessageAnalyzerFormUi::FormCRegexHistoryLineEditCSearchResultViewISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack& foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientISettingsManagerQWidgetQDltMessageDecoderextendsimplementsextendsextendscontains11contains11uses11uses11uses11uses11contains11uses11gets and uses11uses11gets and feeds to IDLTMessageAnalyzerControllerConsumer11uses11uses11uses11uses11gets and uses11gets and uses11uses11contains11contains11contains11contains11contains11contains11contains11contains11contains11DMA_Analyzer_APIDMA_Plugin_APIDMA_Settings_APIQtIDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CDLTMessageAnalyzerFormUi::FormCSettingsManagerClientQWidgetextendsimplementsextendsextendscontains11DMA_Analyzer_APIDMA_Plugin_APIDMA_Settings_APIQtIDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CDLTMessageAnalyzerFormUi::FormCSettingsManagerClientQWidgetextendsimplementsextendsextendscontains11DLTDMA_PluginQtQDLTPluginInterfaceQDltPluginControlInterfaceQDltPluginViewerInterfaceDLTMessageAnalyzerPluginQObjectimplementsimplementsimplementsextendsDLTDMA_PluginQtQDLTPluginInterfaceQDltPluginControlInterfaceQDltPluginViewerInterfaceDLTMessageAnalyzerPluginQObjectimplementsimplementsimplementsextendsDLTDMA_Analyzer_APIDMA_PatternsView_APIDMA_RegexHistoryDMA_RegexHistory_APIDMA_Settings_APIQtQListViewIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0CPatternsViewCExtendedCompleterCRegexHistoryProviderCRegexHistoryComponentCRegexHistoryLineEditIRegexHistoryProviderCSettingsManagerClientISettingsManagerQCompleterextendsextendsimplementscreates11uses11uses11uses11uses11creates11creates11 \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_RegexHistory_API.puml b/md/dev_docs/puml/DMA_RegexHistory_API.puml new file mode 100644 index 00000000..7ea42871 --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_API.puml @@ -0,0 +1,120 @@ + +@startuml + +skinparam backgroundColor #FEFEFE +skinparam wrapWidth 600 +package "DMA_Analyzer_API" #DDDDDD +{ + +abstract class "IDLTMessageAnalyzerController" +{ + + {abstract} virtual int getMaximumNumberOfThreads() const = 0 + + signal void progressNotification( const tProgressNotificationData& progressNotificationData ) + + {abstract} virtual tRequestId requestAnalyze( const std::weak_ptr& pClient, const tRequestParameters& requestParameters ) = 0 + + {abstract} virtual void cancelRequest( const std::weak_ptr& pClient, const tRequestId& requestId ) = 0 +} + +} + +package "DMA_Framework_Component" #DDDDDD +{ + +class "DMA::IComponent" +{ +} + +} + +package "DMA_PatternsView_API" #DDDDDD +{ + +class "CPatternsView" +{ +} + +} + +package "DMA_Plugin" #DDDDDD +{ + +class "DLTMessageAnalyzerPlugin" +{ +} + +} + +package "DMA_Plugin_API" #DDDDDD +{ + +class "Ui::Form" +{ +} + +} + +package "DMA_RegexHistory" #DDDDDD +{ + +class "CRegexHistoryProvider" +{ +} + +} + +package "DMA_RegexHistory_API" #DDDDDD +{ + +class "CRegexHistoryComponent" +{ +} + +class "CRegexHistoryLineEdit" +{ +} + +class "IRegexHistoryProvider" +{ +} + +} + +package "DMA_Settings_API" #DDDDDD +{ + +class "ISettingsManager" +{ +} + +} + +package "Qt" #DDDDDD +{ + +class "QLineEdit" +{ +} + +class "QObject" +{ +} + +} + +'====================Inheritance section==================== +IRegexHistoryProvider <|-- CRegexHistoryProvider : implements +DMA::IComponent <|-- CRegexHistoryComponent : implements +QLineEdit <|-- CRegexHistoryLineEdit : extends +QObject <|-- IRegexHistoryProvider : extends + +'====================Dependencies section==================== +DLTMessageAnalyzerPlugin "1" *-- "1" CRegexHistoryComponent : contains +Ui::Form "1" *-- "1" CRegexHistoryLineEdit : contains +CRegexHistoryProvider "1" o-- "1" CRegexHistoryLineEdit : uses +CRegexHistoryComponent "1" o-- "1" CPatternsView : uses +CRegexHistoryComponent "1" --> "1" CRegexHistoryLineEdit : passes +CRegexHistoryComponent "1" *-- "1" CRegexHistoryProvider : creates +CRegexHistoryComponent "1" --> "1" IDLTMessageAnalyzerController : passes +CRegexHistoryComponent "1" --> "1" ISettingsManager : passes +CRegexHistoryLineEdit "1" o-- "1" IRegexHistoryProvider : uses + +@enduml \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_RegexHistory_API.svg b/md/dev_docs/puml/DMA_RegexHistory_API.svg new file mode 100644 index 00000000..68a29805 --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_API.svg @@ -0,0 +1,163 @@ +DMA_Analyzer_APIDMA_Framework_ComponentDMA_PatternsView_APIDMA_PluginDMA_Plugin_APIDMA_RegexHistoryDMA_RegexHistory_APIDMA_Settings_APIQtIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0DMA::IComponentCPatternsViewDLTMessageAnalyzerPluginUi::FormCRegexHistoryProviderCRegexHistoryComponentCRegexHistoryLineEditIRegexHistoryProviderISettingsManagerQLineEditQObjectimplementsimplementsextendsextendscontains11contains11uses11uses11passes11creates11passes11passes11uses11 \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_RegexHistory_API_standalone.puml b/md/dev_docs/puml/DMA_RegexHistory_API_standalone.puml new file mode 100644 index 00000000..b0c3e9c0 --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_API_standalone.puml @@ -0,0 +1,54 @@ + +@startuml + +skinparam backgroundColor #FEFEFE +skinparam wrapWidth 600 +package "DMA_Framework_Component" #DDDDDD +{ + +class "DMA::IComponent" +{ +} + +} + +package "DMA_RegexHistory_API" #DDDDDD +{ + +class "CRegexHistoryComponent" +{ +} + +class "CRegexHistoryLineEdit" +{ +} + +class "IRegexHistoryProvider" +{ +} + +} + +package "Qt" #DDDDDD +{ + +class "QLineEdit" +{ +} + +class "QObject" +{ +} + +} + +'====================Inheritance section==================== +DMA::IComponent <|-- CRegexHistoryComponent : implements +QLineEdit <|-- CRegexHistoryLineEdit : extends +QObject <|-- IRegexHistoryProvider : extends + +'====================Dependencies section==================== +CRegexHistoryComponent "1" --> "1" CRegexHistoryLineEdit : passes +CRegexHistoryLineEdit "1" o-- "1" IRegexHistoryProvider : uses + +@enduml \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_RegexHistory_API_standalone.svg b/md/dev_docs/puml/DMA_RegexHistory_API_standalone.svg new file mode 100644 index 00000000..5238aa9a --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_API_standalone.svg @@ -0,0 +1,77 @@ +DMA_Framework_ComponentDMA_RegexHistory_APIQtDMA::IComponentCRegexHistoryComponentCRegexHistoryLineEditIRegexHistoryProviderQLineEditQObjectimplementsextendsextendspasses11uses11 \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_RegexHistory_standalone.puml b/md/dev_docs/puml/DMA_RegexHistory_standalone.puml new file mode 100644 index 00000000..78e2488a --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_standalone.puml @@ -0,0 +1,54 @@ + +@startuml + +skinparam backgroundColor #FEFEFE +skinparam wrapWidth 600 +package "DMA_RegexHistory" #DDDDDD +{ + +class "CExtendedCompleter" +{ +} + +class "CRegexHistoryProvider" +{ +} + +} + +package "DMA_RegexHistory_API" #DDDDDD +{ + +class "IRegexHistoryProvider" +{ +} + +} + +package "DMA_Settings_API" #DDDDDD +{ + +class "CSettingsManagerClient" +{ +} + +} + +package "Qt" #DDDDDD +{ + +class "QCompleter" +{ +} + +} + +'====================Inheritance section==================== +QCompleter <|-- CExtendedCompleter : extends +CSettingsManagerClient <|-- CRegexHistoryProvider : extends +IRegexHistoryProvider <|-- CRegexHistoryProvider : implements + +'====================Dependencies section==================== +CRegexHistoryProvider "1" *-- "1" CExtendedCompleter : creates + +@enduml \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_RegexHistory_standalone.svg b/md/dev_docs/puml/DMA_RegexHistory_standalone.svg new file mode 100644 index 00000000..5bad73db --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_standalone.svg @@ -0,0 +1,76 @@ +DMA_RegexHistoryDMA_RegexHistory_APIDMA_Settings_APIQtCExtendedCompleterCRegexHistoryProviderIRegexHistoryProviderCSettingsManagerClientQCompleterextendsextendsimplementscreates11 \ No newline at end of file diff --git a/md/dev_docs/puml/DMA_SearchView.svg b/md/dev_docs/puml/DMA_SearchView.svg index a81bbd97..6ca1f480 100644 --- a/md/dev_docs/puml/DMA_SearchView.svg +++ b/md/dev_docs/puml/DMA_SearchView.svg @@ -1,4 +1,27 @@ -DMA_LogsWrapper_APIDMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CSearchResultHighlightingDelegateCSearchResultModelCSearchResultViewCSearchViewComponentISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack&foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQAbstractTableModelQStyledItemDelegateextendsextendsextendsimplementsimplementsuses11uses11uses11using to create ISearchResultModel11DMA_LogsWrapper_APIDMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CSearchResultHighlightingDelegateCSearchResultModelCSearchResultViewCSearchViewComponentISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack& foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQAbstractTableModelQStyledItemDelegateextendsextendsextendsimplementsimplementsuses11uses11uses11using to create ISearchResultModel11DMA_CommonDMA_Framework_ComponentDMA_LogsWrapper_APIDMA_PlotView_APIDMA_PluginDMA_Plugin_APIDMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtCTableMemoryJumperDMA::IComponentIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CPlotViewComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSearchResultModelCSearchResultViewCSearchViewComponentISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack&foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQObjectQTableViewimplementsextendsextendsimplementsextendsuses11contains11uses11gets and uses11contains11uses11uses11using to create ISearchResultModel11uses11contains11contains11DMA_CommonDMA_Framework_ComponentDMA_LogsWrapper_APIDMA_PlotView_APIDMA_PluginDMA_Plugin_APIDMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtCTableMemoryJumperDMA::IComponentIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CPlotViewComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCSearchResultModelCSearchResultViewCSearchViewComponentISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack& foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQObjectQTableViewimplementsextendsextendsimplementsextendsuses11contains11uses11gets and uses11contains11uses11uses11using to create ISearchResultModel11uses11contains11contains11DMA_Framework_ComponentDMA_SearchView_APIDMA_Settings_APIQtDMA::IComponentCSearchResultViewCSearchViewComponentISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack&foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQObjectQTableViewextendsextendsimplementsextendsuses11contains11DMA_Framework_ComponentDMA_SearchView_APIDMA_Settings_APIQtDMA::IComponentCSearchResultViewCSearchViewComponentISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack& foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQObjectQTableViewextendsextendsimplementsextendsuses11contains11DMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtCSearchResultHighlightingDelegateCSearchResultModelISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack&foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQAbstractTableModelQStyledItemDelegateextendsextendsextendsimplementsimplementsuses11DMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtCSearchResultHighlightingDelegateCSearchResultModelISearchResultModelvirtual int getFileIdx( const QModelIndex& idx ) const = 0virtual std::pair<bool__tIntRange> addNextMessageIdxVec(const tFoundMatchesPack& foundMatchesPack) = 0virtual std::pair<int__QString > getUMLDiagramContent() const = 0virtual tPlotContent createPlotContent() const = 0virtual void resetData() = 0virtual void setFile(const tFileWrapperPtr& pFile) = 0virtual void updateView(const int& fromRow = 0) = 0CSettingsManagerClientQAbstractTableModelQStyledItemDelegateextendsextendsextendsimplementsimplementsuses11DMA_SettingsDMA_Settings_APICSettingItemvirtual const QString& getKey() overridevirtual const tUpdateSettingsFileFunc& getUpdateFileFunc() overrideCSettingsManagerISettingItemvirtual QJsonObject writeData() const = 0virtual bool readData( const QJsonValueRef& setting ) = 0virtual const QString& getKey() = 0virtual const tUpdateSettingsFileFunc& getUpdateFileFunc() = 0virtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() = 0TSettingItemTvirtual QJsonObject writeData() const overridevirtual bool readData( const QJsonValueRef& setting ) overridevirtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() overrideCSettingsComponentISettingsManagerpartially implementsimplementsextendscontains1*creates11DMA_SettingsDMA_Settings_APICSettingItemvirtual const QString& getKey() overridevirtual const tUpdateSettingsFileFunc& getUpdateFileFunc() overrideCSettingsManagerISettingItemvirtual QJsonObject writeData() const = 0virtual bool readData( const QJsonValueRef& setting ) = 0virtual const QString& getKey() = 0virtual const tUpdateSettingsFileFunc& getUpdateFileFunc() = 0virtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() = 0TSettingItemTvirtual QJsonObject writeData() const overridevirtual bool readData( const QJsonValueRef& setting ) overridevirtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() overrideCSettingsComponentISettingsManagerpartially implementsimplementsextendscontains1*creates11 "1" ISettingsManager : passes CSettingsComponent "1" --> "1" CSettingsManager : creates CSettingsComponent "1" *-- "1" ISettingsManager : provides CSettingsManagerClient "1" o-- "1" ISettingsManager : uses diff --git a/md/dev_docs/puml/DMA_Settings_API.svg b/md/dev_docs/puml/DMA_Settings_API.svg index a8048f1c..f910adb5 100644 --- a/md/dev_docs/puml/DMA_Settings_API.svg +++ b/md/dev_docs/puml/DMA_Settings_API.svg @@ -1,4 +1,83 @@ -DMA_AnalyzerDMA_Analyzer_APIDMA_FiltersViewDMA_FiltersView_APIDMA_Framework_ComponentDMA_GroupedViewDMA_GroupedView_APIDMA_PatternsViewDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PlotView_APIDMA_Plugin_APIDMA_SearchViewDMA_SearchView_APIDMA_SettingsDMA_Settings_APIQtCDLTRegexAnalyzerWorkerCMTAnalyzerCAnalyzerComponentCFilterItemDelegateCFiltersModelCFiltersViewCFiltersViewComponentDMA::IComponentCGroupedViewModelCGroupedViewCGroupedViewComponentCPatternsModelCPatternsViewCPatternsViewComponentCUMLViewCUMLViewComponentCPlotViewComponentCDLTMessageAnalyzerFormCSearchResultHighlightingDelegateCSearchResultModelCSearchViewComponentCSettingsManagerCSettingsComponentCSettingsManagerClientISettingsManagerQObjectextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsimplementsimplementsextendsgets and uses11creates11provides11uses11DMA_AnalyzerDMA_Analyzer_APIDMA_FiltersViewDMA_FiltersView_APIDMA_Framework_ComponentDMA_GroupedViewDMA_GroupedView_APIDMA_PatternsViewDMA_PatternsView_APIDMA_PlantumlView_APIDMA_PlotView_APIDMA_Plugin_APIDMA_RegexHistoryDMA_RegexHistory_APIDMA_SearchViewDMA_SearchView_APIDMA_SettingsDMA_Settings_APIQtCDLTRegexAnalyzerWorkerCMTAnalyzerCAnalyzerComponentCFilterItemDelegateCFiltersModelCFiltersViewCFiltersViewComponentDMA::IComponentCGroupedViewModelCGroupedViewCGroupedViewComponentCPatternsModelCPatternsViewCPatternsViewComponentCUMLViewCUMLViewComponentCPlotViewComponentCDLTMessageAnalyzerFormCRegexHistoryProviderCRegexHistoryComponentCSearchResultHighlightingDelegateCSearchResultModelCSearchViewComponentCSettingsManagerCSettingsComponentCSettingsManagerClientISettingsManagerQObjectextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsextendsimplementsimplementsextendsgets and uses11uses11passes11creates11provides11uses11DMA_Framework_ComponentDMA_Settings_APIQtDMA::IComponentCSettingsComponentCSettingsManagerClientISettingsManagerQObjectimplementsextendsprovides11uses11DMA_Framework_ComponentDMA_Settings_APIQtDMA::IComponentCSettingsComponentCSettingsManagerClientISettingsManagerQObjectimplementsextendsprovides11uses11DMA_SettingsDMA_Settings_APICSettingItemvirtual const QString& getKey() overridevirtual const tUpdateSettingsFileFunc& getUpdateFileFunc() overrideCSettingsManagerISettingItemvirtual QJsonObject writeData() const = 0virtual bool readData( const QJsonValueRef& setting ) = 0virtual const QString& getKey() = 0virtual const tUpdateSettingsFileFunc& getUpdateFileFunc() = 0virtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() = 0TSettingItemTvirtual QJsonObject writeData() const overridevirtual bool readData( const QJsonValueRef& setting ) overridevirtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() overrideISettingsManagerpartially implementsimplementsextendscontains1*DMA_SettingsDMA_Settings_APICSettingItemvirtual const QString& getKey() overridevirtual const tUpdateSettingsFileFunc& getUpdateFileFunc() overrideCSettingsManagerISettingItemvirtual QJsonObject writeData() const = 0virtual bool readData( const QJsonValueRef& setting ) = 0virtual const QString& getKey() = 0virtual const tUpdateSettingsFileFunc& getUpdateFileFunc() = 0virtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() = 0TSettingItemTvirtual QJsonObject writeData() const overridevirtual bool readData( const QJsonValueRef& setting ) overridevirtual tGeneralUpdateDataFunc getGeneralUpdateDataFunc() overrideISettingsManagerpartially implementsimplementsextendscontains1*DMA_AnalyzerDMA_Analyzer_APIDMA_CommonDMA_FiltersViewDMA_FiltersView_APIDMA_GroupedViewDMA_GroupedView_APIDMA_LogDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlViewDMA_PlantumlView_APIDMA_PlotView_APIDMA_PluginDMA_Plugin_APIDMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtqcustomplotCDLTRegexAnalyzerWorkerCMTAnalyzerIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCFilterItemDelegateCFiltersViewIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CGroupedViewModelCGroupedView«Singleton»CConsoleCtrlCConsoleInputProcessorCConsoleViewCLogoIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CPatternsViewCTreeRepresentationDelegateIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine,Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault =Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex,Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CImageViewerCUMLViewCPlotViewComponentDLTMessageAnalyzerPluginFormCSearchResultHighlightingDelegateCSearchResultModelCSearchResultViewCSearchViewComponentISettingsManagerQAbstractItemModelQAbstractTableModelQCompleterQElapsedTimerQFileSystemWatcherQImageQLineEditQObjectQPlainTextEditQProcessQPushButtonQStyledItemDelegateQTabWidgetQTableViewQThreadQTimerQTreeViewQWidgetQCPAxisRectQCPGraphQCPLegendQCustomPlotextendsextendsextendsextendsextendsextendsimplementsimplementsimplementsextendsextendsextendsextendsextendsextendsextendsextendsimplementsextendsextendsextendsextendsextendsimplementsextendsextendsextendsextendsextendsextendsextendscontains1*animation widget11contains11contains11uses11parent view11regex input field11console text edit11console view tab widget11console tab11console input11patterns search input11contains11contains12uses11contains11DMA_AnalyzerDMA_Analyzer_APIDMA_CommonDMA_FiltersViewDMA_FiltersView_APIDMA_GroupedViewDMA_GroupedView_APIDMA_LogDMA_Log_APIDMA_Logo_APIDMA_LogsWrapper_APIDMA_PatternsView_APIDMA_PlantumlViewDMA_PlantumlView_APIDMA_PlotView_APIDMA_PluginDMA_Plugin_APIDMA_RegexHistoryDMA_RegexHistory_APIDMA_SearchViewDMA_SearchView_APIDMA_Settings_APIQtqcustomplotCDLTRegexAnalyzerWorkerCMTAnalyzerIDLTMessageAnalyzerControllervirtual int getMaximumNumberOfThreads() const = 0signal void progressNotification( const tProgressNotificationData& progressNotificationData )virtual tRequestId requestAnalyze( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>&pClient, const tRequestParameters& requestParameters ) = 0virtual void cancelRequest( const std::weak_ptr<IDLTMessageAnalyzerControllerConsumer>& pClient,const tRequestId& requestId ) = 0IDLTMessageAnalyzerControllerConsumervirtual slot void progressNotification( const tProgressNotificationData& progressNotificationData ) = 0tRequestId requestAnalyze( const tRequestParameters& requestParameters )CBGColorAnimationCRegexDirectoryMonitorCTableMemoryJumperCFilterItemDelegateCFiltersViewIFiltersModelvirtual void addCompletionData( const tFoundMatches& foundMatches ) = 0virtual void filterRegexTokens( const QString& filter ) = 0virtual void resetCompletionData() = 0virtual void resetData() = 0virtual void setUsedRegex(const QString& regexStr) = 0CGroupedViewModelCGroupedView«Singleton»CConsoleCtrlCConsoleInputProcessorCConsoleViewCLogoIFileWrappervirtual QString getCacheStatusAsString() const = 0virtual QString getFileName(int num = 0) = 0virtual bool cacheMsgByIndex( const tMsgId& msgId ) = 0virtual bool cacheMsgByIndexes( const QSet<tMsgId> msgIdSet ) = 0virtual bool cacheMsgByRange( const tIntRange& msgRange ) = 0virtual bool cacheMsgWrapper( const int& msgId, const tMsgWrapperPtr& pMsgWrapper ) = 0virtual bool getSubFilesHandlingStatus() const = 0virtual bool isFiltered() const = 0virtual int getMsgRealPos(int msgId) const = 0virtual int getNumberOfFiles() const = 0virtual int size() const = 0virtual int sizeNonFiltered() const = 0signal void currentSizeMbChanged(tCacheSizeMB MBytes)signal void fullChanged(bool isFull)signal void isEnabledChanged(bool isEnabled)signal void loadChanged(unsigned int percents)signal void maxSizeMbChanged(tCacheSizeMB MBytes)virtual tIntRangeProperty normalizeSearchRange( const tIntRangeProperty& inputRange) = 0virtual tMsgWrapperPtr getMsg(const tMsgId& msgId) = 0virtual virtual tIntRangeList getSubFilesSizeRanges() const = 0virtual void copyFileNameToClipboard( const int& msgId ) const = 0virtual void copyFileNamesToClipboard( const tIntRange& msgsRange ) const = 0virtual void resetCache() = 0virtual void setEnableCache(bool isEnabled) = 0virtual void setMaxCacheSize(const tCacheSizeB& cacheSize ) = 0virtual void setMessageDecoder( IMsgDecoder* pMessageDecoder ) = 0virtual void setSubFilesHandlingStatus(const bool& val) = 0CPatternsViewCTreeRepresentationDelegateIPatternsModelvirtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isCombine, Qt::CheckState isDefault) = 0virtual QModelIndex addData(const QString& alias, const QString& regex, Qt::CheckState isDefault = Qt::Unchecked) = 0virtual QModelIndex editData(const QModelIndex& idx, const QString& alias, const QString& regex, Qt::CheckState isDefault, Qt::CheckState isCombine) = 0virtual QString getAliasEditName( const QModelIndex& idx ) = 0virtual removeData(const QModelIndex& idx) = 0virtual signal void patternsRefreshed() = 0virtual tSearchResult search( const QString& alias ) = 0virtual void filterPatterns( const QString& filter ) = 0virtual void refreshRegexPatterns() = 0virtual void resetData() = 0virtual void updatePatternsInPersistency() = 0virtual void updateView() = 0CImageViewerCUMLViewCPlotViewComponentDLTMessageAnalyzerPluginFormCExtendedCompleterCRegexHistoryLineEditIRegexHistoryProviderCSearchResultHighlightingDelegateCSearchResultModelCSearchResultViewCSearchViewComponentISettingsManagerQAbstractItemModelQAbstractTableModelQCompleterQElapsedTimerQFileSystemWatcherQImageQLineEditQObjectQPlainTextEditQProcessQPushButtonQStyledItemDelegateQTabWidgetQTableViewQThreadQTimerQTreeViewQWidgetQCPAxisRectQCPGraphQCPLayerableQCPLegendQCustomPlotextendsextendsextendsextendsextendsextendsimplementsimplementsimplementsextendsextendsextendsextendsextendsextendsextendsextendsimplementsextendsextendsextendsextendsextendsextendsextendsextendsimplementsextendsextendsextendsextendsextendsextendsextendsextendscontains1*animation widget11contains11contains11uses11parent view11regex input field11console text edit11console view tab widget11console tab11console input11patterns search input11contains11contains12uses11contains11QtQAbstractItemModelQAbstractTableModelQCompleterQElapsedTimerQFileSystemWatcherQImageQLineEditQObjectQPlainTextEditQProcessQPushButtonQStyledItemDelegateQTabWidgetQTableViewQThreadQTimerQTreeViewQWidgetQtQAbstractItemModelQAbstractTableModelQCompleterQElapsedTimerQFileSystemWatcherQImageQLineEditQObjectQPlainTextEditQProcessQPushButtonQStyledItemDelegateQTabWidgetQTableViewQThreadQTimerQTreeViewQWidgetTO_BE_DONE \ No newline at end of file diff --git a/md/dev_docs/puml/qcustomplot.puml b/md/dev_docs/puml/qcustomplot.puml index af97db19..c23b74e4 100644 --- a/md/dev_docs/puml/qcustomplot.puml +++ b/md/dev_docs/puml/qcustomplot.puml @@ -3,6 +3,15 @@ skinparam backgroundColor #FEFEFE skinparam wrapWidth 600 +package "DMA_PlotView" #DDDDDD +{ + +class "QCPGanttRow" +{ +} + +} + package "DMA_PlotView_API" #DDDDDD { @@ -28,6 +37,10 @@ class "QWidget" package "qcustomplot" #DDDDDD { +class "QCPAxis" +{ +} + class "QCPAxisRect" { } @@ -36,6 +49,10 @@ class "QCPGraph" { } +class "QCPLayerable" +{ +} + class "QCPLegend" { } @@ -48,12 +65,15 @@ class "QCustomPlot" '====================Inheritance section==================== QCustomPlot <|-- CCustomPlotExtended : extends +QCPLayerable <|-- QCPAxis : extends QObject <|-- QCPAxisRect : extends QObject <|-- QCPGraph : extends +QObject <|-- QCPLayerable : extends QObject <|-- QCPLegend : extends QWidget <|-- QCustomPlot : extends '====================Dependencies section==================== +QCPGanttRow "1" o-- "2" QCPAxis : uses CCustomPlotExtended "1" *-- "*" QCPAxisRect : uses CCustomPlotExtended "1" *-- "*" QCPGraph : uses CCustomPlotExtended "1" o-- "*" QCPLegend : uses diff --git a/md/dev_docs/puml/qcustomplot.svg b/md/dev_docs/puml/qcustomplot.svg index f28c6cc7..bf04beef 100644 --- a/md/dev_docs/puml/qcustomplot.svg +++ b/md/dev_docs/puml/qcustomplot.svg @@ -1,8 +1,42 @@ -DMA_PlotView_APIQtqcustomplotCCustomPlotExtendedQObjectQWidgetQCPAxisRectQCPGraphQCPLegendQCustomPlotextendsextendsextendsextendsextendsuses1*uses1*uses1*DMA_PlotViewDMA_PlotView_APIQtqcustomplotQCPGanttRowCCustomPlotExtendedQObjectQWidgetQCPAxisQCPAxisRectQCPGraphQCPLayerableQCPLegendQCustomPlotextendsextendsextendsextendsextendsextendsextendsuses12uses1*uses1*uses1*QtqcustomplotQObjectQWidgetQCPAxisRectQCPGraphQCPLegendQCustomPlotextendsextendsextendsextendsQtqcustomplotQObjectQWidgetQCPAxisQCPAxisRectQCPGraphQCPLayerableQCPLegendQCustomPlotextendsextendsextendsextendsextendsextends