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..42e39eaf 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 were 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; // the string using which the 'regex' field was creted + QStringList selectedLiases; // the regex aliasaes that were used to form the query 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..4fa13912 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); } @@ -1174,9 +1196,9 @@ void CPatternsView::handleSettingsManagerChange() connect(pAction, &QAction::triggered, [this]() { SEND_MSG(QString("[CPatternsView]: Attempt to open path - \"%1\"") - .arg(getSettingsManager()->getRegexDirectoryFull())); + .arg(getSettingsManager()->getRegexDirectory())); - QDesktopServices::openUrl( QUrl::fromLocalFile( getSettingsManager()->getRegexDirectoryFull() ) ); + QDesktopServices::openUrl( QUrl::fromLocalFile( getSettingsManager()->getRegexDirectory() ) ); }); contextMenu.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..fbdb5515 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryComponent.hpp @@ -0,0 +1,68 @@ +#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; + +/** + * @brief Component for managing regex history integration. + * + * This class provides the functionality for integrating a regex history + * feature into a user interface. It handles communication between the + * regex input line edit, patterns view, and the message analyzer controller. + */ +class CRegexHistoryComponent : public DMA::IComponent +{ +public: + + /** + * @brief Constructs a CRegexHistoryComponent object. + * + * This constructor initializes the component with the required settings manager, + * regex history line edit, patterns view, and DLT message analyzer controller. + * + * @param pSettingsManager Pointer to the settings manager. + * @param pRegexHistoryLineEdit Pointer to the regex history line edit widget. + * @param pPatternsView Pointer to the patterns view. + * @param pDLTMessageAnalyzerController Shared pointer to the DLT message analyzer controller. + */ + CRegexHistoryComponent( const tSettingsManagerPtr& pSettingsManager, + CRegexHistoryLineEdit* pRegexHistoryLineEdit, + CPatternsView* pPatternsView, + const tDLTMessageAnalyzerControllerPtr& pDLTMessageAnalyzerController); + + /** + * @brief Gets the name of the component. + * + * This method returns the name of the component, as required by the base class. + * + * @return const char* The name of the component. + */ + virtual const char* getName() const override; + + /** + * @brief Gets the regex history provider. + * + * This method returns a shared pointer to the regex history provider, which + * manages regex history suggestions. + * + * @return const tRegexHistoryProviderPtr& Shared pointer to the regex history provider. + */ + 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..68ccfe05 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/api/CRegexHistoryLineEdit.hpp @@ -0,0 +1,74 @@ +#pragma once + +#include "QLineEdit" +#include "QKeyEvent" +#include "QWidget" + +#include "components/regexHistory/api/IRegexHistoryProvider.hpp" + +/** + * @brief A custom QLineEdit with regex history support. + * + * This class extends QLineEdit to include features for managing regex history + * and handling specific key events. + */ +class CRegexHistoryLineEdit : public QLineEdit +{ + Q_OBJECT + +public: + + /** + * @brief Constructs a CRegexHistoryLineEdit object. + * + * @param parent The parent widget for the line edit. Defaults to nullptr. + */ + explicit CRegexHistoryLineEdit(QWidget *parent = nullptr); + + /** + * @brief Sets the regex history provider. + * + * This method associates a regex history provider. + * + * @param pRegexHistoryProviderPtr Shared pointer to the regex history provider. + */ + void setRegexHistoryProvider(const tRegexHistoryProviderPtr& pRegexHistoryProviderPtr); + + /** + * @brief Sets whether to ignore return key events. + * + * This method allows control over whether the line edit should handle + * return (Enter) key events or ignore them. + * + * @param val True to ignore return key events, false otherwise. + */ + void setIgnoreReturnKeyEvent(bool val); + + + /** + * @brief Checks whether return key events are ignored. + * + * This method returns whether the line edit is currently set to ignore + * return key events. + * + * @return bool True if return key events are ignored, false otherwise. + */ + bool getIgnoreReturnKeyEvent() const; + + /** + * @brief Activates regex history. + * + * This method activates the regex history feature. + */ + void activateRegexHistory(); + +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..15139536 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/api/IRegexHistoryProvider.hpp @@ -0,0 +1,74 @@ +#pragma once + +#include "memory" + +#include "QObject" +#include "QString" + +/** + * @brief Interface class for providing regex history suggestions. + * + * This interface defines methods for managing and retrieving suggestions + * based on a regex input history. It can be used to update, clear, activate, + * or deactivate regex suggestions. + */ +class IRegexHistoryProvider : public QObject +{ + Q_OBJECT + +public: + + /** + * @brief Constructor for IRegexHistoryProvider. + */ + IRegexHistoryProvider(); + + /** + * @brief Virtual destructor for IRegexHistoryProvider. + */ + virtual ~IRegexHistoryProvider(); + + /** + * @brief Updates the suggestions based on the given input. + * + * This method will update the regex suggestions using the provided + * input string. + * + * @param input The input string for updating suggestions. + * @return int The number of proposed suggestions. + */ + virtual int updateSuggestions(const QString& input) = 0; + + /** + * @brief Clears the current suggestions. + * + * This method removes all proposed regex suggestions. + */ + virtual void clearSuggestions() = 0; + + /** + * @brief Checks whether suggestion mode is active. + * + * This method returns whether the suggestion feature is currently active. + * + * @return bool True if suggestion mode is active, false otherwise. + */ + virtual bool getSuggestionActive() = 0; + + /** + * @brief Sets the suggestion mode as active or inactive. + * + * This method enables or disables the suggestion feature. + * + * @param val True to activate suggestion mode, false to deactivate. + */ + virtual void setSuggestionActive(bool val) = 0; + +}; + +/** + * @brief Shared pointer to an IRegexHistoryProvider instance. + * + * This typedef simplifies the usage of shared pointers for IRegexHistoryProvider. + */ +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..49a4cf6a --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryComponent.cpp @@ -0,0 +1,78 @@ +#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); + } +} + +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..5c316a10 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryLineEdit.cpp @@ -0,0 +1,111 @@ +#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::activateRegexHistory() +{ + if(nullptr != mpRegexHistoryProvider) + { + mpRegexHistoryProvider->setSuggestionActive(true); + int numberOfSuggestions = mpRegexHistoryProvider->updateSuggestions(text()); + + if(0 == numberOfSuggestions) + { + mpRegexHistoryProvider->setSuggestionActive(false); + } + + update(); + } +} + +void CRegexHistoryLineEdit::keyPressEvent(QKeyEvent *event) +{ + if(nullptr != event) + { + if (event->key() == Qt::Key_Space && event->modifiers() == Qt::ControlModifier) + { + activateRegexHistory(); + } + 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..a12855b6 --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.cpp @@ -0,0 +1,546 @@ +#include +#include + +#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::tRegexUsageStatisticsItemData& map) +{ + return map.size() >= sMaximumRegexHistorySize; +} + +typedef int64_t tSuggestionRanking; + +struct tSuggestionRankingValue +{ + tSuggestionRanking usageCounterRanking; + tSuggestionRanking updateTimeRanking; + ISettingsManager::tRegexUsageStatisticsItemData::iterator it; + bool operator< (const tSuggestionRankingValue& val) + { + return (usageCounterRanking + updateTimeRanking) < + (val.usageCounterRanking + val.updateTimeRanking); + } +}; + +typedef std::shared_ptr tSuggestionRankingValuePtr; + +struct tSuggestionRankingValuePtrWrapper +{ +public: + tSuggestionRankingValuePtr pSuggestionRankingValue; + + bool operator< (const tSuggestionRankingValuePtrWrapper& val) const + { + bool bResult = false; + + if(pSuggestionRankingValue && val.pSuggestionRankingValue) + { + return *pSuggestionRankingValue < *val.pSuggestionRankingValue; + } + else if(!pSuggestionRankingValue && val.pSuggestionRankingValue) + { + bResult = true; + } + else if(pSuggestionRankingValue && !val.pSuggestionRankingValue) + { + bResult = true; + } + else if(!pSuggestionRankingValue && !val.pSuggestionRankingValue) + { + bResult = false; + } + + return bResult; + } +}; + +typedef std::multimap tSuggestionPreparationRankingMap; +typedef std::multiset tSuggestionRankingSet; + +static void deleteNonRelevantElements(ISettingsManager::tRegexUsageStatisticsItemData& map) +{ + // Find the element with the oldest updateDateTime + QDateTime oldestDateTime = QDateTime::currentDateTime(); // Initialize to current time for comparison + + tSuggestionPreparationRankingMap usageCounterMap; + tSuggestionPreparationRankingMap updateTimeMap; + + for (auto it = map.begin(); it != map.end(); ++it) + { + tSuggestionRankingValuePtr pSuggestionRankValue = std::make_shared(); + pSuggestionRankValue->it = it; + usageCounterMap.insert(std::make_pair(it.value().usageCounter, pSuggestionRankValue)); + updateTimeMap.insert(std::make_pair(it.value().updateDateTime.toMSecsSinceEpoch(), pSuggestionRankValue)); + } + + int rankingCounter = 0; + for(auto& item : usageCounterMap) + { + item.second->usageCounterRanking = rankingCounter; + ++rankingCounter; + } + + rankingCounter = 0; + for(auto& item : updateTimeMap) + { + item.second->updateTimeRanking = rankingCounter; + ++rankingCounter; + } + + tSuggestionRankingSet suggestionRankingSet; + + for(const auto& item : updateTimeMap) + { + tSuggestionRankingValuePtrWrapper suggestionRankingValuePtrWrapper; + suggestionRankingValuePtrWrapper.pSuggestionRankingValue = item.second; + suggestionRankingSet.insert(suggestionRankingValuePtrWrapper); + } + + for(const auto& item : suggestionRankingSet) + { + if(map.size() > sMaximumRegexHistorySize) + { + map.erase(item.pSuggestionRankingValue->it); + } + else + { + break; + } + } +} + +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; + }; + + auto insertText = [this](const QString& text) + { + auto* pCompleter = mpRegexLineEdit->completer(); + + if(nullptr != pCompleter) + { + clearSuggestions(); + mpRegexLineEdit->selectAll(); + mpRegexLineEdit->insert(text); + } + }; + + if(true == mCompletionData.bAppendMode) + { + QString previousText = mpRegexLineEdit->text(); + + if(true == sFindLastPipeRegex.isValid()) + { + auto foundMatch = sFindLastPipeRegex.match(previousText); + + if(foundMatch.hasMatch()) + { + if(foundMatch.lastCapturedIndex() >= 3) + { + insertText(foundMatch.captured(1) + "|" + resolveText()); + } + } + else + { + insertText(resolveText()); + } + } + } + else + { + insertText(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); + }); + } + + auto regexUsageStatistics = getSettingsManager()->getRegexUsageStatistics(); + deleteNonRelevantElements(regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::TEXT]); + deleteNonRelevantElements(regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN]); + getSettingsManager()->setRegexUsageStatistics(regexUsageStatistics); +} + +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.updateDateTime.toMSecsSinceEpoch(), 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) + { + auto& updateItem = regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN][item]; + ++updateItem.usageCounter; + updateItem.updateDateTime = QDateTime::currentDateTime(); + } + + auto& mapToCheck = regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::STORED_REGEX_PATTERN]; + if(true == reachedTheSizeLimit(mapToCheck)) + { + deleteNonRelevantElements(mapToCheck); + } + + getSettingsManager()->setRegexUsageStatistics(regexUsageStatistics); +} + +void CRegexHistoryProvider::incrementRegexTextCounter(const QString& regex) +{ + auto regexUsageStatistics = getSettingsManager()->getRegexUsageStatistics(); + + auto& updateItem = regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::TEXT][regex]; + ++updateItem.usageCounter; + updateItem.updateDateTime = QDateTime::currentDateTime(); + + auto& mapToCheck = regexUsageStatistics[ISettingsManager::eRegexUsageStatisticsItemType::TEXT]; + if(true == reachedTheSizeLimit(mapToCheck)) + { + deleteNonRelevantElements(mapToCheck); + } + + 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..8792c34b --- /dev/null +++ b/dltmessageanalyzerplugin/src/components/regexHistory/src/CRegexHistoryProvider.hpp @@ -0,0 +1,105 @@ +#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; + + typedef int64_t tTimeSinceEpochMs; + + struct DescendingOrder + { + bool operator()(const tTimeSinceEpochMs &a, const tTimeSinceEpochMs &b) const + { + return a > b; // Return true if 'a' should go before 'b' + } + }; + + 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..49837e86 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; @@ -67,7 +88,7 @@ class ISettingsManager : public QObject virtual void resetGroupedViewColumnsVisibilityMap() = 0; virtual void resetGroupedViewColumnsCopyPasteMap() = 0; virtual QString getRegexDirectory() const = 0; - virtual QString getRegexDirectoryFull() const = 0; + virtual QString getRegexUsageStatisticsDirectory() const = 0; virtual QString getSettingsFilepath() const = 0; virtual QString getUserSettingsFilepath() const = 0; virtual QString getRootSettingsFilepath() 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,8 @@ 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_SearchPolicy(const bool& val) = 0; /** * @brief setSelectedRegexFile - updates selected regex file @@ -146,7 +172,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 +226,8 @@ 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 bool& getRegexCompletion_SearchPolicy() const = 0; // allowed ranges virtual const TOptional>& getSetting_NumberOfThreads_AllowedRange() const = 0; @@ -213,7 +244,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 +296,7 @@ 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_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..8bdb8418 100644 --- a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.cpp +++ b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.cpp @@ -22,14 +22,19 @@ static const QString sSettingsManager_Directory = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + QDir::separator() + ".DLT-Message-Analyzer"; static const QString sSettingsManager_Regex_SubDirectory = "regexes"; +static const QString sSettingsManager_RegexUsageStatistics_SubDirectory = "regex_usage_statistics"; static const QString sSettingsManager_User_SettingsFile = "user_settings.json"; 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,8 +91,11 @@ static const QString sJavaCustomPath = "JavaCustomPath"; static const QString sGroupedViewFeatureActive = "GroupedViewFeatureActive"; +static const QString sRegexCompletion_CaseSensitiveKey = "RegexCompletion_CaseSensitive"; +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. +static const tSettingsManagerVersion sCurrentSettingsManagerVersion = 2u; // current version of settings manager used by SW. static tSearchResultColumnsVisibilityMap fillInDefaultSearchResultColumnsVisibilityMap() { @@ -252,14 +260,14 @@ CSettingsManager::CSettingsManager(): [this](const tSettingsManagerVersion& data){settingsManagerVersionChanged(data);}, [this](){tryStoreRootConfig();}, sDefaultSettingsManagerVersion)), - mSetting_Aliases(createAliasItemVecSettingsItem(sAliasesKey, - [this](const tAliasItemVec& data){ aliasesChanged(data); }, + mSetting_Aliases(createAliasItemMapSettingsItem(sAliasesKey, + [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();}, @@ -354,11 +362,15 @@ CSettingsManager::CSettingsManager(): mSetting_SelectedRegexFile(createStringSettingsItem(sSelectedRegexFile, [this](const QString& data) { - clearRegexConfig(); - QString regexSettingsFilePath = getRegexDirectory() + QDir::separator() + data; + + clearRegexConfig(); loadRegexConfigCustomPath(regexSettingsFilePath); + clearRegexUsageStatisticsData(); + QString regexUsageStatisticsFilePath = getRegexUsageStatisticsDirectory() + QDir::separator() + data; + loadRegexUsageStatisticsDataCustomPath(regexUsageStatisticsFilePath); + selectedRegexFileChanged(data); }, [this](){tryStoreSettingsConfig();}, @@ -428,6 +440,14 @@ 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_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 +486,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 +541,8 @@ 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_SearchPolicy); mUserSettingItemPtrVec.push_back(&mSetting_SearchViewLastColumnWidthStrategy); mUserSettingItemPtrVec.push_back(&mSetting_PlantumlPathMode); mUserSettingItemPtrVec.push_back(&mSetting_PlantumlPathEnvVar); @@ -524,6 +554,9 @@ CSettingsManager::CSettingsManager(): /////////////// PATTERNS SETTINGS /////////////// mPatternsSettingItemPtrVec.push_back(&mSetting_Aliases); + + /////////////// REGEX USAGE STATISTICS ////////// + mRegexUsageStatisticsDataItemPtrVec.push_back(&mSetting_RegexUsageStatistics); } void CSettingsManager::tryStoreSettingsConfig() @@ -544,7 +577,7 @@ void CSettingsManager::tryStoreRootConfig() CSettingsManager::tOperationResult CSettingsManager::backwardCompatibility() { - SEND_MSG(QString("[CSettingsManager] Performing backward compatibility check.")); + SEND_MSG(QString("[CSettingsManager] Performing setting manager update.")); auto result = backwardCompatibility_V0_V1(); @@ -552,11 +585,21 @@ CSettingsManager::tOperationResult CSettingsManager::backwardCompatibility() { result = loadRootConfig(); // load root config. It should be available starting version 0 - if(true == result.bResult) + auto cachedSettingsMangerVersion = getSettingsManagerVersion(); + + SEND_MSG(QString("[CSettingsManager] Persisted settings manager verison - %1.").arg(getSettingsManagerVersion())); + SEND_MSG(QString("[CSettingsManager] Target settings manager verison - %1.").arg(sCurrentSettingsManagerVersion)); + + if(sCurrentSettingsManagerVersion != cachedSettingsMangerVersion) { - SEND_MSG(QString("[CSettingsManager] Persisted settings manager verison - %1.").arg(getSettingsManagerVersion())); - SEND_MSG(QString("[CSettingsManager] Target settings manager verison - %1.").arg(sCurrentSettingsManagerVersion)); + if(cachedSettingsMangerVersion == 1u && sCurrentSettingsManagerVersion == 2) + { + result = backwardCompatibility_V1_V2(); + } + } + if(true == result.bResult) + { setSettingsManagerVersion( sCurrentSettingsManagerVersion ); // if backward compatibility was successful, we need to update the settings manager version } } @@ -725,12 +768,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::createAliasItemMapSettingsItem(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 +793,8 @@ TSettingItem CSettingsManager::createAliasItemV }; auto readFunc = [](const QJsonValueRef& JSONItem, - tAliasItemVec& data, - const tAliasItemVec&)->bool + tAliasItemMap& data, + const tAliasItemMap&)->bool { bool bResult = false; @@ -784,7 +827,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 +936,7 @@ TSettingItem CSettingsManager::createAliasItemV return bResult; }; - return TSettingItem(key, + return TSettingItem(key, defaultValue, writeFunc, readFunc, @@ -1220,7 +1360,7 @@ CSettingsManager::tOperationResult CSettingsManager::loadRootConfig() QString rootConfigPath = getRootSettingsFilepath(); QFile jsonFile(rootConfigPath); - if(jsonFile.open(QFile::ReadOnly)) + if(jsonFile.open(QFile::ReadWrite)) { auto jsonDoc = QJsonDocument().fromJson(jsonFile.readAll()); @@ -1287,6 +1427,12 @@ CSettingsManager::tOperationResult CSettingsManager::storeConfigs() { QString regexSettingsFilePath = getRegexDirectory() + QDir::separator() + mSetting_SelectedRegexFile.getData(); result = storeRegexConfigCustomPath(regexSettingsFilePath); + + if(true == result.bResult) + { + QString regexUsageStatisticsFilePath = getRegexUsageStatisticsDirectory() + QDir::separator() + mSetting_SelectedRegexFile.getData(); + result = storeRegexUsageStatisticsDataCustomPath(regexUsageStatisticsFilePath); + } } } @@ -1307,6 +1453,12 @@ CSettingsManager::tOperationResult CSettingsManager::loadConfigs() { QString regexSettingsFilePath = getRegexDirectory() + QDir::separator() + mSetting_SelectedRegexFile.getData(); result = loadRegexConfigCustomPath(regexSettingsFilePath); // load regexes + + if( true == result.bResult ) + { + QString regexUsageStatisticsFilePath = getRegexUsageStatisticsDirectory() + QDir::separator() + mSetting_SelectedRegexFile.getData(); + result = loadRegexUsageStatisticsDataCustomPath(regexUsageStatisticsFilePath); // load regex usage statistics + } } } } @@ -1343,7 +1495,7 @@ CSettingsManager::tOperationResult CSettingsManager::backwardCompatibility_V0_V1 // That can be checked only indirectly, based on file-system-based conclusions if(false == regexDir.exists()) // regex dir does not exist. Most probably we've faced old system { - SEND_MSG(QString("[CSettingsManager] Performing backward compatibility iteration from V0 to V1")); + SEND_MSG(QString("[CSettingsManager] Performing setting manager update from V0 to V1")); QDir dir; QString configDirPath = sSettingsManager_Directory; @@ -1421,13 +1573,35 @@ CSettingsManager::tOperationResult CSettingsManager::backwardCompatibility_V0_V1 result.err = QString( "[%1] Was not able to create directory \"%2\"" ).arg(__FUNCTION__).arg(configDirPath); } - SEND_MSG(QString("[CSettingsManager] BackwardCompatibility_V0_V1 finished with result - %1").arg(true == result.bResult ? "SUCCESSFUL" : "FAILED")); + SEND_MSG(QString("[CSettingsManager] Setting manager update from V0 to V1 finished with result - %1").arg(true == result.bResult ? "SUCCESSFUL" : "FAILED")); } else { - SEND_MSG(QString("[CSettingsManager] Backward compatibility iteration from V0 to V1 not needed")); + SEND_MSG(QString("[CSettingsManager] Setting manager update from V0 to V1 is not needed")); + } + + return result; +} + +CSettingsManager::tOperationResult CSettingsManager::backwardCompatibility_V1_V2() +{ + CSettingsManager::tOperationResult result; + result.bResult = true; + + QString regexUsageStatisticsDirPath = getRegexUsageStatisticsDirectory(); + QDir dir; + + SEND_MSG(QString("[CSettingsManager] Performing setting manager update from V1 to V2")); + + // let's create regex usage statistics directory + if(false == dir.mkpath(regexUsageStatisticsDirPath)) + { + result.bResult = false; + result.err = QString( "[%1] Was not able to create directory \"%2\"" ).arg(__FUNCTION__).arg(regexUsageStatisticsDirPath); } + SEND_MSG(QString("[CSettingsManager] Setting manager update from V1 to V2 finished with result - %1").arg(true == result.bResult ? "SUCCESSFUL" : "FAILED")); + return result; } @@ -1436,7 +1610,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 +1632,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 +1825,16 @@ 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_SearchPolicy(const bool& val) +{ + mSetting_RegexCompletion_SearchPolicy.setData(val); +} + void CSettingsManager::setSearchViewLastColumnWidthStrategy(const int& val) { mSetting_SearchViewLastColumnWidthStrategy.setData(val); @@ -1696,11 +1885,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 +2088,16 @@ const bool& CSettingsManager::getFiltersCompletion_SearchPolicy() const return mSetting_FiltersCompletion_SearchPolicy.getData(); } +const bool& CSettingsManager::getRegexCompletion_CaseSensitive() const +{ + return mSetting_RegexCompletion_CaseSensitive.getData(); +} + +const bool& CSettingsManager::getRegexCompletion_SearchPolicy() const +{ + return mSetting_RegexCompletion_SearchPolicy.getData(); +} + const int& CSettingsManager::getSearchViewLastColumnWidthStrategy() const { return mSetting_SearchViewLastColumnWidthStrategy.getData(); @@ -1940,10 +2144,10 @@ QString CSettingsManager::getRegexDirectory() const sSettingsManager_Regex_SubDirectory; } -QString CSettingsManager::getRegexDirectoryFull() const +QString CSettingsManager::getRegexUsageStatisticsDirectory() const { return sSettingsManager_Directory + QDir::separator() + - sSettingsManager_Regex_SubDirectory; + sSettingsManager_RegexUsageStatistics_SubDirectory; } QString CSettingsManager::getSettingsFilepath() const @@ -1978,10 +2182,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) @@ -1990,7 +2218,7 @@ CSettingsManager::tOperationResult CSettingsManager::loadRegexConfigCustomPath(c result.bResult = false; QFile jsonFile(filePath); - if(jsonFile.open(QFile::ReadOnly)) + if(jsonFile.open(QFile::ReadWrite)) { auto jsonDoc = QJsonDocument().fromJson(jsonFile.readAll()); @@ -2015,7 +2243,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 +2261,7 @@ CSettingsManager::tOperationResult CSettingsManager::storeRegexConfigCustomPath( { QJsonArray settingsArray; - for(auto* pSettingItem : mPatternsSettingItemPtrVec) + for(auto* pSettingItem : mRegexUsageStatisticsDataItemPtrVec) { settingsArray.append(pSettingItem->writeData()); } @@ -2045,7 +2280,47 @@ 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::ReadWrite)) + { + 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()); } @@ -2101,7 +2376,7 @@ CSettingsManager::tOperationResult CSettingsManager::loadSettingsConfigCustomPat result.bResult = false; QFile jsonFile(filepath); - if(jsonFile.open(QFile::ReadOnly)) + if(jsonFile.open(QFile::ReadWrite)) { auto jsonDoc = QJsonDocument().fromJson(jsonFile.readAll()); @@ -2134,27 +2409,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; diff --git a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp index 24535752..d890838b 100644 --- a/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp +++ b/dltmessageanalyzerplugin/src/components/settings/src/CSettingsManager.hpp @@ -37,7 +37,7 @@ class CSettingsManager : public ISettingsManager void resetGroupedViewColumnsVisibilityMap() override; void resetGroupedViewColumnsCopyPasteMap() override; QString getRegexDirectory() const override; - QString getRegexDirectoryFull() const override; + QString getRegexUsageStatisticsDirectory() const override; QString getSettingsFilepath() const override; QString getUserSettingsFilepath() const override; QString getRootSettingsFilepath() const override; @@ -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,8 @@ 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_SearchPolicy(const bool& val) override; void setSelectedRegexFile(const QString& val) override; @@ -111,7 +116,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 +170,8 @@ 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 bool& getRegexCompletion_SearchPolicy() const override; // allowed ranges const TRangedSettingItem::tOptionalAllowedRange& getSetting_NumberOfThreads_AllowedRange() const override; @@ -183,11 +193,19 @@ class CSettingsManager : public ISettingsManager tOperationResult backwardCompatibility(); /** - * @brief backwardCompatibility_V0_V1 - function, which handles backward compatibility between V0 and V1 of settings manager + * @brief backwardCompatibility_V0_V1 - function, + * which handles backward compatibility between V0 and V1 of settings manager * @return - result of the operation */ tOperationResult backwardCompatibility_V0_V1(); + /** + * @brief backwardCompatibility_V1_V2 - function, + * which handles backward compatibility between V1 and V2 of settings manager + * @return - result of the operation + */ + tOperationResult backwardCompatibility_V1_V2(); + ////////////////ROOT_CONFIG////////////////////////////////////////////// /** @@ -247,9 +265,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 +321,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 createAliasItemMapSettingsItem(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 +438,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 +491,10 @@ class CSettingsManager : public ISettingsManager TRangedSettingItem mSetting_FiltersCompletion_CompletionPopUpWidth; TSettingItem mSetting_FiltersCompletion_SearchPolicy; // 0 - startWith; 1 - contains + // Regex completion settings + TSettingItem mSetting_RegexCompletion_CaseSensitive; + TSettingItem mSetting_RegexCompletion_SearchPolicy; // 0 - startWith; 1 - contains + TRangedSettingItem mSetting_SearchViewLastColumnWidthStrategy; // Plantuml path settings @@ -459,12 +510,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..8cdda0fd 100644 --- a/dltmessageanalyzerplugin/src/plugin/api/CDLTMessageAnalyzer.hpp +++ b/dltmessageanalyzerplugin/src/plugin/api/CDLTMessageAnalyzer.hpp @@ -44,6 +44,7 @@ class CSearchResultView; class ISearchResultModel; class CTableMemoryJumper; class CCustomPlotExtended; +class CRegexHistoryLineEdit; /** * @brief The CDLTMessageAnalyzer class - used as a main controller of the plugin. @@ -58,7 +59,7 @@ class CDLTMessageAnalyzer : public IDLTMessageAnalyzerControllerConsumer, CDLTMessageAnalyzer(const std::weak_ptr& pController, const tGroupedViewModelPtr& pGroupedViewModel, - QLabel* pProgressBarLabel, QProgressBar* pProgressBar, QLineEdit* regexLineEdit, + QLabel* pProgressBarLabel, QProgressBar* pProgressBar, CRegexHistoryLineEdit* pRegexLineEdit, QLabel* pLabel, CPatternsView* pPatternsTableView, const tPatternsModelPtr& pPatternsModel, QComboBox* pNumberOfThreadsCombobBox, QCheckBox* pContinuousSearchCheckBox, @@ -101,11 +102,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. @@ -269,7 +271,7 @@ class CDLTMessageAnalyzer : public IDLTMessageAnalyzerControllerConsumer, // default widgets QLabel* mpProgressBarLabel; QProgressBar* mpProgressBar; - QLineEdit* mpRegexLineEdit; + CRegexHistoryLineEdit* mpRegexLineEdit; QLabel* mpLabel; QComboBox* mpNumberOfThreadsCombobBox; QTableView* mpMainTableView; 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..6e60dd1e 100644 --- a/dltmessageanalyzerplugin/src/plugin/src/CDLTMessageAnalyzer.cpp +++ b/dltmessageanalyzerplugin/src/plugin/src/CDLTMessageAnalyzer.cpp @@ -47,10 +47,13 @@ #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" +#include "components/regexHistory/api/CRegexHistoryLineEdit.hpp" + #include "DMA_Plantuml.hpp" namespace NShortcuts @@ -64,7 +67,7 @@ namespace NShortcuts //CDLTMessageAnalyzer CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptr& pController, const tGroupedViewModelPtr& pGroupedViewModel, - QLabel* pProgressBarLabel, QProgressBar* pProgressBar, QLineEdit* regexLineEdit, + QLabel* pProgressBarLabel, QProgressBar* pProgressBar, CRegexHistoryLineEdit* pRegexLineEdit, QLabel* pLabel, CPatternsView* pPatternsTableView, const tPatternsModelPtr& pPatternsModel, QComboBox* pNumberOfThreadsCombobBox, QCheckBox* pContinuousSearchCheckBox, @@ -84,7 +87,7 @@ 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 +258,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 +285,73 @@ CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptraddAction(pAction); } + { + QAction* pAction = new QAction("Activate regex history", mpRegexLineEdit); + #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + pAction->setShortcut(Qt::CTRL + Qt::Key_Space); + #else + pAction->setShortcut(Qt::CTRL | Qt::Key_Space); + #endif + connect(pAction, &QAction::triggered, [this]() + { + mpRegexLineEdit->activateRegexHistory(); + }); + + pContextMenu->addAction(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); + } + + { + 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 +412,8 @@ CDLTMessageAnalyzer::CDLTMessageAnalyzer(const std::weak_ptrgetSearchResultMonoColorHighlighting()) { @@ -482,7 +557,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 +901,7 @@ void CDLTMessageAnalyzer::setFile(const tFileWrapperPtr& pFile) }); } -bool CDLTMessageAnalyzer::analyze() +bool CDLTMessageAnalyzer::analyze(const QStringList* pSelectedAliases) { if(!mpFile) { @@ -935,7 +1015,9 @@ bool CDLTMessageAnalyzer::analyze() *pRegex, mpNumberOfThreadsCombobBox->currentData().value(), isContinuousAnalysis(), - getSettingsManager()->getSearchResultColumnsSearchMap() + getSettingsManager()->getSearchResultColumnsSearchMap(), + regex, + nullptr != pSelectedAliases ? *pSelectedAliases : QStringList() ); auto requestId = requestAnalyze( requestParameters, @@ -1869,5 +1951,6 @@ PUML_PACKAGE_BEGIN(DMA_Plugin_API) PUML_AGGREGATION_DEPENDENCY_CHECKED(ISearchResultModel, 1, 1, gets and uses) PUML_AGGREGATION_DEPENDENCY_CHECKED(ISettingsManager, 1, 1, gets and uses) PUML_USE_DEPENDENCY_CHECKED(IDLTMessageAnalyzerController, 1, 1, gets and feeds to IDLTMessageAnalyzerControllerConsumer) + PUML_USE_DEPENDENCY_CHECKED(CRegexHistoryLineEdit, 1, 1, uses and passes) PUML_CLASS_END() PUML_PACKAGE_END() 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 00000000..9859152c Binary files /dev/null and b/dltmessageanalyzerplugin/src/resources/png/alias_sug.png differ diff --git a/dltmessageanalyzerplugin/src/resources/png/regex_sug.png b/dltmessageanalyzerplugin/src/resources/png/regex_sug.png new file mode 100755 index 00000000..da87c5d5 Binary files /dev/null and b/dltmessageanalyzerplugin/src/resources/png/regex_sug.png differ diff --git a/md/dev_docs/dev_docs.md b/md/dev_docs/dev_docs.md index c8ee8f15..e5c26ed5 100644 --- a/md/dev_docs/dev_docs.md +++ b/md/dev_docs/dev_docs.md @@ -28,6 +28,7 @@ It's main purposes is to: #### [DMA_PatternsView](../../dltmessageanalyzerplugin/src/components/patternsView/doc/doc.md) #### [DMA_PlantumlView](../../dltmessageanalyzerplugin/src/components/plant_uml/doc/doc.md) #### [DMA_PlotView](../../dltmessageanalyzerplugin/src/components/plotView/doc/doc.md) +#### [DMA_RegexHistory](../../dltmessageanalyzerplugin/src/components/regexHistory/doc/doc.md) #### [DMA_SearchView](../../dltmessageanalyzerplugin/src/components/searchView/doc/doc.md) #### [DMA_Settings](../../dltmessageanalyzerplugin/src/components/settings/doc/doc.md) ---- diff --git a/md/dev_docs/puml/DLT.puml b/md/dev_docs/puml/DLT.puml index 9b3a0325..4314404e 100644 --- a/md/dev_docs/puml/DLT.puml +++ b/md/dev_docs/puml/DLT.puml @@ -34,6 +34,10 @@ interface "QDltPluginViewerInterface" { } +class "QListView" +{ +} + } package "DMA_LogsWrapper" #DDDDDD @@ -74,6 +78,15 @@ class "DLTMessageAnalyzerPlugin" } +package "DMA_RegexHistory" #DDDDDD +{ + +class "CRegexHistoryProvider" +{ +} + +} + '====================Inheritance section==================== QDLTPluginInterface <|-- DLTMessageAnalyzerPlugin : implements QDltPluginControlInterface <|-- DLTMessageAnalyzerPlugin : implements @@ -85,5 +98,6 @@ CDLTMsgDecoder "1" o-- "1" QDltMsg : uses CDLTMsgWrapper "1" --> "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_APIQtQDLTPluginInterfaceQDltPluginControlInterfaceQDltPluginViewerInterfaceCAnalyzerComponentCFiltersViewComponentCGroupedViewComponentCLogComponentCLogoComponentCLogsWrapperComponentCPatternsViewComponentCUMLViewComponentCPlotViewComponentDLTMessageAnalyzerPluginCDLTMessageAnalyzerFormCRegexHistoryComponentCSearchViewComponentQObjectQTimerimplementsimplementsimplementsextendscontains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11contains11uses11contains11 "1" CBGColorAnimation : uses CDLTMessageAnalyzer "1" o-- "1" CFiltersView : uses CDLTMessageAnalyzer "1" o-- "1" CPatternsView : uses CDLTMessageAnalyzer "1" *-- "1" CRegexDirectoryMonitor : contains +CDLTMessageAnalyzer "1" --> "1" CRegexHistoryLineEdit : uses and passes CDLTMessageAnalyzer "1" o-- "1" CSearchResultView : uses CDLTMessageAnalyzer "1" o-- "1" CTableMemoryJumper : gets and uses CDLTMessageAnalyzer "1" o-- "1" CUMLView : uses @@ -262,6 +272,7 @@ Ui::Form "1" *-- "1" CFiltersView : contains Ui::Form "1" *-- "1" CGroupedView : contains Ui::Form "1" *-- "1" CLogo : contains Ui::Form "1" *-- "1" CPatternsView : contains +Ui::Form "1" *-- "1" CRegexHistoryLineEdit : contains Ui::Form "1" *-- "1" CSearchResultView : contains Ui::Form "1" *-- "1" CUMLView : contains diff --git a/md/dev_docs/puml/DMA_Plugin_API.svg b/md/dev_docs/puml/DMA_Plugin_API.svg index 09508317..6f7a208b 100644 --- a/md/dev_docs/puml/DMA_Plugin_API.svg +++ b/md/dev_docs/puml/DMA_Plugin_API.svg @@ -1,4 +1,77 @@ -DMA_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) = 0CSettingsManagerClientISettingsManagerQWidgetQDltMessageDecoderextendsimplementsextendsextendscontains11contains11uses11uses11uses11uses11contains11uses and passes11uses11gets 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..bf631b70 --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_API.puml @@ -0,0 +1,125 @@ + +@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 "CDLTMessageAnalyzer" +{ +} + +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 +CDLTMessageAnalyzer "1" --> "1" CRegexHistoryLineEdit : uses and passes +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..9716229a --- /dev/null +++ b/md/dev_docs/puml/DMA_RegexHistory_API.svg @@ -0,0 +1,170 @@ +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::IComponentCPatternsViewDLTMessageAnalyzerPluginCDLTMessageAnalyzerUi::FormCRegexHistoryProviderCRegexHistoryComponentCRegexHistoryLineEditIRegexHistoryProviderISettingsManagerQLineEditQObjectimplementsimplementsextendsextendscontains11uses and passes11contains11uses11uses11passes11creates11passes11passes11uses11 \ 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