QmlJSEditor: Improving ComponentFromObjectDef

Now the use can choose which properties are defined
inside the component and which properties are kept in the
original file. To make the concept clear the dialog contains
a snippet of the generated code.

Change-Id: I92f9f241c9780345dd03b991232c4a811356c266
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
This commit is contained in:
Thomas Hartmann
2016-04-29 10:31:21 +02:00
parent 1ba0e5cdf9
commit 5c45e9ec34
4 changed files with 208 additions and 54 deletions

View File

@@ -51,6 +51,10 @@ ComponentNameDialog::~ComponentNameDialog()
bool ComponentNameDialog::go(QString *proposedName,
QString *proposedPath,
const QStringList &properties,
const QStringList &sourcePreview,
const QString &oldFileName,
QStringList *result,
QWidget *parent)
{
Q_ASSERT(proposedName);
@@ -60,20 +64,81 @@ bool ComponentNameDialog::go(QString *proposedName,
d.ui->componentNameEdit->setNamespacesEnabled(false);
d.ui->componentNameEdit->setLowerCaseFileName(false);
d.ui->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.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);
if (QDialog::Accepted == d.exec()) {
*proposedName = d.ui->componentNameEdit->text();
*proposedPath = d.ui->pathEdit->path();
if (result)
*result = d.propertiesToKeep();
return true;
}
return false;
}
void ComponentNameDialog::setProperties(const QStringList &properties)
{
ui->listWidget->addItems(properties);
for (int i = 0; i < ui->listWidget->count(); ++i) {
QListWidgetItem *item = ui->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);
else
ui->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);
if (item->checkState() == Qt::Checked)
result.append(item->text());
}
return result;
}
void ComponentNameDialog::generateCodePreview()
{
const QString componentName = ui->componentNameEdit->text();
ui->plainTextEdit->clear();
ui->plainTextEdit->appendPlainText(componentName + QLatin1String(" {"));
if (!m_sourcePreview.first().isEmpty())
ui->plainTextEdit->appendPlainText(m_sourcePreview.first());
for (int i = 0; i < ui->listWidget->count(); ++i) {
QListWidgetItem *item = ui->listWidget->item(i);
if (item->checkState() == Qt::Checked)
ui->plainTextEdit->appendPlainText(m_sourcePreview.at(i + 1));
}
ui->plainTextEdit->appendPlainText(QLatin1String("}"));
}
void ComponentNameDialog::choosePath()
{
QString dir = QFileDialog::getExistingDirectory(this, tr("Choose a path"),