BufferView now asks UiStyle for appropriate Qt::ItemDataRoles for styling its items,
including the item icons.
This replaces the need for setting the palette of custom delegates.
#include "client.h"
#include "contextmenuactionprovider.h"
#include "graphicalui.h"
-#include "iconloader.h"
#include "network.h"
#include "networkmodel.h"
#include "contextmenuactionprovider.h"
};
BufferViewDelegate::BufferViewDelegate(QObject *parent)
- : QStyledItemDelegate(parent),
- _updateColors(false)
+ : QStyledItemDelegate(parent)
{
- loadColors();
-
- UiSettings s("QtUiStyle/Colors");
- s.notify("inactiveActivityFG", this, SLOT(colorsChanged()));
- s.notify("noActivityFG", this, SLOT(colorsChanged()));
- s.notify("highlightActivityFG", this, SLOT(colorsChanged()));
- s.notify("newMessageActivityFG", this, SLOT(colorsChanged()));
- s.notify("otherActivityFG", this, SLOT(colorsChanged()));
-}
-
-void BufferViewDelegate::colorsChanged() {
- // avoid mutliple unneded reloads of all colors
- if(_updateColors)
- return;
- _updateColors = true;
- QCoreApplication::postEvent(this, new ColorsChangedEvent());
}
void BufferViewDelegate::customEvent(QEvent *event) {
if(event->type() != QEvent::User)
return;
- loadColors();
- _updateColors = false;
-
event->accept();
}
-void BufferViewDelegate::loadColors() {
- UiSettings s("QtUiStyle/Colors");
- _FgColorInactiveActivity = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray))).value<QColor>();
- _FgColorNoActivity = s.value("noActivityFG", QVariant(QColor(Qt::black))).value<QColor>();
- _FgColorHighlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta))).value<QColor>();
- _FgColorNewMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green))).value<QColor>();
- _FgColorOtherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen))).value<QColor>();
-}
-
bool BufferViewDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) {
if(event->type() != QEvent::MouseButtonRelease)
return QStyledItemDelegate::editorEvent(event, model, option, index);
return true;
}
-void BufferViewDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const {
- QStyledItemDelegate::initStyleOption(option, index);
-
- if(!index.isValid())
- return;
-
- BufferInfo::ActivityLevel activity = (BufferInfo::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt();
-
- QColor fgColor = _FgColorNoActivity;
- if(activity & BufferInfo::Highlight) {
- fgColor = _FgColorHighlightActivity;
- } else if(activity & BufferInfo::NewMessage) {
- fgColor = _FgColorNewMessageActivity;
- } else if(activity & BufferInfo::OtherActivity) {
- fgColor = _FgColorOtherActivity;
- } else if(!index.data(NetworkModel::ItemActiveRole).toBool() || index.data(NetworkModel::UserAwayRole).toBool()) {
- fgColor = _FgColorInactiveActivity;
- }
-
- option->palette.setColor(QPalette::Text, fgColor);
-}
-
-
// ==============================
// BufferView Dock
// ==============================
#include <QMenu>
#include <QDockWidget>
#include <QModelIndex>
+#include <QStyledItemDelegate>
#include <QTreeView>
#include <QPointer>
// ******************************
// BufferViewDelgate
// ******************************
-#include <QStyledItemDelegate>
class BufferViewDelegate : public QStyledItemDelegate {
Q_OBJECT
protected:
virtual void customEvent(QEvent *event);
- virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const;
-
-private slots:
- void colorsChanged();
- void loadColors();
-
-private:
- QColor _FgColorInactiveActivity;
- QColor _FgColorNoActivity;
- QColor _FgColorHighlightActivity;
- QColor _FgColorNewMessageActivity;
- QColor _FgColorOtherActivity;
-
- bool _updateColors;
};
-
// ==============================
// BufferView Dock
// ==============================
#include "buffersettings.h"
#include "client.h"
#include "clientbufferviewconfig.h"
+#include "graphicalui.h"
#include "iconloader.h"
#include "networkmodel.h"
+#include "uistyle.h"
class CheckRemovalEvent : public QEvent {
public:
: QSortFilterProxyModel(model),
_config(0),
_sortOrder(Qt::AscendingOrder),
- _channelJoinedIcon(SmallIcon("irc-channel-active")),
- _channelPartedIcon(SmallIcon("irc-channel-inactive")),
- _userOfflineIcon(SmallIcon("im-user-offline")),
- _userAwayIcon(SmallIcon("im-user-away")),
- _userOnlineIcon(SmallIcon("im-user")),
_editMode(false),
_enableEditMode(tr("Show / Hide buffers"), this)
{
_enableEditMode.setChecked(_editMode);
connect(&_enableEditMode, SIGNAL(toggled(bool)), this, SLOT(enableEditMode(bool)));
- BufferSettings bufferSettings;
- _showUserStateIcons = bufferSettings.showUserStateIcons();
- bufferSettings.notify("ShowUserStateIcons", this, SLOT(showUserStateIconsChanged()));
-}
-
-void BufferViewFilter::showUserStateIconsChanged() {
- BufferSettings bufferSettings;
- _showUserStateIcons = bufferSettings.showUserStateIcons();
}
void BufferViewFilter::setConfig(BufferViewConfig *config) {
QVariant BufferViewFilter::data(const QModelIndex &index, int role) const {
switch(role) {
+ case Qt::FontRole:
+ case Qt::ForegroundRole:
+ case Qt::BackgroundRole:
case Qt::DecorationRole:
- return icon(index);
+ return GraphicalUi::uiStyle()->bufferViewItemData(mapToSource(index), role);
case Qt::CheckStateRole:
return checkedState(index);
default:
}
}
-QVariant BufferViewFilter::icon(const QModelIndex &index) const {
- if(!_showUserStateIcons || (config() && config()->disableDecoration()))
- return QVariant();
-
- if(index.column() != 0)
- return QVariant();
-
- QModelIndex source_index = mapToSource(index);
- NetworkModel::ItemType itemType = (NetworkModel::ItemType)sourceModel()->data(source_index, NetworkModel::ItemTypeRole).toInt();
- BufferInfo::Type bufferType = (BufferInfo::Type)sourceModel()->data(source_index, NetworkModel::BufferTypeRole).toInt();
- bool isActive = sourceModel()->data(source_index, NetworkModel::ItemActiveRole).toBool();
-
- if(itemType != NetworkModel::BufferItemType)
- return QVariant();
-
- switch(bufferType) {
- case BufferInfo::ChannelBuffer:
- if(isActive)
- return _channelJoinedIcon;
- else
- return _channelPartedIcon;
- case BufferInfo::QueryBuffer:
- if(!isActive)
- return _userOfflineIcon;
- if(sourceModel()->data(source_index, NetworkModel::UserAwayRole).toBool())
- return _userAwayIcon;
- else
- return _userOnlineIcon;
- default:
- return QVariant();
- }
-}
-
QVariant BufferViewFilter::checkedState(const QModelIndex &index) const {
if(!_editMode || !config())
return QVariant();
#include <QAction>
#include <QDropEvent>
#include <QFlags>
-#include <QPixmap>
#include <QPointer>
#include <QSet>
#include <QSortFilterProxyModel>
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
QVariant data(const QModelIndex &index, int role) const;
- QVariant icon(const QModelIndex &index) const;
-// QVariant foreground(const QModelIndex &index) const;
QVariant checkedState(const QModelIndex &index) const;
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
private slots:
void configInitialized();
- void showUserStateIconsChanged();
void enableEditMode(bool enable);
private:
QPointer<BufferViewConfig> _config;
Qt::SortOrder _sortOrder;
- QPixmap _channelJoinedIcon;
- QPixmap _channelPartedIcon;
- QPixmap _userOfflineIcon;
- QPixmap _userAwayIcon;
- QPixmap _userOnlineIcon;
- bool _showUserStateIcons;
-
bool _editMode;
QAction _enableEditMode;
QSet<BufferId> _toAdd;