mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
refactoring & dark-theme awareness
This commit is contained in:
parent
74ea0773ee
commit
205f950073
|
@ -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("<div class=action>%1 %2</div>").arg(sender, text);
|
||||
case ACTION:
|
||||
senderText = "*";
|
||||
text = wrapDiv(QString("%1 %2").arg(sender, text), "action");
|
||||
msg->setAsAction();
|
||||
}
|
||||
else if(alert)
|
||||
{
|
||||
text = "<div class=alert>" + text + "</div>";
|
||||
break;
|
||||
case ALERT:
|
||||
text = wrapDiv(text, "alert");
|
||||
break;
|
||||
default:
|
||||
text = wrapDiv(text, "msg");
|
||||
}
|
||||
|
||||
msg->addColumn(new Text(isAction ? "<div class=action>*</div>" : 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("<div class=%1>%2</div>").arg(div, str);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -786,7 +786,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());
|
||||
|
||||
|
|
|
@ -211,12 +211,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 +239,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)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
div.message {
|
||||
div.msg {
|
||||
color: @black;
|
||||
font: @big;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user