-void BufferWidget::setBuffer(Buffer *buf) {
- BufferState *state;
- curBuf = buf;
- if(states.contains(buf)) {
- state = states[buf];
- } else {
- BufferState *s = new BufferState;
- s->currentLine = Settings::guiValue(QString("BufferStates/%1/%2/currentLine").arg(buf->networkName()).arg(buf->bufferName()), -1).toInt();
- if(buf->bufferType() == Buffer::ChannelType) {
- s->splitterState = Settings::guiValue(QString("BufferStates/%1/%2/splitter").arg(buf->networkName()).arg(buf->bufferName())).toByteArray();
- s->splitter = new QSplitter(this);
- s->chatWidget = new ChatWidget(s->splitter);
- s->nickTree = new QTreeWidget(s->splitter);
- s->nickTree->headerItem()->setHidden(true);
- s->nickTree->setRootIsDecorated(false);
- s->page = s->splitter;
- s->ownNick = buf->ownNick();
- s->topic = buf->topic();
- updateNickList(s, buf->nickList());
- s->splitter->restoreState(s->splitterState);
- connect(buf, SIGNAL(nickListChanged(QVariantMap)), this, SLOT(updateNickList(QVariantMap)));
- connect(s->nickTree, SIGNAL(itemExpanded(QTreeWidgetItem *)), this, SLOT(itemExpansionChanged(QTreeWidgetItem*)));
- connect(s->nickTree, SIGNAL(itemCollapsed(QTreeWidgetItem *)), this, SLOT(itemExpansionChanged(QTreeWidgetItem*)));
- } else {
- s->splitter = 0; s->nickTree = 0;
- s->chatWidget = new ChatWidget(this);
- s->page = s->chatWidget;
- s->ownNick = buf->ownNick();
- s->topic = buf->bufferName();
- }
- s->opsExpanded = Settings::guiValue(QString("BufferStates/%1/%2/opsExpanded").arg(buf->networkName()).arg(buf->bufferName()), true).toBool();
- s->voicedExpanded = Settings::guiValue(QString("BufferStates/%1/%2/voicedExpanded").arg(buf->networkName()).arg(buf->bufferName()), true).toBool();
- s->usersExpanded = Settings::guiValue(QString("BufferStates/%1/%2/usersExpanded").arg(buf->networkName()).arg(buf->bufferName()), true).toBool();
- states[buf] = s;
- state = s;
- state->chatWidget->init(networkName, bufferName);
- QList<ChatLine *> lines;
- QList<AbstractUiMsg *> msgs = buf->contents();
- foreach(AbstractUiMsg *msg, msgs) {
- lines.append(dynamic_cast<ChatLine*>(msg));
- }
- state->chatWidget->setContents(lines);
- connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), state->chatWidget, SLOT(appendMsg(AbstractUiMsg *)));
- connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), state->chatWidget, SLOT(prependMsg(AbstractUiMsg *)));
- connect(buf, SIGNAL(topicSet(QString)), this, SLOT(setTopic(QString)));
- connect(buf, SIGNAL(ownNickSet(QString)), this, SLOT(setOwnNick(QString)));
- ui.stackedWidget->addWidget(s->page);
- }
- ui.stackedWidget->setCurrentWidget(state->page);
- ui.topicEdit->setText(buf->topic());
- chatWidget = state->chatWidget;
- nickTree = state->nickTree;
- splitter = state->splitter;
- //ui.ownNick->set
- disconnect(this, SIGNAL(userInput(QString)), 0, 0);
- connect(this, SIGNAL(userInput(QString)), buf, SLOT(processUserInput(QString)));
- state->chatWidget->setFocusProxy(ui.inputEdit);
- ui.inputEdit->setFocus();
- ui.topicEdit->setText(state->topic);
- ui.ownNick->clear(); // TODO add nick history
- ui.ownNick->addItem(state->ownNick);
- updateTitle();