Use KTextEdit instead of QLineEdit. On most KDE systems this means Spell Check support!
authorJesper Thomschütz <jesperht@yahoo.com>
Fri, 13 Mar 2009 15:53:11 +0000 (17:53 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Fri, 13 Mar 2009 23:31:43 +0000 (00:31 +0100)
src/uisupport/inputline.cpp
src/uisupport/inputline.h

index 76796dd..eaf1212 100644 (file)
 #include "tabcompleter.h"
 
 InputLine::InputLine(QWidget *parent)
-  : QLineEdit(parent),
+  :
+#ifdef HAVE_KDE
+    KTextEdit(parent),
+#else
+    QLineEdit(parent),
+#endif
     idx(0),
     tabCompleter(new TabCompleter(this))
 {
+#ifdef HAVE_KDE
+//This is done to make the KTextEdit look like a lineedit
+  setMaximumHeight(document()->size().toSize().height());
+  setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+  setAcceptRichText(false);
+  connect(this, SIGNAL(textChanged()), this, SLOT(on_textChanged()));
+#endif
+
   connect(this, SIGNAL(returnPressed()), this, SLOT(on_returnPressed()));
   connect(this, SIGNAL(textChanged(QString)), this, SLOT(on_textChanged(QString)));
 }
@@ -91,8 +104,18 @@ void InputLine::keyPressEvent(QKeyEvent * event) {
   case Qt::Key_Select:         // for Qtopia
     emit returnPressed();
 
+#ifdef HAVE_KDE
+//Since this is a ktextedit, we don't have this signal "natively"
+  case Qt::Key_Return:
+    emit returnPressed();
+#endif
+
   default:
+#ifdef HAVE_KDE
+    KTextEdit::keyPressEvent(event);
+#else
     QLineEdit::keyPressEvent(event);
+#endif
   }
 }
 
index dc6d691..dddf8d5 100644 (file)
 
 #include <QtGui>
 
+#ifdef HAVE_KDE
+#include <KDE/KTextEdit>
+#endif
+
 class TabCompleter;
 
-class InputLine : public QLineEdit {
+class InputLine : public
+#ifdef HAVE_KDE
+                  KTextEdit
+#else
+                  QLineEdit
+#endif
+                          {
   Q_OBJECT
 
 public:
   InputLine(QWidget *parent = 0);
   ~InputLine();
 
+#ifdef HAVE_KDE
+//Compatibility methods with the rest of the classes which expects this to be a QLineEdit
+  QString text() { return toPlainText(); };
+  int cursorPosition() { return textCursor().position(); };
+  void insert(const QString &newText) { insertPlainText(newText); };
+  void backspace() { keyPressEvent(new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier));  };
+  bool hasSelectedText() { return textCursor().hasSelection(); };
+#endif
+
 protected:
   //    virtual bool event(QEvent *);
   virtual void keyPressEvent(QKeyEvent * event);
@@ -40,11 +59,20 @@ protected:
 private slots:
   void on_returnPressed();
   void on_textChanged(QString newText);
+#ifdef HAVE_KDE
+//Needed to emulate the signal that QLineEdit has
+  void on_textChanged() { emit textChanged(toPlainText()); };
+#endif
 
   bool addToHistory(const QString &text, bool temporary = false);
 
 signals:
   void sendText(QString text);
+#ifdef HAVE_KDE
+//KTextEdit does not provide this signal, so we manually emit it in keyPressEvent()
+  void returnPressed();
+  void textChanged(QString newText);
+#endif
 
 private:
   QStringList history;