loghighlighter.h 4.59 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
// ================================================================================================
// 
// This file is part of the CAMPVis Software Framework.
// 
// If not explicitly stated otherwise: Copyright (C) 2012, all rights reserved,
//      Christian Schulte zu Berge <christian.szb@in.tum.de>
//      Chair for Computer Aided Medical Procedures
//      Technische Universität München
//      Boltzmannstr. 3, 85748 Garching b. München, Germany
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
// 
// The licensing of this softare is not yet resolved. Until then, redistribution in source or
// binary forms outside the CAMP chair is not permitted, unless explicitly stated in legal form.
// However, the names of the original authors and the above copyright notice must retain in its
// original state in any case.
// 
// Legal disclaimer provided by the BSD license:
// 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 THE COPYRIGHT HOLDER OR 
// CONTRIBUTORS 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 LOGHIGHLIGHTER_H__
#define LOGHIGHLIGHTER_H__

#include <QTextEdit>
#include <QSyntaxHighlighter>

namespace campvis {

    class LogHighlighter : public QSyntaxHighlighter {

40
        Q_OBJECT
41 42 43 44 45 46 47 48 49 50

    public:

        /**
         * Constructs a LogHighlighter and installs it on parent.
         *
         * The specified QTextEdit also becomes the owner of the LogHighlighter.
         *
         * \param parent the QTextEdit to install the LogHighlighter on
         */
51
        explicit LogHighlighter(QTextEdit* parent);
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

        /**
         * Destructor.
         */
        ~LogHighlighter();

        /**
         * Highlights the given log block.
         *
         * This function is called when necessary by the rich text engine, i.e. on new/changed log
         * messages.
         *
         * \param text the log block to highlight
         */
        void highlightBlock(const QString &text);

        /**
         * Set the current filter regexp to highlight.
         *
71 72
         * LogHighlighter takes ownership of the given regexp.
         *
73 74 75 76 77 78 79 80 81 82
         * \param filterRegExp the current filter regexp
         */
        void setFilterRegExp(const QRegExp* filterRegExp);

    private:
        /**
         * Highlight all matches of the current regexp in the given log block.
         *
         * \param text the log block to highlight
         */
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
        void highlightFilterMatches(const QString& text);

        /**
         * Highlight log level information in the given log block.
         *
         * \param text the log block to highlight
         * \param offset the offset at which log level matching should start
         */
        void highlightLogLevel(const QString& text, int offset);

        /**
         * Highlight text matching the provided regexp in the given log block.
         *
         * \param text the log block to highlight
         * \param offset the offset at which matching should start
         * \param regExp the regular expression to match
         * \param format the format used to highlight matches
         * \return end of the matched string (the new offset), or -1 if nothing was matched
         */
        int highlightRegExp(const QString& text, int offset, const QRegExp& regExp, const QTextCharFormat& format);
103

104 105 106 107 108
        const QRegExp* _filterRegExp;                                     ///< Current filter regexp
        const QRegExp* _logLevelRegExp;                                   ///< Regexp matching log level strings
        QTextCharFormat _filterMatchFormat;                               ///< Format for highlighting filter matches
        std::list< std::pair<QRegExp, QTextCharFormat> > _rules;          ///< Set of general highlighting rules
        std::list< std::pair<QString, QTextCharFormat> > _logLevelRules;  ///< Highlighting rules for log levels
109 110 111 112
    };
}

#endif // LOGHIGHLIGHTER_H__