diff --git a/doc/user_manual_en.md b/doc/user_manual_en.md index db29ffd66..d781230b5 100644 --- a/doc/user_manual_en.md +++ b/doc/user_manual_en.md @@ -6,6 +6,7 @@ * [Settings](#settings) * [Groupchats](#groupchats) * [Message Styling](#message-styling) +* [Quotes](#quotes) * [Multi Window Mode](#multi-window-mode) * [Keyboard Shortcuts](#keyboard-shortcuts) @@ -239,6 +240,16 @@ Additionally, qTox supports three modes of Markdown parsing: *Note that any change in Markdown preference will require a restart.* +## Quotes + +qTox has feature to quote selected text in chat window: + +1. Select the text you want to quote. +2. Right-click on the selected text and choose "Quote selected text" in the +context menu. You also can use `ALT` + `q` shortcut. +3. Selected text will be automatically quoted into the message input area in a +pretty formatting. + ## Multi Window Mode In this mode, qTox will separate its main window into a single contact list and @@ -260,3 +271,4 @@ The following shortcuts are currently supported: | `CTRL` + `Page Up` | Switch to the previous contact| | `CTRL` + `TAB` | Switch to the next contact | | `CTRL` + `SHIFT` + `TAB` | Switch to the previous contact| +| `ALT` + `q` | Quote selected text | 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 98e6bc14a..22c1b411f 100644 --- a/translations/ru.ts +++ b/translations/ru.ts @@ -1171,6 +1171,10 @@ will be sent to them when they appear online to you. Clear displayed messages Очистить показываемые сообщения + + Quote selected text + Цитировать выделенное + Not sent Не отправлено