1
0
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:
TriKriSta 2019-06-19 19:39:16 +03:00
parent 4c7ecb6024
commit b807998fe9
7 changed files with 48 additions and 32 deletions

View File

@ -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));
} }

View File

@ -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);

View File

@ -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);

View File

@ -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);
} }

View File

@ -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"));

View File

@ -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;
}; };

View File

@ -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();