mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
refactoring
This commit is contained in:
parent
a74b9ce11c
commit
b09805f9bf
|
@ -24,8 +24,7 @@
|
||||||
|
|
||||||
#define CELL_SPACING 15
|
#define CELL_SPACING 15
|
||||||
|
|
||||||
ChatLine::ChatLine(QGraphicsScene* grScene)
|
ChatLine::ChatLine()
|
||||||
: scene(grScene)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,7 +34,7 @@ ChatLine::~ChatLine()
|
||||||
for(ChatLineContent* c : content)
|
for(ChatLineContent* c : content)
|
||||||
{
|
{
|
||||||
if(c->scene())
|
if(c->scene())
|
||||||
scene->removeItem(c);
|
c->scene()->removeItem(c);
|
||||||
|
|
||||||
delete c;
|
delete c;
|
||||||
}
|
}
|
||||||
|
@ -78,10 +77,19 @@ void ChatLine::removeFromScene()
|
||||||
for(ChatLineContent* c : content)
|
for(ChatLineContent* c : content)
|
||||||
{
|
{
|
||||||
if(c->scene())
|
if(c->scene())
|
||||||
scene->removeItem(c);
|
c->scene()->removeItem(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChatLine::addToScene(QGraphicsScene *scene)
|
||||||
|
{
|
||||||
|
if(!scene)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for(ChatLineContent* c : content)
|
||||||
|
scene->addItem(c);
|
||||||
|
}
|
||||||
|
|
||||||
void ChatLine::selectionCleared()
|
void ChatLine::selectionCleared()
|
||||||
{
|
{
|
||||||
for(ChatLineContent* c : content)
|
for(ChatLineContent* c : content)
|
||||||
|
@ -133,7 +141,6 @@ void ChatLine::addColumn(ChatLineContent* item, ColumnFormat fmt)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
item->setChatLine(this);
|
item->setChatLine(this);
|
||||||
scene->addItem(item);
|
|
||||||
|
|
||||||
format << fmt;
|
format << fmt;
|
||||||
content << item;
|
content << item;
|
||||||
|
@ -143,12 +150,14 @@ void ChatLine::replaceContent(int col, ChatLineContent *lineContent)
|
||||||
{
|
{
|
||||||
if(col >= 0 && col < content.size() && lineContent)
|
if(col >= 0 && col < content.size() && lineContent)
|
||||||
{
|
{
|
||||||
scene->removeItem(content[col]);
|
QGraphicsScene* scene = content[col]->scene();
|
||||||
delete content[col];
|
delete content[col];
|
||||||
|
|
||||||
content[col] = lineContent;
|
content[col] = lineContent;
|
||||||
lineContent->setIndex(rowIndex, col);
|
lineContent->setIndex(rowIndex, col);
|
||||||
scene->addItem(content[col]);
|
|
||||||
|
if(scene)
|
||||||
|
scene->addItem(content[col]);
|
||||||
|
|
||||||
layout(width, pos);
|
layout(width, pos);
|
||||||
content[col]->visibilityChanged(isVisible);
|
content[col]->visibilityChanged(isVisible);
|
||||||
|
|
|
@ -57,12 +57,11 @@ class ChatLine
|
||||||
public:
|
public:
|
||||||
using Ptr = std::shared_ptr<ChatLine>;
|
using Ptr = std::shared_ptr<ChatLine>;
|
||||||
|
|
||||||
explicit ChatLine(QGraphicsScene* scene);
|
explicit ChatLine();
|
||||||
virtual ~ChatLine();
|
virtual ~ChatLine();
|
||||||
|
|
||||||
virtual QRectF boundingSceneRect() const;
|
virtual QRectF boundingSceneRect() const;
|
||||||
|
|
||||||
void addColumn(ChatLineContent* item, ColumnFormat fmt);
|
|
||||||
void replaceContent(int col, ChatLineContent* lineContent);
|
void replaceContent(int col, ChatLineContent* lineContent);
|
||||||
|
|
||||||
void layout(qreal width, QPointF scenePos);
|
void layout(qreal width, QPointF scenePos);
|
||||||
|
@ -80,9 +79,11 @@ public:
|
||||||
bool isOverSelection(QPointF scenePos);
|
bool isOverSelection(QPointF scenePos);
|
||||||
|
|
||||||
void removeFromScene();
|
void removeFromScene();
|
||||||
|
void addToScene(QGraphicsScene* scene);
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
QPointF mapToContent(ChatLineContent* c, QPointF pos);
|
QPointF mapToContent(ChatLineContent* c, QPointF pos);
|
||||||
|
void addColumn(ChatLineContent* item, ColumnFormat fmt);
|
||||||
void updateBBox();
|
void updateBBox();
|
||||||
|
|
||||||
friend class ChatLog;
|
friend class ChatLog;
|
||||||
|
@ -91,7 +92,6 @@ private:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int rowIndex = -1;
|
int rowIndex = -1;
|
||||||
QGraphicsScene* scene = nullptr;
|
|
||||||
QVector<ChatLineContent*> content; // 3 columns
|
QVector<ChatLineContent*> content; // 3 columns
|
||||||
QVector<ColumnFormat> format;
|
QVector<ColumnFormat> format;
|
||||||
qreal width;
|
qreal width;
|
||||||
|
|
|
@ -76,54 +76,6 @@ ChatLog::~ChatLog()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatMessage::Ptr ChatLog::addChatMessage(const QString& sender, const QString &msg, bool self, bool alert)
|
|
||||||
{
|
|
||||||
ChatMessage::Ptr line = ChatMessage::createChatMessage(scene, sender, msg, false, alert, self);
|
|
||||||
insertChatline(std::dynamic_pointer_cast<ChatLine>(line));
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatMessage::Ptr ChatLog::addChatMessage(const QString& sender, const QString& msg, const QDateTime& timestamp, bool self, bool alert)
|
|
||||||
{
|
|
||||||
ChatMessage::Ptr line = ChatMessage::createChatMessage(scene, sender, msg, false, alert, self, timestamp);
|
|
||||||
insertChatline(std::dynamic_pointer_cast<ChatLine>(line));
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatMessage::Ptr ChatLog::addChatAction(const QString &sender, const QString &msg, const QDateTime ×tamp)
|
|
||||||
{
|
|
||||||
ChatMessage::Ptr line = ChatMessage::createChatMessage(scene, sender, msg, true, false, false, timestamp);
|
|
||||||
insertChatline(std::dynamic_pointer_cast<ChatLine>(line));
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatMessage::Ptr ChatLog::addChatAction(const QString &sender, const QString &msg)
|
|
||||||
{
|
|
||||||
ChatMessage::Ptr line = ChatMessage::createChatMessage(scene, sender, msg, true, false, false);
|
|
||||||
insertChatline(std::dynamic_pointer_cast<ChatLine>(line));
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatMessage::Ptr ChatLog::addSystemMessage(const QString &msg, const QDateTime& timestamp)
|
|
||||||
{
|
|
||||||
ChatMessage::Ptr line = ChatMessage::createChatInfoMessage(scene, msg, "", timestamp);
|
|
||||||
insertChatline(std::dynamic_pointer_cast<ChatLine>(line));
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
ChatMessage::Ptr ChatLog::addFileTransferMessage(const QString &sender, const ToxFile &file, const QDateTime& timestamp, bool self)
|
|
||||||
{
|
|
||||||
ChatMessage::Ptr line = ChatMessage::createFileTransferMessage(scene, sender, "", file, self, timestamp);
|
|
||||||
insertChatline(std::dynamic_pointer_cast<ChatLine>(line));
|
|
||||||
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChatLog::clearSelection()
|
void ChatLog::clearSelection()
|
||||||
{
|
{
|
||||||
for(int i=selFirstRow; i<=selLastRow && i<lines.size() && i >= 0; ++i)
|
for(int i=selFirstRow; i<=selLastRow && i<lines.size() && i >= 0; ++i)
|
||||||
|
@ -403,6 +355,11 @@ void ChatLog::repositionDownTo(int start, qreal end)
|
||||||
|
|
||||||
void ChatLog::insertChatline(ChatLine::Ptr l)
|
void ChatLog::insertChatline(ChatLine::Ptr l)
|
||||||
{
|
{
|
||||||
|
if(!l.get())
|
||||||
|
return;
|
||||||
|
|
||||||
|
l->addToScene(scene);
|
||||||
|
|
||||||
stickToBtm = stickToBottom();
|
stickToBtm = stickToBottom();
|
||||||
|
|
||||||
l->setRowIndex(lines.size());
|
l->setRowIndex(lines.size());
|
||||||
|
|
|
@ -37,16 +37,7 @@ public:
|
||||||
explicit ChatLog(QWidget* parent = 0);
|
explicit ChatLog(QWidget* parent = 0);
|
||||||
virtual ~ChatLog();
|
virtual ~ChatLog();
|
||||||
|
|
||||||
ChatMessage::Ptr addChatMessage(const QString& sender, const QString& msg, const QDateTime& timestamp, bool self, bool alert);
|
|
||||||
ChatMessage::Ptr addChatMessage(const QString& sender, const QString& msg, bool self, bool alert);
|
|
||||||
ChatMessage::Ptr addChatAction(const QString& sender, const QString& msg, const QDateTime& timestamp);
|
|
||||||
ChatMessage::Ptr addChatAction(const QString& sender, const QString& msg);
|
|
||||||
|
|
||||||
ChatMessage::Ptr addSystemMessage(const QString& msg, const QDateTime& timestamp);
|
|
||||||
ChatMessage::Ptr addFileTransferMessage(const QString& sender, const ToxFile& file, const QDateTime ×tamp, bool self);
|
|
||||||
|
|
||||||
void insertChatline(ChatLine::Ptr l);
|
void insertChatline(ChatLine::Ptr l);
|
||||||
|
|
||||||
void clearSelection();
|
void clearSelection();
|
||||||
void clear();
|
void clear();
|
||||||
void copySelectedText() const;
|
void copySelectedText() const;
|
||||||
|
|
|
@ -28,16 +28,14 @@
|
||||||
#define NAME_COL_WIDTH 75.0
|
#define NAME_COL_WIDTH 75.0
|
||||||
#define TIME_COL_WIDTH 85.0
|
#define TIME_COL_WIDTH 85.0
|
||||||
|
|
||||||
ChatMessage::ChatMessage(QGraphicsScene* scene, const QString& rawMessage)
|
ChatMessage::ChatMessage()
|
||||||
: ChatLine(scene)
|
|
||||||
, rawString(rawMessage)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatMessage::Ptr ChatMessage::createChatMessage(QGraphicsScene *scene, 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, bool isAction, bool alert, bool isMe, const QDateTime &date)
|
||||||
{
|
{
|
||||||
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage(scene, rawMessage));
|
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage);
|
||||||
|
|
||||||
QString text = toHtmlChars(rawMessage);
|
QString text = toHtmlChars(rawMessage);
|
||||||
|
|
||||||
|
@ -57,7 +55,7 @@ ChatMessage::Ptr ChatMessage::createChatMessage(QGraphicsScene *scene, const QSt
|
||||||
}
|
}
|
||||||
|
|
||||||
msg->addColumn(new Text(isAction ? "*" : sender, isMe ? Style::getFont(Style::BigBold) : Style::getFont(Style::Big), true), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
msg->addColumn(new Text(isAction ? "*" : sender, isMe ? Style::getFont(Style::BigBold) : Style::getFont(Style::Big), true), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
||||||
msg->addColumn(new Text(text, Style::getFont(Style::Big)), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
msg->addColumn(new Text(text, Style::getFont(Style::Big), false, rawMessage), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
||||||
msg->addColumn(new Spinner(QSizeF(16, 16)), ColumnFormat(TIME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
msg->addColumn(new Spinner(QSizeF(16, 16)), ColumnFormat(TIME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
||||||
|
|
||||||
if(!date.isNull())
|
if(!date.isNull())
|
||||||
|
@ -66,12 +64,12 @@ ChatMessage::Ptr ChatMessage::createChatMessage(QGraphicsScene *scene, const QSt
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatMessage::Ptr ChatMessage::createChatInfoMessage(QGraphicsScene *scene, const QString &rawMessage, const QString &type, const QDateTime &date)
|
ChatMessage::Ptr ChatMessage::createChatInfoMessage(const QString &rawMessage, SystemMessageType type, const QDateTime &date)
|
||||||
{
|
{
|
||||||
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage(scene, rawMessage));
|
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage);
|
||||||
|
|
||||||
msg->addColumn(new Image(QSizeF(16, 16), ":/ui/chatArea/info.png"), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
msg->addColumn(new Image(QSizeF(16, 16), ":/ui/chatArea/info.png"), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
||||||
msg->addColumn(new Text(rawMessage, Style::getFont(Style::Big)), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
msg->addColumn(new Text(rawMessage, Style::getFont(Style::Big), false, rawMessage), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
||||||
msg->addColumn(new Text(date.toString(Settings::getInstance().getTimestampFormat()), Style::getFont(Style::Big)), ColumnFormat(TIME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
msg->addColumn(new Text(date.toString(Settings::getInstance().getTimestampFormat()), Style::getFont(Style::Big)), ColumnFormat(TIME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
||||||
|
|
||||||
Q_UNUSED(type)
|
Q_UNUSED(type)
|
||||||
|
@ -79,9 +77,9 @@ ChatMessage::Ptr ChatMessage::createChatInfoMessage(QGraphicsScene *scene, const
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatMessage::Ptr ChatMessage::createFileTransferMessage(QGraphicsScene* scene, const QString& sender, const QString& rawMessage, ToxFile file, bool isMe, const QDateTime& date)
|
ChatMessage::Ptr ChatMessage::createFileTransferMessage(const QString& sender, ToxFile file, bool isMe, const QDateTime& date)
|
||||||
{
|
{
|
||||||
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage(scene, rawMessage));
|
ChatMessage::Ptr msg = ChatMessage::Ptr(new ChatMessage);
|
||||||
|
|
||||||
msg->addColumn(new Text(sender, isMe ? Style::getFont(Style::BigBold) : Style::getFont(Style::Big), true), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
msg->addColumn(new Text(sender, isMe ? Style::getFont(Style::BigBold) : Style::getFont(Style::Big), true), ColumnFormat(NAME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right));
|
||||||
msg->addColumn(new ChatLineContentProxy(new FileTransferWidget(0, file), 380, 0.6f), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
msg->addColumn(new ChatLineContentProxy(new FileTransferWidget(0, file), 380, 0.6f), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
||||||
|
@ -98,7 +96,11 @@ void ChatMessage::markAsSent(const QDateTime &time)
|
||||||
|
|
||||||
QString ChatMessage::toString() const
|
QString ChatMessage::toString() const
|
||||||
{
|
{
|
||||||
return rawString;
|
ChatLineContent* c = getContent(1);
|
||||||
|
if(c)
|
||||||
|
return c->getText();
|
||||||
|
|
||||||
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatMessage::isAction() const
|
bool ChatMessage::isAction() const
|
||||||
|
@ -111,6 +113,20 @@ void ChatMessage::setAsAction()
|
||||||
action = true;
|
action = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChatMessage::hideSender()
|
||||||
|
{
|
||||||
|
ChatLineContent* c = getContent(0);
|
||||||
|
if(c)
|
||||||
|
c->hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChatMessage::hideDate()
|
||||||
|
{
|
||||||
|
ChatLineContent* c = getContent(2);
|
||||||
|
if(c)
|
||||||
|
c->hide();
|
||||||
|
}
|
||||||
|
|
||||||
QString ChatMessage::detectAnchors(const QString &str)
|
QString ChatMessage::detectAnchors(const QString &str)
|
||||||
{
|
{
|
||||||
QString out = str;
|
QString out = str;
|
||||||
|
|
|
@ -28,16 +28,24 @@ class ChatMessage : public ChatLine
|
||||||
public:
|
public:
|
||||||
using Ptr = std::shared_ptr<ChatMessage>;
|
using Ptr = std::shared_ptr<ChatMessage>;
|
||||||
|
|
||||||
ChatMessage(QGraphicsScene* scene, const QString& rawMessage);
|
enum SystemMessageType
|
||||||
|
{
|
||||||
|
INFO,
|
||||||
|
ERROR,
|
||||||
|
};
|
||||||
|
|
||||||
static ChatMessage::Ptr createChatMessage(QGraphicsScene* scene, const QString& sender, const QString& rawMessage, bool isAction, bool alert, bool isMe, const QDateTime& date = QDateTime());
|
ChatMessage();
|
||||||
static ChatMessage::Ptr createChatInfoMessage(QGraphicsScene* scene, const QString& rawMessage, const QString& type, const QDateTime& date);
|
|
||||||
static ChatMessage::Ptr createFileTransferMessage(QGraphicsScene* scene, const QString& sender, const QString& rawMessage, ToxFile file, bool isMe, const QDateTime& date);
|
static ChatMessage::Ptr createChatMessage(const QString& sender, const QString& rawMessage, bool isAction, bool alert, 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);
|
||||||
|
|
||||||
void markAsSent(const QDateTime& time);
|
void markAsSent(const QDateTime& time);
|
||||||
QString toString() const;
|
QString toString() const;
|
||||||
bool isAction() const;
|
bool isAction() const;
|
||||||
void setAsAction();
|
void setAsAction();
|
||||||
|
void hideSender();
|
||||||
|
void hideDate();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static QString detectAnchors(const QString& str);
|
static QString detectAnchors(const QString& str);
|
||||||
|
@ -45,8 +53,6 @@ protected:
|
||||||
static QString toHtmlChars(const QString& str);
|
static QString toHtmlChars(const QString& str);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ChatLineContent* midColumn = nullptr;
|
|
||||||
QString rawString;
|
|
||||||
bool action = false;
|
bool action = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -29,10 +29,11 @@
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
|
|
||||||
Text::Text(const QString& txt, QFont font, bool enableElide)
|
Text::Text(const QString& txt, QFont font, bool enableElide, const QString &rwText)
|
||||||
: ChatLineContent()
|
: ChatLineContent()
|
||||||
, elide(enableElide)
|
, elide(enableElide)
|
||||||
, defFont(font)
|
, defFont(font)
|
||||||
|
, rawText(rwText)
|
||||||
{
|
{
|
||||||
setText(txt);
|
setText(txt);
|
||||||
setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton);
|
setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton);
|
||||||
|
@ -197,7 +198,7 @@ void Text::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
||||||
|
|
||||||
QString Text::getText() const
|
QString Text::getText() const
|
||||||
{
|
{
|
||||||
return text;
|
return rawText;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Text::ensureIntegrity()
|
void Text::ensureIntegrity()
|
||||||
|
|
|
@ -27,7 +27,7 @@ class CustomTextDocument;
|
||||||
class Text : public ChatLineContent
|
class Text : public ChatLineContent
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Text(const QString& txt = "", QFont font = QFont(), bool enableElide = false);
|
Text(const QString& txt = "", QFont font = QFont(), bool enableElide = false, const QString& rawText = "");
|
||||||
virtual ~Text();
|
virtual ~Text();
|
||||||
|
|
||||||
void setText(const QString& txt);
|
void setText(const QString& txt);
|
||||||
|
@ -64,6 +64,7 @@ protected:
|
||||||
private:
|
private:
|
||||||
CustomTextDocument* doc = nullptr;
|
CustomTextDocument* doc = nullptr;
|
||||||
QString text;
|
QString text;
|
||||||
|
QString rawText;
|
||||||
QString elidedText;
|
QString elidedText;
|
||||||
QString selectedText;
|
QString selectedText;
|
||||||
QSizeF size;
|
QSizeF size;
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "src/misc/cstring.h"
|
#include "src/misc/cstring.h"
|
||||||
#include "src/chatlog/chatmessage.h"
|
#include "src/chatlog/chatmessage.h"
|
||||||
#include "src/chatlog/content/filetransferwidget.h"
|
#include "src/chatlog/content/filetransferwidget.h"
|
||||||
|
#include "src/chatlog/chatlog.h"
|
||||||
|
|
||||||
ChatForm::ChatForm(Friend* chatFriend)
|
ChatForm::ChatForm(Friend* chatFriend)
|
||||||
: f(chatFriend)
|
: f(chatFriend)
|
||||||
|
@ -172,8 +173,7 @@ void ChatForm::startFileSend(ToxFile file)
|
||||||
previousId = core->getSelfId();
|
previousId = core->getSelfId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
insertChatMessage(ChatMessage::createFileTransferMessage(name, file, true, QDateTime::currentDateTime()));
|
||||||
chatWidget->addFileTransferMessage(name, file, QDateTime::currentDateTime(), true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatForm::onFileRecvRequest(ToxFile file)
|
void ChatForm::onFileRecvRequest(ToxFile file)
|
||||||
|
@ -197,7 +197,9 @@ void ChatForm::onFileRecvRequest(ToxFile file)
|
||||||
previousId = friendId;
|
previousId = friendId;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChatMessage::Ptr msg = chatWidget->addFileTransferMessage(name, file, QDateTime::currentDateTime(), false);
|
ChatMessage::Ptr msg = ChatMessage::createFileTransferMessage(name, file, false, QDateTime::currentDateTime());
|
||||||
|
insertChatMessage(msg);
|
||||||
|
|
||||||
if (!Settings::getInstance().getAutoAcceptDir(f->getToxID()).isEmpty()
|
if (!Settings::getInstance().getAutoAcceptDir(f->getToxID()).isEmpty()
|
||||||
|| Settings::getInstance().getAutoSaveEnabled())
|
|| Settings::getInstance().getAutoSaveEnabled())
|
||||||
{
|
{
|
||||||
|
@ -233,7 +235,7 @@ void ChatForm::onAvInvite(int FriendId, int CallId, bool video)
|
||||||
connect(callButton, SIGNAL(clicked()), this, SLOT(onAnswerCallTriggered()));
|
connect(callButton, SIGNAL(clicked()), this, SLOT(onAnswerCallTriggered()));
|
||||||
}
|
}
|
||||||
|
|
||||||
chatWidget->addSystemMessage(tr("%1 calling").arg(f->getDisplayedName()), QDateTime::currentDateTime());
|
insertChatMessage(ChatMessage::createChatInfoMessage(tr("%1 calling").arg(f->getDisplayedName()), ChatMessage::INFO, QDateTime::currentDateTime()));
|
||||||
|
|
||||||
Widget* w = Widget::getInstance();
|
Widget* w = Widget::getInstance();
|
||||||
if (!w->isFriendWidgetCurActiveWidget(f)|| w->isMinimized() || !w->isActiveWindow())
|
if (!w->isFriendWidgetCurActiveWidget(f)|| w->isMinimized() || !w->isActiveWindow())
|
||||||
|
@ -304,7 +306,7 @@ void ChatForm::onAvCancel(int FriendId, int)
|
||||||
|
|
||||||
netcam->hide();
|
netcam->hide();
|
||||||
|
|
||||||
addSystemInfoMessage(tr("%1 stopped calling").arg(f->getDisplayedName()), "white", QDateTime::currentDateTime());
|
addSystemInfoMessage(tr("%1 stopped calling").arg(f->getDisplayedName()), ChatMessage::INFO, QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatForm::onAvEnd(int FriendId, int)
|
void ChatForm::onAvEnd(int FriendId, int)
|
||||||
|
@ -360,7 +362,7 @@ void ChatForm::onAvRinging(int FriendId, int CallId, bool video)
|
||||||
connect(callButton, SIGNAL(clicked()), this, SLOT(onCancelCallTriggered()));
|
connect(callButton, SIGNAL(clicked()), this, SLOT(onCancelCallTriggered()));
|
||||||
}
|
}
|
||||||
|
|
||||||
addSystemInfoMessage(tr("Calling to %1").arg(f->getDisplayedName()), "white", QDateTime::currentDateTime());
|
addSystemInfoMessage(tr("Calling to %1").arg(f->getDisplayedName()), ChatMessage::INFO, QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatForm::onAvStarting(int FriendId, int CallId, bool video)
|
void ChatForm::onAvStarting(int FriendId, int CallId, bool video)
|
||||||
|
@ -501,7 +503,7 @@ void ChatForm::onAvRejected(int FriendId, int)
|
||||||
connect(callButton, SIGNAL(clicked()), this, SLOT(onCallTriggered()));
|
connect(callButton, SIGNAL(clicked()), this, SLOT(onCallTriggered()));
|
||||||
connect(videoButton, SIGNAL(clicked()), this, SLOT(onVideoCallTriggered()));
|
connect(videoButton, SIGNAL(clicked()), this, SLOT(onVideoCallTriggered()));
|
||||||
|
|
||||||
chatWidget->addSystemMessage(tr("Call rejected"), QDateTime::currentDateTime());
|
insertChatMessage(ChatMessage::createChatInfoMessage(tr("Call rejected"), ChatMessage::INFO, QDateTime::currentDateTime()));
|
||||||
|
|
||||||
netcam->hide();
|
netcam->hide();
|
||||||
}
|
}
|
||||||
|
@ -640,7 +642,7 @@ void ChatForm::onFileSendFailed(int FriendId, const QString &fname)
|
||||||
if (FriendId != f->getFriendID())
|
if (FriendId != f->getFriendID())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
addSystemInfoMessage(tr("Failed to send file \"%1\"").arg(fname), "red", QDateTime::currentDateTime());
|
addSystemInfoMessage(tr("Failed to send file \"%1\"").arg(fname), ChatMessage::ERROR, QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatForm::onAvatarChange(int FriendId, const QPixmap &pic)
|
void ChatForm::onAvatarChange(int FriendId, const QPixmap &pic)
|
||||||
|
@ -712,7 +714,7 @@ void ChatForm::loadHistory(QDateTime since, bool processUndelivered)
|
||||||
if (msgDate > lastDate)
|
if (msgDate > lastDate)
|
||||||
{
|
{
|
||||||
lastDate = msgDate;
|
lastDate = msgDate;
|
||||||
chatWidget->addSystemMessage(msgDate.toString(), QDateTime());
|
insertChatMessage(ChatMessage::createChatInfoMessage(msgDate.toString(), ChatMessage::INFO, QDateTime::currentDateTime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show each messages
|
// Show each messages
|
||||||
|
@ -784,7 +786,7 @@ void ChatForm::stopCounter()
|
||||||
if (timer)
|
if (timer)
|
||||||
{
|
{
|
||||||
addSystemInfoMessage(tr("Call with %1 ended. %2").arg(f->getDisplayedName(),secondsToDHMS(timeElapsed.elapsed()/1000)),
|
addSystemInfoMessage(tr("Call with %1 ended. %2").arg(f->getDisplayedName(),secondsToDHMS(timeElapsed.elapsed()/1000)),
|
||||||
"white", QDateTime::currentDateTime());
|
ChatMessage::INFO, QDateTime::currentDateTime());
|
||||||
timer->stop();
|
timer->stop();
|
||||||
callDuration->setText("");
|
callDuration->setText("");
|
||||||
callDuration->hide();
|
callDuration->hide();
|
||||||
|
|
|
@ -30,8 +30,7 @@
|
||||||
#include "src/group.h"
|
#include "src/group.h"
|
||||||
#include "src/friendlist.h"
|
#include "src/friendlist.h"
|
||||||
#include "src/friend.h"
|
#include "src/friend.h"
|
||||||
#include "src/chatlog/content/text.h"
|
#include "src/chatlog/chatlog.h"
|
||||||
#include "src/chatlog/chatmessage.h"
|
|
||||||
|
|
||||||
GenericChatForm::GenericChatForm(QWidget *parent) :
|
GenericChatForm::GenericChatForm(QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
|
@ -198,9 +197,17 @@ ChatMessage::Ptr GenericChatForm::addMessage(const ToxID& author, const QString
|
||||||
|
|
||||||
ChatMessage::Ptr msg;
|
ChatMessage::Ptr msg;
|
||||||
if(isAction)
|
if(isAction)
|
||||||
msg = chatWidget->addChatAction(authorStr, message);
|
{
|
||||||
|
msg = ChatMessage::createChatMessage(authorStr, message, true, false, false);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
msg = chatWidget->addChatMessage(author != previousId ? authorStr : QString(), message, author.isMine(), false);
|
{
|
||||||
|
msg = ChatMessage::createChatMessage(authorStr, message, false, false, author.isMine());
|
||||||
|
if(author == previousId)
|
||||||
|
msg->hideSender();
|
||||||
|
}
|
||||||
|
|
||||||
|
insertChatMessage(msg);
|
||||||
|
|
||||||
if(isSent)
|
if(isSent)
|
||||||
msg->markAsSent(datetime);
|
msg->markAsSent(datetime);
|
||||||
|
@ -219,7 +226,11 @@ ChatMessage::Ptr GenericChatForm::addSelfMessage(const QString &message, bool is
|
||||||
void GenericChatForm::addAlertMessage(const ToxID &author, QString message, QDateTime datetime)
|
void GenericChatForm::addAlertMessage(const ToxID &author, QString message, QDateTime datetime)
|
||||||
{
|
{
|
||||||
QString authorStr = resolveToxID(author);
|
QString authorStr = resolveToxID(author);
|
||||||
chatWidget->addChatMessage(author != previousId ? authorStr : QString(), message, datetime, author.isMine(), true);
|
ChatMessage::Ptr msg = ChatMessage::createChatMessage(authorStr, message, false, true, author.isMine(), datetime);
|
||||||
|
insertChatMessage(msg);
|
||||||
|
|
||||||
|
if(author == previousId)
|
||||||
|
msg->hideSender();
|
||||||
|
|
||||||
previousId = author;
|
previousId = author;
|
||||||
}
|
}
|
||||||
|
@ -275,13 +286,10 @@ void GenericChatForm::focusInput()
|
||||||
msgEdit->setFocus();
|
msgEdit->setFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenericChatForm::addSystemInfoMessage(const QString &message, const QString &type, const QDateTime &datetime)
|
void GenericChatForm::addSystemInfoMessage(const QString &message, ChatMessage::SystemMessageType type, const QDateTime &datetime)
|
||||||
{
|
{
|
||||||
//TODO: respect type
|
|
||||||
previousId.clear();
|
previousId.clear();
|
||||||
chatWidget->addSystemMessage(message, datetime);
|
insertChatMessage(ChatMessage::createChatInfoMessage(message, type, datetime));
|
||||||
|
|
||||||
Q_UNUSED(type)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenericChatForm::clearChatArea(bool notinform)
|
void GenericChatForm::clearChatArea(bool notinform)
|
||||||
|
@ -290,7 +298,7 @@ void GenericChatForm::clearChatArea(bool notinform)
|
||||||
previousId = ToxID();
|
previousId = ToxID();
|
||||||
|
|
||||||
if (!notinform)
|
if (!notinform)
|
||||||
addSystemInfoMessage(tr("Cleared"), "white", QDateTime::currentDateTime());
|
addSystemInfoMessage(tr("Cleared"), ChatMessage::INFO, QDateTime::currentDateTime());
|
||||||
|
|
||||||
if (earliestMessage)
|
if (earliestMessage)
|
||||||
{
|
{
|
||||||
|
@ -318,3 +326,8 @@ QString GenericChatForm::resolveToxID(const ToxID &id)
|
||||||
|
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GenericChatForm::insertChatMessage(ChatMessage::Ptr msg)
|
||||||
|
{
|
||||||
|
chatWidget->insertChatline(std::dynamic_pointer_cast<ChatLine>(msg));
|
||||||
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include "src/corestructs.h"
|
#include "src/corestructs.h"
|
||||||
#include "src/chatlog/chatlog.h"
|
#include "src/chatlog/chatmessage.h"
|
||||||
|
|
||||||
// Spacing in px inserted when the author of the last message changes
|
// Spacing in px inserted when the author of the last message changes
|
||||||
#define AUTHOR_CHANGE_SPACING 5 // why the hell is this a thing? surely the different font is enough?
|
#define AUTHOR_CHANGE_SPACING 5 // why the hell is this a thing? surely the different font is enough?
|
||||||
|
@ -33,7 +33,6 @@ class QPushButton;
|
||||||
class CroppingLabel;
|
class CroppingLabel;
|
||||||
class ChatTextEdit;
|
class ChatTextEdit;
|
||||||
class ChatLog;
|
class ChatLog;
|
||||||
class ChatMessage;
|
|
||||||
class MaskablePixmapWidget;
|
class MaskablePixmapWidget;
|
||||||
struct ToxID;
|
struct ToxID;
|
||||||
|
|
||||||
|
@ -53,7 +52,7 @@ public:
|
||||||
ChatMessage::Ptr addMessage(const ToxID& author, const QString &message, bool isAction, const QDateTime &datetime, bool isSent);
|
ChatMessage::Ptr addMessage(const ToxID& author, const QString &message, bool isAction, const QDateTime &datetime, bool isSent);
|
||||||
ChatMessage::Ptr addSelfMessage(const QString &message, bool isAction, const QDateTime &datetime, bool isSent);
|
ChatMessage::Ptr addSelfMessage(const QString &message, bool isAction, const QDateTime &datetime, bool isSent);
|
||||||
|
|
||||||
void addSystemInfoMessage(const QString &message, const QString &type, const QDateTime &datetime);
|
void addSystemInfoMessage(const QString &message, ChatMessage::SystemMessageType type, const QDateTime &datetime);
|
||||||
void addAlertMessage(const ToxID& author, QString message, QDateTime datetime);
|
void addAlertMessage(const ToxID& author, QString message, QDateTime datetime);
|
||||||
bool isEmpty();
|
bool isEmpty();
|
||||||
|
|
||||||
|
@ -77,6 +76,7 @@ protected slots:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QString resolveToxID(const ToxID &id);
|
QString resolveToxID(const ToxID &id);
|
||||||
|
void insertChatMessage(ChatMessage::Ptr msg);
|
||||||
|
|
||||||
ToxID previousId;
|
ToxID previousId;
|
||||||
QMenu menu;
|
QMenu menu;
|
||||||
|
|
|
@ -749,7 +749,7 @@ void Widget::onFriendStatusChanged(int friendId, Status status)
|
||||||
}
|
}
|
||||||
if (isActualChange)
|
if (isActualChange)
|
||||||
f->getChatForm()->addSystemInfoMessage(tr("%1 is now %2", "e.g. \"Dubslow is now online\"").arg(f->getDisplayedName()).arg(fStatus),
|
f->getChatForm()->addSystemInfoMessage(tr("%1 is now %2", "e.g. \"Dubslow is now online\"").arg(f->getDisplayedName()).arg(fStatus),
|
||||||
"white", QDateTime::currentDateTime());
|
ChatMessage::INFO, QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isActualChange && status != Status::Offline)
|
if (isActualChange && status != Status::Offline)
|
||||||
|
@ -1011,7 +1011,7 @@ void Widget::onGroupTitleChanged(int groupnumber, const QString& author, const Q
|
||||||
|
|
||||||
g->setName(title);
|
g->setName(title);
|
||||||
if (!author.isEmpty())
|
if (!author.isEmpty())
|
||||||
g->getChatForm()->addSystemInfoMessage(tr("%1 has set the title to %2").arg(author, title), "silver", QDateTime::currentDateTime());
|
g->getChatForm()->addSystemInfoMessage(tr("%1 has set the title to %2").arg(author, title), ChatMessage::INFO, QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Widget::removeGroup(Group* g, bool fake)
|
void Widget::removeGroup(Group* g, bool fake)
|
||||||
|
@ -1162,7 +1162,7 @@ void Widget::onGroupSendResult(int groupId, const QString& message, int result)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (result == -1)
|
if (result == -1)
|
||||||
g->getChatForm()->addSystemInfoMessage(tr("Message failed to send"), "white", QDateTime::currentDateTime());
|
g->getChatForm()->addSystemInfoMessage(tr("Message failed to send"), ChatMessage::INFO, QDateTime::currentDateTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Widget::getPassword(QString info, int passtype, uint8_t* salt)
|
void Widget::getPassword(QString info, int passtype, uint8_t* salt)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user