diff --git a/src/chatlog/chatlog.cpp b/src/chatlog/chatlog.cpp
index 9d0cc9075..511899265 100644
--- a/src/chatlog/chatlog.cpp
+++ b/src/chatlog/chatlog.cpp
@@ -610,6 +610,11 @@ void ChatLog::selectAll()
updateMultiSelectionRect();
}
+void ChatLog::forceRelayout()
+{
+ startResizeWorker();
+}
+
void ChatLog::checkVisibility()
{
if(lines.empty())
diff --git a/src/chatlog/chatlog.h b/src/chatlog/chatlog.h
index b972e25aa..ec7cf5ecd 100644
--- a/src/chatlog/chatlog.h
+++ b/src/chatlog/chatlog.h
@@ -49,6 +49,7 @@ public:
void setTypingNotificationVisible(bool visible);
void scrollToLine(ChatLine::Ptr line);
void selectAll();
+ void forceRelayout();
QString getSelectedText() const;
@@ -138,7 +139,7 @@ private:
ChatLine::Ptr workerAnchorLine;
// layout
- QMargins margins = QMargins(10.0,10.0,10.0,10.0);
+ QMargins margins = QMargins(10,10,10,10);
qreal lineSpacing = 5.0f;
};
diff --git a/src/chatlog/chatmessage.cpp b/src/chatlog/chatmessage.cpp
index 02c065309..581a8069a 100644
--- a/src/chatlog/chatmessage.cpp
+++ b/src/chatlog/chatmessage.cpp
@@ -35,11 +35,14 @@ ChatMessage::ChatMessage()
}
-ChatMessage::Ptr ChatMessage::createChatMessage(const QString &sender, const QString &rawMessage, bool isAction, bool alert, bool isMe, const QDateTime &date)
+ChatMessage::Ptr ChatMessage::createChatMessage(const QString &sender, const QString &rawMessage, MessageType type, bool isMe, const QDateTime &date)
{
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage);
QString text = toHtmlChars(rawMessage);
+ QString senderText = sender;
+
+ const QColor actionColor = QColor("#1818FF"); // has to match the color in innerStyle.css (div.action)
//smileys
if(Settings::getInstance().getUseEmoticons())
@@ -48,18 +51,23 @@ ChatMessage::Ptr ChatMessage::createChatMessage(const QString &sender, const QSt
//quotes (green text)
text = detectQuotes(detectAnchors(text));
- if(isAction)
+ switch(type)
{
- text = QString("
%1 %2
").arg(sender, text);
+ case ACTION:
+ senderText = "*";
+ text = wrapDiv(QString("%1 %2").arg(sender, text), "action");
msg->setAsAction();
- }
- else if(alert)
- {
- text = "" + text + "
";
+ break;
+ case ALERT:
+ text = wrapDiv(text, "alert");
+ break;
+ default:
+ text = wrapDiv(text, "msg");
}
- msg->addColumn(new Text(isAction ? "*
" : sender, isMe ? Style::getFont(Style::BigBold) : Style::getFont(Style::Big), isAction ? false : true, sender), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
- msg->addColumn(new Text(text, Style::getFont(Style::Big), false, isAction ? QString("*%1 %2*").arg(sender, rawMessage) : rawMessage), ColumnFormat(1.0, ColumnFormat::VariableSize));
+ // Note: Eliding cannot be enabled for RichText items. (QTBUG-17207)
+ msg->addColumn(new Text(senderText, isMe ? Style::getFont(Style::BigBold) : Style::getFont(Style::Big), true, sender, type == ACTION ? actionColor : Qt::black), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
+ msg->addColumn(new Text(text, Style::getFont(Style::Big), false, type == ACTION ? QString("*%1 %2*").arg(sender, rawMessage) : rawMessage), ColumnFormat(1.0, ColumnFormat::VariableSize));
msg->addColumn(new Spinner(":/ui/chatArea/spinner.svg", QSize(16, 16), 360.0/1.6), ColumnFormat(TIME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
if(!date.isNull())
@@ -219,3 +227,8 @@ QString ChatMessage::toHtmlChars(const QString &str)
return res;
}
+
+QString ChatMessage::wrapDiv(const QString &str, const QString &div)
+{
+ return QString("%2
").arg(div, str);
+}
diff --git a/src/chatlog/chatmessage.h b/src/chatlog/chatmessage.h
index 0cab27107..c70cba82c 100644
--- a/src/chatlog/chatmessage.h
+++ b/src/chatlog/chatmessage.h
@@ -35,9 +35,16 @@ public:
TYPING,
};
+ enum MessageType
+ {
+ NORMAL,
+ ACTION,
+ ALERT,
+ };
+
ChatMessage();
- static ChatMessage::Ptr createChatMessage(const QString& sender, const QString& rawMessage, bool isAction, bool alert, bool isMe, const QDateTime& date = QDateTime());
+ static ChatMessage::Ptr createChatMessage(const QString& sender, const QString& rawMessage, MessageType type, bool isMe, const QDateTime& date = QDateTime());
static ChatMessage::Ptr createChatInfoMessage(const QString& rawMessage, SystemMessageType type, const QDateTime& date);
static ChatMessage::Ptr createFileTransferMessage(const QString& sender, ToxFile file, bool isMe, const QDateTime& date);
static ChatMessage::Ptr createTypingNotification();
@@ -54,6 +61,7 @@ protected:
static QString detectAnchors(const QString& str);
static QString detectQuotes(const QString& str);
static QString toHtmlChars(const QString& str);
+ static QString wrapDiv(const QString& str, const QString& div);
private:
bool action = false;
diff --git a/src/chatlog/content/filetransferwidget.cpp b/src/chatlog/content/filetransferwidget.cpp
index b004854a5..40794e4d0 100644
--- a/src/chatlog/content/filetransferwidget.cpp
+++ b/src/chatlog/content/filetransferwidget.cpp
@@ -306,6 +306,8 @@ void FileTransferWidget::onFileTransferPaused(ToxFile file)
void FileTransferWidget::onFileTransferFinished(ToxFile file)
{
+ static const QStringList openExtensions = { "png", "jpeg", "jpg", "gif", "zip", "rar" };
+
if(fileInfo != file)
return;
@@ -316,14 +318,10 @@ void FileTransferWidget::onFileTransferFinished(ToxFile file)
setupButtons();
hideWidgets();
- static const QStringList openExtensions = { "png", "jpeg", "jpg", "gif", "zip", "rar" };
-
- if(openExtensions.contains(QFileInfo(file.fileName).suffix()))
- {
- ui->topButton->setIcon(QIcon(":/ui/fileTransferInstance/yes.svg"));
- ui->topButton->setObjectName("ok");
- ui->topButton->show();
- }
+ ui->topButton->setIcon(QIcon(":/ui/fileTransferInstance/yes.svg"));
+ ui->topButton->setObjectName("ok");
+ ui->topButton->setEnabled(openExtensions.contains(QFileInfo(file.fileName).suffix()));
+ ui->topButton->show();
// preview
if(fileInfo.direction == ToxFile::RECEIVING)
diff --git a/src/chatlog/content/text.cpp b/src/chatlog/content/text.cpp
index a2009c646..90c287ac5 100644
--- a/src/chatlog/content/text.cpp
+++ b/src/chatlog/content/text.cpp
@@ -28,10 +28,11 @@
#include
#include
-Text::Text(const QString& txt, QFont font, bool enableElide, const QString &rwText)
+Text::Text(const QString& txt, QFont font, bool enableElide, const QString &rwText, const QColor c)
: rawText(rwText)
, elide(enableElide)
, defFont(font)
+ , color(c)
{
setText(txt);
setAcceptedMouseButtons(Qt::LeftButton);
@@ -52,9 +53,6 @@ void Text::setText(const QString& txt)
void Text::setWidth(qreal w)
{
- if(w == width)
- return;
-
width = w;
dirty = true;
@@ -171,6 +169,7 @@ void Text::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWid
sel.format.setBackground(selectionColor.lighter(selectionHasFocus ? 100 : 160));
sel.format.setForeground(selectionHasFocus ? Qt::white : Qt::black);
ctx.selections.append(sel);
+ ctx.palette.setColor(QPalette::Text, color);
// draw text
doc->documentLayout()->draw(painter, ctx);
diff --git a/src/chatlog/content/text.h b/src/chatlog/content/text.h
index 4fe23ad92..292d2396d 100644
--- a/src/chatlog/content/text.h
+++ b/src/chatlog/content/text.h
@@ -28,7 +28,7 @@ class Text : public ChatLineContent
public:
// txt: may contain html code
// rawText: does not contain html code
- Text(const QString& txt = "", QFont font = QFont(), bool enableElide = false, const QString& rawText = QString());
+ Text(const QString& txt = "", QFont font = QFont(), bool enableElide = false, const QString& rawText = QString(), const QColor c = Qt::black);
virtual ~Text();
void setText(const QString& txt);
@@ -83,6 +83,7 @@ private:
qreal ascent = 0.0;
qreal width = 0.0;
QFont defFont;
+ QColor color;
};
diff --git a/src/widget/form/chatform.cpp b/src/widget/form/chatform.cpp
index 98183ecce..98e2e5008 100644
--- a/src/widget/form/chatform.cpp
+++ b/src/widget/form/chatform.cpp
@@ -785,7 +785,7 @@ void ChatForm::loadHistory(QDateTime since, bool processUndelivered)
if (msgDate > lastDate)
{
lastDate = msgDate;
- historyMessages.append(ChatMessage::createChatInfoMessage(msgDate.toString(), ChatMessage::INFO, QDateTime::currentDateTime()));
+ historyMessages.append(ChatMessage::createChatInfoMessage(msgDate.toString(), ChatMessage::INFO, QDateTime()));
}
// Show each messages
@@ -795,7 +795,7 @@ void ChatForm::loadHistory(QDateTime since, bool processUndelivered)
ChatMessage::Ptr msg = ChatMessage::createChatMessage(authorStr,
isAction ? it.message.right(it.message.length() - 4) : it.message,
- isAction, false,
+ isAction ? ChatMessage::ACTION : ChatMessage::NORMAL,
authorId.isMine(),
QDateTime());
diff --git a/src/widget/form/genericchatform.cpp b/src/widget/form/genericchatform.cpp
index 8c2fd3fb0..39108d51d 100644
--- a/src/widget/form/genericchatform.cpp
+++ b/src/widget/form/genericchatform.cpp
@@ -65,6 +65,8 @@ GenericChatForm::GenericChatForm(QWidget *parent)
chatWidget = new ChatLog(this);
chatWidget->setBusyNotification(ChatMessage::createBusyNotification());
+ connect(&Settings::getInstance(), &Settings::emojiFontChanged, this, [this]() { chatWidget->forceRelayout(); });
+
msgEdit = new ChatTextEdit();
sendButton = new QPushButton();
@@ -211,12 +213,12 @@ ChatMessage::Ptr GenericChatForm::addMessage(const ToxID& author, const QString
ChatMessage::Ptr msg;
if(isAction)
{
- msg = ChatMessage::createChatMessage(authorStr, message, true, false, false);
+ msg = ChatMessage::createChatMessage(authorStr, message, ChatMessage::ACTION, false);
previousId.clear();
}
else
{
- msg = ChatMessage::createChatMessage(authorStr, message, false, false, author.isMine());
+ msg = ChatMessage::createChatMessage(authorStr, message, ChatMessage::NORMAL, author.isMine());
if(author == previousId)
msg->hideSender();
@@ -239,7 +241,7 @@ ChatMessage::Ptr GenericChatForm::addSelfMessage(const QString &message, bool is
void GenericChatForm::addAlertMessage(const ToxID &author, QString message, QDateTime datetime)
{
QString authorStr = resolveToxID(author);
- ChatMessage::Ptr msg = ChatMessage::createChatMessage(authorStr, message, false, true, author.isMine(), datetime);
+ ChatMessage::Ptr msg = ChatMessage::createChatMessage(authorStr, message, ChatMessage::ALERT, author.isMine(), datetime);
insertChatMessage(msg);
if(author == previousId)
diff --git a/ui/chatArea/innerStyle.css b/ui/chatArea/innerStyle.css
index 5639d1af4..a1bbb3a13 100644
--- a/ui/chatArea/innerStyle.css
+++ b/ui/chatArea/innerStyle.css
@@ -1,4 +1,4 @@
-div.message {
+div.msg {
color: @black;
font: @big;
}