modernize: Use auto where the type is clear from context
[quassel.git] / src / uisupport / multilineedit.cpp
index 68de357..ac92235 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2015 by the Quassel Project                        *
+ *   Copyright (C) 2005-2018 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 #include <QMessageBox>
 #include <QScrollBar>
 
-#ifdef HAVE_SONNET
-#  include <Sonnet/SpellCheckDecorator>
-#endif
-
 #include "actioncollection.h"
 #include "bufferview.h"
 #include "graphicalui.h"
 const int leftMargin = 3;
 
 MultiLineEdit::MultiLineEdit(QWidget *parent)
-    : MultiLineEditParent(parent),
-    _idx(0),
-    _mode(SingleLine),
-    _singleLine(true),
-    _minHeight(1),
-    _maxHeight(5),
-    _scrollBarsEnabled(true),
-    _pasteProtectionEnabled(true),
-    _emacsMode(false),
-    _completionSpace(0),
-    _lastDocumentHeight(-1)
+    : MultiLineEditParent(parent)
 {
     document()->setDocumentMargin(0);
 
@@ -54,8 +40,9 @@ MultiLineEdit::MultiLineEdit(QWidget *parent)
     enableFindReplace(false);
 #endif
 
-#ifdef HAVE_SONNET
-    new Sonnet::SpellCheckDecorator(this);
+#if defined HAVE_SONNET && !defined HAVE_KDE
+    _spellCheckDecorator = new Sonnet::SpellCheckDecorator(this);
+    highlighter()->setActive(highlighter()->checkerEnabledByDefault());
 #endif
 
     setMode(SingleLine);
@@ -86,10 +73,37 @@ MultiLineEdit::MultiLineEdit(QWidget *parent)
 }
 
 
-MultiLineEdit::~MultiLineEdit()
+#if defined HAVE_SONNET && !defined HAVE_KDE
+Sonnet::Highlighter *MultiLineEdit::highlighter() const
 {
+    return _spellCheckDecorator->highlighter();
+}
+
+
+void MultiLineEdit::setSpellCheckEnabled(bool enabled)
+{
+    highlighter()->setActive(enabled);
+    if (enabled) {
+        highlighter()->slotRehighlight();
+    }
 }
 
+void MultiLineEdit::contextMenuEvent(QContextMenuEvent *event)
+{
+    QMenu *menu = createStandardContextMenu();
+    menu->addSeparator();
+
+    auto action = menu->addAction(tr("Auto Spell Check"));
+    action->setCheckable(true);
+    action->setChecked(highlighter()->isActive());
+    connect(action, SIGNAL(toggled(bool)), this, SLOT(setSpellCheckEnabled(bool)));
+
+    menu->exec(event->globalPos());
+    delete menu;
+}
+
+#endif
+
 
 void MultiLineEdit::setCustomFont(const QFont &font)
 {
@@ -177,13 +191,18 @@ void MultiLineEdit::updateSizeHint()
 
     // use the style to determine a decent size
     int h = qMin(qMax((int)document()->size().height() + scrollBarHeight, minPixelHeight), maxPixelHeight) + 2 * frameWidth();
-    QStyleOptionFrameV2 opt;
+
+    QStyleOptionFrame opt;
     opt.initFrom(this);
     opt.rect = QRect(0, 0, 100, h);
     opt.lineWidth = lineWidth();
     opt.midLineWidth = midLineWidth();
     opt.state |= QStyle::State_Sunken;
-    QSize s = style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(100, h).expandedTo(QApplication::globalStrut()), this);
+    QWidget *widget = this;
+#ifdef Q_OS_MAC
+    widget = 0;
+#endif
+    QSize s = style()->sizeFromContents(QStyle::CT_LineEdit, &opt, QSize(100, h).expandedTo(QApplication::globalStrut()), widget);
     if (s != _sizeHint) {
         _sizeHint = s;
         updateGeometry();
@@ -194,7 +213,7 @@ void MultiLineEdit::updateSizeHint()
 QSize MultiLineEdit::sizeHint() const
 {
     if (!_sizeHint.isValid()) {
-        MultiLineEdit *that = const_cast<MultiLineEdit *>(this);
+        auto *that = const_cast<MultiLineEdit *>(this);
         that->updateSizeHint();
     }
     return _sizeHint;
@@ -213,16 +232,6 @@ void MultiLineEdit::setEmacsMode(bool enable)
 }
 
 
-void MultiLineEdit::setSpellCheckEnabled(bool enable)
-{
-#ifdef HAVE_KDE
-    setCheckSpellingEnabled(enable);
-#else
-    Q_UNUSED(enable)
-#endif
-}
-
-
 void MultiLineEdit::setPasteProtectionEnabled(bool enable, QWidget *)
 {
     _pasteProtectionEnabled = enable;
@@ -289,7 +298,7 @@ bool MultiLineEdit::event(QEvent *e)
 {
     // We need to make sure that global shortcuts aren't eaten
     if (e->type() == QEvent::ShortcutOverride) {
-        QKeyEvent *event = static_cast<QKeyEvent *>(e);
+        auto *event = static_cast<QKeyEvent *>(e);
         QKeySequence key = QKeySequence(event->key() | event->modifiers());
         foreach(QAction *action, GraphicalUi::actionCollection()->actions()) {
             if (action->shortcuts().contains(key)) {
@@ -718,11 +727,7 @@ void MultiLineEdit::on_textChanged()
                 QString msg = tr("Do you really want to paste %n line(s)?", "", lines.count());
                 msg += "<p>";
                 for (int i = 0; i < 4; i++) {
-#if QT_VERSION < 0x050000
-                    msg += Qt::escape(lines[i].left(40));
-#else
                     msg += lines[i].left(40).toHtmlEscaped();
-#endif
                     if (lines[i].count() > 40)
                         msg += "...";
                     msg += "<br />";