File indexing completed on 2024-09-22 05:15:45
0001 /* 0002 This file is part of the Okteta Kasten module, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2009 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #ifndef KASTEN_SEARCHTOOL_HPP 0010 #define KASTEN_SEARCHTOOL_HPP 0011 0012 // libfinddialog 0013 #include <finddirection.hpp> 0014 // Kasten core 0015 #include <Kasten/AbstractTool> 0016 // Okteta core 0017 #include <Okteta/Address> 0018 0019 namespace Okteta { 0020 class AbstractByteArrayModel; 0021 } 0022 0023 namespace Kasten { 0024 0025 namespace If { 0026 class SearchUserQueryable; 0027 } 0028 class ByteArrayView; 0029 0030 class SearchTool : public AbstractTool 0031 { 0032 Q_OBJECT 0033 0034 private: 0035 static inline constexpr Qt::CaseSensitivity DefaultCaseSensitivity = Qt::CaseInsensitive; 0036 0037 static inline constexpr char ConfigGroupId[] = "SearchTool"; 0038 static inline constexpr char CaseSensitivityConfigKey[] = "CaseSensitivity"; 0039 0040 public: 0041 SearchTool(); 0042 ~SearchTool() override; 0043 0044 public: // AbstractTool API 0045 // virtual AbstractModel* targetModel() const; 0046 QString title() const override; 0047 0048 void setTargetModel(AbstractModel* model) override; 0049 0050 public: // status 0051 QByteArray searchData() const; 0052 Qt::CaseSensitivity caseSensitivity() const; 0053 bool hasSelectedData() const; 0054 QString charCodingName() const; 0055 0056 bool isApplyable() const; // candidate for AbstractTool API 0057 0058 public: // actions 0059 void search(FindDirection direction, bool fromCursor, bool inSelection); 0060 0061 public: 0062 void setUserQueryAgent(If::SearchUserQueryable* userQueryAgent); 0063 0064 public Q_SLOTS: // settings 0065 void setSearchData(const QByteArray& searchData); 0066 void setCaseSensitivity(Qt::CaseSensitivity caseSensitivity); 0067 0068 Q_SIGNALS: 0069 void isApplyableChanged(bool isApplyable); // candidate for AbstractTool API 0070 void charCodecChanged(const QString& codecName); 0071 0072 void dataNotFound(); 0073 0074 private: 0075 void doSearch(FindDirection direction); 0076 0077 private: // settings 0078 QByteArray mSearchData; 0079 Qt::CaseSensitivity mCaseSensitivity{Qt::CaseSensitive}; 0080 0081 private: // status 0082 bool mPreviousFound : 1; 0083 Okteta::Address mSearchFirstIndex; 0084 Okteta::Address mSearchLastIndex; 0085 0086 private: 0087 If::SearchUserQueryable* mUserQueryAgent = nullptr; 0088 0089 private: // target 0090 ByteArrayView* mByteArrayView = nullptr; 0091 Okteta::AbstractByteArrayModel* mByteArrayModel = nullptr; 0092 }; 0093 0094 inline QByteArray SearchTool::searchData() const { return mSearchData; } 0095 inline Qt::CaseSensitivity SearchTool::caseSensitivity() const { return mCaseSensitivity; } 0096 0097 } 0098 0099 #endif