void CSVAtlasWindow::sMapChanged( int ) { CSVMap map; if(!_selectedMap.isEmpty()) { map = _atlas->map(_selectedMap); if(tr("Insert") == _action->currentText()) map.setAction(CSVMap::Insert); else if(tr("Update") == _action->currentText()) map.setAction(CSVMap::Update); else if(tr("Append") == _action->currentText()) map.setAction(CSVMap::Append); map.setDelimiter(_delimiter->currentText()); map.setDescription(_description->toPlainText()); map.setSqlPre(_preSql->toPlainText().trimmed()); map.setSqlPreContinueOnError(_sqlPreContinueOnError->isChecked()); map.setSqlPost(_postSql->toPlainText().trimmed()); for(int r = 0; r < _fields->rowCount(); r++) { CSVMapField field = map.field(_fields->item(r, 1)->data(Qt::EditRole).toString()); field.setName(_fields->item(r, 1)->data(Qt::EditRole).toString()); if (qobject_cast<QCheckBox*>(_fields->cellWidget(r, 0))) field.setIsKey(qobject_cast<QCheckBox*>(_fields->cellWidget(r,0))->isChecked()); else field.setIsKey(FALSE); field.setType(QVariant::nameToType(_fields->item(r, 2)->data(Qt::EditRole).toString().toAscii().data())); if (qobject_cast<QComboBox*>(_fields->cellWidget(r, 4))) field.setAction(CSVMapField::nameToAction(qobject_cast<QComboBox*>(_fields->cellWidget(r, 4))->currentText())); else field.setAction(CSVMapField::Action_Default); if (qobject_cast<QSpinBox*>(_fields->cellWidget(r, 5))) field.setColumn(qobject_cast<QSpinBox*>(_fields->cellWidget(r,5))->value()); else field.setColumn(0); if (qobject_cast<QComboBox*>(_fields->cellWidget(r, 6))) field.setIfNullAction(CSVMapField::nameToIfNull(qobject_cast<QComboBox*>(_fields->cellWidget(r, 6))->currentText())); else field.setIfNullAction(CSVMapField::Nothing); if (qobject_cast<QSpinBox*>(_fields->cellWidget(r, 7))) field.setColumnAlt(qobject_cast<QSpinBox*>(_fields->cellWidget(r, 7))->value()); else field.setColumnAlt(1); if (qobject_cast<QComboBox*>(_fields->cellWidget(r, 8))) field.setIfNullActionAlt(CSVMapField::nameToIfNull(qobject_cast<QComboBox*>(_fields->cellWidget(r, 8))->currentText())); else field.setIfNullActionAlt(CSVMapField::Nothing); field.setValueAlt(_fields->item(r, 9)->data(Qt::EditRole).toString()); map.setField(field); } map.simplify(); _atlas->setMap(map); } QSqlDatabase db = QSqlDatabase::database(); if (db.isValid()) { _fields->setRowCount(0); if(_map->count() && ! _map->currentText().isEmpty()) { // CODE TO SELECT MAP _selectedMap = _map->currentText(); map = _atlas->map(_selectedMap); _table->setTitle(tr("Table: ") + map.table()); _table->setEnabled(TRUE); _action->setCurrentIndex(map.action()); _description->setText(map.description()); int delimidx = _delimiter->findText(map.delimiter()); if (delimidx >= 0) _delimiter->setCurrentIndex(delimidx); else if (! map.delimiter().isEmpty()) _delimiter->addItem(map.delimiter()); else _delimiter->setCurrentIndex(0); _preSql->setText(map.sqlPre()); _sqlPreContinueOnError->setChecked(map.sqlPreContinueOnError()); _postSql->setText(map.sqlPost()); QSqlRecord record = db.record(map.table()); QStringList fieldnames; if (record.isEmpty()) { _msghandler->message(QtWarningMsg, tr("No Existing Table"), tr("<p>The table %1 does not exist in this " "database. You may continue to use and edit " "this map but only those fields that are known " "will be shown.").arg(map.table()), QUrl(), QSourceLocation()); fieldnames = map.fieldList(); } else { QStringList fList = map.fieldList(); for(int i = 0; i < fList.size(); ++i) { CSVMapField f = map.field(fList.at(i)); if(!record.contains(fList.at(i))) { map.removeField(fList.at(i)); MissingField diag(this, f.name(), record); if(diag.exec() == QDialog::Accepted) { f.setName(diag._fields->currentText()); map.setField(f); } _atlas->setMap(map); } } for (int i = 0; i < record.count(); i++) fieldnames.append(record.fieldName(i)); } _fields->setRowCount(fieldnames.size()); for(int row = 0; row < fieldnames.size(); ++row) { CSVMapField mf = map.field(fieldnames.at(row)); QCheckBox *check = new QCheckBox(_fields); if(!mf.isEmpty()) check->setChecked(mf.isKey()); _fields->setCellWidget(row, 0, check); _fields->setItem(row, 1, new QTableWidgetItem(fieldnames.at(row))); if (record.isEmpty()) { _fields->setItem(row, 2, new QTableWidgetItem(QVariant::typeToName(mf.type()))); _fields->setItem(row, 3, new QTableWidgetItem(tr("Unknown"))); } else { if (record.field(row).type() == QVariant::String && record.field(row).length() > 0) _fields->setItem(row, 2, new QTableWidgetItem(QVariant::typeToName(record.field(row).type()) + QString("(%1)").arg(record.field(row).length()))); else _fields->setItem(row, 2, new QTableWidgetItem(QVariant::typeToName(record.field(row).type()))); _fields->setItem(row, 3, new QTableWidgetItem( (record.field(row).requiredStatus() == QSqlField::Required) ? tr("Yes") : (record.field(row).requiredStatus() == QSqlField::Optional) ? tr("No") : tr("Unknown"))); } QComboBox *actcombo = new QComboBox(_fields); actcombo->addItems(CSVMapField::actionList()); if (! mf.isEmpty()) actcombo->setCurrentIndex(mf.action()); _fields->setCellWidget(row, 4, actcombo); QSpinBox *colspinner = new QSpinBox(_fields); colspinner->setRange(1, 999); colspinner->setPrefix(tr("Column ")); if(!mf.isEmpty()) colspinner->setValue(mf.column()); _fields->setCellWidget(row, 5, colspinner); QComboBox *nullcombo = new QComboBox(_fields); nullcombo->addItems(CSVMapField::ifNullList()); if (! mf.isEmpty()) nullcombo->setCurrentIndex(mf.ifNullAction()); _fields->setCellWidget(row, 6, nullcombo); QSpinBox *altspinner = new QSpinBox(_fields); altspinner->setRange(1, 999); altspinner->setPrefix(tr("Column ")); if (! mf.isEmpty()) altspinner->setValue(mf.columnAlt()); _fields->setCellWidget(row, 7, altspinner); QComboBox *altnullcombo = new QComboBox(_fields); altnullcombo->addItems(CSVMapField::ifNullList(TRUE)); if (! mf.isEmpty()) altnullcombo->setCurrentIndex(mf.ifNullActionAlt()); _fields->setCellWidget(row, 8, altnullcombo); _fields->setItem(row, 9, new QTableWidgetItem(mf.valueAlt())); RowController *control = new RowController(_fields, row, colspinner); control->setAction(actcombo); control->setColumn(colspinner); control->setIfNull(nullcombo); control->setAltColumn(altspinner); control->setAltIfNull(altnullcombo); control->setAltValue(_fields->item(row, 9)); control->finishSetup(); } } else { _selectedMap = QString::null; _table->setTitle(tr("Table: ")); _table->setEnabled(FALSE); } } else _msghandler->message(QtCriticalMsg, tr("No Database"), tr("Could not get the database connection.")); }