From e1dc333ae055788dd1a2da86ca72aa126c157697 Mon Sep 17 00:00:00 2001 From: Shane Synan Date: Thu, 31 May 2018 22:13:07 -0500 Subject: [PATCH 1/1] client: Add input tooltips, clear format, cleanup Add tooltips to all of the input widget items, improving accessibility for otherwise icon-only buttons and menus. Add button to clear formatting, making it easy to immediately remove all those garish foreground and background colors you added, and the italic/bold/underline, too. Cleanup formatting options into distinct functions, paving the way for external signals changing formatting. --- src/qtui/inputwidget.cpp | 127 +++++++++++++++++++++++++++++++------ src/qtui/inputwidget.h | 80 +++++++++++++++++++++++ src/qtui/ui/inputwidget.ui | 79 ++++++++++++++++++++++- 3 files changed, 265 insertions(+), 21 deletions(-) diff --git a/src/qtui/inputwidget.cpp b/src/qtui/inputwidget.cpp index 1dcb3353..f74903fc 100644 --- a/src/qtui/inputwidget.cpp +++ b/src/qtui/inputwidget.cpp @@ -47,7 +47,7 @@ InputWidget::InputWidget(QWidget *parent) layout()->setAlignment(ui.showStyleButton, Qt::AlignBottom); layout()->setAlignment(ui.styleFrame, Qt::AlignBottom); - ui.styleFrame->setVisible(false); + setStyleOptionsExpanded(false); setFocusProxy(ui.inputEdit); ui.ownNick->setFocusProxy(ui.inputEdit); @@ -66,6 +66,7 @@ InputWidget::InputWidget(QWidget *parent) ui.underlineButton->setIcon(QIcon::fromTheme("format-text-underline")); ui.textcolorButton->setIcon(QIcon::fromTheme("format-text-color")); ui.highlightcolorButton->setIcon(QIcon::fromTheme("format-fill-color")); + ui.clearButton->setIcon(QIcon::fromTheme("edit-clear")); ui.encryptionIconLabel->hide(); _colorMenu = new QMenu(); @@ -87,10 +88,21 @@ InputWidget::InputWidget(QWidget *parent) _colorFillMenu->addAction(pix, tr("Clear Color"))->setData(""); ui.textcolorButton->setMenu(_colorMenu); + // Set the default action to clear color (last added action) + ui.textcolorButton->setDefaultAction(_colorMenu->actions().last()); connect(_colorMenu, SIGNAL(triggered(QAction *)), this, SLOT(colorChosen(QAction *))); + ui.highlightcolorButton->setMenu(_colorFillMenu); + // Set the default action to clear fill color (last added action) + ui.highlightcolorButton->setDefaultAction(_colorFillMenu->actions().last()); connect(_colorFillMenu, SIGNAL(triggered(QAction *)), this, SLOT(colorHighlightChosen(QAction *))); + // Show/hide style button + connect(ui.showStyleButton, SIGNAL(toggled(bool)), this, SLOT(setStyleOptionsExpanded(bool))); + + // Clear formatting button + connect(ui.clearButton, SIGNAL(clicked()), this, SLOT(clearFormat())); + new TabCompleter(ui.inputEdit); UiStyleSettings fs("Fonts"); @@ -370,6 +382,50 @@ BufferInfo InputWidget::currentBufferInfo() const return selectionModel()->currentIndex().data(NetworkModel::BufferInfoRole).value(); }; + +void InputWidget::applyFormatActiveColor() +{ + if (!ui.textcolorButton->defaultAction()) { + return; + } + colorChosen(ui.textcolorButton->defaultAction()); +} + + +void InputWidget::applyFormatActiveColorFill() +{ + if (!ui.highlightcolorButton->defaultAction()) { + return; + } + colorHighlightChosen(ui.highlightcolorButton->defaultAction()); +} + + +void InputWidget::toggleFormatBold() +{ + setFormatBold(!ui.boldButton->isChecked()); +} + + +void InputWidget::toggleFormatItalic() +{ + setFormatItalic(!ui.italicButton->isChecked()); +} + + +void InputWidget::toggleFormatUnderline() +{ + setFormatUnderline(!ui.underlineButton->isChecked()); +} + + +void InputWidget::clearFormat() +{ + // Clear all formatting for selection (not global) + setFormatClear(false); +} + + void InputWidget::setNetwork(NetworkId networkId) { if (_networkId == networkId) @@ -497,13 +553,47 @@ void InputWidget::onTextEntered(const QString &text) ui.underlineButton->setChecked(false); ui.italicButton->setChecked(false); + setFormatClear(true); +} + + +void InputWidget::setFormatClear(const bool global) +{ QTextCharFormat fmt; fmt.setFontWeight(QFont::Normal); fmt.setFontUnderline(false); fmt.setFontItalic(false); fmt.clearForeground(); fmt.clearBackground(); - inputLine()->setCurrentCharFormat(fmt); + if (global) { + inputLine()->setCurrentCharFormat(fmt); + } else { + setFormatOnSelection(fmt); + } +} + + +void InputWidget::setFormatBold(const bool bold) +{ + QTextCharFormat fmt; + fmt.setFontWeight(bold ? QFont::Bold : QFont::Normal); + mergeFormatOnSelection(fmt); +} + + +void InputWidget::setFormatItalic(const bool italic) +{ + QTextCharFormat fmt; + fmt.setFontItalic(italic); + mergeFormatOnSelection(fmt); +} + + +void InputWidget::setFormatUnderline(const bool underline) +{ + QTextCharFormat fmt; + fmt.setFontUnderline(underline); + mergeFormatOnSelection(fmt); } @@ -530,6 +620,19 @@ QTextCharFormat InputWidget::getFormatOfWordOrSelection() } +void InputWidget::setStyleOptionsExpanded(bool expanded) +{ + ui.styleFrame->setVisible(expanded); + if (expanded) { + ui.showStyleButton->setArrowType(Qt::LeftArrow); + ui.showStyleButton->setToolTip(tr("Hide formatting options")); + } else { + ui.showStyleButton->setArrowType(Qt::RightArrow); + ui.showStyleButton->setToolTip(tr("Show formatting options")); + } +} + + void InputWidget::currentCharFormatChanged(const QTextCharFormat &format) { fontChanged(format.font()); @@ -538,25 +641,19 @@ void InputWidget::currentCharFormatChanged(const QTextCharFormat &format) void InputWidget::on_boldButton_clicked(bool checked) { - QTextCharFormat fmt; - fmt.setFontWeight(checked ? QFont::Bold : QFont::Normal); - mergeFormatOnSelection(fmt); + setFormatBold(checked); } void InputWidget::on_underlineButton_clicked(bool checked) { - QTextCharFormat fmt; - fmt.setFontUnderline(checked); - mergeFormatOnSelection(fmt); + setFormatUnderline(checked); } void InputWidget::on_italicButton_clicked(bool checked) { - QTextCharFormat fmt; - fmt.setFontItalic(checked); - mergeFormatOnSelection(fmt); + setFormatItalic(checked); } @@ -610,13 +707,7 @@ void InputWidget::colorHighlightChosen(QAction *action) void InputWidget::on_showStyleButton_toggled(bool checked) { - ui.styleFrame->setVisible(checked); - if (checked) { - ui.showStyleButton->setArrowType(Qt::LeftArrow); - } - else { - ui.showStyleButton->setArrowType(Qt::RightArrow); - } + setStyleOptionsExpanded(checked); } diff --git a/src/qtui/inputwidget.h b/src/qtui/inputwidget.h index 6b9e4155..dcf3b5a6 100644 --- a/src/qtui/inputwidget.h +++ b/src/qtui/inputwidget.h @@ -44,6 +44,49 @@ public: inline MultiLineEdit *inputLine() const { return ui.inputEdit; } +public slots: + /** + * Apply the active color to the selected or typed text + * + * Active color is chosen using the UI menu. + */ + void applyFormatActiveColor(); + + /** + * Apply the active fill color to the selected or typed text background + * + * Fill color is chosen using the UI menu. + */ + void applyFormatActiveColorFill(); + + /** + * Toggle the boldness of the selected or typed text + * + * Bold becomes normal, and normal becomes bold. + */ + void toggleFormatBold(); + + /** + * Toggle the italicness of the selected or typed text + * + * Italicized becomes normal, and normal becomes italicized. + */ + void toggleFormatItalic(); + + /** + * Toggle the underlining of the selected or typed text + * + * Underlined becomes normal, and normal becomes underlined. + */ + void toggleFormatUnderline(); + + /** + * Clear the formatting of the selected or typed text + * + * Clears the font weight (bold, italic, underline) and foreground/background coloring. + */ + void clearFormat(); + protected: virtual bool eventFilter(QObject *watched, QEvent *event); @@ -75,6 +118,13 @@ private slots: BufferInfo currentBufferInfo() const; + /** + * Set whether or not the style options frame is expanded + * + * @param visible If true, expand the style options frame, otherwise collapse it + */ + void setStyleOptionsExpanded(const bool visible); + void currentCharFormatChanged(const QTextCharFormat &format); void on_showStyleButton_toggled(bool checked); void on_boldButton_clicked(bool checked); @@ -84,6 +134,36 @@ private slots: void colorHighlightChosen(QAction *action); private: + /** + * Clear the formatting of the text, globally or selected text only + * + * Clears the font weight (bold, italic, underline) and foreground/background coloring. + * + * @param global If true, clear all text formatting, otherwise only clear selected text + */ + void setFormatClear(const bool global = false); + + /** + * Sets the boldness of the selected or typed text + * + * @param bold If true, set text bold, otherwise set text normal + */ + void setFormatBold(const bool bold); + + /** + * Sets the italicness of the selected or typed text + * + * @param bold If true, set text italic, otherwise set text normal + */ + void setFormatItalic(const bool italic); + + /** + * Sets the underline of the selected or typed text + * + * @param bold If true, set text underlined, otherwise set text normal + */ + void setFormatUnderline(const bool underline); + Ui::InputWidget ui; NetworkId _networkId; diff --git a/src/qtui/ui/inputwidget.ui b/src/qtui/ui/inputwidget.ui index 73f2abd7..7baf6571 100644 --- a/src/qtui/ui/inputwidget.ui +++ b/src/qtui/ui/inputwidget.ui @@ -27,9 +27,18 @@ - -1 + 6 - + + 0 + + + 0 + + + 0 + + 0 @@ -46,6 +55,9 @@ 24 + + View and change nick + true @@ -88,7 +100,16 @@ 1 - + + 0 + + + 0 + + + 0 + + 0 @@ -114,6 +135,9 @@ 24 + + Bold + @@ -151,6 +175,9 @@ 24 + + Italic + @@ -191,6 +218,9 @@ 24 + + Underline + @@ -228,6 +258,9 @@ 24 + + Set foreground color + @@ -256,6 +289,9 @@ 24 + + Set background color + @@ -264,6 +300,43 @@ + + + + true + + + + 0 + 0 + + + + + 26 + 24 + + + + + 26 + 24 + + + + Clear formatting + + + + + + + 16 + 16 + + + + -- 2.20.1