@@ -551,6 +551,8 @@ void D3SpectrumDisplayDiv::setPeakModel( PeakModel *model )
551551 m_peakModel->rowsInserted ().connect ( boost::bind (&D3SpectrumDisplayDiv::schedulePeakRedraw, this , SpecUtils::SpectrumType::Foreground) );
552552 m_peakModel->layoutChanged ().connect ( boost::bind (&D3SpectrumDisplayDiv::schedulePeakRedraw, this , SpecUtils::SpectrumType::Foreground) );
553553 m_peakModel->modelReset ().connect ( boost::bind (&D3SpectrumDisplayDiv::schedulePeakRedraw, this , SpecUtils::SpectrumType::Foreground) );
554+ m_peakModel->backgroundPeaksChanged ().connect ( boost::bind (&D3SpectrumDisplayDiv::schedulePeakRedraw, this , SpecUtils::SpectrumType::Background) );
555+ m_peakModel->secondaryPeaksChanged ().connect ( boost::bind (&D3SpectrumDisplayDiv::schedulePeakRedraw, this , SpecUtils::SpectrumType::SecondForeground) );
554556}// void setPeakModel( PeakModel *model );
555557
556558
@@ -1374,7 +1376,7 @@ void D3SpectrumDisplayDiv::setForegroundPeaksToClient()
13741376
13751377 if( m_peakModel )
13761378 {
1377- std::shared_ptr<const std::deque< PeakModel::PeakShrdPtr > > peaks = m_peakModel->peaks();
1379+ std::shared_ptr<const std::deque<shared_ptr<const PeakDef> > > peaks = m_peakModel->peaks();
13781380 if( peaks )
13791381 {
13801382 vector< std::shared_ptr<const PeakDef> > inpeaks( peaks->begin(), peaks->end() );
@@ -1435,33 +1437,13 @@ void D3SpectrumDisplayDiv::setPeaksToClient( const SpecUtils::SpectrumType spect
14351437 }// if( m_defaultPeakColor.isDefault() )
14361438
14371439
1438- if ( spectrum_type == SpecUtils::SpectrumType::Foreground )
1440+ shared_ptr<const deque<shared_ptr<const PeakDef>>> peaks = m_peakModel ? m_peakModel->peaks (spectrum_type) : nullptr ;
1441+ if ( peaks )
14391442 {
1440- shared_ptr<const deque< PeakModel::PeakShrdPtr > > peaks = m_peakModel ? m_peakModel->peaks () : nullptr ;
1441- if ( peaks )
1442- {
1443- vector< std::shared_ptr<const PeakDef> > inpeaks ( peaks->begin (), peaks->end () );
1444- const std::shared_ptr<const Measurement> &foreground = m_foreground;
1445- const WColor peak_color = m_defaultPeakColor.isDefault () ? WColor (0 , 51 , 255 ) : m_defaultPeakColor;
1446- js = PeakDef::peak_json ( inpeaks, foreground, peak_color, 255 );
1447- }
1448- }else if ( InterSpec *viewer = InterSpec::instance () )
1449- {
1450- // This is totally not correct - the spectrum may not be the main InterSpec spectrum
1451- std::shared_ptr<SpecMeas> meas = viewer->measurment ( spectrum_type );
1452- const std::set<int > &samples = viewer->displayedSamples ( spectrum_type );
1453-
1454- if ( meas && !samples.empty () )
1455- {
1456- std::shared_ptr<const std::deque< std::shared_ptr<const PeakDef> > > peaks = meas->peaks ( samples );
1457- if ( peaks )
1458- {
1459- vector< std::shared_ptr<const PeakDef> > inpeaks ( peaks->begin (), peaks->end () );
1460- const WColor peak_color = m_defaultPeakColor.isDefault () ? WColor (0 , 51 , 255 ) : m_defaultPeakColor;
1461- js = PeakDef::peak_json ( inpeaks, spectrum_measurement, peak_color, alpha );
1462- }
1463- }
1464- }// if( spectrum_type == SpecUtils::SpectrumType::Foreground ) / else
1443+ vector< std::shared_ptr<const PeakDef> > inpeaks ( peaks->begin (), peaks->end () );
1444+ const WColor peak_color = m_defaultPeakColor.isDefault () ? WColor (0 , 51 , 255 ) : m_defaultPeakColor;
1445+ js = PeakDef::peak_json ( inpeaks, spectrum_measurement, peak_color, alpha );
1446+ }
14651447
14661448 if ( js.empty () )
14671449 js = " []" ;
@@ -1913,8 +1895,8 @@ void D3SpectrumDisplayDiv::renderForegroundToClient()
19131895 // Set the peak data for the spectrum
19141896 if ( m_peakModel )
19151897 {
1916- std:: shared_ptr<const std:: deque< PeakModel::PeakShrdPtr > > peaks = m_peakModel->peaks ();
1917- vector< std:: shared_ptr<const PeakDef> > inpeaks;
1898+ shared_ptr<const deque<shared_ptr< const PeakDef>> > peaks = m_peakModel->peaks ();
1899+ vector<shared_ptr<const PeakDef>> inpeaks;
19181900 if ( peaks )
19191901 inpeaks.insert ( end (inpeaks), peaks->begin (), peaks->end () );
19201902
@@ -2556,51 +2538,26 @@ void D3SpectrumDisplayDiv::performExistingRoiEdgeDragWork( double new_lower_ener
25562538 std::string spectrum_type,
25572539 bool isfinal )
25582540{
2559- std::unique_ptr<UndoRedoManager::PeakModelChange> peak_undo_creator;
2541+ assert ( m_peakModel );
2542+ if ( !m_peakModel )
2543+ return ;
25602544
2561- PeakModel *peakModel = nullptr ;
2562- shared_ptr<const Measurement> spectrum;
2563- shared_ptr<const deque<PeakModel::PeakShrdPtr>> origpeaks;
2564- shared_ptr<deque<PeakModel::PeakShrdPtr>> final_mondified_peaks;
2545+ std::unique_ptr<UndoRedoManager::PeakModelChange> peak_undo_creator;
2546+ if ( isfinal )
2547+ peak_undo_creator.reset ( new UndoRedoManager::PeakModelChange () );
25652548
25662549 const bool for_background = (spectrum_type == " BACKGROUND" );
25672550 const bool for_secondary = (!for_background && (spectrum_type == " SECONDARY" ));
2568- SpecUtils::SpectrumType spec_type = SpecUtils::SpectrumType::Foreground;
2551+ assert ( for_background || for_secondary || (spectrum_type == " FOREGROUND" ) );
2552+ const SpecUtils::SpectrumType spec_type = for_background ? SpecUtils::SpectrumType::Background
2553+ : (for_secondary ? SpecUtils::SpectrumType::SecondForeground : SpecUtils::SpectrumType::Foreground);
2554+ shared_ptr<const Measurement> spectrum = for_background ? m_background : (for_secondary ? m_secondary : m_foreground);
2555+ const shared_ptr<const deque<shared_ptr<const PeakDef>>> origpeaks = m_peakModel->peaks (spec_type);
2556+
2557+ shared_ptr<deque<shared_ptr<const PeakDef>>> final_mondified_peaks;
2558+ if ( (for_background || for_secondary) && isfinal && origpeaks )
2559+ final_mondified_peaks = make_shared<deque<shared_ptr<const PeakDef>>>( begin (*origpeaks), end (*origpeaks) );
25692560
2570- if ( for_background || for_secondary )
2571- {
2572- spectrum = for_background ? m_background : m_secondary;
2573- spec_type = for_background ? SpecUtils::SpectrumType::Background : SpecUtils::SpectrumType::SecondForeground;
2574-
2575- InterSpec *viewer = InterSpec::instance ();
2576- assert ( viewer );
2577- if ( !viewer )
2578- return ;
2579-
2580- shared_ptr<SpecMeas> meas = viewer->measurment ( spec_type );
2581- const set<int > &samples = viewer->displayedSamples ( spec_type );
2582- origpeaks = (meas && !samples.empty ()) ? meas->peaks ( samples ) : nullptr ;
2583-
2584- if ( isfinal && origpeaks )
2585- final_mondified_peaks = make_shared<deque<PeakModel::PeakShrdPtr>>( begin (*origpeaks), end (*origpeaks) );
2586- }else
2587- {
2588- assert ( spectrum_type == " FOREGROUND" );
2589-
2590- spec_type = SpecUtils::SpectrumType::Foreground;
2591- spectrum = m_foreground;
2592- peakModel = m_peakModel;
2593- origpeaks = peakModel ? peakModel->peaks () : nullptr ;
2594-
2595- if ( isfinal )
2596- peak_undo_creator.reset ( new UndoRedoManager::PeakModelChange () );
2597-
2598-
2599- assert ( peakModel );
2600- if ( !peakModel )
2601- return ;
2602- }// if( background or secondary ) / else ( assume foreground )
2603-
26042561 assert ( origpeaks && spectrum );
26052562 if ( !origpeaks || !spectrum ) // Shouldnt ever happen
26062563 return ;
@@ -2684,7 +2641,7 @@ void D3SpectrumDisplayDiv::performExistingRoiEdgeDragWork( double new_lower_ener
26842641 {
26852642 assert ( final_mondified_peaks );
26862643 final_mondified_peaks->erase ( std::remove_if ( begin (*final_mondified_peaks), end (*final_mondified_peaks),
2687- [&continuum]( const PeakModel::PeakShrdPtr &ptr ){
2644+ [&continuum]( const shared_ptr< const PeakDef> &ptr ){
26882645 return (continuum == ptr->continuum ());
26892646 }), end (*final_mondified_peaks) );
26902647 }// if( isfinal && (for_background || for_secondary) )
@@ -2699,18 +2656,18 @@ void D3SpectrumDisplayDiv::performExistingRoiEdgeDragWork( double new_lower_ener
26992656 {
27002657 final_mondified_peaks->insert ( end (*final_mondified_peaks), begin (new_roi_initial_peaks), end (new_roi_initial_peaks) );
27012658 std::sort ( begin (*final_mondified_peaks), end (*final_mondified_peaks), &PeakDef::lessThanByMeanShrdPtr );
2702- InterSpec::instance () ->setPeaks ( spec_type, final_mondified_peaks );
2659+ m_peakModel ->setPeaks ( *final_mondified_peaks, spec_type );
27032660 }else
27042661 {
2705- assert ( peakModel );
2662+ assert ( m_peakModel );
27062663 // TODO: add a `PeakModel::replacePeaks(orig,newer)` function to allow updating peak quanitites in one step, or allow setting kLowerX/kUpperX columns in setData(...) function
2707- peakModel ->removePeaks ( orig_roi_peaks );
2664+ m_peakModel ->removePeaks ( orig_roi_peaks );
27082665
27092666 std::vector<PeakDef> peaks_to_add;
27102667 for ( auto p : new_roi_initial_peaks )
27112668 peaks_to_add.push_back ( *p );
27122669
2713- peakModel ->addPeaks ( peaks_to_add );
2670+ m_peakModel ->addPeaks ( peaks_to_add );
27142671 }
27152672 }else
27162673 {
@@ -2770,15 +2727,18 @@ void D3SpectrumDisplayDiv::performExistingRoiEdgeDragWork( double new_lower_ener
27702727
27712728 if ( for_background || for_secondary )
27722729 {
2773- final_mondified_peaks->insert ( end (*final_mondified_peaks), begin (new_roi_initial_peaks), end (new_roi_initial_peaks) );
2774- std::sort ( begin (*final_mondified_peaks), end (*final_mondified_peaks), &PeakDef::lessThanByMeanShrdPtr );
2775-
2776- InterSpec::instance ()->setPeaks ( spec_type, final_mondified_peaks ); // will take care of undo/redo
2730+ if ( origpeaks )
2731+ {
2732+ final_mondified_peaks->insert ( end (*final_mondified_peaks), begin (new_roi_initial_peaks), end (new_roi_initial_peaks) );
2733+ std::sort ( begin (*final_mondified_peaks), end (*final_mondified_peaks), &PeakDef::lessThanByMeanShrdPtr );
2734+
2735+ m_peakModel->setPeaks ( *final_mondified_peaks, spec_type ); // will take care of undo/redo
2736+ }
27772737 }else
27782738 {
2779- assert ( peakModel );
2780- peakModel ->removePeaks ( orig_roi_peaks );
2781- peakModel ->addPeaks ( peaks_to_add );
2739+ assert ( m_peakModel );
2740+ m_peakModel ->removePeaks ( orig_roi_peaks );
2741+ m_peakModel ->addPeaks ( peaks_to_add );
27822742 }
27832743
27842744 m_continuum_being_drug.reset ();
@@ -2797,11 +2757,11 @@ void D3SpectrumDisplayDiv::performExistingRoiEdgeDragWork( double new_lower_ener
27972757 {
27982758 if ( for_background || for_secondary )
27992759 {
2800- InterSpec::instance () ->setPeaks ( spec_type, final_mondified_peaks ); // will take care of undo/redo
2760+ m_peakModel ->setPeaks ( *final_mondified_peaks, spec_type );
28012761 }else
28022762 {
2803- assert ( peakModel );
2804- peakModel ->removePeaks ( orig_roi_peaks );
2763+ assert ( m_peakModel );
2764+ m_peakModel ->removePeaks ( orig_roi_peaks );
28052765 }
28062766 }
28072767 }// if( not narrow region ) / else
@@ -3070,7 +3030,7 @@ void D3SpectrumDisplayDiv::performDragCreateRoiWork( double lower_energy, double
30703030
30713031 UndoRedoManager::PeakModelChange peak_undo_creator;
30723032
3073- deque< PeakModel::PeakShrdPtr > preaddpeaks, postaddpeaks;
3033+ deque<shared_ptr< const PeakDef> > preaddpeaks, postaddpeaks;
30743034 if ( peakModel->peaks () ) // should always be true, but JIC
30753035 preaddpeaks = *peakModel->peaks ();
30763036
@@ -3085,7 +3045,7 @@ void D3SpectrumDisplayDiv::performDragCreateRoiWork( double lower_energy, double
30853045 if ( peakModel->peaks () ) // should always be true, but JIC
30863046 postaddpeaks = *peakModel->peaks ();
30873047
3088- vector< PeakModel::PeakShrdPtr > added_peaks;
3048+ vector<shared_ptr< const PeakDef> > added_peaks;
30893049 for ( const auto &p : postaddpeaks )
30903050 {
30913051 if ( !std::count (begin (preaddpeaks), end (preaddpeaks), p) )
@@ -3323,8 +3283,6 @@ D3SpectrumDisplayDiv::~D3SpectrumDisplayDiv()
33233283 // Cleanup the instance-specific style rules we created.
33243284 WCssStyleSheet &style = wApp->styleSheet ();
33253285 for ( const auto &name_rule : m_cssRules )
3326- {
33273286 style.removeRule ( name_rule.second );
3328- }
33293287 m_cssRules.clear ();
33303288}// ~D3SpectrumDisplayDiv()
0 commit comments