void SettingsDialog::loadOrSaveSettingsToOrFromWidgets(bool setWidgets, Settings * settings) { void (*doubleFunctionPointer)(double *, QDoubleSpinBox *, bool); void (*intFunctionPointer)(int *, QSpinBox *); void (*colourFunctionPointer)(QColor *, ColourButton *); if (setWidgets) { doubleFunctionPointer = setOneWidgetFromSetting; intFunctionPointer = setOneWidgetFromSetting; colourFunctionPointer = setOneWidgetFromSetting; } else { doubleFunctionPointer = setOneSettingFromWidget; intFunctionPointer = setOneSettingFromWidget; colourFunctionPointer = setOneSettingFromWidget; } intFunctionPointer(&settings->manualBasePairsPerSegment, ui->basePairsPerSegmentSpinBox); doubleFunctionPointer(&settings->averageNodeWidth, ui->averageNodeWidthSpinBox, false); doubleFunctionPointer(&settings->coverageEffectOnWidth, ui->coverageEffectOnWidthSpinBox, true); doubleFunctionPointer(&settings->coveragePower, ui->coveragePowerSpinBox, false); doubleFunctionPointer(&settings->edgeWidth, ui->edgeWidthSpinBox, false); doubleFunctionPointer(&settings->outlineThickness, ui->outlineThicknessSpinBox, false); doubleFunctionPointer(&settings->textOutlineThickness, ui->textOutlineThicknessSpinBox, false); colourFunctionPointer(&settings->edgeColour, ui->edgeColourButton); colourFunctionPointer(&settings->outlineColour, ui->outlineColourButton); colourFunctionPointer(&settings->selectionColour, ui->selectionColourButton); colourFunctionPointer(&settings->textColour, ui->textColourButton); colourFunctionPointer(&settings->textOutlineColour, ui->textOutlineColourButton); intFunctionPointer(&settings->randomColourPositiveSaturation, ui->randomColourPositiveSaturationSpinBox); intFunctionPointer(&settings->randomColourNegativeSaturation, ui->randomColourNegativeSaturationSpinBox); intFunctionPointer(&settings->randomColourPositiveLightness, ui->randomColourPositiveLightnessSpinBox); intFunctionPointer(&settings->randomColourNegativeLightness, ui->randomColourNegativeLightnessSpinBox); intFunctionPointer(&settings->randomColourPositiveOpacity, ui->randomColourPositiveOpacitySpinBox); intFunctionPointer(&settings->randomColourNegativeOpacity, ui->randomColourNegativeOpacitySpinBox); colourFunctionPointer(&settings->uniformPositiveNodeColour, ui->uniformPositiveNodeColourButton); colourFunctionPointer(&settings->uniformNegativeNodeColour, ui->uniformNegativeNodeColourButton); colourFunctionPointer(&settings->uniformNodeSpecialColour, ui->uniformNodeSpecialColourButton); colourFunctionPointer(&settings->lowCoverageColour, ui->lowCoverageColourButton); colourFunctionPointer(&settings->highCoverageColour, ui->highCoverageColourButton); doubleFunctionPointer(&settings->lowCoverageValue, ui->lowCoverageValueSpinBox, false); doubleFunctionPointer(&settings->highCoverageValue, ui->highCoverageValueSpinBox, false); colourFunctionPointer(&settings->noBlastHitsColour, ui->noBlastHitsColourButton); intFunctionPointer(&settings->contiguitySearchSteps, ui->contiguitySearchDepthSpinBox); colourFunctionPointer(&settings->contiguousStrandSpecificColour, ui->contiguousStrandSpecificColourButton); colourFunctionPointer(&settings->contiguousEitherStrandColour, ui->contiguousEitherStrandColourButton); colourFunctionPointer(&settings->maybeContiguousColour, ui->maybeContiguousColourButton); colourFunctionPointer(&settings->notContiguousColour, ui->notContiguousColourButton); colourFunctionPointer(&settings->contiguityStartingColour, ui->contiguityStartingColourButton); //A couple of settings are not in a spin box, so they //have to be done manually, not with those function pointers. if (setWidgets) { ui->graphLayoutQualitySlider->setValue(settings->graphLayoutQuality); ui->antialiasingOnRadioButton->setChecked(settings->antialiasing); ui->antialiasingOffRadioButton->setChecked(!settings->antialiasing); ui->coverageValueAutoRadioButton->setChecked(settings->autoCoverageValue); ui->coverageValueManualRadioButton->setChecked(!settings->autoCoverageValue); basePairsPerSegmentManualChanged(); ui->basePairsPerSegmentAutoLabel->setText(QString::number(settings->autoBasePairsPerSegment)); ui->basePairsPerSegmentAutoRadioButton->setChecked(settings->nodeLengthMode == AUTO_NODE_LENGTH); ui->basePairsPerSegmentManualRadioButton->setChecked(settings->nodeLengthMode != AUTO_NODE_LENGTH); ui->positionVisibleRadioButton->setChecked(!settings->positionTextNodeCentre); ui->positionCentreRadioButton->setChecked(settings->positionTextNodeCentre); } else { settings->graphLayoutQuality = ui->graphLayoutQualitySlider->value(); settings->antialiasing = ui->antialiasingOnRadioButton->isChecked(); settings->autoCoverageValue = ui->coverageValueAutoRadioButton->isChecked(); if (ui->basePairsPerSegmentAutoRadioButton->isChecked()) settings->nodeLengthMode = AUTO_NODE_LENGTH; else settings->nodeLengthMode = MANUAL_NODE_LENGTH; settings->positionTextNodeCentre = ui->positionCentreRadioButton->isChecked(); } }
void SettingsDialog::loadOrSaveSettingsToOrFromWidgets(bool setWidgets, Settings * settings) { void (*doubleFunctionPointer)(double *, QDoubleSpinBox *, bool); void (*intFunctionPointer)(int *, QSpinBox *); void (*colourFunctionPointer)(QColor *, ColourButton *); void (*sciNotFunctionPointer)(SciNot *, QDoubleSpinBox *, QSpinBox *); void (*checkBoxFunctionPointer)(bool *, QCheckBox *); if (setWidgets) { doubleFunctionPointer = setOneWidgetFromSetting; intFunctionPointer = setOneWidgetFromSetting; colourFunctionPointer = setOneWidgetFromSetting; sciNotFunctionPointer = setOneWidgetFromSetting; checkBoxFunctionPointer = setOneWidgetFromSetting; } else { doubleFunctionPointer = setOneSettingFromWidget; intFunctionPointer = setOneSettingFromWidget; colourFunctionPointer = setOneSettingFromWidget; sciNotFunctionPointer = setOneSettingFromWidget; checkBoxFunctionPointer = setOneSettingFromWidget; } intFunctionPointer(&settings->manualBasePairsPerSegment, ui->basePairsPerSegmentSpinBox); doubleFunctionPointer(&settings->readDepthEffectOnWidth, ui->readDepthEffectOnWidthSpinBox, true); doubleFunctionPointer(&settings->readDepthPower, ui->readDepthPowerSpinBox, false); doubleFunctionPointer(&settings->edgeWidth, ui->edgeWidthSpinBox, false); doubleFunctionPointer(&settings->outlineThickness, ui->outlineThicknessSpinBox, false); doubleFunctionPointer(&settings->textOutlineThickness, ui->textOutlineThicknessSpinBox, false); colourFunctionPointer(&settings->edgeColour, ui->edgeColourButton); colourFunctionPointer(&settings->outlineColour, ui->outlineColourButton); colourFunctionPointer(&settings->selectionColour, ui->selectionColourButton); colourFunctionPointer(&settings->textColour, ui->textColourButton); colourFunctionPointer(&settings->textOutlineColour, ui->textOutlineColourButton); intFunctionPointer(&settings->randomColourPositiveSaturation, ui->randomColourPositiveSaturationSpinBox); intFunctionPointer(&settings->randomColourNegativeSaturation, ui->randomColourNegativeSaturationSpinBox); intFunctionPointer(&settings->randomColourPositiveLightness, ui->randomColourPositiveLightnessSpinBox); intFunctionPointer(&settings->randomColourNegativeLightness, ui->randomColourNegativeLightnessSpinBox); intFunctionPointer(&settings->randomColourPositiveOpacity, ui->randomColourPositiveOpacitySpinBox); intFunctionPointer(&settings->randomColourNegativeOpacity, ui->randomColourNegativeOpacitySpinBox); colourFunctionPointer(&settings->uniformPositiveNodeColour, ui->uniformPositiveNodeColourButton); colourFunctionPointer(&settings->uniformNegativeNodeColour, ui->uniformNegativeNodeColourButton); colourFunctionPointer(&settings->uniformNodeSpecialColour, ui->uniformNodeSpecialColourButton); colourFunctionPointer(&settings->lowReadDepthColour, ui->lowReadDepthColourButton); colourFunctionPointer(&settings->highReadDepthColour, ui->highReadDepthColourButton); doubleFunctionPointer(&settings->lowReadDepthValue, ui->lowReadDepthValueSpinBox, false); doubleFunctionPointer(&settings->highReadDepthValue, ui->highReadDepthValueSpinBox, false); colourFunctionPointer(&settings->noBlastHitsColour, ui->noBlastHitsColourButton); intFunctionPointer(&settings->contiguitySearchSteps, ui->contiguitySearchDepthSpinBox); colourFunctionPointer(&settings->contiguousStrandSpecificColour, ui->contiguousStrandSpecificColourButton); colourFunctionPointer(&settings->contiguousEitherStrandColour, ui->contiguousEitherStrandColourButton); colourFunctionPointer(&settings->maybeContiguousColour, ui->maybeContiguousColourButton); colourFunctionPointer(&settings->notContiguousColour, ui->notContiguousColourButton); colourFunctionPointer(&settings->contiguityStartingColour, ui->contiguityStartingColourButton); intFunctionPointer(&settings->maxQueryPathNodes, ui->maxPathNodesSpinBox); doubleFunctionPointer(&settings->minQueryCoveredByPath, ui->minQueryCoveredByPathSpinBox, true); checkBoxFunctionPointer(&settings->minQueryCoveredByHitsOn, ui->minQueryCoveredByHitsCheckBox); doubleFunctionPointer(&settings->minQueryCoveredByHits, ui->minQueryCoveredByHitsSpinBox, true); checkBoxFunctionPointer(&settings->minMeanHitIdentityOn, ui->minMeanHitIdentityCheckBox); doubleFunctionPointer(&settings->minMeanHitIdentity, ui->minMeanHitIdentitySpinBox, true); checkBoxFunctionPointer(&settings->maxEValueProductOn, ui->maxEValueProductCheckBox); sciNotFunctionPointer(&settings->maxEValueProduct, ui->maxEValueCoefficientSpinBox, ui->maxEValueExponentSpinBox); checkBoxFunctionPointer(&settings->minLengthPercentageOn, ui->minLengthPercentageCheckBox); doubleFunctionPointer(&settings->minLengthPercentage, ui->minLengthPercentageSpinBox, true); checkBoxFunctionPointer(&settings->maxLengthPercentageOn, ui->maxLengthPercentageCheckBox); doubleFunctionPointer(&settings->maxLengthPercentage, ui->maxLengthPercentageSpinBox, true); checkBoxFunctionPointer(&settings->minLengthBaseDiscrepancyOn, ui->minLengthBaseDiscrepancyCheckBox); intFunctionPointer(&settings->minLengthBaseDiscrepancy, ui->minLengthBaseDiscrepancySpinBox); checkBoxFunctionPointer(&settings->maxLengthBaseDiscrepancyOn, ui->maxLengthBaseDiscrepancyCheckBox); intFunctionPointer(&settings->maxLengthBaseDiscrepancy, ui->maxLengthBaseDiscrepancySpinBox); //A couple of settings are not in a spin box, check box or colour button, so //they have to be done manually, not with those function pointers. if (setWidgets) { ui->graphLayoutQualitySlider->setValue(settings->graphLayoutQuality); ui->antialiasingOnRadioButton->setChecked(settings->antialiasing); ui->antialiasingOffRadioButton->setChecked(!settings->antialiasing); ui->readDepthValueAutoRadioButton->setChecked(settings->autoReadDepthValue); ui->readDepthValueManualRadioButton->setChecked(!settings->autoReadDepthValue); basePairsPerSegmentManualChanged(); ui->basePairsPerSegmentAutoLabel->setText(formatIntForDisplay(settings->autoBasePairsPerSegment)); ui->lowReadDepthAutoValueLabel2->setText(formatDoubleForDisplay(g_assemblyGraph->m_firstQuartileReadDepth, 2)); ui->highReadDepthAutoValueLabel2->setText(formatDoubleForDisplay(g_assemblyGraph->m_thirdQuartileReadDepth, 2)); ui->basePairsPerSegmentAutoRadioButton->setChecked(settings->nodeLengthMode == AUTO_NODE_LENGTH); ui->basePairsPerSegmentManualRadioButton->setChecked(settings->nodeLengthMode != AUTO_NODE_LENGTH); ui->positionVisibleRadioButton->setChecked(!settings->positionTextNodeCentre); ui->positionCentreRadioButton->setChecked(settings->positionTextNodeCentre); } else { settings->graphLayoutQuality = ui->graphLayoutQualitySlider->value(); settings->antialiasing = ui->antialiasingOnRadioButton->isChecked(); settings->autoReadDepthValue = ui->readDepthValueAutoRadioButton->isChecked(); if (ui->basePairsPerSegmentAutoRadioButton->isChecked()) settings->nodeLengthMode = AUTO_NODE_LENGTH; else settings->nodeLengthMode = MANUAL_NODE_LENGTH; settings->positionTextNodeCentre = ui->positionCentreRadioButton->isChecked(); } }