X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/462982faa361c79daab43ce526ae64646b1ea63c..dd07a327:/src/kitemviews/private/kitemlistroleeditor.cpp diff --git a/src/kitemviews/private/kitemlistroleeditor.cpp b/src/kitemviews/private/kitemlistroleeditor.cpp index 75fd6a0c7..895a97aea 100644 --- a/src/kitemviews/private/kitemlistroleeditor.cpp +++ b/src/kitemviews/private/kitemlistroleeditor.cpp @@ -8,16 +8,17 @@ #include -KItemListRoleEditor::KItemListRoleEditor(QWidget *parent) : - KTextEdit(parent), - m_role(), - m_blockFinishedSignal(false) +KItemListRoleEditor::KItemListRoleEditor(QWidget *parent) + : KTextEdit(parent) + , m_role() + , m_blockFinishedSignal(false) { setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setAcceptRichText(false); enableFindReplace(false); document()->setDocumentMargin(0); + setCheckSpellingEnabled(false); if (parent) { parent->installEventFilter(this); @@ -30,7 +31,7 @@ KItemListRoleEditor::~KItemListRoleEditor() { } -void KItemListRoleEditor::setRole(const QByteArray& role) +void KItemListRoleEditor::setRole(const QByteArray &role) { m_role = role; } @@ -40,7 +41,12 @@ QByteArray KItemListRoleEditor::role() const return m_role; } -bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event) +void KItemListRoleEditor::setAllowUpDownKeyChainEdit(bool allowChainEdit) +{ + m_allowUpDownKeyChainEdit = allowChainEdit; +} + +bool KItemListRoleEditor::eventFilter(QObject *watched, QEvent *event) { if (watched == parentWidget() && event->type() == QEvent::Resize) { emitRoleEditingFinished(); @@ -49,10 +55,10 @@ bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event) return KTextEdit::eventFilter(watched, event); } -bool KItemListRoleEditor::event(QEvent* event) +bool KItemListRoleEditor::event(QEvent *event) { if (event->type() == QEvent::FocusOut) { - QFocusEvent* focusEvent = static_cast(event); + QFocusEvent *focusEvent = static_cast(event); if (focusEvent->reason() != Qt::PopupFocusReason) { emitRoleEditingFinished(); } @@ -60,7 +66,7 @@ bool KItemListRoleEditor::event(QEvent* event) return KTextEdit::event(event); } -void KItemListRoleEditor::keyPressEvent(QKeyEvent* event) +void KItemListRoleEditor::keyPressEvent(QKeyEvent *event) { switch (event->key()) { case Qt::Key_Escape: @@ -69,7 +75,7 @@ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event) // a roleEditingFinished signal (see KItemListRoleEditor::event), // which is not wanted in this case. m_blockFinishedSignal = true; - emit roleEditingCanceled(m_role, KIO::encodeFileName(toPlainText())); + Q_EMIT roleEditingCanceled(m_role, KIO::encodeFileName(toPlainText())); m_blockFinishedSignal = false; event->accept(); return; @@ -78,6 +84,22 @@ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event) emitRoleEditingFinished(); event->accept(); return; + case Qt::Key_Tab: + case Qt::Key_Down: + if (m_allowUpDownKeyChainEdit || event->key() == Qt::Key_Tab) { + emitRoleEditingFinished(EditNext); + event->accept(); + return; + } + break; + case Qt::Key_Backtab: + case Qt::Key_Up: + if (m_allowUpDownKeyChainEdit || event->key() == Qt::Key_Backtab) { + emitRoleEditingFinished(EditPrevious); + event->accept(); + return; + } + break; case Qt::Key_Left: case Qt::Key_Right: { QTextCursor cursor = textCursor(); @@ -97,12 +119,8 @@ void KItemListRoleEditor::keyPressEvent(QKeyEvent* event) case Qt::Key_Home: case Qt::Key_End: { if (event->modifiers() == Qt::NoModifier || event->modifiers() == Qt::ShiftModifier) { - const QTextCursor::MoveOperation op = event->key() == Qt::Key_Home - ? QTextCursor::Start - : QTextCursor::End; - const QTextCursor::MoveMode mode = event->modifiers() == Qt::NoModifier - ? QTextCursor::MoveAnchor - : QTextCursor::KeepAnchor; + const QTextCursor::MoveOperation op = event->key() == Qt::Key_Home ? QTextCursor::Start : QTextCursor::End; + const QTextCursor::MoveMode mode = event->modifiers() == Qt::NoModifier ? QTextCursor::MoveAnchor : QTextCursor::KeepAnchor; QTextCursor cursor = textCursor(); cursor.movePosition(op, mode); setTextCursor(cursor); @@ -122,6 +140,10 @@ void KItemListRoleEditor::autoAdjustSize() { const qreal frameBorder = 2 * frameWidth(); + const auto originalSize = size(); + auto newSize = originalSize; + + document()->adjustSize(); const qreal requiredWidth = document()->size().width(); const qreal availableWidth = size().width() - frameBorder; if (requiredWidth > availableWidth) { @@ -129,7 +151,7 @@ void KItemListRoleEditor::autoAdjustSize() if (parentWidget() && pos().x() + newWidth > parentWidget()->width()) { newWidth = parentWidget()->width() - pos().x(); } - resize(newWidth, size().height()); + newSize.setWidth(newWidth); } const qreal requiredHeight = document()->size().height(); @@ -139,14 +161,25 @@ void KItemListRoleEditor::autoAdjustSize() if (parentWidget() && pos().y() + newHeight > parentWidget()->height()) { newHeight = parentWidget()->height() - pos().y(); } - resize(size().width(), newHeight); + newSize.setHeight(newHeight); } + + if (originalSize != newSize) { + resize(newSize); + } + // reset the document width to the widget width + // to allow alignment to be properly rendered + document()->setTextWidth(newSize.width()); } -void KItemListRoleEditor::emitRoleEditingFinished() +void KItemListRoleEditor::emitRoleEditingFinished(EditResultDirection direction) { + QVariant ret; + ret.setValue(EditResult{KIO::encodeFileName(toPlainText()), direction}); + if (!m_blockFinishedSignal) { - emit roleEditingFinished(m_role, KIO::encodeFileName(toPlainText())); + Q_EMIT roleEditingFinished(m_role, ret); } } +#include "moc_kitemlistroleeditor.cpp"