#include "bufferwidget.h"
#include "buffer.h"
+#include "chatline.h"
#include "chatline-old.h"
#include "chatwidget.h"
#include "settings.h"
#include "network.h"
#include "networkmodel.h"
+#include "global.h"
+
BufferWidget::BufferWidget(QWidget *parent)
- : QWidget(parent),
- _bufferModel(0),
- _selectionModel(0),
+ : AbstractItemView(parent),
_currentBuffer(0)
{
ui.setupUi(this);
void BufferWidget::init() {
}
-void BufferWidget::setModel(BufferModel *bufferModel) {
- if(_bufferModel) {
- disconnect(_bufferModel, 0, this, 0);
- }
- _bufferModel = bufferModel;
- connect(bufferModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)),
- this, SLOT(rowsAboutToBeRemoved(QModelIndex, int, int)));
-}
-
-void BufferWidget::setSelectionModel(QItemSelectionModel *selectionModel) {
- if(_selectionModel) {
- disconnect(_selectionModel, 0, this, 0);
- }
- _selectionModel = selectionModel;
- connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
- this, SLOT(currentChanged(QModelIndex, QModelIndex)));
-}
-
void BufferWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) {
Q_ASSERT(model());
if(!parent.isValid()) {
for(int i = start; i <= end; i++) {
QVariant variant = parent.child(i,0).data(NetworkModel::BufferIdRole);
if(!variant.isValid())
- continue;
+ continue;
BufferId bufferId = qVariantValue<BufferId>(variant);
removeBuffer(bufferId);
}
void BufferWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) {
- Q_UNUSED(previous);
- QVariant variant;
-
- variant = current.data(NetworkModel::BufferIdRole);
- if(!variant.isValid())
- return;
- setCurrentBuffer(variant.value<BufferId>());
+ BufferId newBufferId = current.data(NetworkModel::BufferIdRole).value<BufferId>();
+ BufferId oldBufferId = previous.data(NetworkModel::BufferIdRole).value<BufferId>();
+ if(newBufferId != oldBufferId)
+ setCurrentBuffer(newBufferId);
}
void BufferWidget::setCurrentBuffer(BufferId bufferId) {
+ if(!bufferId.isValid()) {
+ ui.stackedWidget->setCurrentWidget(ui.page);
+ return;
+ }
+
ChatWidget *chatWidget = 0;
+ ChatView *chatView = 0;
Buffer *buf = Client::buffer(bufferId);
if(!buf) {
qWarning() << "BufferWidget::setBuffer(BufferId): Can't show unknown Buffer:" << bufferId;
}
Buffer *prevBuffer = Client::buffer(currentBuffer());
if(prevBuffer) prevBuffer->setVisible(false);
- if(_chatWidgets.contains(bufferId)) {
- chatWidget = _chatWidgets[bufferId];
+ if(Global::SPUTDEV) {
+ if(_chatViews.contains(bufferId)) {
+ chatView = _chatViews[bufferId];
+ } else {
+ chatView = new ChatView(buf, this);
+ //chatView->init(bufferId);
+ QList<ChatLine *> lines;
+ QList<AbstractUiMsg *> msgs = buf->contents();
+ foreach(AbstractUiMsg *msg, msgs) {
+ lines.append(dynamic_cast<ChatLine *>(msg));
+ }
+ chatView->setContents(lines);
+ connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), chatView, SLOT(appendMsg(AbstractUiMsg *)));
+ connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), chatView, SLOT(prependMsg(AbstractUiMsg *)));
+ _chatViews[bufferId] = chatView;
+ ui.stackedWidget->addWidget(chatView);
+ chatView->setFocusProxy(this);
+ }
+ _currentBuffer = bufferId;
+ ui.stackedWidget->setCurrentWidget(chatView);
} else {
- chatWidget = new ChatWidget(this);
- chatWidget->init(bufferId);
- QList<ChatLine *> lines;
- QList<AbstractUiMsg *> msgs = buf->contents();
- foreach(AbstractUiMsg *msg, msgs) {
- lines.append(dynamic_cast<ChatLine*>(msg));
+ if(_chatWidgets.contains(bufferId)) {
+ chatWidget = _chatWidgets[bufferId];
+ } else {
+ chatWidget = new ChatWidget(this);
+ chatWidget->init(bufferId);
+ QList<ChatLineOld *> lines;
+ QList<AbstractUiMsg *> msgs = buf->contents();
+ foreach(AbstractUiMsg *msg, msgs) {
+ lines.append(dynamic_cast<ChatLineOld*>(msg));
+ }
+ chatWidget->setContents(lines);
+ connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), chatWidget, SLOT(appendMsg(AbstractUiMsg *)));
+ connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), chatWidget, SLOT(prependMsg(AbstractUiMsg *)));
+ _chatWidgets[bufferId] = chatWidget;
+ ui.stackedWidget->addWidget(chatWidget);
+ chatWidget->setFocusProxy(this);
}
- chatWidget->setContents(lines);
- connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), chatWidget, SLOT(appendMsg(AbstractUiMsg *)));
- connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), chatWidget, SLOT(prependMsg(AbstractUiMsg *)));
- _chatWidgets[bufferId] = chatWidget;
- ui.stackedWidget->addWidget(chatWidget);
- chatWidget->setFocusProxy(this);
+ _currentBuffer = bufferId;
+ ui.stackedWidget->setCurrentWidget(chatWidget);
}
- _currentBuffer = bufferId;
- ui.stackedWidget->setCurrentWidget(chatWidget);
buf->setVisible(true);
setFocus();
}