#include "kitemlistroleeditor.h"
-#include <KDebug>
-#include <QKeyEvent>
+#include <KIO/Global>
KItemListRoleEditor::KItemListRoleEditor(QWidget *parent) :
KTextEdit(parent),
- m_index(0),
- m_role()
+ m_role(),
+ m_blockFinishedSignal(false)
{
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setAcceptRichText(false);
+ enableFindReplace(false);
document()->setDocumentMargin(0);
if (parent) {
parent->installEventFilter(this);
}
-}
-
-KItemListRoleEditor::~KItemListRoleEditor()
-{
-}
-void KItemListRoleEditor::setIndex(int index)
-{
- m_index = index;
+ connect(this, &KItemListRoleEditor::textChanged, this, &KItemListRoleEditor::autoAdjustSize);
}
-int KItemListRoleEditor::index() const
+KItemListRoleEditor::~KItemListRoleEditor()
{
- return m_index;
}
void KItemListRoleEditor::setRole(const QByteArray& role)
return m_role;
}
-bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event)
+bool KItemListRoleEditor::eventFilter(QObject* watched, QEvent* event)
{
if (watched == parentWidget() && event->type() == QEvent::Resize) {
- autoAdjustSize();
+ emitRoleEditingFinished();
}
return KTextEdit::eventFilter(watched, event);
bool KItemListRoleEditor::event(QEvent* event)
{
if (event->type() == QEvent::FocusOut) {
- emit roleEditingFinished(m_index, m_role, toPlainText());
+ QFocusEvent* focusEvent = static_cast<QFocusEvent*>(event);
+ if (focusEvent->reason() != Qt::PopupFocusReason) {
+ emitRoleEditingFinished();
+ }
}
return KTextEdit::event(event);
}
{
switch (event->key()) {
case Qt::Key_Escape:
- emit roleEditingCanceled(m_index, m_role, toPlainText());
+ // Emitting the signal roleEditingCanceled might result
+ // in losing the focus. Per default losing the focus emits
+ // a roleEditingFinished signal (see KItemListRoleEditor::event),
+ // which is not wanted in this case.
+ m_blockFinishedSignal = true;
+ emit roleEditingCanceled(m_role, KIO::encodeFileName(toPlainText()));
+ m_blockFinishedSignal = false;
event->accept();
return;
case Qt::Key_Enter:
case Qt::Key_Return:
- emit roleEditingFinished(m_index, m_role, toPlainText());
+ emitRoleEditingFinished();
event->accept();
return;
+ case Qt::Key_Left:
+ case Qt::Key_Right: {
+ QTextCursor cursor = textCursor();
+ if (event->modifiers() == Qt::NoModifier && cursor.hasSelection()) {
+ if (event->key() == Qt::Key_Left) {
+ cursor.setPosition(cursor.selectionStart());
+ } else {
+ cursor.setPosition(cursor.selectionEnd());
+ }
+ cursor.clearSelection();
+ setTextCursor(cursor);
+ event->accept();
+ return;
+ }
+ break;
+ }
default:
break;
}
KTextEdit::keyPressEvent(event);
- autoAdjustSize();
}
void KItemListRoleEditor::autoAdjustSize()
{
+ const qreal frameBorder = 2 * frameWidth();
+
const qreal requiredWidth = document()->size().width();
- const qreal availableWidth = size().width() - 2 * frameWidth();
+ const qreal availableWidth = size().width() - frameBorder;
if (requiredWidth > availableWidth) {
- qreal newWidth = requiredWidth + 2 * frameWidth();
+ qreal newWidth = requiredWidth + frameBorder;
if (parentWidget() && pos().x() + newWidth > parentWidget()->width()) {
newWidth = parentWidget()->width() - pos().x();
}
resize(newWidth, size().height());
}
+
+ const qreal requiredHeight = document()->size().height();
+ const qreal availableHeight = size().height() - frameBorder;
+ if (requiredHeight > availableHeight) {
+ qreal newHeight = requiredHeight + frameBorder;
+ if (parentWidget() && pos().y() + newHeight > parentWidget()->height()) {
+ newHeight = parentWidget()->height() - pos().y();
+ }
+ resize(size().width(), newHeight);
+ }
+}
+
+void KItemListRoleEditor::emitRoleEditingFinished()
+{
+ if (!m_blockFinishedSignal) {
+ emit roleEditingFinished(m_role, KIO::encodeFileName(toPlainText()));
+ }
}
-#include "kitemlistroleeditor.moc"