@@ -299,6 +299,20 @@ void MainWindow::setupUI()
299299 dipoleLayout->addWidget (m_loadDipoleBtn);
300300 dipoleLayout->addWidget (m_showDipoleCheck);
301301
302+ // ===== Source Space Group =====
303+ QGroupBox *srcSpaceGroup = new QGroupBox (" Source Space" );
304+ QVBoxLayout *srcSpaceLayout = new QVBoxLayout (srcSpaceGroup);
305+ srcSpaceLayout->setContentsMargins (10 , 15 , 10 , 10 );
306+ srcSpaceLayout->setSpacing (8 );
307+
308+ m_loadSrcSpaceBtn = new QPushButton (" Load Source Space..." );
309+ m_showSrcSpaceCheck = new QCheckBox (" Show Source Space" );
310+ m_showSrcSpaceCheck->setChecked (false );
311+ m_showSrcSpaceCheck->setEnabled (false );
312+
313+ srcSpaceLayout->addWidget (m_loadSrcSpaceBtn);
314+ srcSpaceLayout->addWidget (m_showSrcSpaceCheck);
315+
302316 // ===== Sensor Group =====
303317 QGroupBox *sensorGroup = new QGroupBox (" Sensors" );
304318 QVBoxLayout *sensorLayout = new QVBoxLayout (sensorGroup);
@@ -335,6 +349,7 @@ void MainWindow::setupUI()
335349 sideLayout->addWidget (controlGroup);
336350 sideLayout->addWidget (stcGroup);
337351 sideLayout->addWidget (dipoleGroup);
352+ sideLayout->addWidget (srcSpaceGroup);
338353 sideLayout->addWidget (sensorGroup);
339354 sideLayout->addStretch ();
340355
@@ -557,6 +572,20 @@ void MainWindow::setupConnections()
557572
558573 connect (m_showDipoleCheck, &QCheckBox::toggled, [this ](bool checked) { m_brainView->setDipoleVisible (checked); });
559574
575+ // Source Space
576+ connect (m_loadSrcSpaceBtn, &QPushButton::clicked, [this ]() {
577+ QString path = QFileDialog::getOpenFileName (this , " Select Source Space / Forward Solution" , " " ,
578+ " Source Space Files (*-src.fif *-fwd.fif);;All FIF Files (*.fif)" );
579+ if (path.isEmpty ()) return ;
580+ if (m_brainView->loadSourceSpace (path)) {
581+ m_showSrcSpaceCheck->setEnabled (true );
582+ m_showSrcSpaceCheck->setChecked (false );
583+ m_brainView->setSourceSpaceVisible (false );
584+ }
585+ });
586+
587+ connect (m_showSrcSpaceCheck, &QCheckBox::toggled, [this ](bool checked) { m_brainView->setSourceSpaceVisible (checked); });
588+
560589 // Sync initial state
561590 m_brainView->setHemiVisible (0 , m_lhCheck->isChecked ());
562591 m_brainView->setHemiVisible (1 , m_rhCheck->isChecked ());
@@ -572,7 +601,8 @@ void MainWindow::loadInitialData(const QString &subjectPath,
572601 const QString &bemPath,
573602 const QString &transPath,
574603 const QString &stcPath,
575- const QString &digitizerPath)
604+ const QString &digitizerPath,
605+ const QString &srcSpacePath)
576606{
577607 qDebug () << " Loading surfaces..." ;
578608
@@ -604,6 +634,16 @@ void MainWindow::loadInitialData(const QString &subjectPath,
604634 m_brainView->loadTransformation (transPath);
605635 }
606636
637+ // Auto-load source space
638+ if (!srcSpacePath.isEmpty () && QFile::exists (srcSpacePath)) {
639+ qDebug () << " Auto-loading source space from:" << srcSpacePath;
640+ if (m_brainView->loadSourceSpace (srcSpacePath)) {
641+ m_showSrcSpaceCheck->setEnabled (true );
642+ m_showSrcSpaceCheck->setChecked (false );
643+ m_brainView->setSourceSpaceVisible (false );
644+ }
645+ }
646+
607647 // Auto-load STC
608648 if (!stcPath.isEmpty () && QFile::exists (stcPath)) {
609649 qDebug () << " Auto-loading source estimate from:" << stcPath;
0 commit comments