mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
refactor: simple edit code
This commit is contained in:
parent
4c7ecb6024
commit
b807998fe9
|
@ -168,8 +168,9 @@ void ChatLog::updateSceneRect()
|
||||||
|
|
||||||
void ChatLog::layout(int start, int end, qreal width)
|
void ChatLog::layout(int start, int end, qreal width)
|
||||||
{
|
{
|
||||||
if (lines.empty())
|
if (lines.empty()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
qreal h = 0.0;
|
qreal h = 0.0;
|
||||||
|
|
||||||
|
@ -312,8 +313,9 @@ void ChatLog::mouseMoveEvent(QMouseEvent* ev)
|
||||||
// Much faster than QGraphicsScene::itemAt()!
|
// Much faster than QGraphicsScene::itemAt()!
|
||||||
ChatLineContent* ChatLog::getContentFromPos(QPointF scenePos) const
|
ChatLineContent* ChatLog::getContentFromPos(QPointF scenePos) const
|
||||||
{
|
{
|
||||||
if (lines.empty())
|
if (lines.empty()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
auto itr =
|
auto itr =
|
||||||
std::lower_bound(lines.cbegin(), lines.cend(), scenePos.y(), ChatLine::lessThanBSRectBottom);
|
std::lower_bound(lines.cbegin(), lines.cend(), scenePos.y(), ChatLine::lessThanBSRectBottom);
|
||||||
|
@ -454,8 +456,9 @@ void ChatLog::scrollToBottom()
|
||||||
|
|
||||||
void ChatLog::startResizeWorker()
|
void ChatLog::startResizeWorker()
|
||||||
{
|
{
|
||||||
if (lines.empty())
|
if (lines.empty()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// (re)start the worker
|
// (re)start the worker
|
||||||
if (!workerTimer->isActive()) {
|
if (!workerTimer->isActive()) {
|
||||||
|
@ -656,8 +659,9 @@ void ChatLog::scrollToLine(ChatLine::Ptr line)
|
||||||
|
|
||||||
void ChatLog::selectAll()
|
void ChatLog::selectAll()
|
||||||
{
|
{
|
||||||
if (lines.empty())
|
if (lines.empty()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
clearSelection();
|
clearSelection();
|
||||||
|
|
||||||
|
@ -717,8 +721,9 @@ void ChatLog::forceRelayout()
|
||||||
|
|
||||||
void ChatLog::checkVisibility(bool causedWheelEvent)
|
void ChatLog::checkVisibility(bool causedWheelEvent)
|
||||||
{
|
{
|
||||||
if (lines.empty())
|
if (lines.empty()) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// find first visible line
|
// find first visible line
|
||||||
auto lowerBound = std::lower_bound(lines.cbegin(), lines.cend(), getVisibleRect().top(),
|
auto lowerBound = std::lower_bound(lines.cbegin(), lines.cend(), getVisibleRect().top(),
|
||||||
|
@ -813,8 +818,9 @@ void ChatLog::updateTypingNotification()
|
||||||
|
|
||||||
qreal posY = 0.0;
|
qreal posY = 0.0;
|
||||||
|
|
||||||
if (!lines.empty())
|
if (!lines.empty()) {
|
||||||
posY = lines.last()->sceneBoundingRect().bottom() + lineSpacing;
|
posY = lines.last()->sceneBoundingRect().bottom() + lineSpacing;
|
||||||
|
}
|
||||||
|
|
||||||
notification->layout(useableWidth(), QPointF(0.0, posY));
|
notification->layout(useableWidth(), QPointF(0.0, posY));
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,10 +110,9 @@ ChatHistory::ChatHistory(Friend& f_, History* history_, const ICoreIdHandler& co
|
||||||
|
|
||||||
// NOTE: this has to be done _after_ sending all sent messages since initial
|
// NOTE: this has to be done _after_ sending all sent messages since initial
|
||||||
// state of the message has to be marked according to our dispatch state
|
// state of the message has to be marked according to our dispatch state
|
||||||
constexpr auto defaultNumMessagesToLoad = 100;
|
auto firstChatLogIdx = sessionChatLog.getFirstIdx().get() < DEF_NUM_MSG_TO_LOAD
|
||||||
auto firstChatLogIdx = sessionChatLog.getFirstIdx().get() < defaultNumMessagesToLoad
|
|
||||||
? ChatLogIdx(0)
|
? ChatLogIdx(0)
|
||||||
: sessionChatLog.getFirstIdx() - defaultNumMessagesToLoad;
|
: sessionChatLog.getFirstIdx() - DEF_NUM_MSG_TO_LOAD;
|
||||||
|
|
||||||
if (canUseHistory()) {
|
if (canUseHistory()) {
|
||||||
loadHistoryIntoSessionChatLog(firstChatLogIdx);
|
loadHistoryIntoSessionChatLog(firstChatLogIdx);
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
static const auto DEF_NUM_MSG_TO_LOAD = 100;
|
||||||
|
|
||||||
using ChatLogIdx =
|
using ChatLogIdx =
|
||||||
NamedType<size_t, struct ChatLogIdxTag, Orderable, UnderlyingAddable, UnitlessDifferencable, Incrementable>;
|
NamedType<size_t, struct ChatLogIdxTag, Orderable, UnderlyingAddable, UnitlessDifferencable, Incrementable>;
|
||||||
Q_DECLARE_METATYPE(ChatLogIdx);
|
Q_DECLARE_METATYPE(ChatLogIdx);
|
||||||
|
|
|
@ -388,7 +388,7 @@ GenericChatForm::GenericChatForm(const Contact* contact, IChatLog& chatLog,
|
||||||
connect(contact, &Contact::displayedNameChanged, this, &GenericChatForm::setName);
|
connect(contact, &Contact::displayedNameChanged, this, &GenericChatForm::setName);
|
||||||
|
|
||||||
auto chatLogIdxRange = chatLog.getNextIdx() - chatLog.getFirstIdx();
|
auto chatLogIdxRange = chatLog.getNextIdx() - chatLog.getFirstIdx();
|
||||||
auto firstChatLogIdx = (chatLogIdxRange < 100) ? chatLog.getFirstIdx() : chatLog.getNextIdx() - 100;
|
auto firstChatLogIdx = (chatLogIdxRange < DEF_NUM_MSG_TO_LOAD) ? chatLog.getFirstIdx() : chatLog.getNextIdx() - DEF_NUM_MSG_TO_LOAD;
|
||||||
|
|
||||||
renderMessages(firstChatLogIdx, chatLog.getNextIdx());
|
renderMessages(firstChatLogIdx, chatLog.getNextIdx());
|
||||||
|
|
||||||
|
@ -670,10 +670,10 @@ void GenericChatForm::loadHistoryTo(const QDateTime &time)
|
||||||
{
|
{
|
||||||
auto end = ChatLogIdx(0);
|
auto end = ChatLogIdx(0);
|
||||||
if (time.isNull()) {
|
if (time.isNull()) {
|
||||||
if (messages.size() + 100 >= maxMessages) {
|
if (messages.size() + DEF_NUM_MSG_TO_LOAD >= maxMessages) {
|
||||||
end = ChatLogIdx(messages.rbegin()->first.get() - 100);
|
end = ChatLogIdx(messages.rbegin()->first.get() - DEF_NUM_MSG_TO_LOAD);
|
||||||
chatWidget->removeLasts(100);
|
chatWidget->removeLasts(DEF_NUM_MSG_TO_LOAD);
|
||||||
removeLastsMessages(100);
|
removeLastsMessages(DEF_NUM_MSG_TO_LOAD);
|
||||||
} else {
|
} else {
|
||||||
end = messages.begin()->first;
|
end = messages.begin()->first;
|
||||||
}
|
}
|
||||||
|
@ -682,8 +682,8 @@ void GenericChatForm::loadHistoryTo(const QDateTime &time)
|
||||||
}
|
}
|
||||||
|
|
||||||
auto begin = ChatLogIdx(0);
|
auto begin = ChatLogIdx(0);
|
||||||
if (end.get() > 100) {
|
if (end.get() > DEF_NUM_MSG_TO_LOAD) {
|
||||||
begin = ChatLogIdx(end.get() - 100);
|
begin = ChatLogIdx(end.get() - DEF_NUM_MSG_TO_LOAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
renderMessages(begin, end);
|
renderMessages(begin, end);
|
||||||
|
@ -693,10 +693,10 @@ void GenericChatForm::loadHistoryFrom(const QDateTime &time)
|
||||||
{
|
{
|
||||||
auto begin = ChatLogIdx(0);
|
auto begin = ChatLogIdx(0);
|
||||||
if (time.isNull()) {
|
if (time.isNull()) {
|
||||||
if (messages.size() + 100 >= maxMessages) {
|
if (messages.size() + DEF_NUM_MSG_TO_LOAD >= maxMessages) {
|
||||||
begin = ChatLogIdx(messages.rbegin()->first.get() + 100);
|
begin = ChatLogIdx(messages.rbegin()->first.get() + DEF_NUM_MSG_TO_LOAD);
|
||||||
chatWidget->removeFirsts(100);
|
chatWidget->removeFirsts(DEF_NUM_MSG_TO_LOAD);
|
||||||
removeFirstsMessages(100);
|
removeFirstsMessages(DEF_NUM_MSG_TO_LOAD);
|
||||||
} else {
|
} else {
|
||||||
begin = messages.rbegin()->first;
|
begin = messages.rbegin()->first;
|
||||||
}
|
}
|
||||||
|
@ -705,9 +705,9 @@ void GenericChatForm::loadHistoryFrom(const QDateTime &time)
|
||||||
begin = firstItemAfterDate(time.date(), chatLog);
|
begin = firstItemAfterDate(time.date(), chatLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
int add = 100;
|
int add = DEF_NUM_MSG_TO_LOAD;
|
||||||
if (begin.get() + 100 > chatLog.getNextIdx().get()) {
|
if (begin.get() + DEF_NUM_MSG_TO_LOAD > chatLog.getNextIdx().get()) {
|
||||||
add = chatLog.getNextIdx().get() - (begin.get() + 100);
|
add = chatLog.getNextIdx().get() - (begin.get() + DEF_NUM_MSG_TO_LOAD);
|
||||||
}
|
}
|
||||||
auto end = ChatLogIdx(begin.get() + add);
|
auto end = ChatLogIdx(begin.get() + add);
|
||||||
renderMessages(begin, end);
|
renderMessages(begin, end);
|
||||||
|
@ -724,8 +724,8 @@ void GenericChatForm::removeFirstsMessages(const int num)
|
||||||
|
|
||||||
void GenericChatForm::removeLastsMessages(const int num)
|
void GenericChatForm::removeLastsMessages(const int num)
|
||||||
{
|
{
|
||||||
if (messages.size() > 100) {
|
if (messages.size() > num) {
|
||||||
messages.erase(std::next(messages.end(), -100), messages.end());
|
messages.erase(std::next(messages.end(), -num), messages.end());
|
||||||
} else {
|
} else {
|
||||||
messages.clear();
|
messages.clear();
|
||||||
}
|
}
|
||||||
|
@ -1082,7 +1082,7 @@ void GenericChatForm::goToCurrentDate()
|
||||||
chatWidget->clear();
|
chatWidget->clear();
|
||||||
messages.clear();
|
messages.clear();
|
||||||
auto end = ChatLogIdx(chatLog.size() - 1);
|
auto end = ChatLogIdx(chatLog.size() - 1);
|
||||||
auto begin = end.get() > 100 ? ChatLogIdx(end.get() - 100) : ChatLogIdx(0);
|
auto begin = end.get() > DEF_NUM_MSG_TO_LOAD ? ChatLogIdx(end.get() - DEF_NUM_MSG_TO_LOAD) : ChatLogIdx(0);
|
||||||
|
|
||||||
renderMessages(begin, end);
|
renderMessages(begin, end);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,11 +38,15 @@ LoadHistoryDialog::LoadHistoryDialog(const IChatLog* chatLog, QWidget* parent)
|
||||||
&LoadHistoryDialog::highlightDates);
|
&LoadHistoryDialog::highlightDates);
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadHistoryDialog::LoadHistoryDialog(QWidget* parent)
|
LoadHistoryDialog::LoadHistoryDialog(Mode mode, QWidget* parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
, ui(new Ui::LoadHistoryDialog)
|
, ui(new Ui::LoadHistoryDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
if (mode == Mode::search) {
|
||||||
|
enableSearchMode();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadHistoryDialog::~LoadHistoryDialog()
|
LoadHistoryDialog::~LoadHistoryDialog()
|
||||||
|
@ -71,7 +75,7 @@ LoadHistoryDialog::LoadType LoadHistoryDialog::getLoadType()
|
||||||
return LoadType::to;
|
return LoadType::to;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadHistoryDialog::turnSearchMode()
|
void LoadHistoryDialog::enableSearchMode()
|
||||||
{
|
{
|
||||||
setWindowTitle(tr("Select Date Dialog"));
|
setWindowTitle(tr("Select Date Dialog"));
|
||||||
ui->fromLabel->setText(tr("Select a date"));
|
ui->fromLabel->setText(tr("Select a date"));
|
||||||
|
|
|
@ -39,18 +39,24 @@ public:
|
||||||
to
|
to
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Mode {
|
||||||
|
common,
|
||||||
|
search
|
||||||
|
};
|
||||||
|
|
||||||
explicit LoadHistoryDialog(const IChatLog* chatLog, QWidget* parent = nullptr);
|
explicit LoadHistoryDialog(const IChatLog* chatLog, QWidget* parent = nullptr);
|
||||||
explicit LoadHistoryDialog(QWidget* parent = nullptr);
|
explicit LoadHistoryDialog(Mode mode, QWidget* parent = nullptr);
|
||||||
~LoadHistoryDialog();
|
~LoadHistoryDialog();
|
||||||
|
|
||||||
QDateTime getFromDate();
|
QDateTime getFromDate();
|
||||||
LoadType getLoadType();
|
LoadType getLoadType();
|
||||||
void turnSearchMode();
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void highlightDates(int year, int month);
|
void highlightDates(int year, int month);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void enableSearchMode();
|
||||||
|
|
||||||
Ui::LoadHistoryDialog* ui;
|
Ui::LoadHistoryDialog* ui;
|
||||||
const IChatLog* chatLog;
|
const IChatLog* chatLog;
|
||||||
};
|
};
|
||||||
|
|
|
@ -161,8 +161,7 @@ void SearchSettingsForm::onRegularClicked(const bool checked)
|
||||||
|
|
||||||
void SearchSettingsForm::onChoiceDate()
|
void SearchSettingsForm::onChoiceDate()
|
||||||
{
|
{
|
||||||
LoadHistoryDialog dlg;
|
LoadHistoryDialog dlg(LoadHistoryDialog::search);
|
||||||
dlg.turnSearchMode();
|
|
||||||
if (dlg.exec()) {
|
if (dlg.exec()) {
|
||||||
startTime = dlg.getFromDate();
|
startTime = dlg.getFromDate();
|
||||||
updateStartDateLabel();
|
updateStartDateLabel();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user