X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Finputwidget.cpp;h=b0272b225513a22e7b51264b9200538a2e8c5af7;hp=6ac42be31c4733642a4dc329bb710a71bdb1742e;hb=a65f42197839da536975b3e2858eedcef420035f;hpb=f8ac74fd09451dcb61f34730f5f605f0fadbb9e8 diff --git a/src/qtui/inputwidget.cpp b/src/qtui/inputwidget.cpp index 6ac42be3..b0272b22 100644 --- a/src/qtui/inputwidget.cpp +++ b/src/qtui/inputwidget.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 by the Quassel Project * + * Copyright (C) 2005-2019 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,17 +20,21 @@ #include "inputwidget.h" +#include +#include +#include +#include + #include "action.h" #include "actioncollection.h" #include "bufferview.h" #include "client.h" -#include "iconloader.h" +#include "icon.h" #include "ircuser.h" #include "networkmodel.h" #include "qtui.h" #include "qtuisettings.h" #include "tabcompleter.h" -#include const int leftMargin = 3; @@ -46,7 +50,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); @@ -60,11 +64,10 @@ InputWidget::InputWidget(QWidget *parent) ui.inputEdit->setMode(MultiLineEdit::MultiLine); ui.inputEdit->setPasteProtectionEnabled(true); - ui.boldButton->setIcon(SmallIcon("format-text-bold")); - ui.italicButton->setIcon(SmallIcon("format-text-italic")); - ui.underlineButton->setIcon(SmallIcon("format-text-underline")); - ui.textcolorButton->setIcon(SmallIcon("format-text-color")); - ui.highlightcolorButton->setIcon(SmallIcon("format-fill-color")); + ui.boldButton->setIcon(icon::get("format-text-bold")); + ui.italicButton->setIcon(icon::get("format-text-italic")); + ui.underlineButton->setIcon(icon::get("format-text-underline")); + ui.clearButton->setIcon(icon::get("edit-clear")); ui.encryptionIconLabel->hide(); _colorMenu = new QMenu(); @@ -86,10 +89,25 @@ 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 *))); + // Needs to be done after adding the menu, otherwise the icon mysteriously vanishes until clicked + ui.textcolorButton->setIcon(icon::get("format-text-color")); + ui.highlightcolorButton->setIcon(icon::get("format-fill-color")); + + // 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"); @@ -100,11 +118,6 @@ InputWidget::InputWidget(QWidget *parent) UiSettings s("InputWidget"); -#ifdef HAVE_KDE - s.notify("EnableSpellCheck", this, SLOT(setEnableSpellCheck(QVariant))); - setEnableSpellCheck(s.value("EnableSpellCheck", false)); -#endif - s.notify("EnableEmacsMode", this, SLOT(setEnableEmacsMode(QVariant))); setEnableEmacsMode(s.value("EnableEmacsMode", false)); @@ -115,7 +128,7 @@ InputWidget::InputWidget(QWidget *parent) setShowStyleButtons(s.value("ShowStyleButtons", true)); s.notify("EnablePerChatHistory", this, SLOT(setEnablePerChatHistory(QVariant))); - setEnablePerChatHistory(s.value("EnablePerChatHistory", false)); + setEnablePerChatHistory(s.value("EnablePerChatHistory", true)); s.notify("MaxNumLines", this, SLOT(setMaxLines(QVariant))); setMaxLines(s.value("MaxNumLines", 5)); @@ -124,7 +137,7 @@ InputWidget::InputWidget(QWidget *parent) setScrollBarsEnabled(s.value("EnableScrollBars", true)); s.notify("EnableLineWrap", this, SLOT(setLineWrapEnabled(QVariant))); - setLineWrapEnabled(s.value("EnableLineWrap", false)); + setLineWrapEnabled(s.value("EnableLineWrap", true)); s.notify("EnableMultiLine", this, SLOT(setMultiLineEnabled(QVariant))); setMultiLineEnabled(s.value("EnableMultiLine", true)); @@ -171,12 +184,6 @@ void InputWidget::setCustomFont(const QVariant &v) } -void InputWidget::setEnableSpellCheck(const QVariant &v) -{ - ui.inputEdit->setSpellCheckEnabled(v.toBool()); -} - - void InputWidget::setEnableEmacsMode(const QVariant &v) { ui.inputEdit->setEmacsMode(v.toBool()); @@ -369,6 +376,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) @@ -470,7 +521,7 @@ void InputWidget::updateNickSelector() const ui.ownNick->addItems(nicks); if (me && me->isAway()) - ui.ownNick->setItemData(nickIdx, SmallIcon("user-away"), Qt::DecorationRole); + ui.ownNick->setItemData(nickIdx, icon::get({"im-user-away", "user-away"}), Qt::DecorationRole); ui.ownNick->setCurrentIndex(nickIdx); } @@ -492,23 +543,65 @@ void InputWidget::changeNick(const QString &newNick) const void InputWidget::onTextEntered(const QString &text) { Client::userInput(currentBufferInfo(), text); - ui.boldButton->setChecked(false); - ui.underlineButton->setChecked(false); - ui.italicButton->setChecked(false); + // Remove formatting from entered text + // TODO: Offer a way to convert pasted text to mIRC formatting codes + setFormatClear(true); +} + + +void InputWidget::setFormatClear(const bool global) +{ + // Apply formatting 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); + } -#ifdef HAVE_KDE - // Set highlighter back to active in case it was deactivated by too many errors. - if (ui.inputEdit->highlighter()) - ui.inputEdit->highlighter()->setActive(true); -#endif + // Make sure UI state follows + ui.boldButton->setChecked(false); + ui.italicButton->setChecked(false); + ui.underlineButton->setChecked(false); +} + + +void InputWidget::setFormatBold(const bool bold) +{ + // Apply formatting + QTextCharFormat fmt; + fmt.setFontWeight(bold ? QFont::Bold : QFont::Normal); + mergeFormatOnSelection(fmt); + // Make sure UI state follows + ui.boldButton->setChecked(bold); +} + + +void InputWidget::setFormatItalic(const bool italic) +{ + // Apply formatting + QTextCharFormat fmt; + fmt.setFontItalic(italic); + mergeFormatOnSelection(fmt); + // Make sure UI state follows + ui.italicButton->setChecked(italic); +} + + +void InputWidget::setFormatUnderline(const bool underline) +{ + // Apply formatting + QTextCharFormat fmt; + fmt.setFontUnderline(underline); + mergeFormatOnSelection(fmt); + // Make sure UI state follows + ui.underlineButton->setChecked(underline); } @@ -535,6 +628,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()); @@ -543,25 +649,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); } @@ -589,7 +689,7 @@ void InputWidget::colorChosen(QAction *action) mergeFormatOnSelection(fmt); } ui.textcolorButton->setDefaultAction(action); - ui.textcolorButton->setIcon(createColorToolButtonIcon(SmallIcon("format-text-color"), color)); + ui.textcolorButton->setIcon(createColorToolButtonIcon(icon::get("format-text-color"), color)); } @@ -609,19 +709,13 @@ void InputWidget::colorHighlightChosen(QAction *action) mergeFormatOnSelection(fmt); } ui.highlightcolorButton->setDefaultAction(action); - ui.highlightcolorButton->setIcon(createColorToolButtonIcon(SmallIcon("format-fill-color"), color)); + ui.highlightcolorButton->setIcon(createColorToolButtonIcon(icon::get("format-fill-color"), color)); } 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); }