BufferWidget::BufferWidget(QWidget *parent)
: QWidget(parent),
_bufferModel(0),
- _selectionModel(0)
+ _selectionModel(0),
+ _currentBuffer(0)
{
ui.setupUi(this);
}
disconnect(_bufferModel, 0, this, 0);
}
_bufferModel = bufferModel;
- connect(bufferModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)),
- this, SLOT(rowsAboutToBeRemoved(QModelIndex, int, int)));
+
+ if(bufferModel) {
+ connect(bufferModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex, int, int)),
+ this, SLOT(rowsAboutToBeRemoved(QModelIndex, int, int)));
+ }
}
void BufferWidget::setSelectionModel(QItemSelectionModel *selectionModel) {
disconnect(_selectionModel, 0, this, 0);
}
_selectionModel = selectionModel;
- connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
- this, SLOT(currentChanged(QModelIndex, QModelIndex)));
+
+ if(selectionModel) {
+ connect(selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+ this, SLOT(currentChanged(QModelIndex, QModelIndex)));
+ }
}
void BufferWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) {
if(!_chatWidgets.contains(bufferId))
return;
+ if(Client::buffer(bufferId)) Client::buffer(bufferId)->setVisible(false);
ChatWidget *chatWidget = _chatWidgets.take(bufferId);
ui.stackedWidget->removeWidget(chatWidget);
chatWidget->deleteLater();
}
void BufferWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) {
- Q_UNUSED(previous);
- QVariant variant;
-
- variant = current.data(NetworkModel::BufferIdRole);
- if(!variant.isValid())
- return;
-
- setCurrentBuffer(qVariantValue<BufferId>(variant));
+ 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) {
- ChatWidget *chatWidget;
+ if(!bufferId.isValid()) {
+ ui.stackedWidget->setCurrentWidget(ui.page);
+ return;
+ }
+
+ ChatWidget *chatWidget = 0;
+ Buffer *buf = Client::buffer(bufferId);
+ if(!buf) {
+ qWarning() << "BufferWidget::setBuffer(BufferId): Can't show unknown Buffer:" << bufferId;
+ return;
+ }
+ Buffer *prevBuffer = Client::buffer(currentBuffer());
+ if(prevBuffer) prevBuffer->setVisible(false);
if(_chatWidgets.contains(bufferId)) {
chatWidget = _chatWidgets[bufferId];
} else {
- Buffer *buf = Client::buffer(bufferId);
- if(!buf) {
- qWarning() << "BufferWidget::setBuffer(BufferId): Can't show unknown Buffer:" << bufferId;
- return;
- }
chatWidget = new ChatWidget(this);
chatWidget->init(bufferId);
QList<ChatLine *> lines;
ui.stackedWidget->addWidget(chatWidget);
chatWidget->setFocusProxy(this);
}
+ _currentBuffer = bufferId;
ui.stackedWidget->setCurrentWidget(chatWidget);
+ buf->setVisible(true);
setFocus();
}