/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel Project *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
registerAction(HideNick, tr("Nick Changes"), true);
registerAction(HideMode, tr("Mode Changes"), true);
registerAction(HideDayChange, tr("Day Changes"), true);
- registerAction(HideApplyToAll, tr("Apply to All Chat Views..."));
+ registerAction(HideApplyToAll, tr("Set as Default..."));
+ registerAction(HideUseDefaults, tr("Use Defaults..."));
registerAction(JoinChannel, tr("Join Channel..."));
connect(_actionCollection, SIGNAL(actionTriggered(QAction *)), SLOT(actionTriggered(QAction *)));
- action(HideApplyToAll)->setDisabled(true);
-
QMenu *hideEventsMenu = new QMenu();
hideEventsMenu->addAction(action(HideJoin));
hideEventsMenu->addAction(action(HidePart));
hideEventsMenu->addAction(action(HideDayChange));
hideEventsMenu->addSeparator();
hideEventsMenu->addAction(action(HideApplyToAll));
+ hideEventsMenu->addAction(action(HideUseDefaults));
_hideEventsMenuAction = new Action(tr("Hide Events"), 0);
_hideEventsMenuAction->setMenu(hideEventsMenu);
void NetworkModelActionProvider::addActions(QMenu *menu, BufferId bufId, QObject *receiver, const char *method) {
if(!bufId.isValid())
return;
- _messageFilter = 0;
- _contextItem = QString();
addActions(menu, Client::networkModel()->bufferIndex(bufId), receiver, method);
}
void NetworkModelActionProvider::addActions(QMenu *menu, const QModelIndex &index, QObject *receiver, const char *method, bool isCustomBufferView) {
if(!index.isValid())
return;
- _messageFilter = 0;
- _contextItem = QString();
- addActions(menu, QList<QModelIndex>() << index, receiver, method, isCustomBufferView);
+ addActions(menu, QList<QModelIndex>() << index, 0, QString(), receiver, method, isCustomBufferView);
}
void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, QObject *receiver, const char *slot) {
void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, QObject *receiver, const char *method) {
if(!filter)
return;
- _messageFilter = filter;
- _contextItem = chanOrNick;
- addActions(menu, QList<QModelIndex>() << Client::networkModel()->bufferIndex(msgBuffer), receiver, method);
+ addActions(menu, QList<QModelIndex>() << Client::networkModel()->bufferIndex(msgBuffer), filter, chanOrNick, receiver, method, false);
+}
+
+void NetworkModelActionProvider::addActions(QMenu *menu, const QList<QModelIndex> &indexList, QObject *receiver, const char *method, bool isCustomBufferView) {
+ addActions(menu, indexList, 0, QString(), receiver, method, isCustomBufferView);
}
// add a list of actions sensible for the current item(s)
void NetworkModelActionProvider::addActions(QMenu *menu,
const QList<QModelIndex> &indexList,
+ MessageFilter *filter,
+ const QString &contextItem,
QObject *receiver,
const char *method,
bool isCustomBufferView)
return;
_indexList = indexList;
+ _messageFilter = filter;
+ _contextItem = contextItem;
_receiver = receiver;
_method = method;
void NetworkModelActionProvider::addBufferItemActions(QMenu *menu, const QModelIndex &index, bool isCustomBufferView) {
BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
+ menu->addSeparator();
switch(bufferInfo.type()) {
case BufferInfo::ChannelBuffer:
addAction(BufferJoin, menu, index, InactiveState);
}
void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, BufferId bufferId) {
- addHideEventsMenu(menu, BufferSettings(bufferId).messageFilter());
+ if(BufferSettings(bufferId).hasFilter())
+ addHideEventsMenu(menu, BufferSettings(bufferId).messageFilter());
+ else
+ addHideEventsMenu(menu);
}
void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, MessageFilter *msgFilter) {
- addHideEventsMenu(menu, BufferSettings(msgFilter->idString()).messageFilter());
+ if(BufferSettings(msgFilter->idString()).hasFilter())
+ addHideEventsMenu(menu, BufferSettings(msgFilter->idString()).messageFilter());
+ else
+ addHideEventsMenu(menu);
}
void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, int filter) {
+ action(HideApplyToAll)->setEnabled(filter != -1);
+ action(HideUseDefaults)->setEnabled(filter != -1);
+ if(filter == -1)
+ filter = BufferSettings().messageFilter();
+
action(HideJoin)->setChecked(filter & Message::Join);
action(HidePart)->setChecked(filter & Message::Part);
action(HideQuit)->setChecked(filter & Message::Quit);
BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
if(!bufferInfo.isValid())
return QString();
+ if(!bufferInfo.type() == BufferInfo::QueryBuffer)
+ return QString();
return bufferInfo.bufferName(); // FIXME this might break with merged queries maybe
}
void NetworkModelActionProvider::removeBuffers(const QModelIndexList &indexList) {
QList<BufferInfo> inactive;
foreach(QModelIndex index, indexList) {
- if(!index.data(NetworkModel::ItemActiveRole).toBool()) {
- BufferInfo info = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
- if(info.isValid())
- inactive << info;
+ BufferInfo info = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
+ if(info.isValid()) {
+ if(info.type() == BufferInfo::QueryBuffer
+ || (info.type() == BufferInfo::ChannelBuffer && !index.data(NetworkModel::ItemActiveRole).toBool()))
+ inactive << info;
}
}
QString msg;
}
void NetworkModelActionProvider::handleHideAction(ActionType type, QAction *action) {
- Message::Type msgType;
- switch(type) {
- case HideJoin:
- msgType = Message::Join; break;
- case HidePart:
- msgType = Message::Part; break;
- case HideQuit:
- msgType = Message::Quit; break;
- case HideNick:
- msgType = Message::Nick; break;
- case HideMode:
- msgType = Message::Mode; break;
- case HideDayChange:
- msgType = Message::DayChange; break;
- case HideApplyToAll:
- // TODO implement "apply to all" for hiding messages
- return;
- break;
- default:
- return;
- }
+ Q_UNUSED(action)
- if(_messageFilter)
- BufferSettings(_messageFilter->idString()).filterMessage(msgType, action->isChecked());
- else {
- foreach(QModelIndex index, _indexList) {
- BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
- if(!bufferId.isValid())
- continue;
- BufferSettings(bufferId).filterMessage(msgType, action->isChecked());
+ int filter = 0;
+ if(NetworkModelActionProvider::action(HideJoin)->isChecked())
+ filter |= Message::Join;
+ if(NetworkModelActionProvider::action(HidePart)->isChecked())
+ filter |= Message::Part;
+ if(NetworkModelActionProvider::action(HideQuit)->isChecked())
+ filter |= Message::Quit;
+ if(NetworkModelActionProvider::action(HideNick)->isChecked())
+ filter |= Message::Nick;
+ if(NetworkModelActionProvider::action(HideMode)->isChecked())
+ filter |= Message::Mode;
+ if(NetworkModelActionProvider::action(HideDayChange)->isChecked())
+ filter |= Message::DayChange;
+
+ switch(type) {
+ case HideJoin:
+ case HidePart:
+ case HideQuit:
+ case HideNick:
+ case HideMode:
+ case HideDayChange:
+ if(_messageFilter)
+ BufferSettings(_messageFilter->idString()).setMessageFilter(filter);
+ else {
+ foreach(QModelIndex index, _indexList) {
+ BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+ if(!bufferId.isValid())
+ continue;
+ BufferSettings(bufferId).setMessageFilter(filter);
+ }
}
- }
+ return;
+ case HideApplyToAll:
+ BufferSettings().setMessageFilter(filter);
+ case HideUseDefaults:
+ if(_messageFilter)
+ BufferSettings(_messageFilter->idString()).removeFilter();
+ else {
+ foreach(QModelIndex index, _indexList) {
+ BufferId bufferId = index.data(NetworkModel::BufferIdRole).value<BufferId>();
+ if(!bufferId.isValid())
+ continue;
+ BufferSettings(bufferId).removeFilter();
+ }
+ }
+ return;
+ default:
+ return;
+ };
}
void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *action) {