modernize: Prefer default member init over ctor init
[quassel.git] / src / uisupport / multilineedit.h
index d02c6cf..a8d2d13 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2014 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  *
  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef MULTILINEEDIT_H_
-#define MULTILINEEDIT_H_
+#pragma once
+
+#include "uisupport-export.h"
 
 #include <QKeyEvent>
 #include <QHash>
 
-#ifdef HAVE_KDE
-#  include <KDE/KTextEdit>
+#if defined HAVE_KF5
+#  include <KTextWidgets/KTextEdit>
 #  define MultiLineEditParent KTextEdit
 #else
 #  include <QTextEdit>
 #  define MultiLineEditParent QTextEdit
 #endif
 
-class QKeyEvent;
-class TabCompleter;
+#if defined HAVE_SONNET && !defined HAVE_KDE
+#  include <QContextMenuEvent>
+#  include <Sonnet/Highlighter>
+#  include <Sonnet/SpellCheckDecorator>
+#endif
 
-class MultiLineEdit : public MultiLineEditParent
+class UISUPPORT_EXPORT MultiLineEdit : public MultiLineEditParent
 {
     Q_OBJECT
 
@@ -45,8 +49,8 @@ public:
         MultiLine
     };
 
-    MultiLineEdit(QWidget *parent = 0);
-    ~MultiLineEdit();
+    MultiLineEdit(QWidget *parent = nullptr);
+    ~MultiLineEdit() override;
 
     void setCustomFont(const QFont &); // should be used instead setFont(), so we can set our size correctly
 
@@ -61,8 +65,8 @@ public:
     inline bool isSingleLine() const { return _singleLine; }
     inline bool pasteProtectionEnabled() const { return _pasteProtectionEnabled; }
 
-    virtual QSize sizeHint() const;
-    virtual QSize minimumSizeHint() const;
+    QSize sizeHint() const override;
+    QSize minimumSizeHint() const override;
 
     inline QString mircColorFromRGB(QString rgbColor) const { return _mircColorMap.key(rgbColor); }
     inline QString rgbColorFromMirc(QString mircColor) const { return _mircColorMap[mircColor]; }
@@ -73,17 +77,16 @@ public:
     inline qint32 idx() const { return _idx; }
     inline bool emacsMode() const { return _emacsMode; }
 
+    void addCompletionSpace();
+
 public slots:
     void setMode(Mode mode);
     void setMinHeight(int numLines);
     void setMaxHeight(int numLines);
     void setEmacsMode(bool enable = true);
     void setScrollBarsEnabled(bool enable = true);
-    void setSpellCheckEnabled(bool enable = true);
-    void setPasteProtectionEnabled(bool enable = true, QWidget *msgBoxParent = 0);
-
-    // Note: Enabling wrap will make isSingleLine() not work correctly, so only use this if minHeight() > 1!
-    void setWordWrapEnabled(bool enable = true);
+    void setPasteProtectionEnabled(bool enable = true, QWidget *msgBoxParent = nullptr);
+    void setLineWrapEnabled(bool enable = false);
 
     inline void setHistory(QStringList history) { _history = history; }
     inline void setTempHistory(QHash<int, QString> tempHistory) { _tempHistory = tempHistory; }
@@ -94,13 +97,17 @@ signals:
     void noTextEntered();
 
 protected:
-    virtual bool event(QEvent *e);
-    virtual void keyPressEvent(QKeyEvent *event);
-    virtual void resizeEvent(QResizeEvent *event);
+    bool event(QEvent *e) override;
+    void keyPressEvent(QKeyEvent *event) override;
+    void resizeEvent(QResizeEvent *event) override;
+
+#if defined HAVE_SONNET && !defined HAVE_KDE
+    void contextMenuEvent(QContextMenuEvent *event) override;
+#endif
 
 private slots:
     void on_returnPressed();
-    void on_returnPressed(const QString &text);
+    void on_returnPressed(QString text);
     void on_textChanged();
     void on_documentHeightChanged(qreal height);
 
@@ -112,28 +119,38 @@ private slots:
     QString convertMircCodesToHtml(const QString &text);
     bool mircCodesChanged(QTextCursor &cursor, QTextCursor &peekcursor);
 
+private:
+    void reset();
+    void showHistoryEntry();
+    void updateScrollBars();
+    void updateSizeHint();
+
 private:
     QStringList _history;
     QHash<int, QString> _tempHistory;
-    qint32 _idx;
-    Mode _mode;
-    bool _singleLine;
-    int _minHeight;
-    int _maxHeight;
-    bool _scrollBarsEnabled;
-    bool _pasteProtectionEnabled;
-    bool _emacsMode;
+    qint32 _idx{0};
+    Mode _mode{SingleLine};
+    bool _singleLine{true};
+    int _minHeight{1};
+    int _maxHeight{5};
+    bool _scrollBarsEnabled{true};
+    bool _pasteProtectionEnabled{true};
+    bool _emacsMode{false};
+    int _completionSpace{0};
 
     QSize _sizeHint;
-    qreal _lastDocumentHeight;
+    qreal _lastDocumentHeight{-1};
 
     QMap<QString, QString> _mircColorMap;
 
-    void reset();
-    void showHistoryEntry();
-    void updateScrollBars();
-    void updateSizeHint();
-};
+#if defined HAVE_SONNET && !defined HAVE_KDE
+    // This member function is provided by KTextEdit
+    Sonnet::Highlighter *highlighter() const;
 
+private slots:
+    void setSpellCheckEnabled(bool enabled);
 
+private:
+    Sonnet::SpellCheckDecorator *_spellCheckDecorator{nullptr};
 #endif
+};