X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fabstractbuffercontainer.cpp;h=8b89e8c4ea8c2c058222f473693037d2b67d4126;hp=78ead2738f8ec9a209974883200e2d76c2eca497;hb=ed2415135359b4f8a3f75f2634e028500c08c1fe;hpb=2684aa5295d12e4f7c66b3011fc8b1819f3d1cbb diff --git a/src/uisupport/abstractbuffercontainer.cpp b/src/uisupport/abstractbuffercontainer.cpp index 78ead273..8b89e8c4 100644 --- a/src/uisupport/abstractbuffercontainer.cpp +++ b/src/uisupport/abstractbuffercontainer.cpp @@ -19,20 +19,18 @@ ***************************************************************************/ #include "abstractbuffercontainer.h" -#include "buffer.h" #include "client.h" #include "networkmodel.h" -AbstractBufferContainer::AbstractBufferContainer(QWidget *parent) : AbstractItemView(parent), _currentBuffer(0) +AbstractBufferContainer::AbstractBufferContainer(QWidget *parent) + : AbstractItemView(parent), + _currentBuffer(0) { - } AbstractBufferContainer::~AbstractBufferContainer() { - } - void AbstractBufferContainer::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) { Q_ASSERT(model()); if(!parent.isValid()) { @@ -42,13 +40,10 @@ void AbstractBufferContainer::rowsAboutToBeRemoved(const QModelIndex &parent, in if(model()->rowCount(parent) != end - start + 1) return; - AbstractChatView *chatView; - QHash::iterator iter = _chatViews.begin(); - while(iter != _chatViews.end()) { - chatView = *iter; - iter = _chatViews.erase(iter); - removeChatView(chatView); + foreach(BufferId id, _chatViews.keys()) { + removeChatView(id); } + _chatViews.clear(); } else { // check if there are explicitly buffers removed for(int i = start; i <= end; i++) { @@ -66,71 +61,37 @@ void AbstractBufferContainer::removeBuffer(BufferId bufferId) { if(!_chatViews.contains(bufferId)) return; - if(Client::buffer(bufferId)) Client::buffer(bufferId)->setVisible(false); - AbstractChatView *chatView = _chatViews.take(bufferId); - removeChatView(chatView); + removeChatView(bufferId); + _chatViews.take(bufferId); } void AbstractBufferContainer::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { BufferId newBufferId = current.data(NetworkModel::BufferIdRole).value(); BufferId oldBufferId = previous.data(NetworkModel::BufferIdRole).value(); - if(newBufferId != oldBufferId) + if(newBufferId != oldBufferId) { setCurrentBuffer(newBufferId); + emit currentChanged(newBufferId); + } } void AbstractBufferContainer::setCurrentBuffer(BufferId bufferId) { + BufferId prevBufferId = currentBuffer(); + if(prevBufferId.isValid() && _chatViews.contains(prevBufferId)) { + Client::setBufferLastSeenMsg(prevBufferId, _chatViews[prevBufferId]->lastMsgId()); + } + if(!bufferId.isValid()) { + _currentBuffer = 0; showChatView(0); return; } - AbstractChatView *chatView = 0; - Buffer *buf = Client::buffer(bufferId); - if(!buf) { - qWarning() << "AbstractBufferContainer::setBuffer(BufferId): Can't show unknown Buffer:" << bufferId; - return; - } - Buffer *prevBuffer = Client::buffer(currentBuffer()); - if(prevBuffer) prevBuffer->setVisible(false); - if(_chatViews.contains(bufferId)) { - chatView = _chatViews[bufferId]; - } else { - chatView = createChatView(bufferId); - chatView->setContents(buf->contents()); - connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), this, SLOT(appendMsg(AbstractUiMsg *))); - connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), this, SLOT(prependMsg(AbstractUiMsg *))); - _chatViews[bufferId] = chatView; - } + if(!_chatViews.contains(bufferId)) + _chatViews[bufferId] = createChatView(bufferId); + _currentBuffer = bufferId; - showChatView(chatView); - buf->setVisible(true); + showChatView(bufferId); + Client::networkModel()->setBufferActivity(bufferId, BufferInfo::NoActivity); + // Client::setBufferLastSeenMsg(bufferId, _chatViews[bufferId]->lastMsgId()); setFocus(); } - -void AbstractBufferContainer::appendMsg(AbstractUiMsg *msg) { - Buffer *buf = qobject_cast(sender()); - if(!buf) { - qWarning() << "AbstractBufferContainer::appendMsg(): Invalid slot caller!"; - return; - } - BufferId id = buf->bufferInfo().bufferId(); - if(!_chatViews.contains(id)) { - qWarning() << "AbstractBufferContainer::appendMsg(): Received message for unknown buffer!"; - return; - } - _chatViews[id]->appendMsg(msg); -} - -void AbstractBufferContainer::prependMsg(AbstractUiMsg *msg) { - Buffer *buf = qobject_cast(sender()); - if(!buf) { - qWarning() << "AbstractBufferContainer:prependMsg(): Invalid slot caller!"; - return; - } - BufferId id = buf->bufferInfo().bufferId(); - if(!_chatViews.contains(id)) { - qWarning() << "AbstractBufferContainer::prependMsg(): Received message for unknown buffer!"; - return; - } - _chatViews[id]->prependMsg(msg); -}