X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Finputwidget.cpp;h=511f13c5952459c656b4310547557f35c3948f79;hp=bbdbc1259f6270372d817932329272c197672535;hb=1f21c1f9613031ae263eeed0c4883bfcd5488343;hpb=ce26c3770b254362c7bd1e094ba8f8bf22133653 diff --git a/src/qtui/inputwidget.cpp b/src/qtui/inputwidget.cpp index bbdbc125..511f13c5 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,33 +20,38 @@ #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 +#include "util.h" const int leftMargin = 3; -InputWidget::InputWidget(QWidget *parent) - : AbstractItemView(parent), - _networkId(0) +InputWidget::InputWidget(QWidget* parent) + : AbstractItemView(parent) + , _networkId(0) { ui.setupUi(this); - connect(ui.ownNick, SIGNAL(activated(QString)), this, SLOT(changeNick(QString))); + connect(ui.ownNick, selectOverload(&QComboBox::activated), this, &InputWidget::changeNick); layout()->setAlignment(ui.ownNick, Qt::AlignBottom); layout()->setAlignment(ui.inputEdit, Qt::AlignBottom); 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,19 +65,19 @@ 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(); _colorFillMenu = new QMenu(); QStringList names; - names << tr("White") << tr("Black") << tr("Dark blue") << tr("Dark green") << tr("Red") << tr("Dark red") << tr("Dark magenta") << tr("Orange") - << tr("Yellow") << tr("Green") << tr("Dark cyan") << tr("Cyan") << tr("Blue") << tr("Magenta") << tr("Dark gray") << tr("Light gray"); + names << tr("White") << tr("Black") << tr("Dark blue") << tr("Dark green") << tr("Red") << tr("Dark red") << tr("Dark magenta") + << tr("Orange") << tr("Yellow") << tr("Green") << tr("Dark cyan") << tr("Cyan") << tr("Blue") << tr("Magenta") << tr("Dark gray") + << tr("Light gray"); QPixmap pix(16, 16); for (int i = 0; i < inputLine()->mircColorMap().count(); i++) { @@ -86,67 +91,56 @@ InputWidget::InputWidget(QWidget *parent) _colorFillMenu->addAction(pix, tr("Clear Color"))->setData(""); ui.textcolorButton->setMenu(_colorMenu); - connect(_colorMenu, SIGNAL(triggered(QAction *)), this, SLOT(colorChosen(QAction *))); + // Set the default action to clear color (last added action) + ui.textcolorButton->setDefaultAction(_colorMenu->actions().last()); + connect(_colorMenu, &QMenu::triggered, this, &InputWidget::colorChosen); + ui.highlightcolorButton->setMenu(_colorFillMenu); - connect(_colorFillMenu, SIGNAL(triggered(QAction *)), this, SLOT(colorHighlightChosen(QAction *))); + // Set the default action to clear fill color (last added action) + ui.highlightcolorButton->setDefaultAction(_colorFillMenu->actions().last()); + connect(_colorFillMenu, &QMenu::triggered, this, &InputWidget::colorHighlightChosen); + + // 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, &QAbstractButton::toggled, this, &InputWidget::setStyleOptionsExpanded); + + // Clear formatting button + connect(ui.clearButton, &QAbstractButton::clicked, this, &InputWidget::clearFormat); new TabCompleter(ui.inputEdit); UiStyleSettings fs("Fonts"); - fs.notify("UseCustomInputWidgetFont", this, SLOT(setUseCustomFont(QVariant))); - fs.notify("InputWidget", this, SLOT(setCustomFont(QVariant))); + fs.notify("UseCustomInputWidgetFont", this, &InputWidget::setUseCustomFont); + fs.notify("InputWidget", this, &InputWidget::setCustomFont); if (fs.value("UseCustomInputWidgetFont", false).toBool()) setCustomFont(fs.value("InputWidget", QFont())); UiSettings s("InputWidget"); + s.initAndNotify("EnableEmacsMode", this, &InputWidget::setEnableEmacsMode, false); + s.initAndNotify("ShowNickSelector", this, &InputWidget::setShowNickSelector, true); + s.initAndNotify("ShowStyleButtons", this, &InputWidget::setShowStyleButtons, true); + s.initAndNotify("EnablePerChatHistory", this, &InputWidget::setEnablePerChatHistory, true); + s.initAndNotify("MaxNumLines", this, &InputWidget::setMaxLines, 5); + s.initAndNotify("EnableScrollBars", this, &InputWidget::setScrollBarsEnabled, true); + s.initAndNotify("EnableLineWrap", this, &InputWidget::setLineWrapEnabled, true); + s.initAndNotify("EnableMultiLine", this, &InputWidget::setMultiLineEnabled, true); -#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)); - - s.notify("ShowNickSelector", this, SLOT(setShowNickSelector(QVariant))); - setShowNickSelector(s.value("ShowNickSelector", true)); - - s.notify("ShowStyleButtons", this, SLOT(setShowStyleButtons(QVariant))); - setShowStyleButtons(s.value("ShowStyleButtons", true)); - - s.notify("EnablePerChatHistory", this, SLOT(setEnablePerChatHistory(QVariant))); - setEnablePerChatHistory(s.value("EnablePerChatHistory", false)); - - s.notify("MaxNumLines", this, SLOT(setMaxLines(QVariant))); - setMaxLines(s.value("MaxNumLines", 5)); - - s.notify("EnableScrollBars", this, SLOT(setScrollBarsEnabled(QVariant))); - setScrollBarsEnabled(s.value("EnableScrollBars", true)); - - s.notify("EnableLineWrap", this, SLOT(setLineWrapEnabled(QVariant))); - setLineWrapEnabled(s.value("EnableLineWrap", false)); - - s.notify("EnableMultiLine", this, SLOT(setMultiLineEnabled(QVariant))); - setMultiLineEnabled(s.value("EnableMultiLine", true)); - - ActionCollection *coll = QtUi::actionCollection(); + ActionCollection* coll = QtUi::actionCollection(); + coll->addAction("FocusInputLine", + new Action{tr("Focus Input Line"), coll, this, selectOverload<>(&QWidget::setFocus), QKeySequence(Qt::CTRL + Qt::Key_L)}); - Action *activateInputline = coll->add("FocusInputLine"); - connect(activateInputline, SIGNAL(triggered()), SLOT(setFocus())); - activateInputline->setText(tr("Focus Input Line")); - activateInputline->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); - - connect(inputLine(), SIGNAL(textEntered(QString)), SLOT(onTextEntered(QString)), Qt::QueuedConnection); // make sure the line is already reset, bug #984 - connect(inputLine(), SIGNAL(currentCharFormatChanged(QTextCharFormat)), this, SLOT(currentCharFormatChanged(QTextCharFormat))); -} - - -InputWidget::~InputWidget() -{ + connect(inputLine(), + &MultiLineEdit::textEntered, + this, + &InputWidget::onTextEntered, + Qt::QueuedConnection); // make sure the line is already reset, bug #984 + connect(inputLine(), &QTextEdit::currentCharFormatChanged, this, &InputWidget::currentCharFormatChanged); } - -void InputWidget::setUseCustomFont(const QVariant &v) +void InputWidget::setUseCustomFont(const QVariant& v) { if (v.toBool()) { UiStyleSettings fs("Fonts"); @@ -156,8 +150,7 @@ void InputWidget::setUseCustomFont(const QVariant &v) setCustomFont(QFont()); } - -void InputWidget::setCustomFont(const QVariant &v) +void InputWidget::setCustomFont(const QVariant& v) { QFont font = v.value(); if (font.family().isEmpty()) @@ -170,72 +163,57 @@ void InputWidget::setCustomFont(const QVariant &v) ui.inputEdit->setCustomFont(font); } - -void InputWidget::setEnableSpellCheck(const QVariant &v) -{ - ui.inputEdit->setSpellCheckEnabled(v.toBool()); -} - - -void InputWidget::setEnableEmacsMode(const QVariant &v) +void InputWidget::setEnableEmacsMode(const QVariant& v) { ui.inputEdit->setEmacsMode(v.toBool()); } - -void InputWidget::setShowNickSelector(const QVariant &v) +void InputWidget::setShowNickSelector(const QVariant& v) { ui.ownNick->setVisible(v.toBool()); } - -void InputWidget::setShowStyleButtons(const QVariant &v) +void InputWidget::setShowStyleButtons(const QVariant& v) { ui.showStyleButton->setVisible(v.toBool()); } - -void InputWidget::setEnablePerChatHistory(const QVariant &v) +void InputWidget::setEnablePerChatHistory(const QVariant& v) { _perChatHistory = v.toBool(); } - -void InputWidget::setMaxLines(const QVariant &v) +void InputWidget::setMaxLines(const QVariant& v) { ui.inputEdit->setMaxHeight(v.toInt()); } - -void InputWidget::setScrollBarsEnabled(const QVariant &v) +void InputWidget::setScrollBarsEnabled(const QVariant& v) { ui.inputEdit->setScrollBarsEnabled(v.toBool()); } - -void InputWidget::setLineWrapEnabled(const QVariant &v) +void InputWidget::setLineWrapEnabled(const QVariant& v) { ui.inputEdit->setLineWrapEnabled(v.toBool()); } - -void InputWidget::setMultiLineEnabled(const QVariant &v) +void InputWidget::setMultiLineEnabled(const QVariant& v) { ui.inputEdit->setMode(v.toBool() ? MultiLineEdit::MultiLine : MultiLineEdit::SingleLine); } - -bool InputWidget::eventFilter(QObject *watched, QEvent *event) +bool InputWidget::eventFilter(QObject* watched, QEvent* event) { if (event->type() != QEvent::KeyPress) return false; - QKeyEvent *keyEvent = static_cast(event); + auto* keyEvent = static_cast(event); // keys from BufferView should be sent to (and focus) the input line - BufferView *view = qobject_cast(watched); + auto* view = qobject_cast(watched); if (view) { - if (keyEvent->text().length() == 1 && !(keyEvent->modifiers() & (Qt::ControlModifier ^ Qt::AltModifier))) { // normal key press + if (keyEvent->text().length() == 1 && !(keyEvent->modifiers() & (Qt::ControlModifier ^ Qt::AltModifier))) { // normal key press QChar c = keyEvent->text().at(0); if (c.isLetterOrNumber() || c.isSpace() || c.isPunct() || c.isSymbol()) { setFocus(); @@ -247,7 +225,7 @@ bool InputWidget::eventFilter(QObject *watched, QEvent *event) } else if (watched == ui.inputEdit) { if (keyEvent->matches(QKeySequence::Find)) { - QAction *act = GraphicalUi::actionCollection()->action("ToggleSearchBar"); + QAction* act = GraphicalUi::actionCollection()->action("ToggleSearchBar"); if (act) { act->toggle(); return true; @@ -258,20 +236,19 @@ bool InputWidget::eventFilter(QObject *watched, QEvent *event) return false; } - -void InputWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) +void InputWidget::currentChanged(const QModelIndex& current, const QModelIndex& previous) { BufferId currentBufferId = current.data(NetworkModel::BufferIdRole).value(); BufferId previousBufferId = previous.data(NetworkModel::BufferIdRole).value(); if (_perChatHistory) { - //backup + // backup historyMap[previousBufferId].history = inputLine()->history(); historyMap[previousBufferId].tempHistory = inputLine()->tempHistory(); historyMap[previousBufferId].idx = inputLine()->idx(); historyMap[previousBufferId].inputLine = inputLine()->html(); - //restore + // restore inputLine()->setHistory(historyMap[currentBufferId].history); inputLine()->setTempHistory(historyMap[currentBufferId].tempHistory); inputLine()->setIdx(historyMap[currentBufferId].idx); @@ -280,7 +257,7 @@ void InputWidget::currentChanged(const QModelIndex ¤t, const QModelIndex & // FIXME this really should be in MultiLineEdit (and the const int on top removed) QTextBlockFormat format = inputLine()->textCursor().blockFormat(); - format.setLeftMargin(leftMargin); // we want a little space between the frame and the contents + format.setLeftMargin(leftMargin); // we want a little space between the frame and the contents inputLine()->textCursor().setBlockFormat(format); } @@ -293,8 +270,7 @@ void InputWidget::currentChanged(const QModelIndex ¤t, const QModelIndex & updateEnabledState(); } - -void InputWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) +void InputWidget::dataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight) { QItemSelectionRange changedArea(topLeft, bottomRight); if (changedArea.contains(selectionModel()->currentIndex())) { @@ -302,11 +278,13 @@ void InputWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bot bool encrypted = false; - IrcChannel *chan = qobject_cast(Client::bufferModel()->data(selectionModel()->currentIndex(), NetworkModel::IrcChannelRole).value()); + auto* chan = qobject_cast( + Client::bufferModel()->data(selectionModel()->currentIndex(), NetworkModel::IrcChannelRole).value()); if (chan) encrypted = chan->encrypted(); - IrcUser *user = qobject_cast(Client::bufferModel()->data(selectionModel()->currentIndex(), NetworkModel::IrcUserRole).value()); + auto* user = qobject_cast( + Client::bufferModel()->data(selectionModel()->currentIndex(), NetworkModel::IrcUserRole).value()); if (user) encrypted = user->encrypted(); @@ -317,8 +295,7 @@ void InputWidget::dataChanged(const QModelIndex &topLeft, const QModelIndex &bot } } - -void InputWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) +void InputWidget::rowsAboutToBeRemoved(const QModelIndex& parent, int start, int end) { NetworkId networkId; QModelIndex child; @@ -335,7 +312,6 @@ void InputWidget::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int } } - void InputWidget::updateEnabledState() { // FIXME: Find a visualization for this that does not disable the widget! @@ -357,35 +333,70 @@ void InputWidget::updateEnabledState() #endif } - -const Network *InputWidget::currentNetwork() const +const Network* InputWidget::currentNetwork() const { return Client::network(_networkId); } - 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) return; - const Network *previousNet = Client::network(_networkId); + const Network* previousNet = Client::network(_networkId); if (previousNet) { - disconnect(previousNet, 0, this, 0); + disconnect(previousNet, nullptr, this, nullptr); if (previousNet->me()) - disconnect(previousNet->me(), 0, this, 0); + disconnect(previousNet->me(), nullptr, this, nullptr); } _networkId = networkId; - const Network *network = Client::network(networkId); + const Network* network = Client::network(networkId); if (network) { - connect(network, SIGNAL(identitySet(IdentityId)), this, SLOT(setIdentity(IdentityId))); + connect(network, &Network::identitySet, this, &InputWidget::setIdentity); connectMyIrcUser(); setIdentity(network->identity()); } @@ -395,39 +406,37 @@ void InputWidget::setNetwork(NetworkId networkId) } } - void InputWidget::connectMyIrcUser() { - const Network *network = currentNetwork(); + const Network* network = currentNetwork(); if (network->me()) { - connect(network->me(), SIGNAL(nickSet(const QString &)), this, SLOT(updateNickSelector())); - connect(network->me(), SIGNAL(userModesSet(QString)), this, SLOT(updateNickSelector())); - connect(network->me(), SIGNAL(userModesAdded(QString)), this, SLOT(updateNickSelector())); - connect(network->me(), SIGNAL(userModesRemoved(QString)), this, SLOT(updateNickSelector())); - connect(network->me(), SIGNAL(awaySet(bool)), this, SLOT(updateNickSelector())); - disconnect(network, SIGNAL(myNickSet(const QString &)), this, SLOT(connectMyIrcUser())); + connect(network->me(), &IrcUser::nickSet, this, &InputWidget::updateNickSelector); + connect(network->me(), &IrcUser::userModesSet, this, &InputWidget::updateNickSelector); + connect(network->me(), &IrcUser::userModesAdded, this, &InputWidget::updateNickSelector); + connect(network->me(), &IrcUser::userModesRemoved, this, &InputWidget::updateNickSelector); + connect(network->me(), &IrcUser::awaySet, this, &InputWidget::updateNickSelector); + disconnect(network, &Network::myNickSet, this, &InputWidget::connectMyIrcUser); updateNickSelector(); } else { - connect(network, SIGNAL(myNickSet(const QString &)), this, SLOT(connectMyIrcUser())); + connect(network, &Network::myNickSet, this, &InputWidget::connectMyIrcUser); } } - void InputWidget::setIdentity(IdentityId identityId) { if (_identityId == identityId) return; - const Identity *previousIdentity = Client::identity(_identityId); + const Identity* previousIdentity = Client::identity(_identityId); if (previousIdentity) - disconnect(previousIdentity, 0, this, 0); + disconnect(previousIdentity, nullptr, this, nullptr); _identityId = identityId; - const Identity *identity = Client::identity(identityId); + const Identity* identity = Client::identity(identityId); if (identity) { - connect(identity, SIGNAL(nicksSet(QStringList)), this, SLOT(updateNickSelector())); + connect(identity, &Identity::nicksSet, this, &InputWidget::updateNickSelector); } else { _identityId = 0; @@ -435,18 +444,18 @@ void InputWidget::setIdentity(IdentityId identityId) updateNickSelector(); } - void InputWidget::updateNickSelector() const { ui.ownNick->clear(); - const Network *net = currentNetwork(); + const Network* net = currentNetwork(); if (!net) return; - const Identity *identity = Client::identity(net->identity()); + const Identity* identity = Client::identity(net->identity()); if (!identity) { - qWarning() << "InputWidget::updateNickSelector(): can't find Identity for Network" << net->networkId() << "IdentityId:" << net->identity(); + qWarning() << "InputWidget::updateNickSelector(): can't find Identity for Network" << net->networkId() + << "IdentityId:" << net->identity(); return; } @@ -460,7 +469,7 @@ void InputWidget::updateNickSelector() const if (nicks.isEmpty()) return; - IrcUser *me = net->me(); + IrcUser* me = net->me(); if (me) { nicks[nickIdx] = net->myNick(); if (!me->userModes().isEmpty()) @@ -470,15 +479,14 @@ 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); } - -void InputWidget::changeNick(const QString &newNick) const +void InputWidget::changeNick(const QString& newNick) const { - const Network *net = currentNetwork(); + const Network* net = currentNetwork(); if (!net || net->isMyNick(newNick)) return; @@ -488,144 +496,171 @@ void InputWidget::changeNick(const QString &newNick) const Client::userInput(BufferInfo::fakeStatusBuffer(net->networkId()), QString("/NICK %1").arg(newNick)); } - -void InputWidget::onTextEntered(const QString &text) +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); +} -void InputWidget::mergeFormatOnSelection(const QTextCharFormat &format) +void InputWidget::mergeFormatOnSelection(const QTextCharFormat& format) { QTextCursor cursor = inputLine()->textCursor(); cursor.mergeCharFormat(format); inputLine()->mergeCurrentCharFormat(format); } - -void InputWidget::setFormatOnSelection(const QTextCharFormat &format) +void InputWidget::setFormatOnSelection(const QTextCharFormat& format) { QTextCursor cursor = inputLine()->textCursor(); cursor.setCharFormat(format); inputLine()->setCurrentCharFormat(format); } - QTextCharFormat InputWidget::getFormatOfWordOrSelection() { QTextCursor cursor = inputLine()->textCursor(); return cursor.charFormat(); } +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) +void InputWidget::currentCharFormatChanged(const QTextCharFormat& format) { fontChanged(format.font()); } - 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); } - -void InputWidget::fontChanged(const QFont &f) +void InputWidget::fontChanged(const QFont& f) { ui.boldButton->setChecked(f.bold()); ui.italicButton->setChecked(f.italic()); ui.underlineButton->setChecked(f.underline()); } - -void InputWidget::colorChosen(QAction *action) +void InputWidget::colorChosen(QAction* action) { QTextCharFormat fmt; QColor color; - if (qVariantValue(action->data()) == "") { + if (action->data().value() == "") { color = Qt::transparent; fmt = getFormatOfWordOrSelection(); fmt.clearForeground(); setFormatOnSelection(fmt); } else { - color = QColor(inputLine()->rgbColorFromMirc(qVariantValue(action->data()))); + color = QColor(inputLine()->rgbColorFromMirc(action->data().value())); fmt.setForeground(color); 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)); } - -void InputWidget::colorHighlightChosen(QAction *action) +void InputWidget::colorHighlightChosen(QAction* action) { QTextCharFormat fmt; QColor color; - if (qVariantValue(action->data()) == "") { + if (action->data().value() == "") { color = Qt::transparent; fmt = getFormatOfWordOrSelection(); fmt.clearBackground(); setFormatOnSelection(fmt); } else { - color = QColor(inputLine()->rgbColorFromMirc(qVariantValue(action->data()))); + color = QColor(inputLine()->rgbColorFromMirc(action->data().value())); fmt.setBackground(color); 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); } - -QIcon InputWidget::createColorToolButtonIcon(const QIcon &icon, const QColor &color) +QIcon InputWidget::createColorToolButtonIcon(const QIcon& icon, const QColor& color) { QPixmap pixmap(16, 16); pixmap.fill(Qt::transparent); @@ -639,15 +674,12 @@ QIcon InputWidget::createColorToolButtonIcon(const QIcon &icon, const QColor &co return QIcon(pixmap); } - // MOUSE WHEEL FILTER -MouseWheelFilter::MouseWheelFilter(QObject *parent) +MouseWheelFilter::MouseWheelFilter(QObject* parent) : QObject(parent) -{ -} - +{} -bool MouseWheelFilter::eventFilter(QObject *obj, QEvent *event) +bool MouseWheelFilter::eventFilter(QObject* obj, QEvent* event) { if (event->type() != QEvent::Wheel) return QObject::eventFilter(obj, event);