From 4d24bd53f26133a0fc4a7ffb68031eb92bca1ede Mon Sep 17 00:00:00 2001 From: krepa098 Date: Sat, 27 Sep 2014 13:23:00 +0200 Subject: [PATCH] fix #308 --- widget/chatareawidget.cpp | 2 +- widget/tool/chatactions/chataction.h | 3 ++- .../tool/chatactions/filetransferaction.cpp | 21 +++++++++++++++---- widget/tool/chatactions/filetransferaction.h | 3 ++- widget/tool/chatactions/messageaction.cpp | 2 +- widget/tool/chatactions/messageaction.h | 2 +- .../tool/chatactions/systemmessageaction.cpp | 2 +- widget/tool/chatactions/systemmessageaction.h | 2 +- 8 files changed, 26 insertions(+), 11 deletions(-) diff --git a/widget/chatareawidget.cpp b/widget/chatareawidget.cpp index e1e7e3447..765d9e96c 100644 --- a/widget/chatareawidget.cpp +++ b/widget/chatareawidget.cpp @@ -118,7 +118,7 @@ void ChatAreaWidget::insertMessage(ChatAction *msgAction) chatTextTable->cellAt(row,1).firstCursorPosition().insertHtml(msgAction->getMessage()); chatTextTable->cellAt(row,2).firstCursorPosition().insertText(msgAction->getDate()); - msgAction->setTextCursor(cur); + msgAction->setup(cur, this); messages.append(msgAction); } diff --git a/widget/tool/chatactions/chataction.h b/widget/tool/chatactions/chataction.h index 16c9f179b..5c3eed650 100644 --- a/widget/tool/chatactions/chataction.h +++ b/widget/tool/chatactions/chataction.h @@ -21,13 +21,14 @@ #include class FileTransferInstance; +class QTextEdit; class ChatAction : public QObject { public: ChatAction(const bool &me, const QString &author, const QString &date) : isMe(me), name(author), date(date) {;} virtual ~ChatAction(){;} - virtual void setTextCursor(QTextCursor cursor){(void)cursor;} ///< Call once, and then you MUST let the object update itself + virtual void setup(QTextCursor cursor, QTextEdit* textEdit) = 0; ///< Call once, and then you MUST let the object update itself virtual QString getName(); virtual QString getMessage() = 0; diff --git a/widget/tool/chatactions/filetransferaction.cpp b/widget/tool/chatactions/filetransferaction.cpp index 12e2a1ac6..59f2c9250 100644 --- a/widget/tool/chatactions/filetransferaction.cpp +++ b/widget/tool/chatactions/filetransferaction.cpp @@ -17,8 +17,12 @@ #include "filetransferaction.h" #include "filetransferinstance.h" -FileTransferAction::FileTransferAction(FileTransferInstance *widget, const QString &author, const QString &date, const bool &me) : - ChatAction(me, author, date) +#include +#include + +FileTransferAction::FileTransferAction(FileTransferInstance *widget, const QString &author, const QString &date, const bool &me) + : ChatAction(me, author, date) + , edit(nullptr) { w = widget; @@ -39,20 +43,26 @@ QString FileTransferAction::getMessage() return widgetHtml; } -void FileTransferAction::setTextCursor(QTextCursor cursor) +void FileTransferAction::setup(QTextCursor cursor, QTextEdit *textEdit) { cur = cursor; cur.setKeepPositionOnInsert(true); int end=cur.selectionEnd(); cur.setPosition(cur.position()); cur.setPosition(end, QTextCursor::KeepAnchor); + + edit = textEdit; } void FileTransferAction::updateHtml() { - if (cur.isNull()) + if (cur.isNull() || !edit) return; + // save old slider value + int vSliderVal = edit->verticalScrollBar()->value(); + + // update content int pos = cur.selectionStart(); cur.removeSelectedText(); cur.setKeepPositionOnInsert(false); @@ -62,6 +72,9 @@ void FileTransferAction::updateHtml() cur.setPosition(pos); cur.setPosition(end, QTextCursor::KeepAnchor); + // restore old slider value + edit->verticalScrollBar()->setValue(vSliderVal); + // Free our ressources if we'll never need to update again if (w->getState() == FileTransferInstance::TransfState::tsCanceled || w->getState() == FileTransferInstance::TransfState::tsFinished) diff --git a/widget/tool/chatactions/filetransferaction.h b/widget/tool/chatactions/filetransferaction.h index ee6d0e11c..31982cd45 100644 --- a/widget/tool/chatactions/filetransferaction.h +++ b/widget/tool/chatactions/filetransferaction.h @@ -26,7 +26,7 @@ public: FileTransferAction(FileTransferInstance *widget, const QString &author, const QString &date, const bool &me); virtual ~FileTransferAction(); virtual QString getMessage(); - virtual void setTextCursor(QTextCursor cursor) final; + virtual void setup(QTextCursor cursor, QTextEdit* textEdit) override; private slots: void updateHtml(); @@ -34,6 +34,7 @@ private slots: private: FileTransferInstance *w; QTextCursor cur; + QTextEdit* edit; }; #endif // FILETRANSFERACTION_H diff --git a/widget/tool/chatactions/messageaction.cpp b/widget/tool/chatactions/messageaction.cpp index fa396468c..84ce86194 100644 --- a/widget/tool/chatactions/messageaction.cpp +++ b/widget/tool/chatactions/messageaction.cpp @@ -23,7 +23,7 @@ MessageAction::MessageAction(const QString &author, const QString &message, cons { } -void MessageAction::setTextCursor(QTextCursor cursor) +void MessageAction::setup(QTextCursor cursor, QTextEdit *) { // When this function is called, we're supposed to only update ourselve when needed // Nobody should ask us to do anything with our content, we're on our own diff --git a/widget/tool/chatactions/messageaction.h b/widget/tool/chatactions/messageaction.h index baa68898a..65f8e6465 100644 --- a/widget/tool/chatactions/messageaction.h +++ b/widget/tool/chatactions/messageaction.h @@ -25,7 +25,7 @@ public: MessageAction(const QString &author, const QString &message, const QString &date, const bool &me); virtual ~MessageAction(){;} virtual QString getMessage(); - virtual void setTextCursor(QTextCursor cursor) final; + virtual void setup(QTextCursor cursor, QTextEdit*) override; private: QString message; diff --git a/widget/tool/chatactions/systemmessageaction.cpp b/widget/tool/chatactions/systemmessageaction.cpp index 32457c6ed..a50f55e47 100644 --- a/widget/tool/chatactions/systemmessageaction.cpp +++ b/widget/tool/chatactions/systemmessageaction.cpp @@ -28,7 +28,7 @@ QString SystemMessageAction::getMessage() return QString("
" + message + "
"); } -void SystemMessageAction::setTextCursor(QTextCursor cursor) +void SystemMessageAction::setup(QTextCursor cursor, QTextEdit *) { // When this function is called, we're supposed to only update ourselve when needed // Nobody should ask us to do anything with our content, we're on our own diff --git a/widget/tool/chatactions/systemmessageaction.h b/widget/tool/chatactions/systemmessageaction.h index b628f7e04..6767a3f73 100644 --- a/widget/tool/chatactions/systemmessageaction.h +++ b/widget/tool/chatactions/systemmessageaction.h @@ -24,7 +24,7 @@ class SystemMessageAction : public ChatAction public: SystemMessageAction(const QString &message, const QString& type, const QString &date); virtual ~SystemMessageAction(){;} - virtual void setTextCursor(QTextCursor cursor) final; + virtual void setup(QTextCursor cursor, QTextEdit*) override; virtual QString getName() {return QString();} virtual QString getMessage();