Various tweaks to the input line in KDE mode
[quassel.git] / src / uisupport / inputline.h
index 453f286..66742b6 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-09 by the Quassel Project                          *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 
 #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();
-    
+
+  void setCustomFont(const QFont &); // should be used instead setFont(), so we can set our size correctly
+
+#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);
+  virtual bool eventFilter(QObject *watched, QEvent *event);
 
 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 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;
+  QHash<int, QString> tempHistory;
   qint32 idx;
   TabCompleter *tabCompleter;
 
   int bindModifier;
   int jumpModifier;
+
+  void resetLine();
+  void showHistoryEntry();
 };
 
 #endif