aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/bindingeditor/abstracteditordialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/bindingeditor/abstracteditordialog.cpp')
-rw-r--r--src/plugins/qmldesigner/components/bindingeditor/abstracteditordialog.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/src/plugins/qmldesigner/components/bindingeditor/abstracteditordialog.cpp b/src/plugins/qmldesigner/components/bindingeditor/abstracteditordialog.cpp
new file mode 100644
index 0000000000..872a004fcc
--- /dev/null
+++ b/src/plugins/qmldesigner/components/bindingeditor/abstracteditordialog.cpp
@@ -0,0 +1,183 @@
+/****************************************************************************
+**
+** Copyright (C) 2020 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "abstracteditordialog.h"
+
+#include <texteditor/texteditor.h>
+
+#include <qmldesigner/qmldesignerplugin.h>
+#include <qmljseditor/qmljseditor.h>
+#include <qmljseditor/qmljseditordocument.h>
+#include <texteditor/textdocument.h>
+
+#include <QDialogButtonBox>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QPlainTextEdit>
+
+namespace QmlDesigner {
+
+AbstractEditorDialog::AbstractEditorDialog(QWidget *parent, const QString &title)
+ : QDialog(parent)
+ , m_titleString(title)
+{
+ setWindowFlag(Qt::Tool, true);
+ setWindowTitle(defaultTitle());
+ setModal(false);
+
+ setupJSEditor();
+ setupUIComponents();
+
+ QObject::connect(m_buttonBox, &QDialogButtonBox::accepted,
+ this, &AbstractEditorDialog::accepted);
+ QObject::connect(m_buttonBox, &QDialogButtonBox::rejected,
+ this, &AbstractEditorDialog::rejected);
+ QObject::connect(m_editorWidget, &BindingEditorWidget::returnKeyClicked,
+ this, &AbstractEditorDialog::accepted);
+ QObject::connect(m_editorWidget, &QPlainTextEdit::textChanged,
+ this, &AbstractEditorDialog::textChanged);
+}
+
+AbstractEditorDialog::~AbstractEditorDialog()
+{
+ delete m_editor; // m_editorWidget is handled by basetexteditor destructor
+ delete m_buttonBox;
+ delete m_comboBoxLayout;
+ delete m_verticalLayout;
+}
+
+void AbstractEditorDialog::showWidget()
+{
+ this->show();
+ this->raise();
+ m_editorWidget->setFocus();
+}
+
+void AbstractEditorDialog::showWidget(int x, int y)
+{
+ showWidget();
+ move(QPoint(x, y));
+}
+
+QString AbstractEditorDialog::editorValue() const
+{
+ if (!m_editorWidget)
+ return {};
+
+ return m_editorWidget->document()->toPlainText();
+}
+
+void AbstractEditorDialog::setEditorValue(const QString &text)
+{
+ if (m_editorWidget)
+ m_editorWidget->document()->setPlainText(text);
+}
+
+void AbstractEditorDialog::unregisterAutoCompletion()
+{
+ if (m_editorWidget)
+ m_editorWidget->unregisterAutoCompletion();
+}
+
+QString AbstractEditorDialog::defaultTitle() const
+{
+ return m_titleString;
+}
+
+void AbstractEditorDialog::setupJSEditor()
+{
+ static BindingEditorFactory f;
+ m_editor = qobject_cast<TextEditor::BaseTextEditor*>(f.createEditor());
+ m_editorWidget = qobject_cast<BindingEditorWidget*>(m_editor->editorWidget());
+
+ Core::Context context = m_editor->context();
+ context.prepend(BINDINGEDITOR_CONTEXT_ID);
+ m_editorWidget->m_context->setContext(context);
+
+ auto qmlDesignerEditor = QmlDesignerPlugin::instance()->currentDesignDocument()->textEditor();
+
+ m_editorWidget->qmljsdocument = qobject_cast<QmlJSEditor::QmlJSEditorWidget *>(
+ qmlDesignerEditor->widget())->qmlJsEditorDocument();
+
+ m_editorWidget->setLineNumbersVisible(false);
+ m_editorWidget->setMarksVisible(false);
+ m_editorWidget->setCodeFoldingSupported(false);
+ m_editorWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ m_editorWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ m_editorWidget->setTabChangesFocus(true);
+}
+
+void AbstractEditorDialog::setupUIComponents()
+{
+ m_verticalLayout = new QVBoxLayout(this);
+
+ m_comboBoxLayout = new QHBoxLayout;
+
+ m_editorWidget->setParent(this);
+ m_editorWidget->setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
+ m_editorWidget->show();
+
+ m_buttonBox = new QDialogButtonBox(this);
+ m_buttonBox->setOrientation(Qt::Horizontal);
+ m_buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+ m_buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
+
+ m_verticalLayout->addLayout(m_comboBoxLayout);
+ m_verticalLayout->addWidget(m_editorWidget);
+ m_verticalLayout->addWidget(m_buttonBox);
+
+ this->resize(660, 240);
+}
+
+bool AbstractEditorDialog::isNumeric(const TypeName &type)
+{
+ static QList<TypeName> numericTypes = {"double", "int", "real"};
+ return numericTypes.contains(type);
+}
+
+bool AbstractEditorDialog::isColor(const TypeName &type)
+{
+ static QList<TypeName> colorTypes = {"QColor", "color"};
+ return colorTypes.contains(type);
+}
+
+bool AbstractEditorDialog::isVariant(const TypeName &type)
+{
+ static QList<TypeName> variantTypes = {"alias", "unknown", "variant", "var"};
+ return variantTypes.contains(type);
+}
+
+void AbstractEditorDialog::textChanged()
+{
+ if (m_lock)
+ return;
+
+ m_lock = true;
+ adjustProperties();
+ m_lock = false;
+}
+
+} // QmlDesigner namespace