You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.5 KiB
179 lines
5.5 KiB
/* |
|
Copyright (c) 2001 Heiko Hund <heiko@ist.eigentlich.net> |
|
Copyright (c) 2001 Thorsten Zachmann <T.Zachmann@zagge.de> |
|
Copyright (c) 2008 Thomas McGuire <Thomas.McGuire@gmx.net> |
|
|
|
This program 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 2 of the License, or |
|
(at your option) any later version. |
|
|
|
This program 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 this program; if not, write to the Free Software Foundation, Inc., |
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
*/ |
|
|
|
#ifndef KMPOPFILTERCNFRMDLG_H |
|
#define KMPOPFILTERCNFRMDLG_H |
|
|
|
#include "kmpopheaders.h" |
|
|
|
#include <kdialog.h> |
|
|
|
#include <QTreeWidget> |
|
#include <QTreeWidgetItem> |
|
#include <QMap> |
|
#include <QList> |
|
|
|
class QButtonGroup; |
|
class QKeyEvent; |
|
class QRadioButton; |
|
class QSignalMapper; |
|
class QString; |
|
class QWidget; |
|
|
|
class KMPopFilterCnfrmDlg; |
|
|
|
// This treewidget shows KMPopHeadersViewItems. |
|
// It has 3 columns for radiobuttons, which show the current action of the item. |
|
// Additionally, it shows columns for subject, date, sender, receiver etc. |
|
// It automatically changes the action of all items when the column header |
|
// of one of the action column is clicked. |
|
// Also, the right and left keys can be used to select a different action |
|
// for the selected items. |
|
class KMPopHeadersView : public QTreeWidget |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
|
|
explicit KMPopHeadersView( QWidget *parent, KMPopFilterCnfrmDlg *dialog ); |
|
~KMPopHeadersView(); |
|
|
|
static const KMPopFilterAction mapToAction( int column ) { |
|
return (KMPopFilterAction)column; |
|
} |
|
|
|
static const int mapToColumn( KMPopFilterAction action ) { |
|
return (int)action; |
|
} |
|
|
|
protected: |
|
|
|
virtual void keyPressEvent( QKeyEvent *e ); |
|
|
|
public slots: |
|
|
|
// Call this, and only this, to sort a column (other than the first three |
|
// columns) |
|
void slotSectionClicked( int column ); |
|
|
|
protected slots: |
|
|
|
// Called when of the item's radiobuttons is clicked. It changes the actions |
|
// of all selected items. |
|
void slotRadioButtonClicked( QTreeWidgetItem* item, int column ); |
|
|
|
private: |
|
|
|
KMPopFilterCnfrmDlg *mDialog; |
|
int mLastSortColumn; |
|
Qt::SortOrder mLastSortOrder; |
|
}; |
|
|
|
|
|
// This item represents the header of a message. |
|
// It has three radiobuttons to select the action of this message (download, |
|
// download later or delete). |
|
class KMPopHeadersViewItem : public QObject, public QTreeWidgetItem |
|
{ |
|
Q_OBJECT |
|
|
|
public: |
|
KMPopHeadersViewItem( KMPopHeadersView *parent, KMPopFilterAction action ); |
|
~KMPopHeadersViewItem(); |
|
|
|
// The date and size columns can't be sorted lexically, so they need to be |
|
// remembered in a member variable and then compared with a custom compare |
|
// operator |
|
void setMessageSize( int messageSize ) { mSizeOfMessage = messageSize; } |
|
void setIsoDate( const QString & isoDate ) { mIsoDate = isoDate; } |
|
virtual bool operator < ( const QTreeWidgetItem & other ) const; |
|
|
|
KMPopFilterAction action() const { return mAction; } |
|
void setAction( KMPopFilterAction action ); |
|
|
|
protected slots: |
|
void slotActionChanged( int column ); |
|
|
|
signals: |
|
void radioButtonClicked( QTreeWidgetItem* item, int column ); |
|
|
|
protected: |
|
QRadioButton* addRadioButton( int column ); |
|
QRadioButton* buttonForAction( KMPopFilterAction action ) const; |
|
|
|
protected: |
|
QButtonGroup *mActionGroup; |
|
QRadioButton *mDownButton; |
|
QRadioButton *mDeleteButton; |
|
QRadioButton *mLaterButton; |
|
QSignalMapper *mMapper; |
|
|
|
KMPopHeadersView *mParent; |
|
KMPopFilterAction mAction; |
|
|
|
QString mIsoDate; |
|
int mSizeOfMessage; |
|
}; |
|
|
|
|
|
// This dialog shows treewidgets which show messages. The user can choose |
|
// to download, download later or delete these messages by clicking on the |
|
// messages' radiobuttons. The displayed information about these messages is |
|
// gained from the KMPopHeaders list given in the constructor. |
|
// |
|
// The constructor gets a list of KMPopHeaders. When the user changes the action |
|
// of one item, the corresponding KMPopHeaders action is also changed. This is |
|
// internally done by keeping a map of treewidget items and KMPopHeaders. |
|
// |
|
// The dialog consists of two treewidgets: The upper one shows the messages which |
|
// have no action set by filters, and the lower one shows the messages where a filter |
|
// rule already matched. The lower one is not shown by default, but can be enabled |
|
// by a checkbox (see slotToggled). |
|
class KMPopFilterCnfrmDlg : public KDialog |
|
{ |
|
friend class ::KMPopHeadersView; |
|
Q_OBJECT |
|
|
|
protected: |
|
KMPopFilterCnfrmDlg() { } |
|
QMap<QTreeWidgetItem*, KMPopHeaders*> mItemMap; |
|
QList<KMPopHeadersViewItem *> mDelList; |
|
QList<KMPopHeaders *> mDDLList; |
|
KMPopHeadersView *mFilteredHeaders; |
|
bool mLowerBoxVisible; |
|
bool mShowLaterMsgs; |
|
void setupLVI( KMPopHeadersViewItem *lvi, KMMessage *msg ); |
|
|
|
public: |
|
KMPopFilterCnfrmDlg( const QList<KMPopHeaders *> & headers, |
|
const QString & account, |
|
bool showLaterMsgs = false, QWidget *parent = 0 ); |
|
~KMPopFilterCnfrmDlg(); |
|
|
|
// Don't call this from the outside. It is called by KMPopHeadersView to update |
|
// the action of the KMPopHeaders in the map when the action of a treewidget |
|
// item changes. |
|
void setAction( QTreeWidgetItem *item, KMPopFilterAction action ); |
|
|
|
protected slots: |
|
void slotToggled( bool on ); |
|
}; |
|
|
|
#endif // KMPOPFILTERCNFRMDLG_H
|
|
|