/* * Copyright (C) 2010, 2013 Nicolas Bonnefon and other contributors * * This file is part of glogg. * * glogg is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * glogg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with glogg. If not, see . */ #ifndef QUICKFINDPATTERN_H #define QUICKFINDPATTERN_H #include #include #include #include // Represents a match result for QuickFind class QuickFindMatch { public: // Construct a match (must be initialised) QuickFindMatch( int start_column, int length ) { startColumn_ = start_column; length_ = length; } // Accessor functions int startColumn() const { return startColumn_; } int length() const { return length_; } private: int startColumn_; int length_; }; // Represents a search pattern for QuickFind (without its results) class QuickFindPattern : public QObject { Q_OBJECT public: // Construct an empty search QuickFindPattern(); // Set the search to a new pattern, using the current // case status void changeSearchPattern( const QString& pattern ); // Set the search to a new pattern, as well as the case status void changeSearchPattern( const QString& pattern, bool ignoreCase ); // Returns whether the search is active (i.e. valid and non empty regexp) bool isActive() const { return active_; } // Return the text of the regex QString getPattern() const { return regexp_.pattern(); } // Returns whether the passed line match the quick find search. // If so, it populate the passed list with the list of matches // within this particular line. bool matchLine( const QString& line, QList& matches ) const; // Returns whether there is a match in the passed line, starting at // the passed column. // Results are stored internally. bool isLineMatching( const QString& line, int column = 0 ) const; // Same as isLineMatching but search backward bool isLineMatchingBackward( const QString& line, int column = -1 ) const; // Must be called when isLineMatching returns 'true', returns // the position of the first match found. void getLastMatch( int* start_col, int* end_col ) const; signals: // Sent when the pattern is changed void patternUpdated(); private: bool active_; QRegExp regexp_; mutable int lastMatchStart_; mutable int lastMatchEnd_; }; #endif