summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/QtChatView.cpp')
-rw-r--r--Swift/QtUI/QtChatView.cpp28
1 files changed, 22 insertions, 6 deletions
diff --git a/Swift/QtUI/QtChatView.cpp b/Swift/QtUI/QtChatView.cpp
index 0af1262..3ad957c 100644
--- a/Swift/QtUI/QtChatView.cpp
+++ b/Swift/QtUI/QtChatView.cpp
@@ -93,11 +93,8 @@ void QtChatView::addMessageBottom(boost::shared_ptr<ChatSnippet> snippet) {
/* If this asserts, the previous queuing code was necessary and should be reinstated */
assert(false);
}
-
- if (firstElement_.isNull()) {
- firstElement_ = lastElement_;
- }
}
+
void QtChatView::addMessageTop(boost::shared_ptr<ChatSnippet> snippet) {
// save scrollbar maximum value
if (!topMessageAdded_) {
@@ -105,9 +102,22 @@ void QtChatView::addMessageTop(boost::shared_ptr<ChatSnippet> snippet) {
}
topMessageAdded_ = true;
- QWebElement newElement = snippetToDOM(snippet);
+ QWebElement continuationElement = firstElement_.findFirst("#insert");
+
+ bool insert = snippet->getAppendToPrevious();
+ bool fallback = continuationElement.isNull();
+
+ boost::shared_ptr<ChatSnippet> newSnippet = (insert && fallback) ? snippet->getContinuationFallbackSnippet() : snippet;
+ QWebElement newElement = snippetToDOM(newSnippet);
+
+ if (insert && !fallback) {
+ Q_ASSERT(!continuationElement.isNull());
+ continuationElement.replace(newElement);
+ } else {
+ continuationElement.removeFromDocument();
+ topInsertPoint_.appendOutside(newElement);
+ }
- firstElement_.prependOutside(newElement);
firstElement_ = newElement;
if (lastElement_.isNull()) {
@@ -345,6 +355,8 @@ void QtChatView::resetView() {
QWebElement chatElement = document_.findFirst("#Chat");
newInsertPoint_ = chatElement.clone();
newInsertPoint_.setOuterXml("<div id='swift_insert'/>");
+ topInsertPoint_ = newInsertPoint_.clone();
+ chatElement.appendInside(topInsertPoint_);
chatElement.appendInside(newInsertPoint_);
Q_ASSERT(!newInsertPoint_.isNull());
@@ -444,4 +456,8 @@ int QtChatView::getSnippetPositionByDate(const QDate& date) {
return message.geometry().top();
}
+void QtChatView::resetTopInsertPoint() {
+ firstElement_ = QWebElement();
+}
+
}