* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+#include "bufferview.h"
+#include "graphicalui.h"
#include "inputline.h"
#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());
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setAcceptRichText(false);
+ setLineWrapMode(NoWrap);
+ enableFindReplace(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)));
}
InputLine::~InputLine() {
}
+void InputLine::setCustomFont(const QFont &font) {
+ setFont(font);
+#ifdef HAVE_KDE
+ setMaximumHeight(document()->size().toSize().height());
+#endif
+}
+
+bool InputLine::eventFilter(QObject *watched, QEvent *event) {
+ if(event->type() != QEvent::KeyPress)
+ return false;
+
+ // keys from BufferView should be sent to (and focus) the input line
+ BufferView *view = qobject_cast<BufferView *>(watched);
+ if(view) {
+ QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
+ 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();
+ keyPressEvent(keyEvent);
+ return true;
+ } else
+ return false;
+ }
+ }
+ return false;
+}
+
void InputLine::keyPressEvent(QKeyEvent * event) {
+
+#ifdef HAVE_KDE
+ if(event->matches(QKeySequence::Find)) {
+ QAction *act = GraphicalUi::actionCollection()->action("ToggleSearchBar");
+ if(act) {
+ act->toggle();
+ event->accept();
+ return;
+ }
+ }
+#endif
+
switch(event->key()) {
case Qt::Key_Up:
event->accept();
case Qt::Key_Select: // for Qtopia
emit returnPressed();
+ break;
+
+#ifdef HAVE_KDE
+//Since this is a ktextedit, we don't have this signal "natively"
+ case Qt::Key_Return:
+ event->accept();
+ if(!text().isEmpty())
+ emit returnPressed();
+ break;
+
+ case Qt::Key_Enter:
+ event->accept();
+ if(!text().isEmpty())
+ emit returnPressed();
+ break;
+
+#endif
default:
+#ifdef HAVE_KDE
+ KTextEdit::keyPressEvent(event);
+#else
QLineEdit::keyPressEvent(event);
+#endif
}
}
}
void InputLine::on_textChanged(QString newText) {
- QStringList lineSeperators;
- lineSeperators << QString("\r\n")
+ QStringList lineSeparators;
+ lineSeparators << QString("\r\n")
<< QString('\n')
<< QString('\r');
QString lineSep;
- foreach(QString seperator, lineSeperators) {
- if(newText.contains(seperator)) {
- lineSep = seperator;
+ foreach(QString separator, lineSeparators) {
+ if(newText.contains(separator)) {
+ lineSep = separator;
break;
}
}
if(lineSep.isEmpty())
return;
- if(newText.contains(lineSep)) {
- clear();
- QString line = newText.section(lineSep, 0, 0);
- QString remainder = newText.section(lineSep, 1);
- insert(line);
- emit returnPressed();
- insert(remainder);
+ QStringList lines = newText.split(lineSep);
+ clear();
+
+ if(lines.count() >= 4) {
+ QString msg = tr("Do you really want to paste %n lines?", "", lines.count());
+ msg += "<p>";
+ for(int i = 0; i < 3; i++) {
+ msg += lines[i].left(40);
+ if(lines[i].count() > 40)
+ msg += "...";
+ msg += "<br />";
+ }
+ msg += "...</p>";
+ QMessageBox question(QMessageBox::NoIcon, tr("Paste Protection"), msg, QMessageBox::Yes|QMessageBox::No);
+ question.setDefaultButton(QMessageBox::No);
+#ifdef Q_WS_MAC
+ question.setWindowFlags(question.windowFlags() | Qt::Sheet);
+#endif
+ if(question.exec() == QMessageBox::No)
+ return;
+ }
+
+ foreach(QString line, lines) {
+ if(!line.isEmpty()) {
+ clear();
+ insert(line);
+ emit returnPressed();
+ }
}
+// if(newText.contains(lineSep)) {
+// clear();
+// QString line = newText.section(lineSep, 0, 0);
+// QString remainder = newText.section(lineSep, 1);
+// insert(line);
+// emit returnPressed();
+// insert(remainder);
+// }
}
void InputLine::resetLine() {