#include "bufferviewfilter.h"
-#include <QColor>
+#include <QCoreApplication>
#include "buffermodel.h"
#include "client.h"
#include "uisettings.h"
+class CheckRemovalEvent : public QEvent {
+public:
+ CheckRemovalEvent(const QModelIndex &source_index) : QEvent(QEvent::User), index(source_index) {};
+ QPersistentModelIndex index;
+};
+
/*****************************************
* The Filter for the Tree View
*****************************************/
connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(source_rowsInserted(const QModelIndex &, int, int)));
setDynamicSortFilter(true);
+
+ loadColors();
+
+ connect(this, SIGNAL(_dataChanged(const QModelIndex &, const QModelIndex &)),
+ this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex)));
+}
+
+void BufferViewFilter::loadColors() {
+ UiSettings s("QtUi/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>();
}
void BufferViewFilter::setConfig(BufferViewConfig *config) {
}
void BufferViewFilter::removeBuffer(const QModelIndex &index) {
- if(!config())
+ if(!config() || !index.isValid() || index.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
return;
-
+
BufferId bufferId = data(index, NetworkModel::BufferIdRole).value<BufferId>();
config()->requestRemoveBuffer(bufferId);
}
}
bool BufferViewFilter::bufferLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const {
- return QSortFilterProxyModel::lessThan(source_left, source_right);
BufferId leftBufferId = sourceModel()->data(source_left, NetworkModel::BufferIdRole).value<BufferId>();
BufferId rightBufferId = sourceModel()->data(source_right, NetworkModel::BufferIdRole).value<BufferId>();
if(config()) {
}
QVariant BufferViewFilter::foreground(const QModelIndex &index) const {
- UiSettings s("QtUi/Colors");
- QVariant inactiveActivity = s.value("inactiveActivityFG", QVariant(QColor(Qt::gray)));
- QVariant noActivity = s.value("noActivityFG", QVariant(QColor(Qt::black)));
- QVariant highlightActivity = s.value("highlightActivityFG", QVariant(QColor(Qt::magenta)));
- QVariant newMessageActivity = s.value("newMessageActivityFG", QVariant(QColor(Qt::green)));
- QVariant otherActivity = s.value("otherActivityFG", QVariant(QColor(Qt::darkGreen)));
-
if(!index.data(NetworkModel::ItemActiveRole).toBool())
- return inactiveActivity;
+ return _FgColorInactiveActivity;
Buffer::ActivityLevel activity = (Buffer::ActivityLevel)index.data(NetworkModel::BufferActivityRole).toInt();
if(activity & Buffer::Highlight)
- return highlightActivity;
+ return _FgColorHighlightActivity;
if(activity & Buffer::NewMessage)
- return newMessageActivity;
+ return _FgColorNewMessageActivity;
if(activity & Buffer::OtherActivity)
- return otherActivity;
-
- return noActivity;
+ return _FgColorOtherActivity;
+ return _FgColorNoActivity;
}
void BufferViewFilter::source_rowsInserted(const QModelIndex &parent, int start, int end) {
}
}
+void BufferViewFilter::checkPreviousCurrentForRemoval(const QModelIndex ¤t, const QModelIndex &previous) {
+ Q_UNUSED(current);
+ if(previous.isValid())
+ QCoreApplication::postEvent(this, new CheckRemovalEvent(previous));
+}
+
+void BufferViewFilter::customEvent(QEvent *event) {
+ if(event->type() != QEvent::User)
+ return;
+
+ CheckRemovalEvent *removalEvent = static_cast<CheckRemovalEvent *>(event);
+ checkItemForRemoval(removalEvent->index);
+
+ event->accept();
+}
+
+void BufferViewFilter::checkItemsForRemoval(const QModelIndex &topLeft, const QModelIndex &bottomRight) {
+ QModelIndex source_topLeft = mapToSource(topLeft);
+ QModelIndex source_bottomRight = mapToSource(bottomRight);
+ emit _dataChanged(source_topLeft, source_bottomRight);
+}
+
// ******************************
// Helper
// ******************************