/**
   * This method starts the process of editing a new slide show. If a pose is already being edited,
   * it will prompt the user to save it first.
   */
  public void handleNewSlideShowRequest() {
    try {
      // WE MAY HAVE TO SAVE CURRENT WORK
      boolean continueToMakeNew = true;
      if (!saved) {
        // THE USER CAN OPT OUT HERE WITH A CANCEL
        continueToMakeNew = promptToSave();
      }

      // IF THE USER REALLY WANTS TO MAKE A NEW COURSE
      if (continueToMakeNew) {
        // RESET THE DATA, WHICH SHOULD TRIGGER A RESET OF THE UI
        SlideShowModel slideShow = ui.getSlideShow();
        slideShow.reset();
        saved = false;

        // REFRESH THE GUI, WHICH WILL ENABLE AND DISABLE
        // THE APPROPRIATE CONTROLS
        ui.updateToolbarControls(saved);

        // MAKE SURE THE TITLE CONTROLS ARE ENABLED
        ui.reloadTitleControls();
      }
    } catch (IOException ioe) {
      ErrorHandler eH = ui.getErrorHandler();
      eH.processError(LanguagePropertyType.ERROR_UNEXPECTED);
    }
  }
  /**
   * This helper method verifies that the user really wants to save their unsaved work, which they
   * might not want to do. Note that it could be used in multiple contexts before doing other
   * actions, like creating a new pose, or opening another pose, or exiting. Note that the user will
   * be presented with 3 options: YES, NO, and CANCEL. YES means the user wants to save their work
   * and continue the other action (we return true to denote this), NO means don't save the work but
   * continue with the other action (true is returned), CANCEL means don't save the work and don't
   * continue with the other action (false is retuned).
   *
   * @return true if the user presses the YES option to save, true if the user presses the NO option
   *     to not save, false if the user presses the CANCEL option to not continue.
   */
  private boolean promptToSave() throws IOException {
    // PROMPT THE USER TO SAVE UNSAVED WORK
    boolean saveWork = true;

    // IF THE USER SAID YES, THEN SAVE BEFORE MOVING ON
    if (saveWork) {
      SlideShowModel slideShow = ui.getSlideShow();
      slideShowIO.saveSlideShow(slideShow);
      saved = true;
    } // IF THE USER SAID CANCEL, THEN WE'LL TELL WHOEVER
    // CALLED THIS THAT THE USER IS NOT INTERESTED ANYMORE
    else if (!true) {
      return false;
    }

    // IF THE USER SAID NO, WE JUST GO ON WITHOUT SAVING
    // BUT FOR BOTH YES AND NO WE DO WHATEVER THE USER
    // HAD IN MIND IN THE FIRST PLACE
    return true;
  }
  /**
   * This helper method asks the user for a file to open. The user-selected file is then loaded and
   * the GUI updated. Note that if the user cancels the open process, nothing is done. If an error
   * occurs loading the file, a message is displayed, but nothing changes.
   */
  private void promptToOpen() {
    // AND NOW ASK THE USER FOR THE COURSE TO OPEN
    FileChooser slideShowFileChooser = new FileChooser();
    slideShowFileChooser.setInitialDirectory(new File(PATH_SLIDE_SHOWS));
    File selectedFile = slideShowFileChooser.showOpenDialog(ui.getWindow());

    // ONLY OPEN A NEW FILE IF THE USER SAYS OK
    if (selectedFile != null) {
      try {
        SlideShowModel slideShowToLoad = ui.getSlideShow();
        slideShowIO.loadSlideShow(slideShowToLoad, selectedFile.getAbsolutePath());
        ui.reloadSlideShowPane();
        saved = true;
        ui.updateToolbarControls(saved);
      } catch (Exception e) {
        ErrorHandler eH = ui.getErrorHandler();
        eH.processError(LanguagePropertyType.ERROR_UNEXPECTED);
      }
    }
  }
  /**
   * This method will save the current slideshow to a file. Note that we already know the name of
   * the file, so we won't need to prompt the user.
   */
  public boolean handleSaveSlideShowRequest() {
    try {
      // GET THE SLIDE SHOW TO SAVE
      SlideShowModel slideShowToSave = ui.getSlideShow();

      // SAVE IT TO A FILE
      slideShowIO.saveSlideShow(slideShowToSave);

      // MARK IT AS SAVED
      saved = true;

      // AND REFRESH THE GUI, WHICH WILL ENABLE AND DISABLE
      // THE APPROPRIATE CONTROLS
      ui.updateToolbarControls(saved);
      return true;
    } catch (IOException ioe) {
      ErrorHandler eH = ui.getErrorHandler();
      eH.processError(LanguagePropertyType.ERROR_UNEXPECTED);
      return false;
    }
  }