diff --git a/src/chatlog/content/text.cpp b/src/chatlog/content/text.cpp index e1877ad23..d32adc4e8 100644 --- a/src/chatlog/content/text.cpp +++ b/src/chatlog/content/text.cpp @@ -66,11 +66,9 @@ void Text::selectText(const QString& txt, const std::pair& point) return; } - selectCursor = doc->find(txt, point.first); - selectPoint = point; + auto cursor = doc->find(txt, point.first); - regenerate(); - update(); + selectText(cursor, point); } void Text::selectText(const QRegularExpression &exp, const std::pair& point) @@ -81,20 +79,14 @@ void Text::selectText(const QRegularExpression &exp, const std::pair& return; } - selectCursor = doc->find(exp, point.first); - selectPoint = point; + auto cursor = doc->find(exp, point.first); - regenerate(); - update(); + selectText(cursor, point); } void Text::deselectText() { dirty = true; - - selectCursor = QTextCursor(); - selectPoint = {0, 0}; - regenerate(); update(); } @@ -363,10 +355,6 @@ void Text::regenerate() dirty = false; } - if (!selectCursor.isNull()) { - selectText(selectCursor, selectPoint); - } - // if we are not visible -> free mem if (!keepInMemory) freeResources(); @@ -474,6 +462,9 @@ void Text::selectText(QTextCursor& cursor, const std::pair& point) QTextCharFormat format; format.setBackground(QBrush(Style::getColor(Style::SearchHighlighted))); cursor.mergeCharFormat(format); + + regenerate(); + update(); } } diff --git a/src/chatlog/content/text.h b/src/chatlog/content/text.h index 0f58bdb4a..e1f69112b 100644 --- a/src/chatlog/content/text.h +++ b/src/chatlog/content/text.h @@ -24,7 +24,6 @@ #include "src/widget/style.h" #include -#include class QTextDocument; @@ -111,9 +110,6 @@ private: TextType textType; QColor color; QColor customColor; - - QTextCursor selectCursor; - std::pair selectPoint{0, 0}; }; #endif // TEXT_H diff --git a/src/persistence/history.cpp b/src/persistence/history.cpp index d641e8cbd..6e9f29f6f 100644 --- a/src/persistence/history.cpp +++ b/src/persistence/history.cpp @@ -865,14 +865,14 @@ QDateTime History::getDateWhereFindPhrase(const QString& friendPk, const QDateTi break; } - QDateTime time = from; + QDateTime date = from; - if (!time.isValid()) { - time = QDateTime::currentDateTime(); + if (!date.isValid()) { + date = QDateTime::currentDateTime(); } if (parameter.period == PeriodSearch::AfterDate || parameter.period == PeriodSearch::BeforeDate) { - time = parameter.time; + date = QDateTime(parameter.date); } QString period; @@ -882,15 +882,15 @@ QDateTime History::getDateWhereFindPhrase(const QString& friendPk, const QDateTi break; case PeriodSearch::AfterDate: period = QStringLiteral("AND timestamp > '%1' ORDER BY timestamp ASC LIMIT 1;") - .arg(time.toMSecsSinceEpoch()); + .arg(date.toMSecsSinceEpoch()); break; case PeriodSearch::BeforeDate: period = QStringLiteral("AND timestamp < '%1' ORDER BY timestamp DESC LIMIT 1;") - .arg(time.toMSecsSinceEpoch()); + .arg(date.toMSecsSinceEpoch()); break; default: period = QStringLiteral("AND timestamp < '%1' ORDER BY timestamp DESC LIMIT 1;") - .arg(time.toMSecsSinceEpoch()); + .arg(date.toMSecsSinceEpoch()); break; } diff --git a/src/widget/form/genericchatform.cpp b/src/widget/form/genericchatform.cpp index 7a61f4179..13d7bb1bb 100644 --- a/src/widget/form/genericchatform.cpp +++ b/src/widget/form/genericchatform.cpp @@ -37,6 +37,7 @@ #include "src/widget/contentlayout.h" #include "src/widget/emoticonswidget.h" #include "src/widget/form/chatform.h" +#include "src/widget/form/loadhistorydialog.h" #include "src/widget/maskablepixmapwidget.h" #include "src/widget/searchform.h" #include "src/widget/style.h" @@ -640,23 +641,6 @@ QDateTime GenericChatForm::getTime(const ChatLine::Ptr &chatLine) const return QDateTime(); } -void GenericChatForm::loadHistory(const QDateTime &time, const LoadHistoryDialog::LoadType type) -{ - chatWidget->clear(); - messages.clear(); - - auto begin = firstItemAfterDate(time.date(), chatLog); - auto end = ChatLogIdx(begin.get() + 1); - - renderMessages(begin, end); - - if (type == LoadHistoryDialog::from) { - loadHistoryUpper(); - } else { - loadHistoryLower(); - } -} - void GenericChatForm::disableSearchText() { @@ -821,10 +805,22 @@ void GenericChatForm::onLoadHistory() { LoadHistoryDialog dlg(&chatLog); if (dlg.exec()) { + chatWidget->clear(); + messages.clear(); + QDateTime time = dlg.getFromDate(); auto type = dlg.getLoadType(); - loadHistory(time, type); + auto begin = firstItemAfterDate(dlg.getFromDate().date(), chatLog); + auto end = ChatLogIdx(begin.get() + 1); + + renderMessages(begin, end); + + if (type == LoadHistoryDialog::from) { + loadHistoryUpper(); + } else { + loadHistoryLower(); + } } } @@ -871,12 +867,6 @@ void GenericChatForm::searchInBegin(const QString& phrase, const ParameterSearch { disableSearchText(); - if (!parameter.time.isNull()) { - LoadHistoryDialog::LoadType type = (parameter.period == PeriodSearch::BeforeDate) - ? LoadHistoryDialog::to : LoadHistoryDialog::from; - loadHistory(parameter.time, type); - } - bool bForwardSearch = false; switch (parameter.period) { case PeriodSearch::WithTheFirst: { @@ -894,13 +884,13 @@ void GenericChatForm::searchInBegin(const QString& phrase, const ParameterSearch } case PeriodSearch::AfterDate: { bForwardSearch = true; - searchPos.logIdx = firstItemAfterDate(parameter.time.date(), chatLog); + searchPos.logIdx = firstItemAfterDate(parameter.date, chatLog); searchPos.numMatches = 0; break; } case PeriodSearch::BeforeDate: { bForwardSearch = false; - searchPos.logIdx = firstItemAfterDate(parameter.time.date(), chatLog); + searchPos.logIdx = firstItemAfterDate(parameter.date, chatLog); searchPos.numMatches = 0; break; } @@ -1011,7 +1001,7 @@ void GenericChatForm::loadHistoryLower() void GenericChatForm::loadHistoryUpper() { - auto begin = messages.rbegin()->first; + auto begin = messages.end()->first; int add = 100; if (begin.get() + 100 > chatLog.getNextIdx().get()) { diff --git a/src/widget/form/genericchatform.h b/src/widget/form/genericchatform.h index f3621f14a..83f2b1d90 100644 --- a/src/widget/form/genericchatform.h +++ b/src/widget/form/genericchatform.h @@ -23,7 +23,6 @@ #include "src/chatlog/chatmessage.h" #include "src/core/toxpk.h" #include "src/model/ichatlog.h" -#include "src/widget/form/loadhistorydialog.h" #include "src/widget/searchtypes.h" #include @@ -134,7 +133,6 @@ private: void retranslateUi(); void addSystemDateMessage(const QDate& date); QDateTime getTime(const ChatLine::Ptr& chatLine) const; - void loadHistory(const QDateTime& time, const LoadHistoryDialog::LoadType type); protected: ChatMessage::Ptr createMessage(const ToxPk& author, const QString& message, diff --git a/src/widget/form/loadhistorydialog.cpp b/src/widget/form/loadhistorydialog.cpp index 12e9d8197..2ff15eeb4 100644 --- a/src/widget/form/loadhistorydialog.cpp +++ b/src/widget/form/loadhistorydialog.cpp @@ -71,12 +71,14 @@ LoadHistoryDialog::LoadType LoadHistoryDialog::getLoadType() return LoadType::to; } -void LoadHistoryDialog::turnSearchMode() +void LoadHistoryDialog::setTitle(const QString& title) { - setWindowTitle(tr("Select Date Dialog")); - ui->fromLabel->setText(tr("Select a date")); - ui->loadTypeComboBox->setVisible(false); - ui->infoLabel->setVisible(false); + setWindowTitle(title); +} + +void LoadHistoryDialog::setInfoLabel(const QString& info) +{ + ui->fromLabel->setText(info); } void LoadHistoryDialog::highlightDates(int year, int month) diff --git a/src/widget/form/loadhistorydialog.h b/src/widget/form/loadhistorydialog.h index 59c769573..dfb046867 100644 --- a/src/widget/form/loadhistorydialog.h +++ b/src/widget/form/loadhistorydialog.h @@ -45,7 +45,8 @@ public: QDateTime getFromDate(); LoadType getLoadType(); - void turnSearchMode(); + void setTitle(const QString& title); + void setInfoLabel(const QString& info); public slots: void highlightDates(int year, int month); diff --git a/src/widget/form/loadhistorydialog.ui b/src/widget/form/loadhistorydialog.ui index b382c706d..5bf3fc553 100644 --- a/src/widget/form/loadhistorydialog.ui +++ b/src/widget/form/loadhistorydialog.ui @@ -41,7 +41,7 @@ - + (about 100 messages are loaded) diff --git a/src/widget/form/searchsettingsform.cpp b/src/widget/form/searchsettingsform.cpp index 733c1a4e2..abdf6b40c 100644 --- a/src/widget/form/searchsettingsform.cpp +++ b/src/widget/form/searchsettingsform.cpp @@ -86,7 +86,7 @@ ParameterSearch SearchSettingsForm::getParameterSearch() break; } - ps.time = startTime; + ps.date = startDate; ps.isUpdate = isUpdate; isUpdate = false; @@ -101,7 +101,7 @@ void SearchSettingsForm::reloadTheme() void SearchSettingsForm::updateStartDateLabel() { - ui->startDateLabel->setText(startTime.toString(Settings::getInstance().getDateFormat())); + ui->startDateLabel->setText(startDate.toString(Settings::getInstance().getDateFormat())); } void SearchSettingsForm::setUpdate(const bool isUpdate) @@ -119,8 +119,8 @@ void SearchSettingsForm::onStartSearchSelected(const int index) ui->choiceDateButton->setProperty("state", QStringLiteral("green")); ui->choiceDateButton->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/buttons.css"))); - if (startTime.isNull()) { - startTime = QDateTime::currentDateTime(); + if (startDate.isNull()) { + startDate = QDate::currentDate(); updateStartDateLabel(); } @@ -162,9 +162,10 @@ void SearchSettingsForm::onRegularClicked(const bool checked) void SearchSettingsForm::onChoiceDate() { LoadHistoryDialog dlg; - dlg.turnSearchMode(); + dlg.setTitle(tr("Select Date Dialog")); + dlg.setInfoLabel(tr("Select a date")); if (dlg.exec()) { - startTime = dlg.getFromDate(); + startDate = dlg.getFromDate().date(); updateStartDateLabel(); } diff --git a/src/widget/form/searchsettingsform.h b/src/widget/form/searchsettingsform.h index 1814c4e75..91d665be5 100644 --- a/src/widget/form/searchsettingsform.h +++ b/src/widget/form/searchsettingsform.h @@ -40,7 +40,7 @@ public: private: Ui::SearchSettingsForm *ui; - QDateTime startTime; + QDate startDate; bool isUpdate{false}; void updateStartDateLabel(); diff --git a/src/widget/searchtypes.h b/src/widget/searchtypes.h index 7130887b6..cbfce5738 100644 --- a/src/widget/searchtypes.h +++ b/src/widget/searchtypes.h @@ -48,13 +48,13 @@ enum class SearchDirection { struct ParameterSearch { FilterSearch filter{FilterSearch::None}; PeriodSearch period{PeriodSearch::None}; - QDateTime time; + QDate date; bool isUpdate{false}; bool operator ==(const ParameterSearch& other) { return filter == other.filter && period == other.period && - time == other.time; + date == other.date; } bool operator !=(const ParameterSearch& other) {