From 7747ffa98aee1cd5361d5437ed8477d99e84bba7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 24 May 2025 15:32:20 +0000 Subject: [PATCH 1/5] Initial plan for issue From 7b2d5cf0e2d87344574354bcc5ebd928473d2d05 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 24 May 2025 15:38:09 +0000 Subject: [PATCH 2/5] Move MT Results panel from Actions to Results task Co-authored-by: bHimes <3077528+bHimes@users.noreply.github.com> --- src/gui/ActionsPanelTm.cpp | 5 ----- src/gui/MyResultsPanel.cpp | 5 +++++ src/programs/projectx/projectx.cpp | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/gui/ActionsPanelTm.cpp b/src/gui/ActionsPanelTm.cpp index 9675e3df9..81b32fc20 100644 --- a/src/gui/ActionsPanelTm.cpp +++ b/src/gui/ActionsPanelTm.cpp @@ -13,7 +13,6 @@ void ActionsPanelTm::OnActionsBookPageChanged(wxBookCtrlEvent& event) { extern MyAlignMoviesPanel* align_movies_panel; extern MyFindCTFPanel* findctf_panel; extern MatchTemplatePanel* match_template_panel; - extern MatchTemplateResultsPanel* match_template_results_panel; extern RefineTemplatePanel* refine_template_panel; extern Generate3DPanel* generate_3d_panel; extern Sharpen3DPanel* sharpen_3d_panel; @@ -25,10 +24,6 @@ void ActionsPanelTm::OnActionsBookPageChanged(wxBookCtrlEvent& event) { match_template_panel->Refresh( ); } else if ( event.GetSelection( ) == 1 ) { - match_template_results_panel->Layout( ); - match_template_results_panel->Refresh( ); - } - else if ( event.GetSelection( ) == 2 ) { refine_template_panel->Layout( ); refine_template_panel->Refresh( ); } diff --git a/src/gui/MyResultsPanel.cpp b/src/gui/MyResultsPanel.cpp index c34b4b6a4..c321a50b3 100644 --- a/src/gui/MyResultsPanel.cpp +++ b/src/gui/MyResultsPanel.cpp @@ -14,6 +14,7 @@ void MyResultsPanel::OnResultsBookPageChanged(wxBookCtrlEvent& event) { extern MyPickingResultsPanel* picking_results_panel; extern Refine2DResultsPanel* refine2d_results_panel; extern MyRefinementResultsPanel* refinement_results_panel; + extern MatchTemplateResultsPanel* match_template_results_panel; // We we were editing the particle picking results, and we move away from Results, we may need to do some database stuff if ( event.GetOldSelection( ) == 2 ) @@ -41,5 +42,9 @@ void MyResultsPanel::OnResultsBookPageChanged(wxBookCtrlEvent& event) { refinement_results_panel->Layout( ); refinement_results_panel->Refresh( ); } + else if ( event.GetSelection( ) == 5 ) { + match_template_results_panel->Layout( ); + match_template_results_panel->Refresh( ); + } #endif } diff --git a/src/programs/projectx/projectx.cpp b/src/programs/projectx/projectx.cpp index 800ad29db..ff95fe741 100644 --- a/src/programs/projectx/projectx.cpp +++ b/src/programs/projectx/projectx.cpp @@ -162,7 +162,7 @@ bool MyGuiApp::OnInit( ) { // The other panels will be "stolen" from actions_panel_spa by "Reparenting" when the menu // item is selected in MainFrame.cpp match_template_panel = new MatchTemplatePanel(actions_panel_tm->ActionsBook); - match_template_results_panel = new MatchTemplateResultsPanel(actions_panel_tm->ActionsBook); + match_template_results_panel = new MatchTemplateResultsPanel(results_panel->ResultsBook); refine_template_panel = new RefineTemplatePanel(actions_panel_tm->ActionsBook); #ifdef EXPERIMENTAL refine_template_dev_panel = new RefineTemplateDevPanel(experimental_panel->ExperimentalBook); @@ -310,7 +310,6 @@ bool MyGuiApp::OnInit( ) { actions_panel_tm->ActionsBook->AddPage(findctf_panel, "Find CTF", false, 1); actions_panel_tm->ActionsBook->AddPage(match_template_panel, "Match Templates", false, 2); actions_panel_tm->ActionsBook->AddPage(refine_template_panel, "Refine Template", false, 3); - actions_panel_tm->ActionsBook->AddPage(match_template_results_panel, "MT Results", false, 2); actions_panel_tm->ActionsBook->AddPage(generate_3d_panel, "Generate 3D", false, 4); actions_panel_tm->ActionsBook->AddPage(sharpen_3d_panel, "Sharpen 3D", false, 5); @@ -319,6 +318,7 @@ bool MyGuiApp::OnInit( ) { results_panel->ResultsBook->AddPage(picking_results_panel, "Find Particles", false, 2); results_panel->ResultsBook->AddPage(refine2d_results_panel, "2D Classify", false, 3); results_panel->ResultsBook->AddPage(refinement_results_panel, "3D Refinement", false, 4); + results_panel->ResultsBook->AddPage(match_template_results_panel, "MT Results", false, 5); settings_panel->SettingsBook->AddPage(run_profiles_panel, "Run Profiles", true, 0); From 9989ca99829ba9366d3afb9e244404488b9457b1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 24 May 2025 16:05:24 +0000 Subject: [PATCH 3/5] Fix MT Results panel visibility when switching workflows Co-authored-by: bHimes <3077528+bHimes@users.noreply.github.com> --- src/gui/MainFrame.cpp | 16 ++++++++++++++++ src/programs/projectx/projectx.cpp | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/gui/MainFrame.cpp b/src/gui/MainFrame.cpp index e2a35bc23..f44df935e 100644 --- a/src/gui/MainFrame.cpp +++ b/src/gui/MainFrame.cpp @@ -934,6 +934,13 @@ void MyMainFrame::SetSingleParticleWorkflow(bool triggered_by_gui_event) { switch ( current_workflow ) { case cistem::workflow::template_matching: { UpdateWorkflow(actions_panel_tm, actions_panel_spa, "Actions"); + + // Remove the MT Results panel from the Results tab when switching to SPA workflow + extern MatchTemplateResultsPanel* match_template_results_panel; + int mt_results_page_index = results_panel->ResultsBook->FindPage(match_template_results_panel); + if (mt_results_page_index != wxNOT_FOUND) { + results_panel->ResultsBook->RemovePage(mt_results_page_index); + } // If other panels, e.g. results is a likely next candidate, it should go here. // TODO: if there are multiple panels to switch, we'll need to only do the update and set the icon for the LAST call in this sequence. @@ -962,6 +969,15 @@ void MyMainFrame::SetTemplateMatchingWorkflow(bool triggered_by_gui_event) { if ( current_workflow != cistem::workflow::template_matching ) { previous_workflow = current_workflow; UpdateWorkflow(actions_panel_spa, actions_panel_tm, "Actions"); + + // Add the MT Results panel to the Results tab when switching to TM workflow if it's not already there + extern MatchTemplateResultsPanel* match_template_results_panel; + extern wxImageList* ResultsBookIconImages; + int mt_results_page_index = results_panel->ResultsBook->FindPage(match_template_results_panel); + if (mt_results_page_index == wxNOT_FOUND) { + results_panel->ResultsBook->AddPage(match_template_results_panel, "MT Results", false, 5); + } + current_workflow = cistem::workflow::template_matching; if ( current_project.is_open == true ) current_project.RecordCurrentWorkflowInDB(current_workflow); diff --git a/src/programs/projectx/projectx.cpp b/src/programs/projectx/projectx.cpp index ff95fe741..f60c56519 100644 --- a/src/programs/projectx/projectx.cpp +++ b/src/programs/projectx/projectx.cpp @@ -318,7 +318,7 @@ bool MyGuiApp::OnInit( ) { results_panel->ResultsBook->AddPage(picking_results_panel, "Find Particles", false, 2); results_panel->ResultsBook->AddPage(refine2d_results_panel, "2D Classify", false, 3); results_panel->ResultsBook->AddPage(refinement_results_panel, "3D Refinement", false, 4); - results_panel->ResultsBook->AddPage(match_template_results_panel, "MT Results", false, 5); + // MT Results panel will be added dynamically based on the selected workflow settings_panel->SettingsBook->AddPage(run_profiles_panel, "Run Profiles", true, 0); From be64916f33e6a64689e1d3c5a8d658a67cdc50f3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 24 May 2025 16:08:12 +0000 Subject: [PATCH 4/5] Update OS X panel refresh logic for workflow switching Co-authored-by: bHimes <3077528+bHimes@users.noreply.github.com> --- src/gui/MainFrame.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gui/MainFrame.cpp b/src/gui/MainFrame.cpp index f44df935e..674ada1da 100644 --- a/src/gui/MainFrame.cpp +++ b/src/gui/MainFrame.cpp @@ -210,7 +210,12 @@ void MyMainFrame::OnMenuBookChange(wxBookCtrlEvent& event) { movie_asset_panel->Refresh( ); } else if ( event.GetSelection( ) == 2 ) { - actions_panel->ActionsBook->Refresh( ); + // Refresh the appropriate actions panel based on the current workflow + if (current_workflow == cistem::workflow::template_matching) { + actions_panel_tm->ActionsBook->Refresh( ); + } else { + actions_panel_spa->ActionsBook->Refresh( ); + } align_movies_panel->Layout( ); align_movies_panel->Refresh( ); } From a51198d9e0b6c27d0f87bfc67f6a000ab6d6ebe2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 24 May 2025 16:23:12 +0000 Subject: [PATCH 5/5] Create separate result panels for SPA and TM workflows Co-authored-by: bHimes <3077528+bHimes@users.noreply.github.com> --- src/core/gui_core_headers.h | 2 ++ src/gui/MainFrame.cpp | 42 ++++++++++++++----------- src/gui/ResultsPanelSpa.cpp | 45 +++++++++++++++++++++++++++ src/gui/ResultsPanelSpa.h | 10 ++++++ src/gui/ResultsPanelTm.cpp | 50 ++++++++++++++++++++++++++++++ src/gui/ResultsPanelTm.h | 10 ++++++ src/programs/projectx/projectx.cpp | 41 +++++++++++++++--------- 7 files changed, 167 insertions(+), 33 deletions(-) create mode 100644 src/gui/ResultsPanelSpa.cpp create mode 100644 src/gui/ResultsPanelSpa.h create mode 100644 src/gui/ResultsPanelTm.cpp create mode 100644 src/gui/ResultsPanelTm.h diff --git a/src/core/gui_core_headers.h b/src/core/gui_core_headers.h index 161658d58..af5984df8 100644 --- a/src/core/gui_core_headers.h +++ b/src/core/gui_core_headers.h @@ -88,6 +88,8 @@ #include "../gui/MyNewRefinementPackageWizard.h" #include "../gui/NewTemplateMatchesPackageWizard.h" #include "../gui/MyResultsPanel.h" +#include "../gui/ResultsPanelSpa.h" +#include "../gui/ResultsPanelTm.h" #include "../gui/ActionsPanelSpa.h" #include "../gui/ActionsPanelTm.h" #include "../gui/MyAssetsPanel.h" diff --git a/src/gui/MainFrame.cpp b/src/gui/MainFrame.cpp index 674ada1da..df0b3de6d 100644 --- a/src/gui/MainFrame.cpp +++ b/src/gui/MainFrame.cpp @@ -33,7 +33,9 @@ extern Sharpen3DPanel* sharpen_3d_panel; extern MySettingsPanel* settings_panel; extern MyRunProfilesPanel* run_profiles_panel; -extern MyResultsPanel* results_panel; +extern ResultsPanelSpa* results_panel_spa; +extern ResultsPanelTm* results_panel_tm; +extern MyResultsPanel* results_panel; extern MyMovieAlignResultsPanel* movie_results_panel; extern MyFindCTFResultsPanel* ctf_results_panel; extern MyPickingResultsPanel* picking_results_panel; @@ -220,7 +222,12 @@ void MyMainFrame::OnMenuBookChange(wxBookCtrlEvent& event) { align_movies_panel->Refresh( ); } else if ( event.GetSelection( ) == 3 ) { - results_panel->ResultsBook->Refresh( ); + // Refresh the appropriate results panel based on the current workflow + if (current_workflow == cistem::workflow::template_matching) { + results_panel_tm->ResultsBook->Refresh( ); + } else { + results_panel_spa->ResultsBook->Refresh( ); + } movie_results_panel->Layout( ); movie_results_panel->Refresh( ); } @@ -940,15 +947,14 @@ void MyMainFrame::SetSingleParticleWorkflow(bool triggered_by_gui_event) { case cistem::workflow::template_matching: { UpdateWorkflow(actions_panel_tm, actions_panel_spa, "Actions"); - // Remove the MT Results panel from the Results tab when switching to SPA workflow - extern MatchTemplateResultsPanel* match_template_results_panel; - int mt_results_page_index = results_panel->ResultsBook->FindPage(match_template_results_panel); - if (mt_results_page_index != wxNOT_FOUND) { - results_panel->ResultsBook->RemovePage(mt_results_page_index); - } - - // If other panels, e.g. results is a likely next candidate, it should go here. - // TODO: if there are multiple panels to switch, we'll need to only do the update and set the icon for the LAST call in this sequence. + // Also update the results panel + int displayed_page_idx = MenuBook->FindPage(MenuBook->GetCurrentPage()); + int current_page_idx = MenuBook->FindPage(results_panel_tm); + MenuBook->RemovePage(current_page_idx); + MenuBook->InsertPage(current_page_idx, results_panel_spa, "Results", false, current_page_idx); + results_panel = results_panel_spa; + MenuBook->SetSelection(displayed_page_idx); + break; } default: { @@ -975,13 +981,13 @@ void MyMainFrame::SetTemplateMatchingWorkflow(bool triggered_by_gui_event) { previous_workflow = current_workflow; UpdateWorkflow(actions_panel_spa, actions_panel_tm, "Actions"); - // Add the MT Results panel to the Results tab when switching to TM workflow if it's not already there - extern MatchTemplateResultsPanel* match_template_results_panel; - extern wxImageList* ResultsBookIconImages; - int mt_results_page_index = results_panel->ResultsBook->FindPage(match_template_results_panel); - if (mt_results_page_index == wxNOT_FOUND) { - results_panel->ResultsBook->AddPage(match_template_results_panel, "MT Results", false, 5); - } + // Also update the results panel + int displayed_page_idx = MenuBook->FindPage(MenuBook->GetCurrentPage()); + int current_page_idx = MenuBook->FindPage(results_panel_spa); + MenuBook->RemovePage(current_page_idx); + MenuBook->InsertPage(current_page_idx, results_panel_tm, "Results", false, current_page_idx); + results_panel = results_panel_tm; + MenuBook->SetSelection(displayed_page_idx); current_workflow = cistem::workflow::template_matching; if ( current_project.is_open == true ) diff --git a/src/gui/ResultsPanelSpa.cpp b/src/gui/ResultsPanelSpa.cpp new file mode 100644 index 000000000..895f82657 --- /dev/null +++ b/src/gui/ResultsPanelSpa.cpp @@ -0,0 +1,45 @@ +#include "../core/gui_core_headers.h" + +ResultsPanelSpa::ResultsPanelSpa(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : ResultsPanel(parent, id, pos, size, style) { + // Bind OnListBookPageChanged from + Bind(wxEVT_LISTBOOK_PAGE_CHANGED, wxBookCtrlEventHandler(ResultsPanelSpa::OnResultsBookPageChanged), this); +} + +// TODO: destructor + +void ResultsPanelSpa::OnResultsBookPageChanged(wxBookCtrlEvent& event) { + extern MyMovieAlignResultsPanel* movie_results_panel; + extern MyFindCTFResultsPanel* ctf_results_panel; + extern MyPickingResultsPanel* picking_results_panel; + extern Refine2DResultsPanel* refine2d_results_panel; + extern MyRefinementResultsPanel* refinement_results_panel; + + // We we were editing the particle picking results, and we move away from Results, we may need to do some database stuff + if (event.GetOldSelection() == 2) + picking_results_panel->UpdateResultsFromBitmapPanel(); + +#ifdef __WXOSX__ + // Necessary for MacOS to refresh the panels + if (event.GetSelection() == 0) { + movie_results_panel->Layout(); + movie_results_panel->Refresh(); + } + else if (event.GetSelection() == 1) { + ctf_results_panel->Layout(); + ctf_results_panel->Refresh(); + } + else if (event.GetSelection() == 2) { + picking_results_panel->Layout(); + picking_results_panel->Refresh(); + } + else if (event.GetSelection() == 3) { + refine2d_results_panel->Layout(); + refine2d_results_panel->Refresh(); + } + else if (event.GetSelection() == 4) { + refinement_results_panel->Layout(); + refinement_results_panel->Refresh(); + } +#endif +} \ No newline at end of file diff --git a/src/gui/ResultsPanelSpa.h b/src/gui/ResultsPanelSpa.h new file mode 100644 index 000000000..bbb30028e --- /dev/null +++ b/src/gui/ResultsPanelSpa.h @@ -0,0 +1,10 @@ +#ifndef gui_ResultsPanelSpa_h_ +#define gui_ResultsPanelSpa_h_ + +class ResultsPanelSpa : public ResultsPanel { + public: + ResultsPanelSpa(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(500, 300), long style = wxTAB_TRAVERSAL); + void OnResultsBookPageChanged(wxBookCtrlEvent& event); +}; + +#endif \ No newline at end of file diff --git a/src/gui/ResultsPanelTm.cpp b/src/gui/ResultsPanelTm.cpp new file mode 100644 index 000000000..4eb498520 --- /dev/null +++ b/src/gui/ResultsPanelTm.cpp @@ -0,0 +1,50 @@ +#include "../core/gui_core_headers.h" + +ResultsPanelTm::ResultsPanelTm(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) + : ResultsPanel(parent, id, pos, size, style) { + // Bind OnListBookPageChanged from + Bind(wxEVT_LISTBOOK_PAGE_CHANGED, wxBookCtrlEventHandler(ResultsPanelTm::OnResultsBookPageChanged), this); +} + +// TODO: destructor + +void ResultsPanelTm::OnResultsBookPageChanged(wxBookCtrlEvent& event) { + extern MyMovieAlignResultsPanel* movie_results_panel; + extern MyFindCTFResultsPanel* ctf_results_panel; + extern MyPickingResultsPanel* picking_results_panel; + extern Refine2DResultsPanel* refine2d_results_panel; + extern MyRefinementResultsPanel* refinement_results_panel; + extern MatchTemplateResultsPanel* match_template_results_panel; + + // We we were editing the particle picking results, and we move away from Results, we may need to do some database stuff + if (event.GetOldSelection() == 2) + picking_results_panel->UpdateResultsFromBitmapPanel(); + +#ifdef __WXOSX__ + // Necessary for MacOS to refresh the panels + if (event.GetSelection() == 0) { + movie_results_panel->Layout(); + movie_results_panel->Refresh(); + } + else if (event.GetSelection() == 1) { + ctf_results_panel->Layout(); + ctf_results_panel->Refresh(); + } + else if (event.GetSelection() == 2) { + picking_results_panel->Layout(); + picking_results_panel->Refresh(); + } + else if (event.GetSelection() == 3) { + refine2d_results_panel->Layout(); + refine2d_results_panel->Refresh(); + } + else if (event.GetSelection() == 4) { + refinement_results_panel->Layout(); + refinement_results_panel->Refresh(); + } + else if (event.GetSelection() == 5) { + match_template_results_panel->Layout(); + match_template_results_panel->Refresh(); + } +#endif +} \ No newline at end of file diff --git a/src/gui/ResultsPanelTm.h b/src/gui/ResultsPanelTm.h new file mode 100644 index 000000000..ff3ef2c7f --- /dev/null +++ b/src/gui/ResultsPanelTm.h @@ -0,0 +1,10 @@ +#ifndef _gui_ResultsPanelTm_h_ +#define _gui_ResultsPanelTm_h_ + +class ResultsPanelTm : public ResultsPanel { + public: + ResultsPanelTm(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize(500, 300), long style = wxTAB_TRAVERSAL); + void OnResultsBookPageChanged(wxBookCtrlEvent& event); +}; + +#endif \ No newline at end of file diff --git a/src/programs/projectx/projectx.cpp b/src/programs/projectx/projectx.cpp index f60c56519..d04e22ce5 100644 --- a/src/programs/projectx/projectx.cpp +++ b/src/programs/projectx/projectx.cpp @@ -28,7 +28,9 @@ MyOverviewPanel* overview_panel; ActionsPanelSpa* actions_panel_spa; ActionsPanelTm* actions_panel_tm; AssetsPanel* assets_panel; -MyResultsPanel* results_panel; +ResultsPanelSpa* results_panel_spa; +ResultsPanelTm* results_panel_tm; +MyResultsPanel* results_panel; // Keep this temporarily for compatibility SettingsPanel* settings_panel; MatchTemplatePanel* match_template_panel; MatchTemplateResultsPanel* match_template_results_panel; @@ -125,7 +127,9 @@ bool MyGuiApp::OnInit( ) { actions_panel_spa = new ActionsPanelSpa(main_frame->MenuBook, wxID_ANY); actions_panel_tm = new ActionsPanelTm(main_frame->MenuBook, wxID_ANY); assets_panel = new MyAssetsPanel(main_frame->MenuBook, wxID_ANY); - results_panel = new MyResultsPanel(main_frame->MenuBook, wxID_ANY); + results_panel_spa = new ResultsPanelSpa(main_frame->MenuBook, wxID_ANY); + results_panel_tm = new ResultsPanelTm(main_frame->MenuBook, wxID_ANY); + results_panel = results_panel_spa; // For compatibility with code that uses results_panel, default to SPA settings_panel = new MySettingsPanel(main_frame->MenuBook, wxID_ANY); #ifdef EXPERIMENTAL experimental_panel = new MyExperimentalPanel(main_frame->MenuBook, wxID_ANY); @@ -153,16 +157,16 @@ bool MyGuiApp::OnInit( ) { generate_3d_panel = new Generate3DPanel(actions_panel_spa->ActionsBook); sharpen_3d_panel = new Sharpen3DPanel(actions_panel_spa->ActionsBook); - movie_results_panel = new MyMovieAlignResultsPanel(results_panel->ResultsBook); - ctf_results_panel = new MyFindCTFResultsPanel(results_panel->ResultsBook); - picking_results_panel = new MyPickingResultsPanel(results_panel->ResultsBook); - refine2d_results_panel = new Refine2DResultsPanel(results_panel->ResultsBook); - refinement_results_panel = new MyRefinementResultsPanel(results_panel->ResultsBook); + movie_results_panel = new MyMovieAlignResultsPanel(results_panel_spa->ResultsBook); + ctf_results_panel = new MyFindCTFResultsPanel(results_panel_spa->ResultsBook); + picking_results_panel = new MyPickingResultsPanel(results_panel_spa->ResultsBook); + refine2d_results_panel = new Refine2DResultsPanel(results_panel_spa->ResultsBook); + refinement_results_panel = new MyRefinementResultsPanel(results_panel_spa->ResultsBook); // The other panels will be "stolen" from actions_panel_spa by "Reparenting" when the menu // item is selected in MainFrame.cpp match_template_panel = new MatchTemplatePanel(actions_panel_tm->ActionsBook); - match_template_results_panel = new MatchTemplateResultsPanel(results_panel->ResultsBook); + match_template_results_panel = new MatchTemplateResultsPanel(results_panel_tm->ResultsBook); refine_template_panel = new RefineTemplatePanel(actions_panel_tm->ActionsBook); #ifdef EXPERIMENTAL refine_template_dev_panel = new RefineTemplateDevPanel(experimental_panel->ExperimentalBook); @@ -279,7 +283,7 @@ bool MyGuiApp::OnInit( ) { main_frame->MenuBook->RemovePage(2); main_frame->MenuBook->AddPage(actions_panel_spa, "Actions", false, 2); - main_frame->MenuBook->AddPage(results_panel, "Results", false, 3); + main_frame->MenuBook->AddPage(results_panel_spa, "Results", false, 3); main_frame->MenuBook->AddPage(settings_panel, "Settings", false, 4); #ifdef EXPERIMENTAL main_frame->MenuBook->AddPage(experimental_panel, "Experimental", false, 5); @@ -313,12 +317,19 @@ bool MyGuiApp::OnInit( ) { actions_panel_tm->ActionsBook->AddPage(generate_3d_panel, "Generate 3D", false, 4); actions_panel_tm->ActionsBook->AddPage(sharpen_3d_panel, "Sharpen 3D", false, 5); - results_panel->ResultsBook->AddPage(movie_results_panel, "Align Movies", true, 0); - results_panel->ResultsBook->AddPage(ctf_results_panel, "Find CTF", false, 1); - results_panel->ResultsBook->AddPage(picking_results_panel, "Find Particles", false, 2); - results_panel->ResultsBook->AddPage(refine2d_results_panel, "2D Classify", false, 3); - results_panel->ResultsBook->AddPage(refinement_results_panel, "3D Refinement", false, 4); - // MT Results panel will be added dynamically based on the selected workflow + results_panel_spa->ResultsBook->AddPage(movie_results_panel, "Align Movies", true, 0); + results_panel_spa->ResultsBook->AddPage(ctf_results_panel, "Find CTF", false, 1); + results_panel_spa->ResultsBook->AddPage(picking_results_panel, "Find Particles", false, 2); + results_panel_spa->ResultsBook->AddPage(refine2d_results_panel, "2D Classify", false, 3); + results_panel_spa->ResultsBook->AddPage(refinement_results_panel, "3D Refinement", false, 4); + + // TM Results Panel - add to TM panel only + results_panel_tm->ResultsBook->AddPage(movie_results_panel, "Align Movies", true, 0); + results_panel_tm->ResultsBook->AddPage(ctf_results_panel, "Find CTF", false, 1); + results_panel_tm->ResultsBook->AddPage(picking_results_panel, "Find Particles", false, 2); + results_panel_tm->ResultsBook->AddPage(refine2d_results_panel, "2D Classify", false, 3); + results_panel_tm->ResultsBook->AddPage(refinement_results_panel, "3D Refinement", false, 4); + results_panel_tm->ResultsBook->AddPage(match_template_results_panel, "MT Results", false, 5); settings_panel->SettingsBook->AddPage(run_profiles_panel, "Run Profiles", true, 0);