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/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/MainFrame.cpp b/src/gui/MainFrame.cpp index e2a35bc23..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; @@ -210,12 +212,22 @@ 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( ); } 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( ); } @@ -934,9 +946,15 @@ void MyMainFrame::SetSingleParticleWorkflow(bool triggered_by_gui_event) { switch ( current_workflow ) { case cistem::workflow::template_matching: { UpdateWorkflow(actions_panel_tm, actions_panel_spa, "Actions"); - - // 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: { @@ -962,6 +980,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"); + + // 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 ) current_project.RecordCurrentWorkflowInDB(current_workflow); 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/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 800ad29db..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(actions_panel_tm->ActionsBook); + 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); @@ -310,15 +314,22 @@ 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); - 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); + 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);