]>
cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/private/kitemlistroleeditor.cpp
2 * SPDX-FileCopyrightText: 2012 Peter Penz <peter.penz19@gmail.com>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "kitemlistroleeditor.h"
11 KItemListRoleEditor::KItemListRoleEditor(QWidget
*parent
) :
14 m_blockFinishedSignal(false)
16 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff
);
17 setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff
);
18 setAcceptRichText(false);
19 enableFindReplace(false);
20 document()->setDocumentMargin(0);
23 parent
->installEventFilter(this);
26 connect(this, &KItemListRoleEditor::textChanged
, this, &KItemListRoleEditor::autoAdjustSize
);
29 KItemListRoleEditor::~KItemListRoleEditor()
33 void KItemListRoleEditor::setRole(const QByteArray
& role
)
38 QByteArray
KItemListRoleEditor::role() const
43 bool KItemListRoleEditor::eventFilter(QObject
* watched
, QEvent
* event
)
45 if (watched
== parentWidget() && event
->type() == QEvent::Resize
) {
46 emitRoleEditingFinished();
49 return KTextEdit::eventFilter(watched
, event
);
52 bool KItemListRoleEditor::event(QEvent
* event
)
54 if (event
->type() == QEvent::FocusOut
) {
55 QFocusEvent
* focusEvent
= static_cast<QFocusEvent
*>(event
);
56 if (focusEvent
->reason() != Qt::PopupFocusReason
) {
57 emitRoleEditingFinished();
60 return KTextEdit::event(event
);
63 void KItemListRoleEditor::keyPressEvent(QKeyEvent
* event
)
65 switch (event
->key()) {
67 // Emitting the signal roleEditingCanceled might result
68 // in losing the focus. Per default losing the focus emits
69 // a roleEditingFinished signal (see KItemListRoleEditor::event),
70 // which is not wanted in this case.
71 m_blockFinishedSignal
= true;
72 emit
roleEditingCanceled(m_role
, KIO::encodeFileName(toPlainText()));
73 m_blockFinishedSignal
= false;
78 emitRoleEditingFinished();
83 QTextCursor cursor
= textCursor();
84 if (event
->modifiers() == Qt::NoModifier
&& cursor
.hasSelection()) {
85 if (event
->key() == Qt::Key_Left
) {
86 cursor
.setPosition(cursor
.selectionStart());
88 cursor
.setPosition(cursor
.selectionEnd());
90 cursor
.clearSelection();
91 setTextCursor(cursor
);
99 if (event
->modifiers() == Qt::NoModifier
|| event
->modifiers() == Qt::ShiftModifier
) {
100 const QTextCursor::MoveOperation op
= event
->key() == Qt::Key_Home
103 const QTextCursor::MoveMode mode
= event
->modifiers() == Qt::NoModifier
104 ? QTextCursor::MoveAnchor
105 : QTextCursor::KeepAnchor
;
106 QTextCursor cursor
= textCursor();
107 cursor
.movePosition(op
, mode
);
108 setTextCursor(cursor
);
118 KTextEdit::keyPressEvent(event
);
121 void KItemListRoleEditor::autoAdjustSize()
123 const qreal frameBorder
= 2 * frameWidth();
125 const qreal requiredWidth
= document()->size().width();
126 const qreal availableWidth
= size().width() - frameBorder
;
127 if (requiredWidth
> availableWidth
) {
128 qreal newWidth
= requiredWidth
+ frameBorder
;
129 if (parentWidget() && pos().x() + newWidth
> parentWidget()->width()) {
130 newWidth
= parentWidget()->width() - pos().x();
132 resize(newWidth
, size().height());
135 const qreal requiredHeight
= document()->size().height();
136 const qreal availableHeight
= size().height() - frameBorder
;
137 if (requiredHeight
> availableHeight
) {
138 qreal newHeight
= requiredHeight
+ frameBorder
;
139 if (parentWidget() && pos().y() + newHeight
> parentWidget()->height()) {
140 newHeight
= parentWidget()->height() - pos().y();
142 resize(size().width(), newHeight
);
146 void KItemListRoleEditor::emitRoleEditingFinished()
148 if (!m_blockFinishedSignal
) {
149 emit
roleEditingFinished(m_role
, KIO::encodeFileName(toPlainText()));