diff --git a/src/plugins/qmljseditor/CMakeLists.txt b/src/plugins/qmljseditor/CMakeLists.txt index 58b3adf1f9e..ab061f059da 100644 --- a/src/plugins/qmljseditor/CMakeLists.txt +++ b/src/plugins/qmljseditor/CMakeLists.txt @@ -6,8 +6,8 @@ add_qtc_plugin(QmlJSEditor qmljsautocompleter.cpp qmljsautocompleter.h qmljscompletionassist.cpp qmljscompletionassist.h qmljscomponentfromobjectdef.cpp qmljscomponentfromobjectdef.h - qmljscomponentnamedialog.cpp qmljscomponentnamedialog.h qmljscomponentnamedialog.ui - qmljseditingsettingspage.cpp qmljseditingsettingspage.h qmljseditingsettingspage.ui + qmljscomponentnamedialog.cpp qmljscomponentnamedialog.h + qmljseditingsettingspage.cpp qmljseditingsettingspage.h qmljseditor.cpp qmljseditor.h qmljseditor_global.h qmljseditortr.h diff --git a/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp b/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp index baf1a5e9237..11a48002ccf 100644 --- a/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp +++ b/src/plugins/qmljseditor/qmljscomponentnamedialog.cpp @@ -2,29 +2,54 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0 #include "qmljscomponentnamedialog.h" -#include "ui_qmljscomponentnamedialog.h" -#include +#include +#include +#include + +#include +#include #include +#include +#include +#include +#include #include using namespace QmlJSEditor::Internal; ComponentNameDialog::ComponentNameDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::ComponentNameDialog) + QDialog(parent) { - ui->setupUi(this); + setWindowTitle(tr("Move Component into Separate File")); + m_componentNameEdit = new Utils::ClassNameValidatingLineEdit; + m_componentNameEdit->setPlaceholderText(tr("Component Name")); + m_messageLabel = new QLabel; + m_pathEdit = new Utils::PathChooser; + m_label = new QLabel; + m_listWidget = new QListWidget; + m_plainTextEdit = new QPlainTextEdit; + m_checkBox = new QCheckBox(tr("ui.qml file")); + m_buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); - connect(ui->pathEdit, &Utils::PathChooser::rawPathChanged, - this, &ComponentNameDialog::validate); - connect(ui->componentNameEdit, &QLineEdit::textChanged, - this, &ComponentNameDialog::validate); -} + using namespace Utils::Layouting; + Column { + Form { + tr("Component name:"), m_componentNameEdit, br, + empty, m_messageLabel, br, + tr("Path:"), m_pathEdit, br, + }, + m_label, + Row { m_listWidget, m_plainTextEdit }, + Row { m_checkBox, m_buttonBox }, + }.attachTo(this); -ComponentNameDialog::~ComponentNameDialog() -{ - delete ui; + connect(m_buttonBox, &QDialogButtonBox::accepted, this, &ComponentNameDialog::accept); + connect(m_buttonBox, &QDialogButtonBox::rejected, this, &ComponentNameDialog::reject); + connect(m_pathEdit, &Utils::PathChooser::rawPathChanged, + this, &ComponentNameDialog::validate); + connect(m_componentNameEdit, &QLineEdit::textChanged, + this, &ComponentNameDialog::validate); } bool ComponentNameDialog::go(QString *proposedName, @@ -42,32 +67,32 @@ bool ComponentNameDialog::go(QString *proposedName, const bool isUiFile = QFileInfo(oldFileName).completeSuffix() == "ui.qml"; ComponentNameDialog d(parent); - d.ui->componentNameEdit->setNamespacesEnabled(false); - d.ui->componentNameEdit->setLowerCaseFileName(false); - d.ui->componentNameEdit->setForceFirstCapitalLetter(true); + d.m_componentNameEdit->setNamespacesEnabled(false); + d.m_componentNameEdit->setLowerCaseFileName(false); + d.m_componentNameEdit->setForceFirstCapitalLetter(true); if (proposedName->isEmpty()) *proposedName = QLatin1String("MyComponent"); - d.ui->componentNameEdit->setText(*proposedName); - d.ui->pathEdit->setExpectedKind(Utils::PathChooser::ExistingDirectory); - d.ui->pathEdit->setHistoryCompleter(QLatin1String("QmlJs.Component.History")); - d.ui->pathEdit->setPath(*proposedPath); - d.ui->label->setText(tr("Property assignments for %1:").arg(oldFileName)); - d.ui->checkBox->setChecked(isUiFile); - d.ui->checkBox->setVisible(isUiFile); + d.m_componentNameEdit->setText(*proposedName); + d.m_pathEdit->setExpectedKind(Utils::PathChooser::ExistingDirectory); + d.m_pathEdit->setHistoryCompleter(QLatin1String("QmlJs.Component.History")); + d.m_pathEdit->setPath(*proposedPath); + d.m_label->setText(tr("Property assignments for %1:").arg(oldFileName)); + d.m_checkBox->setChecked(isUiFile); + d.m_checkBox->setVisible(isUiFile); d.m_sourcePreview = sourcePreview; d.setProperties(properties); d.generateCodePreview(); - d.connect(d.ui->listWidget, &QListWidget::itemChanged, &d, &ComponentNameDialog::generateCodePreview); - d.connect(d.ui->componentNameEdit, &QLineEdit::textChanged, &d, &ComponentNameDialog::generateCodePreview); + d.connect(d.m_listWidget, &QListWidget::itemChanged, &d, &ComponentNameDialog::generateCodePreview); + d.connect(d.m_componentNameEdit, &QLineEdit::textChanged, &d, &ComponentNameDialog::generateCodePreview); if (QDialog::Accepted == d.exec()) { - *proposedName = d.ui->componentNameEdit->text(); - *proposedPath = d.ui->pathEdit->filePath().toString(); + *proposedName = d.m_componentNameEdit->text(); + *proposedPath = d.m_pathEdit->filePath().toString(); - if (d.ui->checkBox->isChecked()) + if (d.m_checkBox->isChecked()) *proposedSuffix = "ui.qml"; else *proposedSuffix = "qml"; @@ -82,24 +107,24 @@ bool ComponentNameDialog::go(QString *proposedName, void ComponentNameDialog::setProperties(const QStringList &properties) { - ui->listWidget->addItems(properties); + m_listWidget->addItems(properties); - for (int i = 0; i < ui->listWidget->count(); ++i) { - QListWidgetItem *item = ui->listWidget->item(i); + for (int i = 0; i < m_listWidget->count(); ++i) { + QListWidgetItem *item = m_listWidget->item(i); item->setFlags(Qt::ItemIsUserCheckable | Qt:: ItemIsEnabled); if (item->text() == QLatin1String("x") || item->text() == QLatin1String("y")) - ui->listWidget->item(i)->setCheckState(Qt::Checked); + m_listWidget->item(i)->setCheckState(Qt::Checked); else - ui->listWidget->item(i)->setCheckState(Qt::Unchecked); + m_listWidget->item(i)->setCheckState(Qt::Unchecked); } } QStringList ComponentNameDialog::propertiesToKeep() const { QStringList result; - for (int i = 0; i < ui->listWidget->count(); ++i) { - QListWidgetItem *item = ui->listWidget->item(i); + for (int i = 0; i < m_listWidget->count(); ++i) { + QListWidgetItem *item = m_listWidget->item(i); if (item->checkState() == Qt::Checked) result.append(item->text()); @@ -110,43 +135,43 @@ QStringList ComponentNameDialog::propertiesToKeep() const void ComponentNameDialog::generateCodePreview() { - const QString componentName = ui->componentNameEdit->text(); + const QString componentName = m_componentNameEdit->text(); - ui->plainTextEdit->clear(); - ui->plainTextEdit->appendPlainText(componentName + QLatin1String(" {")); + m_plainTextEdit->clear(); + m_plainTextEdit->appendPlainText(componentName + QLatin1String(" {")); if (!m_sourcePreview.first().isEmpty()) - ui->plainTextEdit->appendPlainText(m_sourcePreview.first()); + m_plainTextEdit->appendPlainText(m_sourcePreview.first()); - for (int i = 0; i < ui->listWidget->count(); ++i) { - QListWidgetItem *item = ui->listWidget->item(i); + for (int i = 0; i < m_listWidget->count(); ++i) { + QListWidgetItem *item = m_listWidget->item(i); if (item->checkState() == Qt::Checked) - ui->plainTextEdit->appendPlainText(m_sourcePreview.at(i + 1)); + m_plainTextEdit->appendPlainText(m_sourcePreview.at(i + 1)); } - ui->plainTextEdit->appendPlainText(QLatin1String("}")); + m_plainTextEdit->appendPlainText(QLatin1String("}")); } void ComponentNameDialog::validate() { const QString message = isValid(); - ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(message.isEmpty()); - ui->messageLabel->setText(message); + m_buttonBox->button(QDialogButtonBox::Ok)->setEnabled(message.isEmpty()); + m_messageLabel->setText(message); } QString ComponentNameDialog::isValid() const { - if (!ui->componentNameEdit->isValid()) - return ui->componentNameEdit->errorMessage(); + if (!m_componentNameEdit->isValid()) + return m_componentNameEdit->errorMessage(); - QString compName = ui->componentNameEdit->text(); + QString compName = m_componentNameEdit->text(); if (compName.isEmpty() || !compName[0].isUpper()) return tr("Invalid component name."); - if (!ui->pathEdit->isValid()) + if (!m_pathEdit->isValid()) return tr("Invalid path."); - if (ui->pathEdit->filePath().pathAppended(compName + ".qml").exists()) + if (m_pathEdit->filePath().pathAppended(compName + ".qml").exists()) return tr("Component already exists."); return QString(); diff --git a/src/plugins/qmljseditor/qmljscomponentnamedialog.h b/src/plugins/qmljseditor/qmljscomponentnamedialog.h index 63c0a76d87d..ee3c601ec5d 100644 --- a/src/plugins/qmljseditor/qmljscomponentnamedialog.h +++ b/src/plugins/qmljseditor/qmljscomponentnamedialog.h @@ -5,18 +5,28 @@ #include +QT_BEGIN_NAMESPACE +class QCheckBox; +class QDialogButtonBox; +class QLabel; +class QListWidget; +class QPlainTextEdit; +QT_END_NAMESPACE + +namespace Utils { +class ClassNameValidatingLineEdit; +class PathChooser; +} + namespace QmlJSEditor { namespace Internal { -namespace Ui { class ComponentNameDialog; } - class ComponentNameDialog : public QDialog { Q_OBJECT public: explicit ComponentNameDialog(QWidget *parent = nullptr); - ~ComponentNameDialog() override; static bool go(QString *proposedName, QString *proposedPath, QString *proposedSuffix, const QStringList &properties, const QStringList &sourcePreview, const QString &oldFileName, @@ -35,8 +45,16 @@ protected: QString isValid() const; private: - Ui::ComponentNameDialog *ui; QStringList m_sourcePreview; + + Utils::ClassNameValidatingLineEdit *m_componentNameEdit; + QLabel *m_messageLabel; + Utils::PathChooser *m_pathEdit; + QLabel *m_label; + QListWidget *m_listWidget; + QPlainTextEdit *m_plainTextEdit; + QCheckBox *m_checkBox; + QDialogButtonBox *m_buttonBox; }; } // namespace Internal diff --git a/src/plugins/qmljseditor/qmljscomponentnamedialog.ui b/src/plugins/qmljseditor/qmljscomponentnamedialog.ui deleted file mode 100644 index 005c2e62e9a..00000000000 --- a/src/plugins/qmljseditor/qmljscomponentnamedialog.ui +++ /dev/null @@ -1,160 +0,0 @@ - - - QmlJSEditor::Internal::ComponentNameDialog - - - - 0 - 0 - 495 - 330 - - - - Move Component into Separate File - - - - - - Property assignments for - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - - 0 - 0 - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - Component name: - - - - - - - Component Name - - - - - - - - - - - - - - Path: - - - - - - - - - - - - ui.qml file - - - - - - - - Utils::ClassNameValidatingLineEdit - QLineEdit -
utils/classnamevalidatinglineedit.h
-
- - Utils::PathChooser - QWidget -
utils/pathchooser.h
- 1 -
-
- - componentNameEdit - listWidget - plainTextEdit - - - - - buttonBox - accepted() - QmlJSEditor::Internal::ComponentNameDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - QmlJSEditor::Internal::ComponentNameDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - -
diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp index d0e648289e7..2347f6ccc9e 100644 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp +++ b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp @@ -4,13 +4,15 @@ #include "qmljseditingsettingspage.h" #include "qmljseditorconstants.h" -#include #include #include +#include +#include +#include +#include #include #include -#include const char AUTO_FORMAT_ON_SAVE[] = "QmlJSEditor.AutoFormatOnSave"; const char AUTO_FORMAT_ONLY_CURRENT_PROJECT[] = "QmlJSEditor.AutoFormatOnlyCurrentProject"; @@ -134,42 +136,74 @@ void QmlJsEditingSettings::setUiQmlOpenMode(const QString &mode) class QmlJsEditingSettingsPageWidget final : public Core::IOptionsPageWidget { - Q_DECLARE_TR_FUNCTIONS(QmlDesigner::Internal::QmlJsEditingSettingsPage) - public: QmlJsEditingSettingsPageWidget() { - m_ui.setupUi(this); - auto s = QmlJsEditingSettings::get(); - m_ui.textEditHelperCheckBox->setChecked(s.enableContextPane()); - m_ui.textEditHelperCheckBoxPin->setChecked(s.pinContextPane()); - m_ui.autoFormatOnSave->setChecked(s.autoFormatOnSave()); - m_ui.autoFormatOnlyCurrentProject->setChecked(s.autoFormatOnlyCurrentProject()); - m_ui.foldAuxDataCheckBox->setChecked(s.foldAuxData()); - m_ui.uiQmlOpenComboBox->addItem(tr("Always Ask"), ""); - m_ui.uiQmlOpenComboBox->addItem(tr("Qt Design Studio"), Core::Constants::MODE_DESIGN); - m_ui.uiQmlOpenComboBox->addItem(tr("Qt Creator"), Core::Constants::MODE_EDIT); - int comboIndex = m_ui.uiQmlOpenComboBox->findData(s.uiQmlOpenMode()); - if (comboIndex < 0) - comboIndex = 0; - m_ui.uiQmlOpenComboBox->setCurrentIndex(comboIndex); + autoFormatOnSave = new QCheckBox(tr("Enable auto format on file save")); + autoFormatOnSave->setChecked(s.autoFormatOnSave()); + autoFormatOnlyCurrentProject = + new QCheckBox(tr("Restrict to files contained in the current project")); + autoFormatOnlyCurrentProject->setChecked(s.autoFormatOnlyCurrentProject()); + autoFormatOnlyCurrentProject->setEnabled(autoFormatOnSave->isChecked()); + pinContextPane = new QCheckBox(tr("Pin Qt Quick Toolbar")); + pinContextPane->setChecked(s.pinContextPane()); + enableContextPane = new QCheckBox(tr("Always show Qt Quick Toolbar")); + enableContextPane->setChecked(s.enableContextPane()); + foldAuxData = new QCheckBox(tr("Auto-fold auxiliary data")); + foldAuxData->setChecked(s.foldAuxData()); + uiQmlOpenComboBox = new QComboBox; + uiQmlOpenComboBox->addItem(tr("Always Ask"), ""); + uiQmlOpenComboBox->addItem(tr("Qt Design Studio"), Core::Constants::MODE_DESIGN); + uiQmlOpenComboBox->addItem(tr("Qt Creator"), Core::Constants::MODE_EDIT); + const int comboIndex = qMax(0, uiQmlOpenComboBox->findData(s.uiQmlOpenMode())); + uiQmlOpenComboBox->setCurrentIndex(comboIndex); + uiQmlOpenComboBox->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); + uiQmlOpenComboBox->setSizeAdjustPolicy(QComboBox::QComboBox::AdjustToContents); + + using namespace Utils::Layouting; + Column { + Group { + title(tr("Automatic Formatting on File Save")), + Column { autoFormatOnSave, autoFormatOnlyCurrentProject }, + }, + Group { + title(tr("Qt Quick Toolbars")), + Column { pinContextPane, enableContextPane }, + }, + Group { + title(tr("Features")), + Column { + foldAuxData, + Form { tr("Open .ui.qml files with:"), uiQmlOpenComboBox }, + }, + }, + st, + }.attachTo(this); + + connect(autoFormatOnSave, &QCheckBox::toggled, + autoFormatOnlyCurrentProject, &QWidget::setEnabled); } void apply() final { QmlJsEditingSettings s; - s.setEnableContextPane(m_ui.textEditHelperCheckBox->isChecked()); - s.setPinContextPane(m_ui.textEditHelperCheckBoxPin->isChecked()); - s.setAutoFormatOnSave(m_ui.autoFormatOnSave->isChecked()); - s.setAutoFormatOnlyCurrentProject(m_ui.autoFormatOnlyCurrentProject->isChecked()); - s.setFoldAuxData(m_ui.foldAuxDataCheckBox->isChecked()); - s.setUiQmlOpenMode(m_ui.uiQmlOpenComboBox->currentData().toString()); + s.setEnableContextPane(enableContextPane->isChecked()); + s.setPinContextPane(pinContextPane->isChecked()); + s.setAutoFormatOnSave(autoFormatOnSave->isChecked()); + s.setAutoFormatOnlyCurrentProject(autoFormatOnlyCurrentProject->isChecked()); + s.setFoldAuxData(foldAuxData->isChecked()); + s.setUiQmlOpenMode(uiQmlOpenComboBox->currentData().toString()); s.set(); } private: - Ui::QmlJsEditingSettingsPage m_ui; + QCheckBox *autoFormatOnSave; + QCheckBox *autoFormatOnlyCurrentProject; + QCheckBox *pinContextPane; + QCheckBox *enableContextPane; + QCheckBox *foldAuxData; + QComboBox *uiQmlOpenComboBox; }; diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.h b/src/plugins/qmljseditor/qmljseditingsettingspage.h index 7a9ed864b35..15e8246d974 100644 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.h +++ b/src/plugins/qmljseditor/qmljseditingsettingspage.h @@ -3,7 +3,6 @@ #pragma once -#include "ui_qmljseditingsettingspage.h" #include #include #include diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.ui b/src/plugins/qmljseditor/qmljseditingsettingspage.ui deleted file mode 100644 index 4a82cbf4bce..00000000000 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.ui +++ /dev/null @@ -1,140 +0,0 @@ - - - QmlJSEditor::Internal::QmlJsEditingSettingsPage - - - - 0 - 0 - 433 - 428 - - - - - - - - - - Qt Quick Toolbars - - - - - - If enabled, the toolbar will remain pinned to an absolute position. - - - Pin Qt Quick Toolbar - - - - - - - Always show Qt Quick Toolbar - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Automatic Formatting on File Save - - - - - - Enable auto format on file save - - - - - - - false - - - Restrict to files contained in the current project - - - - - - - - - - Features - - - - - - Auto-fold auxiliary data - - - - - - - - - Open .ui.qml files with: - - - - - - - - 1 - 0 - - - - - - - - - - - - - - - autoFormatOnSave - toggled(bool) - autoFormatOnlyCurrentProject - setEnabled(bool) - - - 216 - 40 - - - 216 - 63 - - - - - diff --git a/src/plugins/qmljseditor/qmljseditor.qbs b/src/plugins/qmljseditor/qmljseditor.qbs index b5f38ce713f..b5b8f3d9396 100644 --- a/src/plugins/qmljseditor/qmljseditor.qbs +++ b/src/plugins/qmljseditor/qmljseditor.qbs @@ -25,10 +25,8 @@ QtcPlugin { "qmljscomponentfromobjectdef.h", "qmljscomponentnamedialog.cpp", "qmljscomponentnamedialog.h", - "qmljscomponentnamedialog.ui", "qmljseditingsettingspage.cpp", "qmljseditingsettingspage.h", - "qmljseditingsettingspage.ui", "qmljseditor.cpp", "qmljseditor.h", "qmljseditor_global.h", "qmljseditortr.h",