+ serverListDlg->raise();
+}
+
+void MainWin::showSettingsDlg() {
+ settingsDlg->show();
+}
+
+void MainWin::closeEvent(QCloseEvent *event)
+{
+ //if (userReallyWantsToQuit()) {
+ ui.bufferWidget->saveState();
+ QSettings s;
+ s.beginGroup("Geometry");
+ s.setValue("MainWinSize", size());
+ s.setValue("MainWinPos", pos());
+ s.setValue("MainWinState", saveState());
+ s.endGroup();
+ s.beginGroup("Buffers");
+ //s.setValue("CurrentNetwork", currentNetwork);
+ s.setValue("CurrentBuffer", currentBuffer);
+ s.endGroup();
+ delete systray;
+ event->accept();
+ //} else {
+ //event->ignore();
+ //}
+}
+
+void MainWin::showBuffer(BufferId id) {
+ showBuffer(getBuffer(id));
+}
+
+void MainWin::showBuffer(Buffer *b) {
+ //currentBuffer = b->bufferName(); currentNetwork = b->networkName();
+ currentBuffer = b->bufferId().groupId();
+ //emit bufferSelected(b);
+ //qApp->processEvents();
+ ui.bufferWidget->setBuffer(b);
+ emit bufferSelected(b);
+}
+
+void MainWin::networkConnected(QString net) {
+ connected[net] = true;
+ BufferId id = getStatusBufferId(net);
+ Buffer *b = getBuffer(id);
+ b->setActive(true);
+ //b->displayMsg(Message(id, Message::Server, tr("Connected."))); FIXME
+ // TODO buffersUpdated();
+}
+
+void MainWin::networkDisconnected(QString net) {
+ //getBuffer(net, "")->setActive(false);
+ foreach(BufferId id, buffers.keys()) {
+ if(id.network() != net) continue;
+ Buffer *b = getBuffer(id);
+ //b->displayMsg(Message(id, Message::Server, tr("Server disconnected."))); FIXME
+ b->setActive(false);
+ }
+ connected[net] = false;
+}
+
+BufferId MainWin::getBufferId(QString net, QString buf) {
+ foreach(BufferId id, buffers.keys()) {
+ if(id.network() == net && id.buffer() == buf) return id;
+ }
+ Q_ASSERT(false);
+ return BufferId();
+}
+
+BufferId MainWin::getStatusBufferId(QString net) {
+ return getBufferId(net, "");
+}
+
+
+Buffer * MainWin::getBuffer(BufferId id) {
+ if(!buffers.contains(id)) {
+ Buffer *b = new Buffer(id);
+ b->setOwnNick(ownNick[id.network()]);
+ connect(b, SIGNAL(userInput(BufferId, QString)), this, SLOT(userInput(BufferId, QString)));
+ connect(b, SIGNAL(bufferUpdated(Buffer *)), this, SIGNAL(bufferUpdated(Buffer *)));
+ connect(b, SIGNAL(bufferDestroyed(Buffer *)), this, SIGNAL(bufferDestroyed(Buffer *)));
+ buffers[id] = b;
+ emit bufferUpdated(b);
+ }
+ return buffers[id];
+}
+
+void MainWin::recvNetworkState(QString net, QVariant state) {
+ connected[net] = true;
+ setOwnNick(net, state.toMap()["OwnNick"].toString());
+ getBuffer(getStatusBufferId(net))->setActive(true);
+ VarMap t = state.toMap()["Topics"].toMap();
+ VarMap n = state.toMap()["Nicks"].toMap();
+ foreach(QVariant v, t.keys()) {
+ QString buf = v.toString();
+ BufferId id = getBufferId(net, buf);
+ getBuffer(id)->setActive(true);
+ setTopic(net, buf, t[buf].toString());
+ }
+ foreach(QString nick, n.keys()) {
+ addNick(net, nick, n[nick].toMap());
+ }
+}
+
+void MainWin::recvMessage(Message msg) {
+ /*
+ Buffer *b;
+ if(msg.flags & Message::PrivMsg) {
+ // query
+ if(msg.flags & Message::Self) b = getBuffer(net, msg.target);
+ else b = getBuffer(net, nickFromMask(msg.sender));
+ } else {
+ b = getBuffer(net, msg.target);
+ }
+ */
+ Buffer *b = getBuffer(msg.buffer);
+ //b->displayMsg(msg);
+ b->appendChatLine(new ChatLine(msg));
+}
+
+void MainWin::recvStatusMsg(QString net, QString msg) {
+ //recvMessage(net, Message::server("", QString("[STATUS] %1").arg(msg)));
+
+}
+
+void MainWin::recvBacklogData(BufferId id, QList<QVariant> msgs, bool done) {
+ foreach(QVariant v, msgs) {
+ layoutQueue.append(v.value<Message>());
+ }
+ if(!layoutTimer->isActive()) layoutTimer->start();
+}
+
+
+void MainWin::layoutMsg() {
+ if(layoutQueue.count()) {
+ ChatLine *line = new ChatLine(layoutQueue.takeFirst());
+ getBuffer(line->bufferId())->prependChatLine(line);
+ }
+ if(!layoutQueue.count()) layoutTimer->stop();