# HG changeset patch # User Chris Cannam # Date 1436286538 -3600 # Node ID e5d40d89b1ec879dfe9e64b0fc440c69d1adf6e2 # Parent 3871dffc31bd634547446e741a4143766b3856f6 Major fix to bug in handling of fuzzy column in CSV import (introduced since the last release) which meant that col 6 of a wide CSV would go missing completely! diff -r 3871dffc31bd -r e5d40d89b1ec widgets/CSVFormatDialog.cpp --- a/widgets/CSVFormatDialog.cpp Wed Jul 01 15:53:54 2015 +0100 +++ b/widgets/CSVFormatDialog.cpp Tue Jul 07 17:28:58 2015 +0100 @@ -254,8 +254,12 @@ { // First check if we already have any. NB there may be fewer than // m_format.getColumnCount() elements in m_columnPurposeCombos - // (because of the fuzzy column behaviour) + // (because of the fuzzy column behaviour). Note also that the + // fuzzy column (which is the one just showing how many more + // columns there are) has a different combo with only two items + // (ignore or Values) for (int i = 0; i < m_columnPurposeCombos.size(); ++i) { + if (i == m_fuzzyColumn) continue; QComboBox *cb = m_columnPurposeCombos[i]; if (cb->currentIndex() == int(CSVFormat::ColumnStartTime)) { return; @@ -263,6 +267,7 @@ } // and if not, select one for (int i = 0; i < m_columnPurposeCombos.size(); ++i) { + if (i == m_fuzzyColumn) continue; QComboBox *cb = m_columnPurposeCombos[i]; if (cb->currentIndex() == int(CSVFormat::ColumnValue)) { cb->setCurrentIndex(int(CSVFormat::ColumnStartTime)); @@ -278,6 +283,7 @@ // in m_columnPurposeCombos (because of the fuzzy column // behaviour) for (int i = 0; i < m_columnPurposeCombos.size(); ++i) { + if (i == m_fuzzyColumn) continue; QComboBox *cb = m_columnPurposeCombos[i]; if (cb->currentIndex() == int(CSVFormat::ColumnStartTime)) { cb->setCurrentIndex(int(CSVFormat::ColumnValue)); @@ -345,6 +351,11 @@ for (int i = 0; i < m_columnPurposeCombos.size(); ++i) { + // The fuzzy column combo only has the entries or + // Values, so it can't affect the timing type and none of this + // logic affects it + if (i == m_fuzzyColumn) continue; + QComboBox *thisCombo = m_columnPurposeCombos[i]; CSVFormat::ColumnPurpose cp = (CSVFormat::ColumnPurpose) @@ -353,8 +364,6 @@ if (!thisChanged) { - if (i == m_fuzzyColumn) continue; - // We can only have one ColumnStartTime column, and only // one of either ColumnDuration or ColumnEndTime @@ -442,24 +451,8 @@ CSVFormat::ColumnPurpose purpose = (CSVFormat::ColumnPurpose) (thisCombo->currentIndex()); - if (purpose == CSVFormat::ColumnStartTime) { - haveStartTime = true; - } - if (purpose == CSVFormat::ColumnEndTime || - purpose == CSVFormat::ColumnDuration) { - haveDuration = true; - } - if (purpose == CSVFormat::ColumnPitch) { - havePitch = true; - } - if (purpose == CSVFormat::ColumnValue) { - ++valueCount; - } - - m_format.setColumnPurpose(i, purpose); - if (i == m_fuzzyColumn) { - for (int j = i + 1; j < m_format.getColumnCount(); ++j) { + for (int j = i; j < m_format.getColumnCount(); ++j) { if (purpose == CSVFormat::ColumnUnknown) { m_format.setColumnPurpose(j, CSVFormat::ColumnUnknown); } else { // Value @@ -467,6 +460,23 @@ ++valueCount; } } + } else { + + if (purpose == CSVFormat::ColumnStartTime) { + haveStartTime = true; + } + if (purpose == CSVFormat::ColumnEndTime || + purpose == CSVFormat::ColumnDuration) { + haveDuration = true; + } + if (purpose == CSVFormat::ColumnPitch) { + havePitch = true; + } + if (purpose == CSVFormat::ColumnValue) { + ++valueCount; + } + + m_format.setColumnPurpose(i, purpose); } }