/* * This file Copyright (C) Mnemosyne LLC * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * $Id$ */ #ifndef QTR_FILTERBAR_H #define QTR_FILTERBAR_H #include #include #include class QLineEdit; class QPaintEvent; class QStandardItemModel; class QTimer; class Prefs; class TorrentFilter; class TorrentModel; class FilterBarComboBoxDelegate: public QItemDelegate { Q_OBJECT public: FilterBarComboBoxDelegate( QObject * parent, QComboBox * combo ); public: static bool isSeparator( const QModelIndex &index ); static void setSeparator( QAbstractItemModel * model, const QModelIndex& index ); protected: virtual void paint( QPainter*, const QStyleOptionViewItem&, const QModelIndex& ) const; virtual QSize sizeHint( const QStyleOptionViewItem&, const QModelIndex& ) const; private: QComboBox * myCombo; }; class FilterBarComboBox: public QComboBox { Q_OBJECT public: FilterBarComboBox( QWidget * parent = 0 ); protected: virtual void paintEvent( QPaintEvent * e ); }; class FilterBar: public QWidget { Q_OBJECT public: FilterBar( Prefs& prefs, TorrentModel& torrents, TorrentFilter& filter, QWidget * parent = 0 ); ~FilterBar( ); private: QComboBox * createTrackerCombo( QStandardItemModel * ); QComboBox * createActivityCombo( ); void recountSoon( ); void refreshTrackers( ); QString getCountString( int n ) const; private: Prefs& myPrefs; TorrentModel& myTorrents; TorrentFilter& myFilter; QComboBox * myActivityCombo; QComboBox * myTrackerCombo; QStandardItemModel * myTrackerModel; QTimer * myRecountTimer; bool myIsBootstrapping; QLineEdit * myLineEdit; private slots: void recount( ); void refreshPref( int key ); void onActivityIndexChanged( int index ); void onTrackerIndexChanged( int index ); void onTorrentModelReset( ); void onTorrentModelRowsInserted( const QModelIndex&, int, int ); void onTorrentModelRowsRemoved( const QModelIndex&, int, int ); void onTorrentModelDataChanged( const QModelIndex&, const QModelIndex& ); void onTextChanged( const QString& ); }; #endif