EditTableDialog: Don't suggest field name that already exists

See issue #460.
This commit is contained in:
Martin Kleusberg
2015-12-24 13:42:18 +01:00
parent d7c035874a
commit 5af384f0a2
2 changed files with 28 additions and 1 deletions

View File

@@ -419,7 +419,20 @@ void EditTableDialog::addField()
{
QTreeWidgetItem *tbitem = new QTreeWidgetItem(ui->treeWidget);
tbitem->setFlags(tbitem->flags() | Qt::ItemIsEditable);
tbitem->setText(kName, "Field" + QString::number(ui->treeWidget->topLevelItemCount()));
// Find an unused name for the field by starting with 'Fieldx' where x is the number of fields + 1.
// If this name happens to exist already, increase x by one until we find an unused name.
{
unsigned int field_number = ui->treeWidget->topLevelItemCount();
QString field_name;
do
{
field_name = "Field" + QString::number(field_number);
field_number++;
} while(fieldNameExists(field_name));
tbitem->setText(kName, field_name);
}
QComboBox* typeBox = new QComboBox(ui->treeWidget);
typeBox->setProperty("column", tbitem->text(kName));
typeBox->setEditable(true);
@@ -600,3 +613,14 @@ void EditTableDialog::setWithoutRowid(bool without_rowid)
// TODO: Update table if we're editing an existing table
}
bool EditTableDialog::fieldNameExists(const QString& name)
{
foreach(const sqlb::FieldPtr& ptr, m_table.fields())
{
if(ptr->name() == name)
return true;
}
return false;
}

View File

@@ -41,6 +41,9 @@ private:
void moveCurrentField(bool down);
// Returns true if there already is a field of that name
bool fieldNameExists(const QString& name);
private slots:
virtual void populateFields();
virtual void addField();