File indexing completed on 2024-05-12 05:12:45
0001 /* 0002 SPDX-FileCopyrightText: 2018 Sandro Knauß <sknauss@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "debugfiltermodel.h" 0008 #include "akonadiconsole_debug.h" 0009 #include "debugmodel.h" 0010 0011 #include <Libkdepim/KCheckComboBox> 0012 #include <chrono> 0013 0014 using namespace std::chrono_literals; 0015 0016 #ifndef COMPILE_WITH_UNITY_CMAKE_SUPPORT 0017 Q_DECLARE_METATYPE(DebugModel::Message) 0018 #endif 0019 0020 using namespace KPIM; 0021 0022 DebugFilterModel::DebugFilterModel(QObject *parent) 0023 : QSortFilterProxyModel(parent) 0024 { 0025 mInvalidateTimer.setInterval(50ms); 0026 mInvalidateTimer.setSingleShot(true); 0027 connect(&mInvalidateTimer, &QTimer::timeout, this, &DebugFilterModel::invalidate); 0028 } 0029 0030 DebugFilterModel::~DebugFilterModel() = default; 0031 0032 void DebugFilterModel::setSenderFilter(KCheckComboBox *senderFilter) 0033 { 0034 if (mSenderFilter) { 0035 mSenderFilter->disconnect(this); 0036 } 0037 mSenderFilter = senderFilter; 0038 connect(mSenderFilter, &KCheckComboBox::checkedItemsChanged, this, [this](const QStringList &_items) { 0039 Q_UNUSED(_items) 0040 const auto items = mSenderFilter->checkedItems(DebugModel::IdentifierRole); 0041 mCheckedSenders.clear(); 0042 mCheckedSenders.reserve(items.count()); 0043 for (const auto &item : items) { 0044 mCheckedSenders.insert(item); 0045 } 0046 if (!mInvalidateTimer.isActive()) { 0047 mInvalidateTimer.start(); 0048 } 0049 }); 0050 } 0051 0052 bool DebugFilterModel::filterAcceptsRow(int source_row, const QModelIndex &) const 0053 { 0054 const auto source_idx = sourceModel()->index(source_row, 0); 0055 const auto msg = sourceModel()->data(source_idx, DebugModel::MessageRole).value<DebugModel::Message>(); 0056 return mCheckedSenders.contains(msg.sender); 0057 } 0058 0059 #include "moc_debugfiltermodel.cpp"