Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
f7da5c5
WIP single source of truth for QSettings
atsju Aug 8, 2026
ed905ba
force facade usage with friend class
atsju Aug 8, 2026
681c56d
use draft mirror config to fix cancel button
atsju Aug 8, 2026
004ff48
all mirror configs are accessed though settingsStore. No more qsettin…
atsju Aug 8, 2026
5bbac22
separate some conveniance path from mirror settings
atsju Aug 8, 2026
abcc927
all access to public members done through accesor. TODO remove members
atsju Aug 8, 2026
13e191e
fix build
atsju Aug 8, 2026
419d4ec
ensure programmatically mirror dialog is only one to be able to modif…
atsju Aug 8, 2026
6629b25
fix the draft/current settings way of working
atsju Aug 8, 2026
7813be5
fix some compile errors and make more things private
atsju Aug 8, 2026
31ca070
delete unused signals
atsju Aug 9, 2026
59c65af
fix compile warning
atsju Aug 9, 2026
805252f
remove duplicate operation
atsju Aug 9, 2026
42a20fc
simplify mirrordlg settings adoption from wft
atsju Aug 9, 2026
3381113
comment settings things that are not yet used
atsju Aug 9, 2026
423fb06
apertureChanged is emit only on accept
atsju Aug 9, 2026
1af4666
deduplicate function
atsju Aug 9, 2026
3c5b3b9
Merge branch 'master' of github.com:githubdoe/DFTFringe into JST/sett…
atsju Aug 11, 2026
ef52e33
some comment cleanup
atsju Aug 11, 2026
1cfb677
fix warning. Square is expected downstream. This is just leftover code
atsju Aug 12, 2026
8360238
fix some earlier wrong replacements leading to broken profileplot
atsju Aug 12, 2026
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
11 changes: 6 additions & 5 deletions DFTFringe.pro
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,8 @@ SOURCES += SingleApplication/singleapplication.cpp \
zernikepolar.cpp \
zernikeprocess.cpp \
zernikes.cpp \
settingsfacade.cpp \
settingsstores.cpp \
zernikesmoothingdlg.cpp

HEADERS += bezier/bezier.h \
Expand Down Expand Up @@ -356,6 +358,8 @@ HEADERS += bezier/bezier.h \
settingsGeneral2.h \
settingsigram.h \
settingsigramimportconfig.h \
settingsfacade.h \
settingsstores.h \
settingsprofile.h \
showaliasdlg.h \
showallcontoursdlg.h \
Expand Down Expand Up @@ -550,8 +554,5 @@ DISTFILES += buildingDFTFringe64.txt \
COPYING.LESSER.txt \
COPYING.txt \
README.md \
RevisionHistory.html




RevisionHistory.html \
settingsstores_fields.inc
5 changes: 5 additions & 0 deletions DFTFringe_Dale.pro
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,8 @@ SOURCES += main.cpp \
outlinedialog.cpp \
psitiltoptions.cpp \
contourrulerparams.cpp \
settingsfacade.cpp \
settingsstores.cpp \
zernikesmoothingdlg.cpp \
zernike/zapm.cpp \
SingleApplication/singleapplication.cpp \
Expand Down Expand Up @@ -262,6 +264,8 @@ HEADERS += mainwindow.h \
outlinedialog.h \
psitiltoptions.h \
contourrulerparams.h \
settingsfacade.h \
settingsstores.h \
zernikesmoothingdlg.h \
bezier/bezier.h \
zernike/zapm_interface.h \
Expand Down Expand Up @@ -498,6 +502,7 @@ DISTFILES += \
COPYING.txt \
RevisionHistory.html \
README.md \
settingsstores_fields.inc


TRANSLATIONS = dftfringe_fr.ts
Expand Down
11 changes: 6 additions & 5 deletions DFTFringe_QT5.pro
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,8 @@ SOURCES += SingleApplication/singleapplication.cpp \
zernikepolar.cpp \
zernikeprocess.cpp \
zernikes.cpp \
settingsfacade.cpp \
settingsstores.cpp \
zernikesmoothingdlg.cpp

HEADERS += bezier/bezier.h \
Expand Down Expand Up @@ -355,6 +357,8 @@ HEADERS += bezier/bezier.h \
settingsGeneral2.h \
settingsigram.h \
settingsigramimportconfig.h \
settingsfacade.h \
settingsstores.h \
settingsprofile.h \
showaliasdlg.h \
showallcontoursdlg.h \
Expand Down Expand Up @@ -549,8 +553,5 @@ DISTFILES += buildingDFTFringe64.txt \
COPYING.LESSER.txt \
COPYING.txt \
README.md \
RevisionHistory.html




RevisionHistory.html \
settingsstores_fields.inc
4 changes: 2 additions & 2 deletions astigstatsdlg.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "astigstatsdlg.h"
#include "ui_astigstatsdlg.h"
#include "settingsfacade.h"
#include "circleutils.h"
#include "circle.h"
#include <qwt_plot.h>
Expand Down Expand Up @@ -489,8 +490,7 @@ void astigStatsDlg::showItem(const QVariant &item, bool on, int /*ndx*/){

void astigStatsDlg::on_zernikePB_pressed()
{
QSettings set;
QString path = set.value("mirrorConfigFile").toString();
QString path = SettingsFacade::instance().appStore().load().mirrorConfigFile;
QFile fn(path);
QFileInfo info(fn.fileName());
QString dd = info.dir().absolutePath();
Expand Down
2 changes: 1 addition & 1 deletion averagewavefrontfilesdlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ void averageWaveFrontFilesDlg::on_process_clicked()
sm->generateSurfacefromWavefront(wf);
cv::Scalar mean,std;
cv::meanStdDev(wf->workData,mean,std,wf->workMask);
double stdVal = std.val[0]* md->lambda/outputLambda;
double stdVal = std.val[0]* md->currentSettings().lambda/outputLambda;
if (stdVal > filterRMS){
QFileInfo info(name);
QString item = QString("%1 RMS:%2").arg(info.baseName()).arg(stdVal, 0, 'f');
Expand Down
6 changes: 3 additions & 3 deletions bathastigdlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ bathAstigDlg::bathAstigDlg(QWidget *parent) :
{
ui->setupUi(this);
mirrorDlg &md = *mirrorDlg::get_Instance();
ui->diamSb->setValue(md.diameter);
ui->rocsb->setValue(md.roc);
ui->lambdaSb->setValue(md.lambda);
ui->diamSb->setValue(md.currentSettings().diameter);
ui->rocsb->setValue(md.currentSettings().roc);
ui->lambdaSb->setValue(md.currentSettings().lambda);
ui->sepSb->setValue(5.);
compute();
}
Expand Down
2 changes: 1 addition & 1 deletion defocusdlg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ void defocusDlg::on_defocusSlider_valueChanged(int value)
ui->defocusVal->setValue(val);
ui->defocusVal->blockSignals(false);

double f = mirrorDlg::get_Instance()->FNumber;
double f = mirrorDlg::get_Instance()->getFNumber();
double mm = f * f * 8. * value * .00055; //mmeters
m_defocusInmm = mm;
qDebug() << "defocus offset" << mm;
Expand Down
25 changes: 9 additions & 16 deletions dftarea.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ cv::Mat makeMask(const CircleOutline &outside, const CircleOutline &center, con
double rady = radm;
mirrorDlg &md = *mirrorDlg::get_Instance();
if (md.isEllipse())
rady = radm * md.m_verticalAxis/md.diameter;
rady = radm * md.currentSettings().ellipseMinorAxis/md.currentSettings().diameter;
double rado = center.m_radius;
double cx = outside.m_center.x();
double cy = outside.m_center.y();
Expand Down Expand Up @@ -151,14 +151,14 @@ DFTArea::DFTArea(QWidget *mparent, IgramArea *ip, DFTTools * tools, vortexDebug
grid->attach(test);
QPolygonF points;
mirrorDlg &md = *mirrorDlg::get_Instance();
double roc = md.roc;
double diam = md.diameter;
double roc = md.currentSettings().roc;
double diam = md.currentSettings().diameter;
double r3 = roc * roc * roc;
double d4 = diam * diam * diam * diam;


for (double i = 0; i < .03; i += .0001){
double z1 = -i * 384. * r3 * md.lambda * 1.E-6/(d4);
double z1 = -i * 384. * r3 * md.currentSettings().lambda * 1.E-6/(d4);

points << QPointF( -i, z1 );

Expand Down Expand Up @@ -251,20 +251,13 @@ cv::Mat DFTArea::grayComplexMatfromImage(QImage &img){
double centerY = igramArea->m_outside.m_center.y();
mirrorDlg &md = *mirrorDlg::get_Instance();

double pixelsPermm =(igramArea->m_outside.m_radius/(md.diameter/2.));
double reduction = md.aperatureReduction * pixelsPermm;
if (md.m_aperatureReductionEnabled == false)
double pixelsPermm =(igramArea->m_outside.m_radius/(md.currentSettings().diameter/2.));
double reduction = md.currentSettings().apertureReduction * pixelsPermm;
if (md.currentSettings().apertureReductionEnabled == false)
reduction = 0;

double rad = igramArea->m_outside.m_radius - reduction;


double rady = rad;

if (md.isEllipse()){
rady = rady * md.m_verticalAxis/ md.diameter;
}

double left = centerX - rad;
double top = centerY - rad;
std::vector<Mat > bgr_planes;
Expand Down Expand Up @@ -1032,8 +1025,8 @@ void DFTArea::makeSurface(){

mirrorDlg *md = mirrorDlg::get_Instance();

if (md->fringeSpacing != 1.){
result *= md->fringeSpacing;
if (md->currentSettings().fringeSpacing != 1.){
result *= md->currentSettings().fringeSpacing;
}

if (md->isEllipse()) {
Expand Down
29 changes: 13 additions & 16 deletions foucaultview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ void foucaultView::drawGridOverlay(QImage &img) {
int maxPixelRadius = w / 2;

mirrorDlg *md = mirrorDlg::get_Instance();
double mirrorRadiusMM = md->diameter / 2.0;
double mirrorRadiusMM = md->currentSettings().diameter / 2.0;

// 3. Determine physics-to-pixel scale
double stepSizeMM = 0;
Expand Down Expand Up @@ -298,8 +298,8 @@ void foucaultView::setSurface(wavefront *wf){
double offset = set.value("foucault roc offset", 0.).toDouble();
m_wf = wf;
mirrorDlg *md = mirrorDlg::get_Instance();
double rad = md->diameter/2.;
double FL = md->roc/2.;
double rad = md->currentSettings().diameter/2.;
double FL = md->currentSettings().roc/2.;
double mul = (ui->useMM->isChecked()) ? 1. : 1/25.4;
m_sag = mul * (rad * rad) /( 4 * FL);
m_sag = round(100 * m_sag)/100.;
Expand Down Expand Up @@ -362,9 +362,9 @@ QImage foucaultView::generateOpticalTestImage(OpticalTestType type, wavefront* w
double coc_offset_mm = s.rocOffset * unitMultiplyer;

// Physics geometry
double r2 = (md->diameter / 2.0) * (md->diameter / 2.0);
double b = md->roc + coc_offset_mm;
double pv = (sqrt(r2 + (md->roc * md->roc)) - (sqrt(r2 + b * b) - coc_offset_mm)) / (md->lambda * 1.E-6);
double r2 = (md->currentSettings().diameter / 2.0) * (md->currentSettings().diameter / 2.0);
double b = md->currentSettings().roc + coc_offset_mm;
double pv = (sqrt(r2 + (md->currentSettings().roc * md->currentSettings().roc)) - (sqrt(r2 + b * b) - coc_offset_mm)) / (md->currentSettings().lambda * 1.E-6);
double z3 = pv / moving_constant;
double effectiveZ3 = (type == OpticalTestType::Ronchi) ? (s.ronchiX * z3) : z3;

Expand All @@ -377,20 +377,17 @@ QImage foucaultView::generateOpticalTestImage(OpticalTestType type, wavefront* w
SimulationsView *sv = SimulationsView::getInstance(0);
sv->setSurface(wf);

bool oldDoNull = md->doNull;
if (bAutoCollimate == false)
md->doNull = false; // this is normal foucault/ronchi so we *don't* subtract the null (autcoCollimate ronchi or foucault mode will typically subtract the null)
// For normal Foucault/Ronchi mode (not autocollimation), disable null correction
// Autocollimation mode applies null if configured; normal mode does not
bool applyNull = bAutoCollimate && md->currentSettings().doNull;

cv::Mat surf_fft = sv->computeStarTest(s.heightMultiply * sv->nulledSurface(effectiveZ3), size, actualPad, true);

wf->InputZerns = originalZerns; // Restore state immediately
md->doNull = oldDoNull;
cv::Mat surf_fft = sv->computeStarTest(s.heightMultiply * sv->nulledSurface(effectiveZ3, applyNull), size, actualPad, true);

// 3. Mask Generation
cv::Mat mask = cv::Mat::zeros(size, size, CV_64FC1);
cv::Mat sourceSlit = cv::Mat::zeros(size, size, CV_64FC1);
int hx = (size - 1) / 2 + s.lateralOffset;
double pixwidth = s.outputLambda * 1.E-6 * (0.5 * md->roc / md->diameter) * 2. / (25.4 * actualPad);
double pixwidth = s.outputLambda * 1.E-6 * (0.5 * md->currentSettings().roc / md->currentSettings().diameter) * 2. / (25.4 * actualPad);

if (type == OpticalTestType::Ronchi) {
double lpi_val = s.lpi * (s.useMM ? 25.4 : 1.0);
Expand Down Expand Up @@ -954,8 +951,8 @@ void foucaultView::on_RonchiX_valueChanged(double arg1)
void foucaultView::on_pushButton_clicked()
{
mirrorDlg *md = mirrorDlg::get_Instance();
double rad = md->diameter/2.;
double FL = md->roc/2.;
double rad = md->currentSettings().diameter/2.;
double FL = md->currentSettings().roc/2.;
double mul = (ui->useMM->isChecked()) ? 1. : 1/25.4;
m_sag = mul * (rad * rad) /( 4 * FL);
m_sag = round(100 * m_sag)/100.;
Expand Down
26 changes: 14 additions & 12 deletions igramarea.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#endif

#include "IgramArea.h"
#include "settingsfacade.h"
#include "Circleoutline.h"
#include <QtGlobal>
#include <math.h>
Expand Down Expand Up @@ -150,9 +151,9 @@ IgramArea::IgramArea(QWidget *parent, void *mw)
void IgramArea::computeEdgeRadius(){
// compute mask inner edge in pixels
mirrorDlg &md = *mirrorDlg::get_Instance();
double pixelsPermm =(m_outside.m_radius/(md.diameter/2.));
m_edgeMaskWidth = md.aperatureReduction * pixelsPermm;
if (md.m_aperatureReductionEnabled == false)
double pixelsPermm =(m_outside.m_radius/(md.currentSettings().diameter/2.));
m_edgeMaskWidth = md.currentSettings().apertureReduction * pixelsPermm;
if (md.currentSettings().apertureReductionEnabled == false)
m_edgeMaskWidth = 0;

}
Expand Down Expand Up @@ -882,7 +883,7 @@ void IgramArea::useAnnulusforCenterOutine(){
if (m_current_boundry == CenterOutline) {

mirrorDlg *md = mirrorDlg::get_Instance();
double rad = m_outside.m_radius * md->m_annularObsPercent;
double rad = m_outside.m_radius * md->currentSettings().annulusPercent;

double cx = m_outside.m_center.x();
double cy = m_outside.m_center.y();
Expand Down Expand Up @@ -1544,7 +1545,7 @@ void IgramArea::mouseMoveEvent(QMouseEvent *event)
int majorRad = fabs((m_OutterP2.x() - m_OutterP1.x()))/2.;
double e = (double)minorRad/majorRad;
mirrorDlg &md = *mirrorDlg::get_Instance();
md.m_verticalAxis = md.diameter * e;
md.setMinorAxis(md.currentSettings().diameter * e);
drawBoundary();
return;
}
Expand Down Expand Up @@ -1623,8 +1624,8 @@ void IgramArea::mouseReleaseEvent(QMouseEvent *event)
setCursor(Qt::ArrowCursor);
if (event->button() == Qt::LeftButton && verticalTracking) {
mirrorDlg &md = *mirrorDlg::get_Instance();
double e = md.m_verticalAxis/ md.diameter;
md.setMinorAxis( e * md.diameter);
double e = md.currentSettings().ellipseMinorAxis / md.currentSettings().diameter;
md.setMinorAxis( e * md.currentSettings().diameter);
}


Expand Down Expand Up @@ -1704,7 +1705,7 @@ void IgramArea::drawBoundary()

mirrorDlg &md = *mirrorDlg::get_Instance();
if ((md.isEllipse())){
s2 = md.m_verticalAxis/ md.diameter;
s2 = md.currentSettings().ellipseMinorAxis / md.currentSettings().diameter;
}
if (m_searching_outside){
QColor c(Qt::cyan);
Expand All @@ -1718,7 +1719,7 @@ void IgramArea::drawBoundary()
painter.setBrush(Qt::NoBrush);
}
outside.draw(painter,1.,s2);
if ( md.m_aperatureReductionEnabled && md.m_clearAperature != md.diameter){
if ( md.currentSettings().apertureReductionEnabled && md.getClearAperture() != md.currentSettings().diameter){
painter.setPen(QPen(edgePenColor, edgePenWidth, Qt::DotLine));
computeEdgeRadius();
painter.drawEllipse(outside.m_center,
Expand Down Expand Up @@ -1926,7 +1927,7 @@ void IgramArea::paintEvent(QPaintEvent *event)
mirrorDlg &md = *mirrorDlg::get_Instance();
double e = 1.;
if (md.isEllipse()){
e = md.m_verticalAxis/md.diameter;
e = md.currentSettings().ellipseMinorAxis / md.currentSettings().diameter;
}


Expand Down Expand Up @@ -2021,7 +2022,7 @@ void IgramArea::crop() {
mirrorDlg &md = *mirrorDlg::get_Instance();

if (md.isEllipse()){
double e = md.m_verticalAxis/md.diameter;
double e = md.currentSettings().ellipseMinorAxis/md.currentSettings().diameter;
rady = radx * e;
top = fmax(0,cy - rady);
bottom = igramColor.height() - (rady + cy);
Expand Down Expand Up @@ -2519,7 +2520,8 @@ void IgramArea::save(){
mimeTypeFilters.append(mimeTypeName);
mimeTypeFilters.sort();
QSettings settings;
QString lastPath = settings.value("projectPath",".").toString();
QString lastPath = SettingsFacade::instance().appStore().load().projectPath;
if (lastPath.isEmpty()) lastPath = ".";


QString filters = QStringList(mimeTypeFilters.mid(1,6)).join(" ");
Expand Down
4 changes: 2 additions & 2 deletions igramintensity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
****************************************************************************/
#include "igramintensity.h"
#include "ui_igramintensity.h"
#include "settingsfacade.h"
#include <QImageWriter>
#include <QFileDialog>
#include <qwt_plot_renderer.h>
Expand Down Expand Up @@ -58,8 +59,7 @@ void igramIntensity::on_showGreen_clicked(bool checked)

void igramIntensity::on_pushButton_clicked()
{
QSettings set;
QString path = set.value("mirrorConfigFile").toString();
QString path = SettingsFacade::instance().appStore().load().mirrorConfigFile;
QFile fn(path);
QFileInfo info(fn.fileName());
QString dd = info.dir().absolutePath();
Expand Down
Loading
Loading