.. _program_listing_file__tmp_ws_src_swri_console_include_swri_console_log_database_proxy_model.h: Program Listing for File log_database_proxy_model.h =================================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/swri_console/include/swri_console/log_database_proxy_model.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // ***************************************************************************** // // Copyright (c) 2015, Southwest Research Institute® (SwRI®) // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of Southwest Research Institute® (SwRI®) nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL Southwest Research Institute® BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY // OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH // DAMAGE. // // ***************************************************************************** #ifndef SWRI_CONSOLE_LOG_DATABASE_PROXY_MODEL_H_ #define SWRI_CONSOLE_LOG_DATABASE_PROXY_MODEL_H_ #include #include #include #include #include #include #include #include namespace swri_console { class LogDatabase; struct LogEntry; class LogDatabaseProxyModel : public QAbstractListModel { Q_OBJECT public: enum { ExtendedLogRole = Qt::UserRole + 0 }; explicit LogDatabaseProxyModel(LogDatabase *db); ~LogDatabaseProxyModel() override = default; void setNodeFilter(const std::set &names); void setSeverityFilter(uint8_t severity_mask); void setIncludeFilters(const QStringList &list); void setExcludeFilters(const QStringList &list); void setIncludeRegexpPattern(const QString& pattern); void setExcludeRegexpPattern(const QString& pattern); void setDebugColor(const QColor& debug_color); void setInfoColor(const QColor& info_color); void setWarnColor(const QColor& warn_color); void setErrorColor(const QColor& error_color); void setFatalColor(const QColor& fatal_color); bool isIncludeValid() const; bool isExcludeValid() const; int getItemIndex(const QString& searchText, int index, int increment); void clearSearchFailure(); int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; void reset(); void saveToFile(const QString& filename) const; Q_SIGNALS: void messagesAdded(); public Q_SLOTS: void handleDatabaseCleared(); void processNewMessages(); void processOldMessages(); void minTimeUpdated(); void setDisplayTime(bool display); void setAbsoluteTime(bool absolute); void setDisplayLogger(bool logger_name); void setDisplayFunction(bool function_name); void setColorizeLogs(bool colorize_logs); void setUseRegularExpressions(bool useRegexps); private: void saveBagFile(const QString& filename) const; void saveTextFile(const QString& filename) const; void scheduleIdleProcessing(); bool acceptLogEntry(const LogEntry &item); bool testIncludeFilter(const LogEntry &item); std::set names_; uint8_t severity_mask_; bool colorize_logs_; bool display_time_; bool display_absolute_time_; bool display_logger_; bool display_function_; bool use_regular_expressions_; // For performance reasons, the proxy model presents single line // items, while the underlying log database stores multi-line // messages. The LineMap struct is used to map our item indices to // the log & line that it represents. struct LineMap { size_t log_index; int line_index; LineMap() : log_index(0), line_index(0) {} LineMap(size_t log, int line) : log_index(log), line_index(line) {} }; size_t latest_log_index_; std::deque msg_mapping_; size_t earliest_log_index_; std::deque early_mapping_; QRegExp include_regexp_; QRegExp exclude_regexp_; QStringList include_strings_; QStringList exclude_strings_; QColor debug_color_; QColor info_color_; QColor warn_color_; QColor error_color_; QColor fatal_color_; LogDatabase *db_; QString failedSearchText_; // stores last failed search text, used to minimize looping through full data set, VCM 26 April 2017 int failedSearchIndex_; // stores last index of failed search text, VCM 26 April 2017 }; } // swri_console #endif // SWRI_CONSOLE_LOG_DATABASE_PROXY_MODEL_H_