From 40a805c2fd66d7c5cd618fb4974dcd65bf7df650 Mon Sep 17 00:00:00 2001 From: Alexander Zhdanov Date: Mon, 6 Jun 2016 21:46:18 +0300 Subject: [PATCH] feat(genericchatform): add "Quote selected text" feature to chat window add "Quote selected text" feature to chat window context menu and set keyboard shortcut ALT+Q --- src/widget/form/genericchatform.cpp | 26 ++++++++++++++++++++++++++ src/widget/form/genericchatform.h | 3 ++- translations/ru.ts | 4 ++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/widget/form/genericchatform.cpp b/src/widget/form/genericchatform.cpp index 372df99cf..510ac9e57 100644 --- a/src/widget/form/genericchatform.cpp +++ b/src/widget/form/genericchatform.cpp @@ -191,6 +191,10 @@ GenericChatForm::GenericChatForm(QWidget *parent) QString(), this, SLOT(onSaveLogClicked())); clearAction = menu.addAction(QIcon::fromTheme("edit-clear"), QString(), this, SLOT(clearChatArea(bool))); + + quoteAction = menu.addAction(QIcon(), + QString(), this, SLOT(quoteSelectedText())); + menu.addSeparator(); connect(emoteButton, &QPushButton::clicked, @@ -199,6 +203,7 @@ GenericChatForm::GenericChatForm(QWidget *parent) this, &GenericChatForm::onChatContextMenuRequested); new QShortcut(Qt::CTRL + Qt::SHIFT + Qt::Key_L, this, SLOT(clearChatArea())); + new QShortcut(Qt::ALT + Qt::Key_Q, this, SLOT(quoteSelectedText())); chatWidget->setStyleSheet(Style::getStylesheet(":/ui/chatArea/chatArea.css")); headWidget->setStyleSheet(Style::getStylesheet(":/ui/chatArea/chatHead.css")); @@ -562,6 +567,26 @@ void GenericChatForm::onShowMessagesClicked() } } +void GenericChatForm::quoteSelectedText() +{ + QString selectedText = chatWidget->getSelectedText(); + + if (selectedText.isEmpty()) + return; + + // forming pretty quote text + // 1. insert "> " to the begining of quote; + // 2. replace all possible line terminators with "\n> "; + // 3. append new line to the end of quote. + QString quote = selectedText; + + quote.insert(0, "> "); + quote.replace(QRegExp(QString("\r\n|[\r\n\u2028\u2029]")), QString("\n> ")); + quote.append("\n"); + + msgEdit->append(quote); +} + void GenericChatForm::retranslateUi() { QString callObjectName = callButton->objectName(); @@ -587,6 +612,7 @@ void GenericChatForm::retranslateUi() screenshotButton->setToolTip(tr("Send a screenshot")); saveChatAction->setText(tr("Save chat log")); clearAction->setText(tr("Clear displayed messages")); + quoteAction->setText(tr("Quote selected text")); } void GenericChatForm::showNetcam() diff --git a/src/widget/form/genericchatform.h b/src/widget/form/genericchatform.h index a1d4d4d1a..985c0a21e 100644 --- a/src/widget/form/genericchatform.h +++ b/src/widget/form/genericchatform.h @@ -91,6 +91,7 @@ protected slots: void hideFileMenu(); void onShowMessagesClicked(); void onSplitterMoved(int pos, int index); + void quoteSelectedText(); private: void retranslateUi(); @@ -109,7 +110,7 @@ protected: virtual bool eventFilter(QObject* object, QEvent* event) final override; protected: - QAction* saveChatAction, *clearAction; + QAction* saveChatAction, *clearAction, *quoteAction; ToxId previousId; QDateTime prevMsgDateTime; Widget *parent; diff --git a/translations/ru.ts b/translations/ru.ts index 419768efa..09b659ad8 100644 --- a/translations/ru.ts +++ b/translations/ru.ts @@ -1175,6 +1175,10 @@ will be sent to them when they appear online to you. Clear displayed messages Очистить показываемые сообщения + + Quote selected text + Цитировать выделенное + Not sent Не отправлено