tools/chatgui: input bar with emoji panel, custom tab bar, Ctrl+Enter multiline, scroll fixes
This commit is contained in:
1 parent
b667d6f352
commit
e50ca9978e
11 files changed
+521
-23
No files matched your search
@@ -1,9 +1,12 @@
|
||||
#include "messagelist.h"
|
||||
#include "chatview.h"
|
||||
#include "messagedelegate.h"
|
||||
#include "inputbar.h"
|
||||
#include "emojipanel.h"
|
||||
#include <QVBoxLayout>
|
||||
#include <QPainter>
|
||||
#include <QPixmap>
|
||||
#include <QDateTime>
|
||||
|
||||
static QPixmap makeAvatar(const QColor &color, const QString &letter, int size = 36) {
|
||||
QPixmap pix(size, size);
|
||||
@@ -33,28 +36,6 @@ static QVariant makeReaction(const QString &emoji, int count,
|
||||
return m;
|
||||
}
|
||||
|
||||
MessageList::MessageList(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_view(new ChatView(this))
|
||||
, m_model(new QStandardItemModel(this))
|
||||
{
|
||||
auto *layout = new QVBoxLayout(this);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
layout->setSpacing(0);
|
||||
|
||||
m_view->setModel(m_model);
|
||||
m_view->setItemDelegate(new MessageDelegate(this));
|
||||
m_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
m_view->setSelectionMode(QAbstractItemView::NoSelection);
|
||||
m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
m_view->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
m_view->setFrameShape(QFrame::NoFrame);
|
||||
m_view->setBackgroundImage("../resources/bg.jpg");
|
||||
layout->addWidget(m_view);
|
||||
|
||||
populateStubData();
|
||||
}
|
||||
|
||||
static void setMsg(QStandardItem *item,
|
||||
const QString &author, const QString &text, const QString &time,
|
||||
const QPixmap &avatar, bool edited,
|
||||
@@ -74,6 +55,47 @@ static void setMsg(QStandardItem *item,
|
||||
item->setData(reactions, MsgReactionsRole);
|
||||
}
|
||||
|
||||
MessageList::MessageList(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_view(new ChatView(this))
|
||||
, m_model(new QStandardItemModel(this))
|
||||
, m_inputBar(nullptr)
|
||||
, m_emojiPanel(nullptr)
|
||||
{
|
||||
auto *layout = new QVBoxLayout(this);
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
layout->setSpacing(0);
|
||||
|
||||
m_view->setModel(m_model);
|
||||
m_view->setItemDelegate(new MessageDelegate(this));
|
||||
m_view->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
m_view->setSelectionMode(QAbstractItemView::NoSelection);
|
||||
m_view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
m_view->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
|
||||
m_view->setFrameShape(QFrame::NoFrame);
|
||||
m_view->setBackgroundImage("../resources/bg.jpg");
|
||||
layout->addWidget(m_view, 1);
|
||||
|
||||
m_emojiPanel = new EmojiPanel(this);
|
||||
layout->addWidget(m_emojiPanel);
|
||||
|
||||
m_inputBar = new InputBar(m_emojiPanel, this);
|
||||
layout->addWidget(m_inputBar);
|
||||
|
||||
connect(m_inputBar, &InputBar::sendMessage, this, [this](const QString &text) {
|
||||
QColor youColor(74, 144, 226);
|
||||
auto av = makeAvatar(youColor, "Y");
|
||||
auto *item = new QStandardItem();
|
||||
setMsg(item,
|
||||
QString::fromUtf8("You"), text,
|
||||
QDateTime::currentDateTime().toString("HH:mm"),
|
||||
av, false, false, QString(), QString(), {});
|
||||
m_model->appendRow(item);
|
||||
m_view->scrollToBottom();
|
||||
});
|
||||
|
||||
populateStubData();
|
||||
}
|
||||
void MessageList::populateStubData() {
|
||||
QColor cAlice(74, 144, 226), cBob(126, 211, 33), cCarol(245, 166, 35);
|
||||
QColor cDave(144, 19, 254), cEve(0, 184, 148);
|
||||
|
||||
Reference in new issue
Block a user