From 671e8b4720fc679c4b8685461e578aa41933cded Mon Sep 17 00:00:00 2001 From: Joris Goosen Date: Tue, 5 Nov 2024 13:17:14 +0100 Subject: [PATCH] disable the requisite edit-column in variablewindow label editor also make sure that it will update the generated filter for labels after a computed column is updated and make sure the labelfiltergenerator actually compares with labels (also for scale columns) --- CommonData/column.cpp | 17 ++++---------- .../JASP/Widgets/LabelEditorWindow.qml | 23 ++++++++++++------- Desktop/data/computedcolumnmodel.cpp | 2 ++ Desktop/data/datasetpackage.cpp | 2 +- Desktop/data/labelfiltergenerator.cpp | 4 ++-- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/CommonData/column.cpp b/CommonData/column.cpp index e6b3dbd50a..0a8883e411 100644 --- a/CommonData/column.cpp +++ b/CommonData/column.cpp @@ -642,6 +642,9 @@ bool Column::overwriteDataAndType(stringvec data, columnType colType) setValues(values, labels, 0, &changes); setType(colType); + labelsTempReset(); + + labelsHandleAutoSort(); return changes; } @@ -1711,8 +1714,6 @@ Labelset Column::labelsByValue(const std::string & value) const return Labelset(found.begin(), found.end()); } - - Label * Column::labelByValueAndDisplay(const std::string &value, const std::string &labelText) const { JASPTIMER_SCOPE(Column::labelsByValueAndDisplay); @@ -1816,18 +1817,8 @@ void Column::labelsOrderByValue(bool doDbUpdateEtc) { JASPTIMER_SCOPE(Column::labelsOrderByValue); - bool replaceAllDoubles = false; static double dummy; - - for(Label * label : labels()) - if(!label->isEmptyValue() && !(label->originalValue().isDouble() || ColumnUtils::getDoubleValue(label->originalValueAsString(), dummy))) - { - replaceAllDoubles = true; - break; - } - - if(replaceAllDoubles) - replaceDoublesTillLabelsRowWithLabels(labelsTempCount()); + replaceDoublesTillLabelsRowWithLabels(labelsTempCount()); doublevec asc = valuesNumericOrdered(); auto alpha = valuesAlphabeticalOffsets(); diff --git a/Desktop/components/JASP/Widgets/LabelEditorWindow.qml b/Desktop/components/JASP/Widgets/LabelEditorWindow.qml index d19c5a775b..fd7bfe21cf 100644 --- a/Desktop/components/JASP/Widgets/LabelEditorWindow.qml +++ b/Desktop/components/JASP/Widgets/LabelEditorWindow.qml @@ -61,12 +61,16 @@ FocusScope } } - property real filterColWidth: 60 * jaspTheme.uiScale - property real remainingWidth: width - filterColWidth - property real valueColWidth: Math.min(columnModel.valueMaxWidth + 10, remainingWidth * 0.5) * jaspTheme.uiScale - property real labelColWidth: Math.min(columnModel.labelMaxWidth + 10, remainingWidth * 0.5) * jaspTheme.uiScale - property int selectedRow: -1 + property real filterColWidth: 60 * jaspTheme.uiScale + property real remainingWidth: width - filterColWidth + property real valueColWidth: Math.min(columnModel.valueMaxWidth + 10, remainingWidth * 0.5) * jaspTheme.uiScale + property real labelColWidth: Math.min(columnModel.labelMaxWidth + 10, remainingWidth * 0.5) * jaspTheme.uiScale + property int selectedRow: -1 + property bool isBasicComputed: columnModel.computedType == "rCode" || columnModel.computedType == "constructorCode" + property bool valueEditable: !isBasicComputed || columnModel.currentColumnType != "scale" + property bool labelEditable: !isBasicComputed || columnModel.currentColumnType == "scale" + property bool filterEditable: true // columnModel.computedType == "notComputed" columnHeaderDelegate: Item { @@ -85,7 +89,7 @@ FocusScope { text: qsTr("Filter") font: jaspTheme.font - color: jaspTheme.textEnabled + color: levelsTableView.filterEditable ? jaspTheme.textEnabled : jaspTheme.textDisabled width: levelsTableView.filterColWidth; anchors.verticalCenter: parent.verticalCenter horizontalAlignment: Text.AlignHCenter @@ -100,7 +104,7 @@ FocusScope { text: qsTr("Value") font: jaspTheme.font - color: jaspTheme.textEnabled + color: levelsTableView.valueEditable ? jaspTheme.textEnabled : jaspTheme.textDisabled width: levelsTableView.valueColWidth; leftPadding: 3 * jaspTheme.uiScale anchors.verticalCenter: parent.verticalCenter @@ -115,7 +119,7 @@ FocusScope { text: qsTr("Label") font: jaspTheme.font - color: jaspTheme.textEnabled + color: levelsTableView.labelEditable ? jaspTheme.textEnabled : jaspTheme.textDisabled leftPadding: 3 * jaspTheme.uiScale anchors.verticalCenter: parent.verticalCenter width: levelsTableView.labelColWidth; @@ -208,6 +212,7 @@ FocusScope height: parent.height z: -1 cursorShape: Qt.PointingHandCursor + enabled: levelsTableView.filterEditable onClicked: @@ -251,6 +256,7 @@ FocusScope width: levelsTableView.valueColWidth; height: parent.height clip: true + enabled: levelsTableView.valueEditable MouseArea { @@ -336,6 +342,7 @@ FocusScope width: levelsTableView.remainingWidth - (levelsTableView.valueColWidth + 2 + (2 * levelsTableView.itemHorizontalPadding)) //+2 for line-rectangles! height: parent.height clip: true + enabled: levelsTableView.labelEditable MouseArea { diff --git a/Desktop/data/computedcolumnmodel.cpp b/Desktop/data/computedcolumnmodel.cpp index 36ed1c9c4e..831bc283c5 100644 --- a/Desktop/data/computedcolumnmodel.cpp +++ b/Desktop/data/computedcolumnmodel.cpp @@ -228,6 +228,8 @@ void ComputedColumnModel::computeColumnSucceeded(QString columnNameQ, QString wa if(dataChanged) checkForDependentColumnsToBeSent(columnNameQ); + + DataSetPackage::pkg()->labelFilterChanged(); //in case the user had enabled some labelfilter on the computed column? } void ComputedColumnModel::computeColumnFailed(QString columnNameQ, QString errorQ) diff --git a/Desktop/data/datasetpackage.cpp b/Desktop/data/datasetpackage.cpp index feeab66b70..48b1bf0da9 100644 --- a/Desktop/data/datasetpackage.cpp +++ b/Desktop/data/datasetpackage.cpp @@ -1495,7 +1495,7 @@ bool DataSetPackage::initColumnWithStrings(QVariant colId, const std::string & n column -> setType(column->type() != columnType::unknown ? column->type() : desiredType == columnType::unknown ? suggestedType : desiredType); column -> endBatchedLabelsDB(); - if(PreferencesModel::prefs()->orderByValueByDefault()) + if(PreferencesModel::prefs()->orderByValueByDefault()) column->labelsOrderByValue(); return anyChanges || column->type() != prevType; diff --git a/Desktop/data/labelfiltergenerator.cpp b/Desktop/data/labelfiltergenerator.cpp index bb3496315f..276038353e 100644 --- a/Desktop/data/labelfiltergenerator.cpp +++ b/Desktop/data/labelfiltergenerator.cpp @@ -76,8 +76,8 @@ std::string labelFilterGenerator::generateLabelFilter(size_t col) std::stringstream out; for(size_t row=0; row 0 ? (bePositive ? " | " : " & ") : "") << columnName << (bePositive ? " == \"" : " != \"") << labels[row] << "\""; + if(filterAllows[row] == bePositive) //Also make sure we use .nominal because otherwise we might be comparing to the value instead... + out << (cnt++ > 0 ? (bePositive ? " | " : " & ") : "") << columnName << ".nominal" << (bePositive ? " == \"" : " != \"") << labels[row] << "\""; return "(" + out.str() + ")"; }