Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions CommonData/column.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1517,7 +1517,7 @@ bool Column::setStringValue(size_t row, const std::string & userEntered, const s
double newDoubleToSet = EmptyValues::missingValueDouble;
bool itsADouble = ColumnUtils::getDoubleValue(userEntered, newDoubleToSet),
itsMissingVal = isEmptyValue(userEntered);
bool nothingThereYet = std::none_of(_ints.begin(), _ints.end(), [&](int i) { return !(i == Label::NO_LABEL || i == EmptyValues::missingValueInteger || labelByIntsId(i)->isEmptyValue()); })
bool nothingThereYet = std::none_of(_ints.begin(), _ints.end(), [&](int i) { return !(i == Label::NO_LABEL || i == EmptyValues::missingValueInteger || (!labelByIntsId(i) || labelByIntsId(i)->isEmptyValue())); })
&& std::none_of(_dbls.begin(), _dbls.end(), [&](double d) { return !(std::isnan(d) || isEmptyValue(d)); });

if(nothingThereYet && !itsMissingVal)
Expand Down Expand Up @@ -1871,7 +1871,6 @@ void Column::valuesReverse()

}


DatabaseInterface & Column::db()
{
return _data->db();
Expand All @@ -1895,7 +1894,6 @@ bool Column::hasFilter() const
return !allLabelsPassFilter();
}


void Column::resetFilter()
{
db().transactionWriteBegin();
Expand Down
10 changes: 9 additions & 1 deletion QMLComponents/analysisform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -644,9 +644,17 @@ void AnalysisForm::formCompletedHandler()

void AnalysisForm::setAnalysisUp()
{
if(!_formCompleted || !_analysis)
if(!_formCompleted)
return;

if (!_analysis)
{
if (qmlEngine(this)->rootContext()->contextProperty("NO_DESKTOP_MODE").toBool())
_analysis = new AnalysisBase(this); // Make dummy analysis: needed for Unit TestCases or R Syntax mode
else
return;
}

Log::log() << "AnalysisForm::setAnalysisUp() for " << this << std::endl;

blockValueChangeSignal(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
// License along with this program. If not, see
// <http://www.gnu.org/licenses/>.
//

import JASP

VariablesList
Expand Down
6 changes: 6 additions & 0 deletions QMLComponents/components/JASP/Controls/VariablesList.qml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,11 @@ VariablesListBase
variablesList.model.setSelectedItem(itemRank);
}

function setSelectedItemWithName(itemName)
{
variablesList.model.setSelectedItemWithName(itemName);
}

function selectShiftItems(selected)
{
var startIndex = variablesList.startShiftSelected;
Expand Down Expand Up @@ -394,6 +399,7 @@ VariablesListBase
border.color: containsDragItem && variablesList.dropModeReplace ? jaspTheme.containsDragBorderColor : jaspTheme.grayLighter
radius: jaspTheme.borderRadius

property string varName: model.name
property bool clearOtherSelectedItemsWhenClicked: false
property bool selected: model.selected
property bool isDependency: variablesList.dependencyMustContain.indexOf(colName.text) >= 0
Expand Down
2 changes: 1 addition & 1 deletion QMLComponents/controls/jasplistcontrol.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ class JASPListControl : public JASPControl
bool hasSource() const { return _sourceItems.size() > 0; }
bool hasNativeSource() const;

JASPControl * getRowControl(const QString& key, const QString& name) const;
Q_INVOKABLE JASPControl * getRowControl(const QString& key, const QString& name) const;
virtual bool addRowControl(const QString& key, JASPControl* control);
bool hasRowComponent() const;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,59 +18,100 @@

#include "datasetprovider.h"
#include "utilities/qutils.h"
#include "columnencoder.h"

DataSetProvider * DataSetProvider::_singleton = nullptr;

DataSetProvider* DataSetProvider::getProvider(bool inMemory, bool reset)
DataSetProvider* DataSetProvider::getProvider(bool inMemory, bool reset, QObject* parent)
{
if (!_singleton)
_singleton = new DataSetProvider(inMemory);
_singleton = new DataSetProvider(inMemory, parent);
else if (reset)
_singleton->resetDataSet();

return _singleton;
}

DataSetProvider::~DataSetProvider()
{
assert(_singleton == this);
delete VariableInfo::info();
delete _dataSet;
delete _db;
_singleton = nullptr;
}

DataSetProvider::DataSetProvider(bool inMemory, QObject *parent) : QAbstractTableModel(parent)
{
_db = new DatabaseInterface(true, inMemory);
_dataset = new DataSet();
_dataSet = new DataSet();

new VariableInfo(this);
_singleton = this;
}

void DataSetProvider::resetDataSet()
{
if (_dataset)
if (_dataSet)
{
_dataset->dbDelete();
delete _dataset;
_dataSet->dbDelete();
delete _dataSet;
}

_dataset = new DataSet();
_dataSet = new DataSet();
}

int DataSetProvider::rowCount(const QModelIndex &) const
{
return _dataset->columnCount();
return _dataSet->columnCount();
}

int DataSetProvider::columnCount(const QModelIndex &) const
{
return _dataset->rowCount();
return _dataSet->rowCount();
}

QVariant DataSetProvider::data(const QModelIndex & index, int role) const
{
Column * column = index.row() > columnCount() ? nullptr : _dataset->column(index.row());
Column * column = index.row() > columnCount() ? nullptr : _dataSet->column(index.row());

if (!column) return QVariant();
else if (role == Qt::DisplayRole) return tq(column->name());
else return QVariant(); //QAbstractTableModel::data(index, role);
}

void DataSetProvider::loadDataSet(const std::map<std::string, stringvec > & dataSet, int threshold, bool orderLabelsByValue)
{

_dataSet->beginBatchedToDB();

int rowCount = 0;
for (const auto it : dataSet)
rowCount = rowCount >= it.second.size() ? rowCount : it.second.size();


_dataSet->setColumnCount(dataSet.size());
_dataSet->setRowCount(rowCount);

int colNr = 0;

for (const auto it : dataSet)
{
auto lookup = [&](size_t r)
{
return dataSet.at(it.first)[r];
};

_dataSet->column(colNr)->initFromLookups(it.first, rowCount, lookup, lookup, it.first, columnType::unknown, {}, threshold, orderLabelsByValue);

colNr++;
}

_dataSet->endBatchedToDB([](float f) {});

ColumnEncoder::columnEncoder()->setCurrentNames(_dataSet->getColumnTypesMap());

}

QVariantList DataSetProvider::_getDoubleList(Column * column) const
{
Expand All @@ -93,7 +134,7 @@ QVariantList DataSetProvider::_getStringList(Column * column) const
if (!column)
return list;

int rows = _dataset->rowCount();
int rows = _dataSet->rowCount();
for (int r = 0; r < rows; r++)
list.append(tq(column->getDisplay(r)));

Expand All @@ -104,9 +145,9 @@ QStringList DataSetProvider::_getColumnNames() const
{
QStringList result;

int cols = _dataset->columnCount();
int cols = _dataSet->columnCount();
for (int i = 0; i < cols; i++)
result.append(tq(_dataset->column(i)->name()));
result.append(tq(_dataSet->column(i)->name()));
return result;
}

Expand All @@ -115,7 +156,7 @@ QVariant DataSetProvider::provideInfo(VariableInfo::InfoType info, const QString
{
try
{
Column * column = _dataset->column(fq(colName));
Column * column = _dataSet->column(fq(colName));

switch(info)
{
Expand All @@ -125,17 +166,17 @@ QVariant DataSetProvider::provideInfo(VariableInfo::InfoType info, const QString
case VariableInfo::TotalLevels: return !column ? 0 : (int)column->nonFilteredLevels().size();
case VariableInfo::Labels: return !column ? QStringList() : tq(column->nonFilteredLevels());
case VariableInfo::NameRole: return Qt::DisplayRole;
case VariableInfo::DataSetRowCount: return _dataset->rowCount();
case VariableInfo::DataSetRowCount: return _dataSet->rowCount();
case VariableInfo::DataSetValue: return !column ? "" : tq(column->getValue(row));
case VariableInfo::DataSetValues: return _getStringList(column);
case VariableInfo::MaxWidth: return 100;
case VariableInfo::SignalsBlocked: return false;
case VariableInfo::VariableNames: return _getColumnNames();
case VariableInfo::DataAvailable: return _dataset->columnCount() > 0;
case VariableInfo::DataAvailable: return _dataSet->columnCount() > 0;
case VariableInfo::PreviewScale: return "";
case VariableInfo::PreviewOrdinal: return "";
case VariableInfo::PreviewNominal: return "";
case VariableInfo::DataSetPointer: return QVariant::fromValue<void*>(_dataset);
case VariableInfo::DataSetPointer: return QVariant::fromValue<void*>(_dataSet);


default: break;
Expand All @@ -152,7 +193,7 @@ bool DataSetProvider::absorbInfo(VariableInfo::InfoType info, const QString &col
{
try
{
Column * column = _dataset->column(fq(colName));
Column * column = _dataSet->column(fq(colName));
if (!column)
return false;

Expand All @@ -163,9 +204,12 @@ bool DataSetProvider::absorbInfo(VariableInfo::InfoType info, const QString &col
case VariableInfo::DataSetValues:
{
int r=0;
if(_dataSet->rowCount() < value.toList().size())
_dataSet->setRowCount(value.toList().size(), false);

for(const QVariant & val : value.toList())
if (row + r < _dataset->rowCount())
column->setStringValue(row + r++, fq(val.toString()));
if (row + r < _dataSet->rowCount())
column->setStringValue(row + r++, fq(val.toString()), "", false);
return true;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,23 @@ class DataSetProvider : public QAbstractTableModel, public VariableInfoProvider
{

public:
static DataSetProvider * getProvider(bool inMemory, bool reset = true);
static DataSetProvider * getProvider(bool inMemory, bool reset = true, QObject * parent = nullptr);

DataSet * dataSet() { return _dataset; }
~DataSetProvider();

DataSet * dataSet() { return _dataSet; }
void resetDataSet();

int rowCount( const QModelIndex & parent = QModelIndex()) const override;
int columnCount(const QModelIndex & parent = QModelIndex()) const override;
QVariant data( const QModelIndex & index, int role = Qt::DisplayRole) const override;


void loadDataSet(const std::map<std::string, stringvec > & dataSet, int threshold = 10, bool orderLabelsByValue = true);
QVariant provideInfo(VariableInfo::InfoType info, const QString& colName = "", int row = 0) const override;
bool absorbInfo( VariableInfo::InfoType info, const QString& name, int row, QVariant value) override;
QAbstractItemModel * providerModel() override { return this; }


private:
explicit DataSetProvider(bool inMemory = true, QObject* parent = nullptr);

Expand All @@ -53,7 +56,7 @@ class DataSetProvider : public QAbstractTableModel, public VariableInfoProvider
QStringList _getColumnNames() const;

DatabaseInterface * _db = nullptr;
DataSet * _dataset = nullptr;
DataSet * _dataSet = nullptr;

};

Expand Down
15 changes: 15 additions & 0 deletions QMLComponents/models/listmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,21 @@ void ListModel::setSelectedItem(int _index)
selectItem(_index, true);
}

void ListModel::setSelectedItemWithName(QString name)
{
int i = 0;

for (const Term& term : terms())
{
if (term.label() == name)
{
setSelectedItem(i);
break;
}
i++;
}
}

void ListModel::selectAllItems()
{
int nbTerms = rowCount();
Expand Down
1 change: 1 addition & 0 deletions QMLComponents/models/listmodel.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class ListModel : public QAbstractTableModel, public VariableInfoConsumer
Q_INVOKABLE void selectItem(int _index, bool _select);
Q_INVOKABLE void clearSelectedItems(bool emitSelectedChange = true);
Q_INVOKABLE void setSelectedItem(int _index);
Q_INVOKABLE void setSelectedItemWithName(QString name);
Q_INVOKABLE void selectAllItems();
Q_INVOKABLE QList<int> selectedItems() { return _selectedItems; }

Expand Down
Loading
Loading