Skip to content

Commit 975a207

Browse files
authored
Keep "R Syntax in result" setting in JASP file (#6062)
1 parent 90ca287 commit 975a207

File tree

13 files changed

+63
-37
lines changed

13 files changed

+63
-37
lines changed

CommonData/databaseinterface.cpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ void DatabaseInterface::upgradeDBFromVersion(Version originalVersion)
8181
runStatements(_dbIndexesSql);
8282
}
8383

84+
if(originalVersion <= "0.95.4")
85+
{
86+
if(!tableHasColumn("DataSets", "showRSyntax"))
87+
runStatements("ALTER TABLE DataSets ADD COLUMN showRSyntax INT;");
88+
}
89+
8490
transactionWriteEnd();
8591
}
8692

@@ -102,7 +108,7 @@ DatabaseInterface::~DatabaseInterface()
102108
}
103109

104110

105-
int DatabaseInterface::dataSetInsert(const std::string & dataFilePath, long dataFileTimestamp, const std::string & description, const std::string & databaseJson, const std::string & emptyValuesJson, bool dataSynch)
111+
int DatabaseInterface::dataSetInsert(const std::string & dataFilePath, long dataFileTimestamp, const std::string & description, const std::string & databaseJson, const std::string & emptyValuesJson, bool dataSynch, bool showRSyntax)
106112
{
107113
JASPTIMER_SCOPE(DatabaseInterface::dataSetInsert);
108114
std::function<void(sqlite3_stmt *stmt)> prepare = [&](sqlite3_stmt *stmt)
@@ -113,17 +119,18 @@ int DatabaseInterface::dataSetInsert(const std::string & dataFilePath, long data
113119
sqlite3_bind_text(stmt, 4, databaseJson.c_str(), databaseJson.length(), SQLITE_TRANSIENT);
114120
sqlite3_bind_text(stmt, 5, emptyValuesJson.c_str(), emptyValuesJson.length(), SQLITE_TRANSIENT);
115121
sqlite3_bind_int(stmt, 6, dataSynch);
122+
sqlite3_bind_int(stmt, 7, showRSyntax);
116123
};
117124

118125
transactionWriteBegin();
119-
int id = runStatementsId("INSERT OR REPLACE INTO DataSets (dataFilePath, dataFileTimestamp, description, databaseJson, emptyValuesJson, dataFileSynch, id) VALUES (?, ?, ?, ?, ?, ?, 1) RETURNING id;", prepare);
126+
int id = runStatementsId("INSERT OR REPLACE INTO DataSets (dataFilePath, dataFileTimestamp, description, databaseJson, emptyValuesJson, dataFileSynch, showRSyntax, id) VALUES (?, ?, ?, ?, ?, ?, ?, 1) RETURNING id;", prepare);
120127
runStatements("CREATE TABLE " + dataSetName(id) + " (rowNumber INTEGER PRIMARY KEY);"); // Can be overwritten through dataSetCreateTable
121128
transactionWriteEnd();
122129

123130
return id;
124131
}
125132

126-
void DatabaseInterface::dataSetUpdate(int dataSetId, const std::string & dataFilePath, long dataFileTimestamp, const std::string & description, const std::string & databaseJson, const std::string & emptyValuesJson, bool dataSynch)
133+
void DatabaseInterface::dataSetUpdate(int dataSetId, const std::string & dataFilePath, long dataFileTimestamp, const std::string & description, const std::string & databaseJson, const std::string & emptyValuesJson, bool dataSynch, bool showRSyntax)
127134
{
128135
JASPTIMER_SCOPE(DatabaseInterface::dataSetUpdate);
129136
std::function<void(sqlite3_stmt *stmt)> prepare = [&](sqlite3_stmt *stmt)
@@ -134,15 +141,16 @@ void DatabaseInterface::dataSetUpdate(int dataSetId, const std::string & dataFil
134141
sqlite3_bind_text(stmt, 4, databaseJson.c_str(), databaseJson.length(), SQLITE_TRANSIENT);
135142
sqlite3_bind_text(stmt, 5, emptyValuesJson.c_str(), emptyValuesJson.length(), SQLITE_TRANSIENT);
136143
sqlite3_bind_int(stmt, 6, dataSynch);
137-
sqlite3_bind_int(stmt, 7, dataSetId);
144+
sqlite3_bind_int(stmt, 7, showRSyntax);
145+
sqlite3_bind_int(stmt, 8, dataSetId);
138146
};
139147

140148
//Log::log() << "UPDATE DataSet " << dataSetId << " with Empty Values: " << emptyValuesJson << std::endl;
141149

142-
runStatements("UPDATE DataSets SET dataFilePath=?, dataFileTimestamp=?, description=?, databaseJson=?, emptyValuesJson=?, dataFileSynch=?, revision=revision+1 WHERE id = ?;", prepare);
150+
runStatements("UPDATE DataSets SET dataFilePath=?, dataFileTimestamp=?, description=?, databaseJson=?, emptyValuesJson=?, dataFileSynch=?, showRSyntax=?, revision=revision+1 WHERE id = ?;", prepare);
143151
}
144152

145-
void DatabaseInterface::dataSetLoad(int dataSetId, std::string & dataFilePath, long & dataFileTimestamp, std::string & description, std::string & databaseJson, std::string & emptyValuesJson, int & revision, bool & dataSynch)
153+
void DatabaseInterface::dataSetLoad(int dataSetId, std::string & dataFilePath, long & dataFileTimestamp, std::string & description, std::string & databaseJson, std::string & emptyValuesJson, int & revision, bool & dataSynch, bool & showRSyntax)
146154
{
147155
JASPTIMER_SCOPE(DatabaseInterface::dataSetLoad);
148156
std::function<void(sqlite3_stmt *stmt)> prepare = [&](sqlite3_stmt *stmt)
@@ -154,7 +162,7 @@ void DatabaseInterface::dataSetLoad(int dataSetId, std::string & dataFilePath, l
154162
{
155163
int colCount = sqlite3_column_count(stmt);
156164

157-
assert(colCount == 7);
165+
assert(colCount == 8);
158166

159167
dataFilePath = _wrap_sqlite3_column_text(stmt, 0);
160168
dataFileTimestamp = sqlite3_column_int( stmt, 1);
@@ -163,11 +171,12 @@ void DatabaseInterface::dataSetLoad(int dataSetId, std::string & dataFilePath, l
163171
emptyValuesJson = _wrap_sqlite3_column_text(stmt, 4);
164172
revision = sqlite3_column_int( stmt, 5);
165173
dataSynch = sqlite3_column_int( stmt, 6);
174+
showRSyntax = sqlite3_column_int( stmt, 7);
166175

167176
//Log::log() << "Output loadDataset(dataSetId="<<dataSetId<<") had (dataFilePath='"<<dataFilePath<<"', databaseJson='"<<databaseJson<<"', emptyValuesJson='"<<emptyValuesJson<<"')" << std::endl;
168177
};
169178

170-
runStatements("SELECT dataFilePath, dataFileTimestamp, description, databaseJson, emptyValuesJson, revision, dataFileSynch FROM DataSets WHERE id = ?;", prepare, processRow);
179+
runStatements("SELECT dataFilePath, dataFileTimestamp, description, databaseJson, emptyValuesJson, revision, dataFileSynch, showRSyntax FROM DataSets WHERE id = ?;", prepare, processRow);
171180
}
172181

173182
int DatabaseInterface::dataSetColCount(int dataSetId)

CommonData/databaseinterface.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ class DatabaseInterface
8989
int dataSetGetId();
9090
bool dataSetExists( int dataSetId);
9191
void dataSetDelete( int dataSetId);
92-
int dataSetInsert( const std::string & dataFilePath = "", long dataFileTimestamp = 0, const std::string & description = "", const std::string & databaseJson = "", const std::string & emptyValuesJson = "", bool dataSynch = false); ///< Inserts a new DataSet row into DataSets and creates an empty DataSet_#id. returns id
93-
void dataSetUpdate( int dataSetId, const std::string & dataFilePath = "", long dataFileTimestamp = 0, const std::string & description = "", const std::string & databaseJson = "", const std::string & emptyValuesJson = "", bool dataSynch = false); ///< Updates an existing DataSet row in DataSets
94-
void dataSetLoad( int dataSetId, std::string & dataFilePath, long & dataFileTimestamp, std::string & description, std::string & databaseJson, std::string & emptyValuesJson, int & revision, bool & dataSynch); ///< Loads an existing DataSet row into arguments
92+
int dataSetInsert( const std::string & dataFilePath = "", long dataFileTimestamp = 0, const std::string & description = "", const std::string & databaseJson = "", const std::string & emptyValuesJson = "", bool dataSynch = false, bool showRSyntax = false); ///< Inserts a new DataSet row into DataSets and creates an empty DataSet_#id. returns id
93+
void dataSetUpdate( int dataSetId, const std::string & dataFilePath = "", long dataFileTimestamp = 0, const std::string & description = "", const std::string & databaseJson = "", const std::string & emptyValuesJson = "", bool dataSynch = false, bool showRSyntax = false); ///< Updates an existing DataSet row in DataSets
94+
void dataSetLoad( int dataSetId, std::string & dataFilePath, long & dataFileTimestamp, std::string & description, std::string & databaseJson, std::string & emptyValuesJson, int & revision, bool & dataSynch, bool & showRSyntax); ///< Loads an existing DataSet row into arguments
9595
static int dataSetColCount( int dataSetId);
9696
static int dataSetRowCount( int dataSetId);
9797
void dataSetSetRowCount( int dataSetId, size_t rowCount);

CommonData/dataset.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ void DataSet::dbCreate()
267267
db().transactionWriteBegin();
268268

269269
//The variables are probably empty though:
270-
_dataSetID = db().dataSetInsert(_dataFilePath, _dataFileTimestamp, _description, _databaseJson, _emptyValues->toJson().toStyledString(), _dataFileSynch);
270+
_dataSetID = db().dataSetInsert(_dataFilePath, _dataFileTimestamp, _description, _databaseJson, _emptyValues->toJson().toStyledString(), _dataFileSynch, _showRSyntax);
271271

272272
assert(_dataSetID == 1);
273273

@@ -283,7 +283,7 @@ void DataSet::dbCreate()
283283
void DataSet::dbUpdate()
284284
{
285285
assert(_dataSetID > 0);
286-
db().dataSetUpdate(_dataSetID, _dataFilePath, _dataFileTimestamp, _description, _databaseJson, _emptyValues->toJson().toStyledString(), _dataFileSynch);
286+
db().dataSetUpdate(_dataSetID, _dataFilePath, _dataFileTimestamp, _description, _databaseJson, _emptyValues->toJson().toStyledString(), _dataFileSynch, _showRSyntax);
287287
incRevision();
288288
}
289289

@@ -309,7 +309,7 @@ void DataSet::dbLoad(int index, std::function<void(float)> progressCallback, Ver
309309

310310
std::string emptyVals;
311311

312-
db().dataSetLoad(_dataSetID, _dataFilePath, _dataFileTimestamp, _description, _databaseJson, emptyVals, _revision, _dataFileSynch);
312+
db().dataSetLoad(_dataSetID, _dataFilePath, _dataFileTimestamp, _description, _databaseJson, emptyVals, _revision, _dataFileSynch, _showRSyntax);
313313
progressCallback(0.1);
314314

315315
if(!_filter)

CommonData/dataset.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class DataSet : public DataSetBaseNode
3030
int columnCount() const ;
3131
int rowCount() const ;
3232
bool dataFileSynch() const { return _dataFileSynch; }
33+
bool showRSyntax() const { return _showRSyntax; }
3334
const std::string & dataFilePath() const { return _dataFilePath; }
3435
int dataFileTimestamp() const { return _dataFileTimestamp; }
3536
const std::string & databaseJson() const { return _databaseJson; }
@@ -63,6 +64,7 @@ class DataSet : public DataSetBaseNode
6364
void setDataFile( const std::string & dataFilePath, long timestamp) { _dataFilePath = dataFilePath; _dataFileTimestamp = timestamp; dbUpdate(); }
6465
void setDatabaseJson( const std::string & databaseJson) { _databaseJson = databaseJson; dbUpdate(); }
6566
void setDataFileSynch( bool synchronizing) { _dataFileSynch = synchronizing; dbUpdate(); }
67+
void setShowRSyntax( bool showRSyntax) { _showRSyntax = showRSyntax; dbUpdate(); }
6668

6769
void setColumnCount( size_t colCount);
6870
void setRowCount( size_t rowCount, bool alsoLoadData = true);
@@ -109,7 +111,8 @@ class DataSet : public DataSetBaseNode
109111
std::string _dataFilePath,
110112
_databaseJson;
111113

112-
bool _dataFileSynch = false;
114+
bool _dataFileSynch = false,
115+
_showRSyntax = false;
113116
static stringset _defaultEmptyvalues; // Default empty values if workspace do not have its own empty values (used for backward compatibility)
114117
std::string _description;
115118
};

CommonData/internalDbDefinition.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ CREATE TABLE DataSets (
88
databaseJson TEXT,
99
emptyValuesJson TEXT,
1010
revision INT DEFAULT 0,
11-
dataFileSynch INT
11+
dataFileSynch INT,
12+
showRSyntax INT DEFAULT 0
1213
);
1314

1415
CREATE TABLE Filters (

Desktop/analysis/analyses.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -747,11 +747,11 @@ void Analyses::moveAnalysesResults(Analysis* fromAnalysis, int index)
747747

748748
void Analyses::showRSyntaxInResults(bool show)
749749
{
750-
Settings::setValue(Settings::SHOW_RSYNTAX_IN_RESULTS, show);
750+
DataSetPackage::pkg()->setWorkspaceShowRSyntax(show);
751751

752752
applyToAll([&](Analysis * a)
753753
{
754-
a->setRSyntaxTextInResult();
754+
a->setRSyntaxTextInResult(show);
755755
});
756756
}
757757

Desktop/analysis/analysis.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,8 @@ void Analysis::setResults(const Json::Value & results, Status status, const Json
225225

226226
_wasUpgraded = false;
227227
_storedWithoutState = false;
228+
229+
setRSyntaxTextInResult(DataSetPackage::pkg()->workspaceShowRSyntax()); // At this point, we are sure that the analysis exists in the results
228230
}
229231

230232
void Analysis::exportResults()
@@ -358,9 +360,7 @@ void Analysis::createForm(QQuickItem* parentItem)
358360
connect(this, &Analysis::titleChanged, _analysisForm, &AnalysisForm::titleChanged );
359361
connect(this, &Analysis::needsRefreshChanged, _analysisForm, &AnalysisForm::needsRefreshChanged );
360362
connect(this, &Analysis::needsRefreshChanged, _analysisForm, &AnalysisForm::rSyntaxTextChanged );
361-
connect(this, &Analysis::boundValuesChanged, this, &Analysis::setRSyntaxTextInResult, Qt::QueuedConnection );
362363

363-
setRSyntaxTextInResult();
364364
_analysisForm->setShowRButton(_moduleData->hasWrapper());
365365
_analysisForm->setDeveloperMode(_dynamicModule->isDevMod());
366366

@@ -1075,12 +1075,11 @@ void Analysis::analysisQMLFileChanged()
10751075
Log::log() << "Form (" << form() << ") wasn't complete " << ( form() ? std::to_string(form()->formCompleted()) : " because there was no form...") << " yet, and also did not have a QML error set yet, so ignoring it." << std::endl;
10761076
}
10771077

1078-
void Analysis::setRSyntaxTextInResult()
1078+
void Analysis::setRSyntaxTextInResult(bool show)
10791079
{
10801080
if (!form() || !_moduleData->hasWrapper() || !form()->initialized()) return;
10811081

1082-
bool generateRSyntax = Settings::value(Settings::SHOW_RSYNTAX_IN_RESULTS).toBool();
1083-
ResultsJsInterface::singleton()->setRSyntax(id(), generateRSyntax ? form()->generateRSyntax(true) : "");
1082+
ResultsJsInterface::singleton()->setRSyntax(id(), show ? form()->generateRSyntax(true) : "");
10841083
}
10851084

10861085
void Analysis::onUsedVariablesChanged()

Desktop/analysis/analysis.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public slots:
196196
void requestColumnCreationHandler( const std::string & columnName, columnType colType) override;
197197
void requestComputedColumnDestructionHandler(const std::string & columnName) override;
198198
void analysisQMLFileChanged();
199-
void setRSyntaxTextInResult();
199+
void setRSyntaxTextInResult(bool show);
200200
void filterByNameDone(const QString &name, const QString &error);
201201
void onUsedVariablesChanged() override;
202202

Desktop/data/datasetpackage.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ DataSetPackage::DataSetPackage(QObject * parent) : QAbstractItemModel(parent)
5050
_db = new DatabaseInterface(true);
5151

5252
_dataSet = new DataSet(); //We create one here to make sure filter() etc can actually work
53-
setDefaultWorkspaceEmptyValues();
53+
setDefaultWorkspaceValues();
5454

5555
connect(this, &DataSetPackage::isModifiedChanged, this, &DataSetPackage::windowTitleChanged);
5656
connect(this, &DataSetPackage::loadedChanged, this, &DataSetPackage::windowTitleChanged);
@@ -1473,7 +1473,7 @@ void DataSetPackage::createDataSet()
14731473
dbDelete();
14741474
deleteDataSet();
14751475
_dataSet = new DataSet();
1476-
setDefaultWorkspaceEmptyValues();
1476+
setDefaultWorkspaceValues();
14771477
_dataSubModel->selectNode(_dataSet->dataNode());
14781478
_filterSubModel->selectNode(_dataSet->filtersNode());
14791479

@@ -2031,15 +2031,22 @@ const stringset& DataSetPackage::workspaceEmptyValues() const
20312031
return _dataSet ? _dataSet->workspaceEmptyValues() : emptyVec;
20322032
}
20332033

2034-
void DataSetPackage::setDefaultWorkspaceEmptyValues()
2034+
bool DataSetPackage::workspaceShowRSyntax() const
20352035
{
2036+
return _dataSet ? _dataSet->showRSyntax() : PreferencesModel::prefs()->showRSyntaxInResults();
2037+
}
2038+
2039+
void DataSetPackage::setDefaultWorkspaceValues()
2040+
{
2041+
_dataSet->setShowRSyntax(PreferencesModel::prefs()->showRSyntaxInResults());
2042+
20362043
stringvec prefs = fq(PreferencesModel::prefs()->emptyValues());
2037-
setWorkspaceEmptyValues(stringset(prefs.begin(), prefs.end()));
2044+
setWorkspaceEmptyValues(stringset(prefs.begin(), prefs.end()));
20382045
}
20392046

20402047
void DataSetPackage::setWorkspaceEmptyValues(const stringset &emptyValues, bool reset)
20412048
{
2042-
if (!_dataSet) return;
2049+
if (!_dataSet || _dataSet->workspaceEmptyValues() == emptyValues) return;
20432050

20442051
if(reset) beginResetModel();
20452052
_dataSet->setWorkspaceEmptyValues(emptyValues);
@@ -2048,6 +2055,15 @@ void DataSetPackage::setWorkspaceEmptyValues(const stringset &emptyValues, bool
20482055
emit workspaceEmptyValuesChanged();
20492056
}
20502057

2058+
void DataSetPackage::setWorkspaceShowRSyntax(bool show)
2059+
{
2060+
if (!_dataSet || _dataSet->showRSyntax() == show) return;
2061+
2062+
_dataSet->setShowRSyntax(show);
2063+
2064+
setModified(true);
2065+
}
2066+
20512067
void DataSetPackage::pasteSpreadsheet(size_t row, size_t col, const std::vector<std::vector<QString>> & values, const std::vector<std::vector<QString>> & labels, const intvec & coltypes, const QStringList & colNames, const std::vector<boolvec> & selected)
20522068
{
20532069
JASPTIMER_SCOPE(DataSetPackage::pasteSpreadsheet);

Desktop/data/datasetpackage.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,10 @@ class DataSetPackage : public QAbstractItemModel //Not QAbstractTableModel becau
271271
static int thresholdScale();
272272
static int orderByValueByDefault();
273273
const stringset& workspaceEmptyValues() const;
274+
bool workspaceShowRSyntax() const;
274275
void setWorkspaceEmptyValues(const stringset& emptyValues, bool resetModel = true);
275-
void setDefaultWorkspaceEmptyValues();
276+
void setWorkspaceShowRSyntax(bool show);
277+
void setDefaultWorkspaceValues();
276278

277279
void databaseStartSynching(bool syncImmediately);
278280
void databaseStopSynching();

0 commit comments

Comments
 (0)