File indexing completed on 2024-12-01 07:38:57
0001 /* This file is part of the KDE project 0002 0003 Copyright (C) 2006 Dario Massarin <nekkar@libero.it> 0004 Copyright (C) 2007 by Javier Goday <jgoday@gmail.com> 0005 Copyright (C) 2010 Matthias Fuchs <mat69@gmx.net> 0006 0007 This program is free software; you can redistribute it and/or 0008 modify it under the terms of the GNU General Public 0009 License as published by the Free Software Foundation; either 0010 version 2 of the License, or (at your option) any later version. 0011 */ 0012 0013 #ifndef TRANSFERSVIEWDELEGATE_H 0014 #define TRANSFERSVIEWDELEGATE_H 0015 0016 #include <KExtendableItemDelegate> 0017 0018 #include <QModelIndex> 0019 #include <QToolButton> 0020 0021 class QHBoxLayout; 0022 class QButtonGroup; 0023 0024 class TransfersViewDelegate; 0025 0026 class GroupStatusButton : public QToolButton 0027 { 0028 Q_OBJECT 0029 0030 public: 0031 GroupStatusButton(const QModelIndex &index, QWidget *parent); 0032 0033 protected: 0034 void checkStateSet() override; 0035 void enterEvent(QEnterEvent *event) override; 0036 void leaveEvent(QEvent *event) override; 0037 void paintEvent(QPaintEvent *event) override; 0038 void timerEvent(QTimerEvent *event) override; 0039 0040 private: 0041 enum { None, Selecting, Deselecting, Blinking, BlinkingExiting } m_status; 0042 QModelIndex m_index; 0043 0044 int m_timerId; 0045 int m_iconSize; 0046 0047 float m_gradientId; 0048 }; 0049 0050 class GroupStatusEditor : public QWidget 0051 { 0052 Q_OBJECT 0053 0054 public: 0055 GroupStatusEditor(const QModelIndex &index, QWidget *parent); 0056 0057 void setRunning(bool running); 0058 bool isRunning(); 0059 0060 private Q_SLOTS: 0061 void slotStatusChanged(); 0062 0063 Q_SIGNALS: 0064 void changedStatus(GroupStatusEditor *editor); 0065 0066 private: 0067 QModelIndex m_index; 0068 0069 QHBoxLayout *m_layout; 0070 0071 QButtonGroup *m_btGroup; 0072 GroupStatusButton *m_startBt; 0073 GroupStatusButton *m_stopBt; 0074 }; 0075 0076 /** 0077 * The BasicTransfersViewDelegate handles the setting of the status of a group 0078 */ 0079 class BasicTransfersViewDelegate : public KExtendableItemDelegate 0080 { 0081 Q_OBJECT 0082 0083 public: 0084 BasicTransfersViewDelegate(QAbstractItemView *parent); 0085 0086 QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0087 void setEditorData(QWidget *editor, const QModelIndex &index) const override; 0088 void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override; 0089 0090 private Q_SLOTS: 0091 virtual void slotGroupStatusChanged(GroupStatusEditor *editor); 0092 }; 0093 0094 class TransfersViewDelegate : public BasicTransfersViewDelegate 0095 { 0096 Q_OBJECT 0097 0098 public: 0099 TransfersViewDelegate(QAbstractItemView *parent); 0100 0101 void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0102 0103 void drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const; 0104 0105 QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; 0106 0107 bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override; 0108 }; 0109 0110 #endif