#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
*****************************************/
setSourceModel(model);
connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(source_rowsInserted(const QModelIndex &, int, int)));
- // setSortCaseSensitivity(Qt::CaseInsensitive);
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::addBuffer(const BufferId &bufferId) {
- if(config()->bufferList().contains(bufferId))
+ if(!config() || config()->bufferList().contains(bufferId))
return;
int pos = config()->bufferList().count();
}
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::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const {
+ BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value<BufferId>();
+ Q_ASSERT(bufferId.isValid());
if(!_config)
return true;
-
+
if(config()->networkId().isValid() && config()->networkId() != sourceModel()->data(source_bufferIndex, NetworkModel::NetworkIdRole).value<NetworkId>())
return false;
return false;
if(_config->minimumActivity() > source_bufferIndex.data(NetworkModel::BufferActivityRole).toInt()) {
- if(!Client::bufferModel()->standardSelectionModel()->isSelected(source_bufferIndex))
+ if(bufferId != Client::bufferModel()->standardSelectionModel()->currentIndex().data(NetworkModel::BufferIdRole).value<BufferId>())
return false;
}
- BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value<BufferId>();
return _config->bufferList().contains(bufferId);
}
return false;
}
- if(source_parent == QModelIndex())
+ if(!source_parent.isValid())
return filterAcceptNetwork(child);
else
return filterAcceptBuffer(child);
}
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) {
- if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType)
+ if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::BufferItemType)
return;
if(!config() || !config()->addNewBuffersAutomatically())
return;
+ QModelIndex child;
for(int row = start; row <= end; row++) {
- addBuffer(parent.child(row, 0).data(NetworkModel::BufferIdRole).value<BufferId>());
+ child = sourceModel()->index(row, 0, parent);
+ addBuffer(sourceModel()->data(child, NetworkModel::BufferIdRole).value<BufferId>());
}
}
+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
// ******************************