* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QGridLayout>
+#include <QLabel>
+#include <QLineEdit>
#include <QInputDialog>
#include <QMessageBox>
+#include <QPushButton>
#include "networkmodelcontroller.h"
#include "clientidentity.h"
#include "network.h"
#include "util.h"
+#include "clientignorelistmanager.h"
+#include "client.h"
NetworkModelController::NetworkModelController(QObject *parent)
: QObject(parent),
}
-void NetworkModelController::registerAction(ActionType type, const QString &text, bool checkable) {
- registerAction(type, QPixmap(), text, checkable);
+Action * NetworkModelController::registerAction(ActionType type, const QString &text, bool checkable) {
+ return registerAction(type, QPixmap(), text, checkable);
}
-void NetworkModelController::registerAction(ActionType type, const QPixmap &icon, const QString &text, bool checkable) {
+Action * NetworkModelController::registerAction(ActionType type, const QPixmap &icon, const QString &text, bool checkable) {
Action *act;
if(icon.isNull())
act = new Action(text, this);
_actionCollection->addAction(QString::number(type, 16), act);
_actionByType[type] = act;
+ return act;
}
/******** Helper Functions ***********************************************************************/
BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
if(!bufferInfo.isValid())
return QString();
- if(!bufferInfo.type() == BufferInfo::QueryBuffer)
+ if(bufferInfo.type() != BufferInfo::QueryBuffer)
return QString();
return bufferInfo.bufferName(); // FIXME this might break with merged queries maybe
}
void NetworkModelController::handleNetworkAction(ActionType type, QAction *) {
+ if(type == NetworkConnectAll || type == NetworkDisconnectAll) {
+ foreach(NetworkId id, Client::networkIds()) {
+ const Network *net = Client::network(id);
+ if(type == NetworkConnectAll && net->connectionState() == Network::Disconnected)
+ net->requestConnect();
+ if(type == NetworkDisconnectAll && net->connectionState() != Network::Disconnected)
+ net->requestDisconnect();
+ }
+ return;
+ }
+
if(!indexList().count())
return;
+
const Network *network = Client::network(indexList().at(0).data(NetworkModel::NetworkIdRole).value<NetworkId>());
Q_CHECK_PTR(network);
if(!network)
removeBuffers(indexList());
} else {
+ QList<BufferInfo> bufferList; // create temp list because model indexes might change
foreach(QModelIndex index, indexList()) {
BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value<BufferInfo>();
- if(!bufferInfo.isValid())
- continue;
+ if(bufferInfo.isValid())
+ bufferList << bufferInfo;
+ }
+ foreach(BufferInfo bufferInfo, bufferList) {
switch(type) {
case BufferJoin:
Client::userInput(bufferInfo, QString("/JOIN %1").arg(bufferInfo.bufferName()));
int filter = 0;
if(NetworkModelController::action(HideJoin)->isChecked())
- filter |= Message::Join;
+ filter |= Message::Join | Message::NetsplitJoin;
if(NetworkModelController::action(HidePart)->isChecked())
filter |= Message::Part;
if(NetworkModelController::action(HideQuit)->isChecked())
- filter |= Message::Quit;
+ filter |= Message::Quit | Message::NetsplitQuit;
if(NetworkModelController::action(HideNick)->isChecked())
filter |= Message::Nick;
if(NetworkModelController::action(HideMode)->isChecked())
filter |= Message::Mode;
if(NetworkModelController::action(HideDayChange)->isChecked())
filter |= Message::DayChange;
+ if(NetworkModelController::action(HideTopic)->isChecked())
+ filter |= Message::Topic;
switch(type) {
case HideJoin:
case HideNick:
case HideMode:
case HideDayChange:
+ case HideTopic:
if(_messageFilter)
BufferSettings(_messageFilter->idString()).setMessageFilter(filter);
else {
if(!indexList().count())
return;
NetworkId networkId = indexList().at(0).data(NetworkModel::NetworkIdRole).value<NetworkId>();
- if(!networkId.isValid())
- return;
switch(type) {
case JoinChannel: {
QString channelName = contextItem();
if(channelName.isEmpty()) {
- bool ok;
- channelName = QInputDialog::getText(0, tr("Join Channel"), tr("Input channel name:"), QLineEdit::Normal, QString(), &ok);
- if(!ok)
- return;
+ JoinDlg dlg(indexList().first());
+ if(dlg.exec() == QDialog::Accepted) {
+ channelName = dlg.channelName();
+ networkId = dlg.networkId();
+ }
}
if(!channelName.isEmpty()) {
Client::instance()->userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(channelName));
break;
}
case ShowChannelList:
- emit showChannelList(networkId);
+ if(networkId.isValid())
+ emit showChannelList(networkId);
break;
case ShowIgnoreList:
- emit showIgnoreList(networkId);
+ if(networkId.isValid())
+ emit showIgnoreList(QString());
break;
default:
break;
}
}
-void NetworkModelController::handleNickAction(ActionType type, QAction *) {
+void NetworkModelController::handleNickAction(ActionType type, QAction *action) {
foreach(QModelIndex index, indexList()) {
NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value<NetworkId>();
if(!networkId.isValid())
Client::userInput(bufferInfo, QString("/KICK %1").arg(nick));
break;
case NickSwitchTo:
- Client::bufferModel()->switchToBuffer(findQueryBuffer(networkId, nick));
- break;
case NickQuery:
- Client::userInput(bufferInfo, QString("/QUERY %1").arg(nick));
+ Client::bufferModel()->switchToOrStartQuery(networkId, nick);
+ break;
+ case NickIgnoreUser:
+ {
+ IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ if(!ircUser)
+ break;
+ Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
+ action->property("ignoreRule").toString(),
+ false, IgnoreListManager::SoftStrictness,
+ IgnoreListManager::NetworkScope,
+ ircUser->network()->networkName(), true);
+ break;
+ }
+ case NickIgnoreHost:
+ {
+ IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ if(!ircUser)
+ break;
+ Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
+ action->property("ignoreRule").toString(),
+ false, IgnoreListManager::SoftStrictness,
+ IgnoreListManager::NetworkScope,
+ ircUser->network()->networkName(), true);
+ break;
+ }
+ case NickIgnoreDomain:
+ {
+ IrcUser *ircUser = qobject_cast<IrcUser *>(index.data(NetworkModel::IrcUserRole).value<QObject *>());
+ if(!ircUser)
+ break;
+ Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore,
+ action->property("ignoreRule").toString(),
+ false, IgnoreListManager::SoftStrictness,
+ IgnoreListManager::NetworkScope,
+ ircUser->network()->networkName(), true);
+ break;
+ }
+ case NickIgnoreCustom:
+ // forward that to mainwin since we can access the settingspage only from there
+ emit showIgnoreList(action->property("ignoreRule").toString());
+ break;
+ case NickIgnoreToggleEnabled0:
+ case NickIgnoreToggleEnabled1:
+ case NickIgnoreToggleEnabled2:
+ case NickIgnoreToggleEnabled3:
+ case NickIgnoreToggleEnabled4:
+ Client::ignoreListManager()->requestToggleIgnoreRule(action->property("ignoreRule").toString());
break;
default:
qWarning() << "Unhandled nick action";
}
}
}
+
+/***************************************************************************************************************
+ * JoinDlg
+ ***************************************************************************************************************/
+
+NetworkModelController::JoinDlg::JoinDlg(const QModelIndex &index, QWidget *parent) : QDialog(parent) {
+ setWindowIcon(SmallIcon("irc-join-channel"));
+ setWindowTitle(tr("Join Channel"));
+
+ QGridLayout *layout = new QGridLayout(this);
+ layout->addWidget(new QLabel(tr("Network:")), 0, 0);
+ layout->addWidget(networks = new QComboBox, 0, 1);
+ layout->addWidget(new QLabel(tr("Channel:")), 1, 0);
+ layout->addWidget(channel = new QLineEdit, 1, 1);
+ layout->addWidget(buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel), 2, 0, 1, 2);
+ setLayout(layout);
+
+ channel->setFocus();
+ buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
+ networks->setInsertPolicy(QComboBox::InsertAlphabetically);
+
+ connect(buttonBox, SIGNAL(accepted()), SLOT(accept()));
+ connect(buttonBox, SIGNAL(rejected()), SLOT(reject()));
+ connect(channel, SIGNAL(textChanged(QString)), SLOT(on_channel_textChanged(QString)));
+
+ foreach(NetworkId id, Client::networkIds()) {
+ const Network *net = Client::network(id);
+ if(net->isConnected()) {
+ networks->addItem(net->networkName(), QVariant::fromValue<NetworkId>(id));
+ }
+ }
+
+ if(index.isValid()) {
+ NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value<NetworkId>();
+ if(networkId.isValid()) {
+ networks->setCurrentIndex(networks->findText(Client::network(networkId)->networkName()));
+ if(index.data(NetworkModel::BufferTypeRole) == BufferInfo::ChannelBuffer
+ && !index.data(NetworkModel::ItemActiveRole).toBool())
+ channel->setText(index.data(Qt::DisplayRole).toString());
+ }
+ }
+}
+
+NetworkId NetworkModelController::JoinDlg::networkId() const {
+ return networks->itemData(networks->currentIndex()).value<NetworkId>();
+}
+
+QString NetworkModelController::JoinDlg::channelName() const {
+ return channel->text();
+}
+
+void NetworkModelController::JoinDlg::on_channel_textChanged(const QString &text) {
+ buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!text.isEmpty());
+}