mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
progress
This commit is contained in:
parent
de52bad1db
commit
3a34678900
1
res.qrc
1
res.qrc
|
@ -42,6 +42,7 @@
|
||||||
<file>ui/callButton/callButtonYellowPressed.png</file>
|
<file>ui/callButton/callButtonYellowPressed.png</file>
|
||||||
<file>ui/chatArea/chatArea.css</file>
|
<file>ui/chatArea/chatArea.css</file>
|
||||||
<file>ui/chatArea/innerStyle.css</file>
|
<file>ui/chatArea/innerStyle.css</file>
|
||||||
|
<file>ui/chatArea/spinner.png</file>
|
||||||
<file>ui/chatArea/scrollBarDownArrow.png</file>
|
<file>ui/chatArea/scrollBarDownArrow.png</file>
|
||||||
<file>ui/chatArea/scrollBarDownArrowHover.png</file>
|
<file>ui/chatArea/scrollBarDownArrowHover.png</file>
|
||||||
<file>ui/chatArea/scrollBarDownArrowPressed.png</file>
|
<file>ui/chatArea/scrollBarDownArrowPressed.png</file>
|
||||||
|
|
|
@ -102,6 +102,18 @@ void ChatLine::addColumn(ChatLineContent* item, ColumnFormat fmt)
|
||||||
content << item;
|
content << item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChatLine::replaceContent(int col, ChatLineContent *lineContent)
|
||||||
|
{
|
||||||
|
if(col >= 0 && col < content.size() && lineContent)
|
||||||
|
{
|
||||||
|
scene->removeItem(content[col]);
|
||||||
|
delete content[col];
|
||||||
|
|
||||||
|
content[col] = lineContent;
|
||||||
|
scene->addItem(content[col]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ChatLine::layout(qreal w, QPointF scenePos)
|
void ChatLine::layout(qreal w, QPointF scenePos)
|
||||||
{
|
{
|
||||||
width = w;
|
width = w;
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
virtual QRectF boundingSceneRect() const;
|
virtual QRectF boundingSceneRect() const;
|
||||||
|
|
||||||
void addColumn(ChatLineContent* item, ColumnFormat fmt);
|
void addColumn(ChatLineContent* item, ColumnFormat fmt);
|
||||||
|
void replaceContent(int col, ChatLineContent* lineContent);
|
||||||
|
|
||||||
void layout(qreal width, QPointF scenePos);
|
void layout(qreal width, QPointF scenePos);
|
||||||
void layout(QPointF scenePos);
|
void layout(QPointF scenePos);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "chatlog.h"
|
#include "chatlog.h"
|
||||||
#include "chatline.h"
|
#include "chatline.h"
|
||||||
|
#include "chatmessage.h"
|
||||||
#include "chatlinecontent.h"
|
#include "chatlinecontent.h"
|
||||||
#include "chatlinecontentproxy.h"
|
#include "chatlinecontentproxy.h"
|
||||||
#include "content/text.h"
|
#include "content/text.h"
|
||||||
|
@ -52,26 +53,21 @@ ChatLog::~ChatLog()
|
||||||
delete line;
|
delete line;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatLog::addTextLine(const QString& sender, const QString& text, QDateTime timestamp)
|
ChatMessage* ChatLog::addChatMessage(const QString& sender, ChatLineContent* content)
|
||||||
{
|
{
|
||||||
ChatLine* line = new ChatLine(scene);
|
ChatMessage* line = new ChatMessage(scene, sender, content);
|
||||||
|
|
||||||
line->addColumn(new Text(sender, true), ColumnFormat(75.0, ColumnFormat::FixedSize, 1, ColumnFormat::Right));
|
|
||||||
line->addColumn(new Text(text), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
|
||||||
line->addColumn(new Text(timestamp.toString("hh:mm")), ColumnFormat(50.0, ColumnFormat::FixedSize, 1));
|
|
||||||
|
|
||||||
insertChatline(line);
|
insertChatline(line);
|
||||||
|
|
||||||
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatLog::addWidgetLine(const QString& sender, QDateTime timestamp)
|
ChatMessage* ChatLog::addChatMessage(const QString& sender, ChatLineContent* content, const QDateTime& timestamp)
|
||||||
{
|
{
|
||||||
ChatLine* line = new ChatLine(scene);
|
ChatMessage* line = new ChatMessage(scene, sender, content);
|
||||||
|
line->markAsSent(timestamp);
|
||||||
line->addColumn(new Text(sender, true), ColumnFormat(75.0, ColumnFormat::FixedSize, 1));
|
|
||||||
line->addColumn(new ChatLineContentProxy(new FileTransferWidget()), ColumnFormat(1.0, ColumnFormat::VariableSize));
|
|
||||||
line->addColumn(new Spinner(QSizeF(16, 16)), ColumnFormat(50.0, ColumnFormat::FixedSize, 1, ColumnFormat::Right));
|
|
||||||
|
|
||||||
insertChatline(line);
|
insertChatline(line);
|
||||||
|
|
||||||
|
return line;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatLog::clearSelection()
|
void ChatLog::clearSelection()
|
||||||
|
@ -86,18 +82,6 @@ void ChatLog::clearSelection()
|
||||||
selLastCol = -1;
|
selLastCol = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatLog::dbgPopulate()
|
|
||||||
{
|
|
||||||
for(int i = 0; i < 2000; i++)
|
|
||||||
addTextLine("Jemp longlong name foo moth", "Line " + QString::number(i) +
|
|
||||||
" Lorem ipsum <b>Hello</b> dolor sit amet, "
|
|
||||||
"consectetur adipisicing elit, sed do eiusmod "
|
|
||||||
"tempor incididunt ut labore et dolore magna "
|
|
||||||
"aliqua. Ut enim ad minim veniam, quis nostrud "
|
|
||||||
"exercitation ullamco laboris nisi ut aliquip ex "
|
|
||||||
"ea commodo consequat. ");
|
|
||||||
}
|
|
||||||
|
|
||||||
QRect ChatLog::getVisibleRect() const
|
QRect ChatLog::getVisibleRect() const
|
||||||
{
|
{
|
||||||
return mapToScene(viewport()->rect()).boundingRect().toRect();
|
return mapToScene(viewport()->rect()).boundingRect().toRect();
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
class QGraphicsScene;
|
class QGraphicsScene;
|
||||||
class ChatLine;
|
class ChatLine;
|
||||||
class ChatLineContent;
|
class ChatLineContent;
|
||||||
|
class ChatMessage;
|
||||||
|
|
||||||
class ChatLog : public QGraphicsView
|
class ChatLog : public QGraphicsView
|
||||||
{
|
{
|
||||||
|
@ -15,8 +16,9 @@ public:
|
||||||
explicit ChatLog(QWidget* parent = 0);
|
explicit ChatLog(QWidget* parent = 0);
|
||||||
virtual ~ChatLog();
|
virtual ~ChatLog();
|
||||||
|
|
||||||
void addTextLine(const QString& sender, const QString& text, QDateTime timestamp = QDateTime::currentDateTime());
|
ChatMessage* addChatMessage(const QString& sender, ChatLineContent* content, const QDateTime& timestamp);
|
||||||
void addWidgetLine(const QString& sender, QDateTime timestamp = QDateTime::currentDateTime());
|
ChatMessage* addChatMessage(const QString& sender, ChatLineContent* content);
|
||||||
|
|
||||||
void insertChatline(ChatLine* l);
|
void insertChatline(ChatLine* l);
|
||||||
|
|
||||||
void clearSelection();
|
void clearSelection();
|
||||||
|
@ -24,8 +26,6 @@ public:
|
||||||
void copySelectedText() const;
|
void copySelectedText() const;
|
||||||
QString getSelectedText() const;
|
QString getSelectedText() const;
|
||||||
|
|
||||||
void dbgPopulate();
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
|
@ -1,5 +1,19 @@
|
||||||
#include "chatmessage.h"
|
#include "chatmessage.h"
|
||||||
|
#include "content/text.h"
|
||||||
|
#include "content/spinner.h"
|
||||||
|
|
||||||
ChatMessage::ChatMessage()
|
#include <QDateTime>
|
||||||
|
|
||||||
|
ChatMessage::ChatMessage(QGraphicsScene *scene, const QString& author ,ChatLineContent *content)
|
||||||
|
: ChatLine(scene)
|
||||||
{
|
{
|
||||||
|
addColumn(new Text(author, true), ColumnFormat(75.0, ColumnFormat::FixedSize, 1, ColumnFormat::Right));
|
||||||
|
addColumn(content, ColumnFormat(1.0, ColumnFormat::VariableSize));
|
||||||
|
addColumn(new Spinner(QSizeF(16, 16)), ColumnFormat(50.0, ColumnFormat::FixedSize, 1, ColumnFormat::Right));
|
||||||
|
}
|
||||||
|
|
||||||
|
void ChatMessage::markAsSent(const QDateTime &time)
|
||||||
|
{
|
||||||
|
// remove the spinner and replace it by $time
|
||||||
|
replaceContent(2, new Text(time.toString("hh:mm"), true));
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,14 @@
|
||||||
|
|
||||||
#include "chatline.h"
|
#include "chatline.h"
|
||||||
|
|
||||||
|
class QGraphicsScene;
|
||||||
|
|
||||||
class ChatMessage : public ChatLine
|
class ChatMessage : public ChatLine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ChatMessage();
|
ChatMessage(QGraphicsScene* scene, const QString &author, ChatLineContent* content);
|
||||||
|
|
||||||
|
void markAsSent(const QDateTime& time);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CHATMESSAGE_H
|
#endif // CHATMESSAGE_H
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
Spinner::Spinner(QSizeF Size)
|
Spinner::Spinner(QSizeF Size)
|
||||||
: size(Size)
|
: size(Size)
|
||||||
{
|
{
|
||||||
pmap.load(":/media/spinner.png");
|
pmap.load(":/ui/chatArea/spinner.png");
|
||||||
|
|
||||||
timer.setInterval(33); // 30Hz
|
timer.setInterval(33); // 30Hz
|
||||||
timer.setSingleShot(false);
|
timer.setSingleShot(false);
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "src/misc/style.h"
|
#include "src/misc/style.h"
|
||||||
#include "src/misc/settings.h"
|
#include "src/misc/settings.h"
|
||||||
#include "src/misc/cstring.h"
|
#include "src/misc/cstring.h"
|
||||||
|
#include "src/chatlog/chatmessage.h"
|
||||||
|
|
||||||
ChatForm::ChatForm(Friend* chatFriend)
|
ChatForm::ChatForm(Friend* chatFriend)
|
||||||
: f(chatFriend)
|
: f(chatFriend)
|
||||||
|
@ -119,7 +120,8 @@ void ChatForm::onSendTriggered()
|
||||||
int id = HistoryKeeper::getInstance()->addChatEntry(f->getToxID().publicKey, qt_msg_hist,
|
int id = HistoryKeeper::getInstance()->addChatEntry(f->getToxID().publicKey, qt_msg_hist,
|
||||||
Core::getInstance()->getSelfId().publicKey, timestamp, status);
|
Core::getInstance()->getSelfId().publicKey, timestamp, status);
|
||||||
|
|
||||||
//MessageActionPtr ma = addSelfMessage(msg, isAction, timestamp, false);
|
|
||||||
|
ChatMessage* ma = addSelfMessage(msg, isAction, timestamp, false);
|
||||||
|
|
||||||
int rec;
|
int rec;
|
||||||
if (isAction)
|
if (isAction)
|
||||||
|
@ -127,7 +129,7 @@ void ChatForm::onSendTriggered()
|
||||||
else
|
else
|
||||||
rec = Core::getInstance()->sendMessage(f->getFriendID(), msg);
|
rec = Core::getInstance()->sendMessage(f->getFriendID(), msg);
|
||||||
|
|
||||||
//registerReceipt(rec, id, ma);
|
registerReceipt(rec, id, ma);
|
||||||
}
|
}
|
||||||
|
|
||||||
msgEdit->clear();
|
msgEdit->clear();
|
||||||
|
@ -842,29 +844,28 @@ QString ChatForm::secondsToDHMS(quint32 duration)
|
||||||
return cD + res.sprintf("%dd%02dh %02dm %02ds", days, hours, minutes, seconds);
|
return cD + res.sprintf("%dd%02dh %02dm %02ds", days, hours, minutes, seconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
//void ChatForm::registerReceipt(int receipt, int messageID, MessageActionPtr msg)
|
void ChatForm::registerReceipt(int receipt, int messageID, ChatMessage* msg)
|
||||||
//{
|
{
|
||||||
// receipts[receipt] = messageID;
|
receipts[receipt] = messageID;
|
||||||
// undeliveredMsgs[messageID] = msg;
|
undeliveredMsgs[messageID] = msg;
|
||||||
//}
|
}
|
||||||
|
|
||||||
//void ChatForm::dischargeReceipt(int receipt)
|
void ChatForm::dischargeReceipt(int receipt)
|
||||||
//{
|
{
|
||||||
// auto it = receipts.find(receipt);
|
auto it = receipts.find(receipt);
|
||||||
// if (it != receipts.end())
|
if (it != receipts.end())
|
||||||
// {
|
{
|
||||||
// int mID = it.value();
|
int mID = it.value();
|
||||||
// auto msgIt = undeliveredMsgs.find(mID);
|
auto msgIt = undeliveredMsgs.find(mID);
|
||||||
// if (msgIt != undeliveredMsgs.end())
|
if (msgIt != undeliveredMsgs.end())
|
||||||
// {
|
{
|
||||||
// HistoryKeeper::getInstance()->markAsSent(mID);
|
HistoryKeeper::getInstance()->markAsSent(mID);
|
||||||
// msgIt.value()->markAsSent();
|
msgIt.value()->markAsSent(QDateTime::currentDateTime());
|
||||||
// msgIt.value()->featureUpdate();
|
undeliveredMsgs.erase(msgIt);
|
||||||
// undeliveredMsgs.erase(msgIt);
|
}
|
||||||
// }
|
receipts.erase(it);
|
||||||
// receipts.erase(it);
|
}
|
||||||
// }
|
}
|
||||||
//}
|
|
||||||
|
|
||||||
void ChatForm::clearReciepts()
|
void ChatForm::clearReciepts()
|
||||||
{
|
{
|
||||||
|
|
|
@ -89,7 +89,7 @@ protected:
|
||||||
// drag & drop
|
// drag & drop
|
||||||
void dragEnterEvent(QDragEnterEvent* ev);
|
void dragEnterEvent(QDragEnterEvent* ev);
|
||||||
void dropEvent(QDropEvent* ev);
|
void dropEvent(QDropEvent* ev);
|
||||||
//TODO: void registerReceipt(int receipt, int messageID, MessageActionPtr msg);
|
void registerReceipt(int receipt, int messageID, ChatMessage* msg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Friend* f;
|
Friend* f;
|
||||||
|
@ -107,7 +107,7 @@ private:
|
||||||
void stopCounter();
|
void stopCounter();
|
||||||
QString secondsToDHMS(quint32 duration);
|
QString secondsToDHMS(quint32 duration);
|
||||||
QHash<int, int> receipts;
|
QHash<int, int> receipts;
|
||||||
//TODO: QMap<int, MessageActionPtr> undeliveredMsgs;
|
QMap<int, ChatMessage*> undeliveredMsgs;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CHATFORM_H
|
#endif // CHATFORM_H
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include "src/core.h"
|
#include "src/core.h"
|
||||||
#include "src/friendlist.h"
|
#include "src/friendlist.h"
|
||||||
#include "src/friend.h"
|
#include "src/friend.h"
|
||||||
#include "src/chatlog/chatlog.h"
|
#include "src/chatlog/content/text.h"
|
||||||
|
|
||||||
GenericChatForm::GenericChatForm(QWidget *parent) :
|
GenericChatForm::GenericChatForm(QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
|
@ -202,24 +202,16 @@ void GenericChatForm::onSaveLogClicked()
|
||||||
// chatWidget->insertMessage(ca);
|
// chatWidget->insertMessage(ca);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
//MessageActionPtr GenericChatForm::addMessage(const ToxID& author, const QString &message, bool isAction,
|
ChatMessage* GenericChatForm::addMessage(const ToxID& author, const QString &message, bool isAction,
|
||||||
// const QDateTime &datetime, bool isSent)
|
const QDateTime &datetime, bool isSent)
|
||||||
//{
|
{
|
||||||
// MessageActionPtr ca = genMessageActionAction(author, message, isAction, datetime);
|
return chatWidget->addChatMessage(Core::getInstance()->getPeerName(author), new Text(message), datetime);
|
||||||
// if (isSent)
|
}
|
||||||
// ca->markAsSent();
|
|
||||||
// chatWidget->insertMessage(ca);
|
|
||||||
// return ca;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//MessageActionPtr GenericChatForm::addSelfMessage(const QString &message, bool isAction, const QDateTime &datetime, bool isSent)
|
ChatMessage* GenericChatForm::addSelfMessage(const QString &message, bool isAction, const QDateTime &datetime, bool isSent)
|
||||||
//{
|
{
|
||||||
// MessageActionPtr ca = genSelfActionAction(message, isAction, datetime);
|
return chatWidget->addChatMessage(Core::getInstance()->getUsername(), new Text(message));
|
||||||
// if (isSent)
|
}
|
||||||
// ca->markAsSent();
|
|
||||||
// chatWidget->insertMessage(ca);
|
|
||||||
// return ca;
|
|
||||||
//}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated The only reason it's still alive is because the groupchat API is a bit limited
|
* @deprecated The only reason it's still alive is because the groupchat API is a bit limited
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include "src/corestructs.h"
|
#include "src/corestructs.h"
|
||||||
|
#include "src/chatlog/chatlog.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?
|
||||||
|
@ -32,6 +33,7 @@ class QPushButton;
|
||||||
class CroppingLabel;
|
class CroppingLabel;
|
||||||
class ChatTextEdit;
|
class ChatTextEdit;
|
||||||
class ChatLog;
|
class ChatLog;
|
||||||
|
class ChatMessage;
|
||||||
class MaskablePixmapWidget;
|
class MaskablePixmapWidget;
|
||||||
struct ToxID;
|
struct ToxID;
|
||||||
|
|
||||||
|
@ -49,8 +51,8 @@ public:
|
||||||
virtual void show(Ui::MainWindow &ui);
|
virtual void show(Ui::MainWindow &ui);
|
||||||
|
|
||||||
void addMessage(const QString& author, const QString &message, bool isAction, const QDateTime &datetime); ///< Deprecated
|
void addMessage(const QString& author, const QString &message, bool isAction, const QDateTime &datetime); ///< Deprecated
|
||||||
// TODO: MessageActionPtr addMessage(const ToxID& author, const QString &message, bool isAction, const QDateTime &datetime, bool isSent);
|
ChatMessage* addMessage(const ToxID& author, const QString &message, bool isAction, const QDateTime &datetime, bool isSent);
|
||||||
// MessageActionPtr addSelfMessage(const QString &message, bool isAction, const QDateTime &datetime, bool isSent);
|
ChatMessage* 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, const QString &type, const QDateTime &datetime);
|
||||||
void addAlertMessage(const QString& author, QString message, QDateTime datetime); ///< Deprecated
|
void addAlertMessage(const QString& author, QString message, QDateTime datetime); ///< Deprecated
|
||||||
void addAlertMessage(const ToxID& author, QString message, QDateTime datetime);
|
void addAlertMessage(const ToxID& author, QString message, QDateTime datetime);
|
||||||
|
|
BIN
ui/chatArea/spinner.png
Normal file
BIN
ui/chatArea/spinner.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
Loading…
Reference in New Issue
Block a user