Source code for iMaT.src.visualizations.main

"""
Module: visualizations.main.py
==============================

This module, part of the `visualizations` package, provides workflow management for the display and playback of musical
scores. It includes functions that manage score selection and handle user interaction post-analysis.

Functions
---------
- `generic_display_workflow(display_func)`: Manages the workflow for displaying or playing back a musical score.
- `get_user_option_post_display()`: Presents post-analysis options to the user and retrieves their selection.

This module interacts with several other packages including `src.cli.menu_constructors`, `src.score_selection.main`,
`src.score_selection.name_parts`, and `src.score_selection.select_parts_and_measures`.

Examples
--------
Please see the docstrings of individual functions for specific examples of their use.
"""
from iMaT.src.cli.menu_constructors import display_menu_request_selection
from iMaT.src.score_selection.main import score_selection
from iMaT.src.score_selection.name_parts import selected_score_part_names
from iMaT.src.score_selection.select_parts_and_measures import select_parts_and_measures


[docs]def generic_display_workflow(display_func: callable): """ Handles the display/playback function workflow for a musical score. The workflow includes score selection, application of the display function, and the post-display options. Parameters ---------- display_func : callable Function to display or playback the musical score. """ # a. Call the select_parts_and_measures() function, if no score has yet been selected, start the score selection # workflow by calling the score_selection() function. if selected_score_part_names == {}: score_selection() selected_score, given_name_selected_score, measures_chosen = select_parts_and_measures() # b. Perform the display/playback function display_func(selected_score) # c. Present the user with post-display options while True: option = get_user_option_post_display() # d. Depending on the user's choice ("repeat" or "back") if option == "repeat": generic_display_workflow(display_func) break else: break
[docs]def get_user_option_post_display(): """ Presents the user with post-analysis options and retrieves their selection. The post-analysis options include "repeat", "export", "display_results", or "back". Returns ------- str User's selected option as a string. """ imat_data_container = { "menu_displayed_text": [ "Post-Analysis Menu", "Please select one of the following options by entering the corresponding index number:", "Which option do you want to select? (<No. of option>): ", ["Option", "<Explanation>"], ], "menu_entries": [ ["REPT: Repeat function", 'repeat', "<Repeat the chosen function with a different score selection>"], ["BACK: Return to the Last Menu", 'back', "<Returns to the main menu>"], ], } return display_menu_request_selection(imat_data_container)