X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fuisupport%2Fmultilineedit.cpp;h=9029f02f4f87c2d2c883ab0348fde5e7f44bbb2f;hb=2baaaea16e777a1fe961d6cc4d34aa9dd323333e;hp=802a1f9b5cc6f52474cc9b474ae44ef0b76910e3;hpb=b7ba7d253e27507af6e749ee48b42073493139c0;p=quassel.git diff --git a/src/uisupport/multilineedit.cpp b/src/uisupport/multilineedit.cpp index 802a1f9b..9029f02f 100644 --- a/src/uisupport/multilineedit.cpp +++ b/src/uisupport/multilineedit.cpp @@ -163,6 +163,11 @@ void MultiLineEdit::setSpellCheckEnabled(bool enable) { void MultiLineEdit::setWordWrapEnabled(bool enable) { setLineWrapMode(enable? WidgetWidth : NoWrap); + updateSizeHint(); +} + +void MultiLineEdit::setPasteProtectionEnabled(bool enable, QWidget *) { + _pasteProtectionEnabled = enable; } void MultiLineEdit::historyMoveBack() { @@ -226,8 +231,11 @@ void MultiLineEdit::keyPressEvent(QKeyEvent *event) { # endif #endif - if(_mode == SingleLine) + if(_mode == SingleLine) { + event->accept(); + on_returnPressed(); return; + } #ifdef HAVE_KDE KTextEdit::keyPressEvent(event); #else @@ -292,8 +300,12 @@ void MultiLineEdit::keyPressEvent(QKeyEvent *event) { } void MultiLineEdit::on_returnPressed() { - if(!text().isEmpty()) { - foreach(const QString &line, text().split('\n', QString::SkipEmptyParts)) { + on_returnPressed(text()); +} + +void MultiLineEdit::on_returnPressed(const QString & text) { + if(!text.isEmpty()) { + foreach(const QString &line, text.split('\n', QString::SkipEmptyParts)) { if(line.isEmpty()) continue; addToHistory(line); @@ -301,6 +313,8 @@ void MultiLineEdit::on_returnPressed() { } reset(); tempHistory.clear(); + } else { + emit noTextEntered(); } } @@ -308,8 +322,39 @@ void MultiLineEdit::on_textChanged() { QString newText = text(); newText.replace("\r\n", "\n"); newText.replace('\r', '\n'); - if(_mode == SingleLine) - newText.replace('\n', ' '); + if(_mode == SingleLine) { + if(!pasteProtectionEnabled()) + newText.replace('\n', ' '); + else if(newText.contains('\n')) { + QStringList lines = newText.split('\n', QString::SkipEmptyParts); + clear(); + + if(lines.count() >= 4) { + QString msg = tr("Do you really want to paste %n lines?", "", lines.count()); + msg += "

"; + for(int i = 0; i < 4; i++) { + msg += Qt::escape(lines[i].left(40)); + if(lines[i].count() > 40) + msg += "..."; + msg += "
"; + } + msg += "...

"; + 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::Yes) + return; + } + + foreach(QString line, lines) { + clear(); + insert(line); + on_returnPressed(); + } + } + } _singleLine = (newText.indexOf('\n') < 0); @@ -318,6 +363,7 @@ void MultiLineEdit::on_textChanged() { on_documentHeightChanged(_lastDocumentHeight); } updateSizeHint(); + ensureCursorVisible(); } void MultiLineEdit::on_documentHeightChanged(qreal) {