From 1fdc98873bbb29a041ec5bf591e6899a37ea3f24 Mon Sep 17 00:00:00 2001 From: apprb Date: Tue, 7 Oct 2014 16:12:05 +0900 Subject: [PATCH 1/2] reimplemented insert chat line function: every line in own table --- widget/chatareawidget.cpp | 59 ++++++++++++++++++++++++--------------- widget/chatareawidget.h | 3 +- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/widget/chatareawidget.cpp b/widget/chatareawidget.cpp index d3d326b63..c2d4e1a81 100644 --- a/widget/chatareawidget.cpp +++ b/widget/chatareawidget.cpp @@ -26,6 +26,7 @@ ChatAreaWidget::ChatAreaWidget(QWidget *parent) : QTextBrowser(parent) , nameWidth(75) + , tableFrmt(nullptr) { setReadOnly(true); viewport()->setCursor(Qt::ArrowCursor); @@ -37,15 +38,6 @@ ChatAreaWidget::ChatAreaWidget(QWidget *parent) setAcceptRichText(false); setFrameStyle(QFrame::NoFrame); - QTextTableFormat tableFormat; - tableFormat.setCellSpacing(5); - tableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_None); - tableFormat.setColumnWidthConstraints({QTextLength(QTextLength::FixedLength,nameWidth), - QTextLength(QTextLength::PercentageLength,100), - QTextLength(QTextLength::VariableLength,0)}); - - chatTextTable = textCursor().insertTable(1,3,tableFormat); - nameFormat.setAlignment(Qt::AlignRight); nameFormat.setNonBreakableLines(true); dateFormat.setAlignment(Qt::AlignLeft); @@ -60,6 +52,9 @@ ChatAreaWidget::~ChatAreaWidget() for (ChatAction* action : messages) delete action; messages.clear(); + + if (tableFrmt) + delete tableFrmt; } void ChatAreaWidget::mouseReleaseEvent(QMouseEvent * event) @@ -108,16 +103,15 @@ void ChatAreaWidget::insertMessage(ChatAction *msgAction) checkSlider(); - int row = chatTextTable->rows() - 1; - QTextCursor cur = chatTextTable->cellAt(row,1).firstCursorPosition(); + QTextTable *chatTextTable = getMsgTable(); + QTextCursor cur = chatTextTable->cellAt(0, 1).firstCursorPosition(); cur.clearSelection(); cur.setKeepPositionOnInsert(true); - chatTextTable->appendRows(1); - chatTextTable->cellAt(row,0).firstCursorPosition().setBlockFormat(nameFormat); - chatTextTable->cellAt(row,0).firstCursorPosition().insertHtml(msgAction->getName()); - chatTextTable->cellAt(row,1).firstCursorPosition().insertHtml(msgAction->getMessage()); - chatTextTable->cellAt(row,2).firstCursorPosition().setBlockFormat(dateFormat); - chatTextTable->cellAt(row,2).firstCursorPosition().insertHtml(msgAction->getDate()); + chatTextTable->cellAt(0, 0).firstCursorPosition().setBlockFormat(nameFormat); + chatTextTable->cellAt(0, 0).firstCursorPosition().insertHtml(msgAction->getName()); + chatTextTable->cellAt(0, 2).firstCursorPosition().insertHtml(msgAction->getMessage()); + chatTextTable->cellAt(0, 4).firstCursorPosition().setBlockFormat(dateFormat); + chatTextTable->cellAt(0, 4).firstCursorPosition().insertHtml(msgAction->getDate()); msgAction->setup(cur, this); @@ -137,13 +131,32 @@ void ChatAreaWidget::checkSlider() lockSliderToBottom = scroll && scroll->value() == scroll->maximum(); } +QTextTable *ChatAreaWidget::getMsgTable() +{ + if (tableFrmt == nullptr) + { + tableFrmt = new QTextTableFormat(); + tableFrmt->setCellSpacing(2); + tableFrmt->setBorderStyle(QTextFrameFormat::BorderStyle_None); + tableFrmt->setColumnWidthConstraints({QTextLength(QTextLength::FixedLength,nameWidth), + QTextLength(QTextLength::FixedLength,2), + QTextLength(QTextLength::PercentageLength,100), + QTextLength(QTextLength::FixedLength,2), + QTextLength(QTextLength::VariableLength,0)}); + } + + QTextTable *chatTextTable = textCursor().insertTable(1, 5, *tableFrmt); + + return chatTextTable; +} + void ChatAreaWidget::setNameColWidth(int w) { - nameWidth = w; + if (tableFrmt != nullptr) + { + delete tableFrmt; + tableFrmt = nullptr; + } - QTextTableFormat tableFormat = chatTextTable->format(); - tableFormat.setColumnWidthConstraints({QTextLength(QTextLength::FixedLength, 100), - QTextLength(QTextLength::PercentageLength, 100), - QTextLength(QTextLength::FixedLength, 40)}); - chatTextTable->setFormat(tableFormat); + nameWidth = w; } diff --git a/widget/chatareawidget.h b/widget/chatareawidget.h index 05d41de4e..d1e2dbe8f 100644 --- a/widget/chatareawidget.h +++ b/widget/chatareawidget.h @@ -46,12 +46,13 @@ private slots: private: void checkSlider(); + QTextTable* getMsgTable(); + QTextTableFormat* tableFrmt; QList messages; bool lockSliderToBottom; int sliderPosition; int nameWidth; - QTextTable *chatTextTable; QTextBlockFormat nameFormat, dateFormat; }; From 57c7734c48f080a25c2b40ec2c477e3660bbc16a Mon Sep 17 00:00:00 2001 From: apprb Date: Tue, 7 Oct 2014 19:20:53 +0900 Subject: [PATCH 2/2] bug in file transfer widget displaying fix --- widget/chatareawidget.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/widget/chatareawidget.cpp b/widget/chatareawidget.cpp index c2d4e1a81..2ce9fc267 100644 --- a/widget/chatareawidget.cpp +++ b/widget/chatareawidget.cpp @@ -25,8 +25,8 @@ ChatAreaWidget::ChatAreaWidget(QWidget *parent) : QTextBrowser(parent) - , nameWidth(75) , tableFrmt(nullptr) + , nameWidth(75) { setReadOnly(true); viewport()->setCursor(Qt::ArrowCursor); @@ -104,7 +104,7 @@ void ChatAreaWidget::insertMessage(ChatAction *msgAction) checkSlider(); QTextTable *chatTextTable = getMsgTable(); - QTextCursor cur = chatTextTable->cellAt(0, 1).firstCursorPosition(); + QTextCursor cur = chatTextTable->cellAt(0, 2).firstCursorPosition(); cur.clearSelection(); cur.setKeepPositionOnInsert(true); chatTextTable->cellAt(0, 0).firstCursorPosition().setBlockFormat(nameFormat); @@ -145,7 +145,9 @@ QTextTable *ChatAreaWidget::getMsgTable() QTextLength(QTextLength::VariableLength,0)}); } - QTextTable *chatTextTable = textCursor().insertTable(1, 5, *tableFrmt); + QTextCursor tc = textCursor(); + tc.movePosition(QTextCursor::End); + QTextTable *chatTextTable = tc.insertTable(1, 5, *tableFrmt); return chatTextTable; }