// This file Copyright © 2010-2022 Mnemosyne LLC. // It may be used under GPLv2 (SPDX: GPL-2.0-only), GPLv3 (SPDX: GPL-3.0-only), // or any future license endorsed by Mnemosyne LLC. // License text can be found in the licenses/ folder. #pragma once #include #include #include #include #include #include #include #include "FaviconCache.h" #include "Torrent.h" #include "Typedefs.h" class QLabel; class QString; class FilterBarComboBox; class Prefs; class TorrentFilter; class TorrentModel; class FilterBar : public QWidget { Q_OBJECT TR_DISABLE_COPY_MOVE(FilterBar) public: FilterBar(Prefs& prefs, TorrentModel const& torrents, TorrentFilter const& filter, QWidget* parent = nullptr); public slots: void clear(); private: FilterBarComboBox* createTrackerCombo(QStandardItemModel*); FilterBarComboBox* createActivityCombo(); void refreshTrackers(); enum { ACTIVITY, TRACKERS, NUM_FLAGS }; using Pending = std::bitset; Prefs& prefs_; TorrentModel const& torrents_; TorrentFilter const& filter_; std::map sitename_counts_; FilterBarComboBox* const activity_combo_ = createActivityCombo(); FilterBarComboBox* tracker_combo_ = {}; QLabel* count_label_ = {}; QStandardItemModel* const tracker_model_ = new QStandardItemModel{ this }; QTimer recount_timer_; QLineEdit* const line_edit_ = new QLineEdit{ this }; Pending pending_ = {}; bool is_bootstrapping_ = {}; private slots: void recount(); void recountSoon(Pending const& fields); void recountActivitySoon() { recountSoon(Pending().set(ACTIVITY)); } void recountTrackersSoon() { recountSoon(Pending().set(TRACKERS)); } void recountAllSoon() { recountSoon(Pending().set(ACTIVITY).set(TRACKERS)); } void refreshPref(int key); void onActivityIndexChanged(int index); void onTextChanged(QString const&); void onTorrentsChanged(torrent_ids_t const&, Torrent::fields_t const& fields); void onTrackerIndexChanged(int index); };