1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "abstractformwindow.h"
#include "inplace_editor.h"
#include <QtDesigner/abstractformwindow.h>
#include <QtDesigner/abstractformwindowcursor.h>
#include <QtDesigner/propertysheet.h>
#include <QtDesigner/abstractformeditor.h>
#include <QtDesigner/abstractlanguage.h>
#include <QtDesigner/qextensionmanager.h>
#include <QtCore/qvariant.h>
QT_BEGIN_NAMESPACE
using namespace Qt::StringLiterals;
namespace qdesigner_internal {
// ----------------- InPlaceEditor
InPlaceEditor::InPlaceEditor(QWidget *widget,
TextPropertyValidationMode validationMode,
QDesignerFormWindowInterface *fw,
const QString& text,
const QRect& r) :
TextPropertyEditor(widget, EmbeddingInPlace, validationMode),
m_InPlaceWidgetHelper(this, widget, fw)
{
setAlignment(m_InPlaceWidgetHelper.alignment());
setObjectName(u"__qt__passive_m_editor"_s);
setText(text);
selectAll();
setGeometry(QRect(widget->mapTo(widget->window(), r.topLeft()), r.size()));
setFocus();
show();
connect(this, &TextPropertyEditor::editingFinished,this, &QWidget::close);
}
// -------------- TaskMenuInlineEditor
TaskMenuInlineEditor::TaskMenuInlineEditor(QWidget *w, TextPropertyValidationMode vm,
const QString &property, QObject *parent) :
QObject(parent),
m_vm(vm),
m_property(property),
m_widget(w),
m_managed(true)
{
}
void TaskMenuInlineEditor::editText()
{
m_formWindow = QDesignerFormWindowInterface::findFormWindow(m_widget);
if (m_formWindow.isNull())
return;
m_managed = m_formWindow->isManaged(m_widget);
// Close as soon as a different widget is selected
connect(m_formWindow.data(), &QDesignerFormWindowInterface::selectionChanged,
this, &TaskMenuInlineEditor::updateSelection);
// get old value
QDesignerFormEditorInterface *core = m_formWindow->core();
const QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core->extensionManager(), m_widget);
const int index = sheet->indexOf(m_property);
if (index == -1)
return;
m_value = qvariant_cast<PropertySheetStringValue>(sheet->property(index));
const QString oldValue = m_value.value();
m_editor = new InPlaceEditor(m_widget, m_vm, m_formWindow, oldValue, editRectangle());
connect(m_editor.data(), &InPlaceEditor::textChanged, this, &TaskMenuInlineEditor::updateText);
}
void TaskMenuInlineEditor::updateText(const QString &text)
{
// In the [rare] event we are invoked on an unmanaged widget,
// do not use the cursor selection
m_value.setValue(text);
if (m_managed) {
m_formWindow->cursor()->setProperty(m_property, QVariant::fromValue(m_value));
} else {
m_formWindow->cursor()->setWidgetProperty(m_widget, m_property, QVariant::fromValue(m_value));
}
}
void TaskMenuInlineEditor::updateSelection()
{
if (m_editor)
m_editor->deleteLater();
}
}
QT_END_NAMESPACE
|