2,012 changes: 1,014 additions & 998 deletions src/datasources/ascii/asciiconfig.ui

Large diffs are not rendered by default.

15 changes: 9 additions & 6 deletions src/datasources/ascii/asciiconfigwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,9 @@ AsciiConfigWidget::AsciiConfigWidget(QSettings& s) : Kst::DataSourceConfigWidget
_oldConfig = _ac->config();
connect(_ac->_readFields, SIGNAL(clicked()), this, SLOT(updateIndexVector()));
connect(_ac->_fieldsLine, SIGNAL(valueChanged(int)), this, SLOT(updateIndexVector()));
connect(_ac->_whitespace, SIGNAL(clicked()), this, SLOT(updateIndexVector()));
connect(_ac->_custom, SIGNAL(clicked()), this, SLOT(updateIndexVector()));
connect(_ac->_fixed, SIGNAL(clicked()), this, SLOT(updateIndexVector()));
}


Expand All @@ -261,7 +264,7 @@ void AsciiConfigWidget::updateIndexVector() {

if (hasInstance()) {
Kst::SharedPtr<AsciiSource> src = Kst::kst_cast<AsciiSource>(instance());
_ac->_indexVector->addItems(src->vector().list());
_ac->_indexVector->addItems(src->fieldListFor(src->fileName(), _ac->config()));
}
}

Expand All @@ -278,9 +281,9 @@ void AsciiConfigWidget::cancel() {
// Update the instance from our new settings
if (src->reusable()) {
src->_config.readGroup(settings(), src->fileName());
if (_ac->config().isUdateNecessary(_oldConfig)) {
if (_ac->config().isUpdateNecessary(_oldConfig)) {
src->reset();
src->internalDataSourceUpdate();
src->updateLists();
}
}
}
Expand All @@ -300,7 +303,7 @@ void AsciiConfigWidget::load() {
_ac->_indexVector->clear();
if (hasInstance()) {
Kst::SharedPtr<AsciiSource> src = Kst::kst_cast<AsciiSource>(instance());
_ac->_indexVector->addItems(src->vector().list());
_ac->_indexVector->addItems(src->fieldListFor(src->fileName(), _ac->config()));

if (src->_config._indexInterpretation == AsciiSourceConfig::CTime) {
_ac->_interpret->setChecked(true);
Expand Down Expand Up @@ -362,9 +365,9 @@ void AsciiConfigWidget::save() {
// Update the instance from our new settings
if (src->reusable()) {
src->_config.readGroup(settings(), src->fileName());
if (_ac->config().isUdateNecessary(_oldConfig)) {
if (_ac->config().isUpdateNecessary(_oldConfig)) {
src->reset();
src->internalDataSourceUpdate();
src->updateLists();
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/datasources/ascii/asciiplugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ QStringList AsciiPlugin::fieldList(QSettings *cfg,

AsciiSourceConfig config;
config.readGroup(*cfg, filename);
QStringList rc = AsciiSource::fieldListFor(filename, &config);
QStringList rc = AsciiSource::fieldListFor(filename, config);

if (complete) {
*complete = rc.count() > 1;
Expand Down Expand Up @@ -104,7 +104,7 @@ QStringList AsciiPlugin::scalarList(QSettings *cfg,

AsciiSourceConfig config;
config.readGroup(*cfg, filename);
QStringList rc = AsciiSource::scalarListFor(filename, &config);
QStringList rc = AsciiSource::scalarListFor(filename, config);

if (complete) {
*complete = rc.count() > 1;
Expand Down Expand Up @@ -135,7 +135,7 @@ QStringList AsciiPlugin::stringList(QSettings *cfg,

AsciiSourceConfig config;
config.readGroup(*cfg, filename);
QStringList rc = AsciiSource::stringListFor(filename, &config);
QStringList rc = AsciiSource::stringListFor(filename, config);

if (complete) {
*complete = rc.count() > 1;
Expand Down
84 changes: 44 additions & 40 deletions src/datasources/ascii/asciisource.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,29 @@ bool AsciiSource::initRowIndex()
return true;
}

//-------------------------------------------------------------------------------------------
void AsciiSource::updateLists() {
_fieldList = fieldListFor(_filename, _config);
QStringList units;
if (_config._readUnits) {
units += unitListFor(_filename, _config);
for (int index = 0; index < _fieldList.size(); ++index) {
if (index >= units.size()) {
break; // Missing units => the user's fault, but at least don't crash
}
_fieldUnits[_fieldList[index]] = units[index];
}
}
_fieldListComplete = _fieldList.count() > 1;

_fieldLookup.clear();
for (int i = 0; i < _fieldList.size(); i++)
_fieldLookup[_fieldList[i]] = i;

// Re-update the scalar list
_scalarList = scalarListFor(_filename, _config);

}

//-------------------------------------------------------------------------------------------
Kst::Object::UpdateType AsciiSource::internalDataSourceUpdate()
Expand All @@ -174,34 +197,15 @@ Kst::Object::UpdateType AsciiSource::internalDataSourceUpdate(bool read_complete
if (!_haveHeader) {
return NoChange;
}
// Re-update the field list since we have one now
_fieldList = fieldListFor(_filename, &_config);
QStringList units;
if (_config._readUnits) {
units += unitListFor(_filename, &_config);
for (int index = 0; index < _fieldList.size(); ++index) {
if (index >= units.size()) {
break; // Missing units => the user's fault, but at least don't crash
}
_fieldUnits[_fieldList[index]] = units[index];
}
}
_fieldListComplete = _fieldList.count() > 1;

_fieldLookup.clear();
for (int i = 0; i < _fieldList.size(); i++)
_fieldLookup[_fieldList[i]] = i;

// Re-update the scalar list since we have one now
_scalarList = scalarListFor(_filename, &_config);
}

updateLists();

QFile file(_filename);
if (!AsciiFileBuffer::openFile(file)) {
// Qt: If the device is closed, the size returned will not reflect the actual size of the device.
return NoChange;
}

bool force_update = true;
if (_fileSize == file.size()) {
force_update = false;
Expand Down Expand Up @@ -460,7 +464,7 @@ bool AsciiSource::isEmpty() const


//-------------------------------------------------------------------------------------------
QStringList AsciiSource::scalarListFor(const QString& filename, AsciiSourceConfig*)
QStringList AsciiSource::scalarListFor(const QString& filename, AsciiSourceConfig)
{
QFile file(filename);
if (!AsciiFileBuffer::openFile(file)) {
Expand All @@ -471,7 +475,7 @@ QStringList AsciiSource::scalarListFor(const QString& filename, AsciiSourceConfi


//-------------------------------------------------------------------------------------------
QStringList AsciiSource::stringListFor(const QString& filename, AsciiSourceConfig*)
QStringList AsciiSource::stringListFor(const QString& filename, AsciiSourceConfig)
{
QFile file(filename);
if (!AsciiFileBuffer::openFile(file)) {
Expand Down Expand Up @@ -514,7 +518,7 @@ int AsciiSource::splitHeaderLine(const QByteArray& line, const AsciiSourceConfig


//-------------------------------------------------------------------------------------------
QStringList AsciiSource::fieldListFor(const QString& filename, AsciiSourceConfig* cfg)
QStringList AsciiSource::fieldListFor(const QString& filename, AsciiSourceConfig cfg)
{
QFile file(filename);
if (!AsciiFileBuffer::openFile(file)) {
Expand All @@ -524,15 +528,15 @@ QStringList AsciiSource::fieldListFor(const QString& filename, AsciiSourceConfig
QStringList fields;
fields += "INDEX";

if (cfg->_readFields) {
int fieldsLine = cfg->_fieldsLine;
if (cfg._readFields) {
int fieldsLine = cfg._fieldsLine;
int currentLine = 0; // Explicit line counter, to make the code easier to understand
while (currentLine < cfg->_dataLine) {
while (currentLine < cfg._dataLine) {
const QByteArray line = file.readLine();
int r = line.size();
if (currentLine == fieldsLine && r >= 0) {
QStringList parts;
AsciiSource::splitHeaderLine(line, *cfg, &parts);
AsciiSource::splitHeaderLine(line, cfg, &parts);
fields += parts;
break;
}
Expand All @@ -547,14 +551,14 @@ QStringList AsciiSource::fieldListFor(const QString& filename, AsciiSourceConfig


QRegExp regex;
if (cfg->_columnType == AsciiSourceConfig::Custom && !cfg->_columnDelimiter.value().isEmpty()) {
regex.setPattern(QString("^[%1]*[%2].*").arg(QRegExp::escape(cfg->_columnDelimiter.value())).arg(cfg->_delimiters));
if (cfg._columnType == AsciiSourceConfig::Custom && !cfg._columnDelimiter.value().isEmpty()) {
regex.setPattern(QString("^[%1]*[%2].*").arg(QRegExp::escape(cfg._columnDelimiter.value())).arg(cfg._delimiters));
} else {
regex.setPattern(QString("^\\s*[%1].*").arg(cfg->_delimiters));
regex.setPattern(QString("^\\s*[%1].*").arg(cfg._delimiters));
}

bool done = false;
int skip = cfg->_dataLine;
int skip = cfg._dataLine;
//FIXME This is a hack which should eventually be fixed by specifying
// the starting frame of the data when calling KstDataSource::fieldListForSource
// and KstDataSource::fieldList. If the skip value is not specified, then
Expand All @@ -581,7 +585,7 @@ QStringList AsciiSource::fieldListFor(const QString& filename, AsciiSourceConfig
if (maxcnt >= 0) { //original skip value == 0, so scan some lines
if (curscan >= nextscan) {
if (r > 1 && !regex.exactMatch(line)) {
cnt = splitHeaderLine(line, *cfg);
cnt = splitHeaderLine(line, cfg);
if (cnt > maxcnt) {
maxcnt = cnt;
}
Expand All @@ -594,7 +598,7 @@ QStringList AsciiSource::fieldListFor(const QString& filename, AsciiSourceConfig
continue;
}
if (r > 1 && !regex.exactMatch(line)) { //at desired line, find count
maxcnt = splitHeaderLine(line, *cfg);
maxcnt = splitHeaderLine(line, cfg);
done = true;
} else if (r < 0) {
return fields;
Expand All @@ -604,13 +608,13 @@ QStringList AsciiSource::fieldListFor(const QString& filename, AsciiSourceConfig
for (int i = 1; i <= maxcnt; ++i) {
fields += i18n("Column %1").arg(i).trimmed();
}

return fields;
}


//-------------------------------------------------------------------------------------------
QStringList AsciiSource::unitListFor(const QString& filename, AsciiSourceConfig* cfg)
QStringList AsciiSource::unitListFor(const QString& filename, AsciiSourceConfig cfg)
{
QFile file(filename);
if (!AsciiFileBuffer::openFile(file)) {
Expand All @@ -620,14 +624,14 @@ QStringList AsciiSource::unitListFor(const QString& filename, AsciiSourceConfig*
QStringList units;
units += ""; // To go with INDEX

int unitsLine = cfg->_unitsLine;
int unitsLine = cfg._unitsLine;
int currentLine = 0;
while (currentLine < cfg->_dataLine) {
while (currentLine < cfg._dataLine) {
const QByteArray line = file.readLine();
int r = line.size();
if (currentLine == unitsLine && r >= 0) {
QStringList parts;
AsciiSource::splitHeaderLine(line, *cfg, &parts);
AsciiSource::splitHeaderLine(line, cfg, &parts);
units += parts;
break;
}
Expand Down
10 changes: 5 additions & 5 deletions src/datasources/ascii/asciisource.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,15 +57,16 @@ class AsciiSource : public Kst::DataSource
bool isTime(const QString &field) const;

virtual void reset();
void updateLists();

virtual const QString& typeString() const;

static const QString asciiTypeKey();

static QStringList fieldListFor(const QString& filename, AsciiSourceConfig *cfg);
static QStringList unitListFor(const QString& filename, AsciiSourceConfig* cfg);
static QStringList scalarListFor(const QString& filename, AsciiSourceConfig *cfg);
static QStringList stringListFor(const QString& filename, AsciiSourceConfig *cfg);
static QStringList fieldListFor(const QString& filename, AsciiSourceConfig cfg);
static QStringList unitListFor(const QString& filename, AsciiSourceConfig cfg);
static QStringList scalarListFor(const QString& filename, AsciiSourceConfig cfg);
static QStringList stringListFor(const QString& filename, AsciiSourceConfig cfg);

Kst::ObjectList<Kst::Object> autoCurves(Kst::ObjectStore& objectStore);

Expand All @@ -76,7 +77,6 @@ class AsciiSource : public Kst::DataSource
signals:
void signalRowProgress();


private:
AsciiDataReader _reader;
AsciiFileBuffer _fileBuffer;
Expand Down
2 changes: 1 addition & 1 deletion src/datasources/ascii/asciisourceconfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ bool AsciiSourceConfig::operator!=(const AsciiSourceConfig& rhs) const
return !operator==(rhs);
}

bool AsciiSourceConfig::isUdateNecessary(const AsciiSourceConfig& rhs) const
bool AsciiSourceConfig::isUpdateNecessary(const AsciiSourceConfig& rhs) const
{
return _fileNamePattern != rhs._fileNamePattern ||
_indexVector != rhs._indexVector ||
Expand Down
2 changes: 1 addition & 1 deletion src/datasources/ascii/asciisourceconfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class AsciiSourceConfig {

bool operator==(const AsciiSourceConfig&) const;
bool operator!=(const AsciiSourceConfig& rhs) const;
bool isUdateNecessary(const AsciiSourceConfig& rhs) const;
bool isUpdateNecessary(const AsciiSourceConfig& rhs) const;

void saveGroup(QSettings& cfg, const QString& fileName = QString()) const;
void readGroup(QSettings& cfg, const QString& fileName = QString());
Expand Down