/*
 * Licensed Materials - Property of Perforce Software, Inc. 
 * © Copyright Perforce Software, Inc. 2014, 2021 
 * © Copyright IBM Corp. 2009, 2014
 * © Copyright ILOG 1996, 2009
 * All Rights Reserved.
 *
 * Note to U.S. Government Users Restricted Rights:
 * The Software and Documentation were developed at private expense and
 * are "Commercial Items" as that term is defined at 48 CFR 2.101,
 * consisting of "Commercial Computer Software" and
 * "Commercial Computer Software Documentation", as such terms are
 * used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
 * as applicable.
 */
package print;

import ilog.views.schedule.IlvResourceDataChart;
import resourceDataChart.ResourceDataChartExample;
import shared.swing.ExampleFrame;

import java.awt.ComponentOrientation;
import java.awt.Window;

import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JToolBar;
import javax.swing.UIManager;


/**
 * This example illustrates the printing capabilities of the Resource Data chart.
 */
public class ResourceDataPrintExample extends ResourceDataChartExample {

  /**
   * The various menu and toolbar actions.
   */
  protected ResourceDataPrintActions.PrintAction printAction;
  protected ResourceDataPrintActions.PrintSetupAction printSetupAction;
  protected ResourceDataPrintActions.PrintPreviewAction printPreviewAction;
  protected ResourceDataPrintActions.SavePDFAction savePDFAction;

  /**
   * Creates the "File" menu.
   */
  Override
  public JMenu createFileMenu() {
    JMenu menu = super.createFileMenu();

    // Temporarily remove the "Exit" item.
    int last = menu.getItemCount() - 1;
    JMenuItem exitItem = menu.getItem(last);
    if (isExitAllowed()) {
      menu.remove(exitItem);
    }

    if (isPrintingConfigured()) {
      IlvResourceDataChart chart = getChart();
      // Menu item for "Print".
      printAction = new ResourceDataPrintActions.PrintAction(chart);
      addAction(menu, printAction);

      // Menu item for "Print Setup...".
      printSetupAction = new ResourceDataPrintActions.PrintSetupAction(chart);
      addAction(menu, printSetupAction);

      // Menu item for "Preview...".
      printPreviewAction = new ResourceDataPrintActions.PrintPreviewAction(chart);
      addAction(menu, printPreviewAction);

      if (isLocalFileAccessAllowed()) {
        // Menu item for "Save As PDF...".
        savePDFAction =
          new ResourceDataPrintActions.SavePDFAction(chart,
                                                     (Window)getTopLevelAncestor());
        addAction(menu, savePDFAction);
      }

      menu.addSeparator();
    }

    // Append the "Exit" item, if allowed.
    if (isExitAllowed()) {
      menu.add(exitItem);
    }

    return menu;
  }

  /**
   * Sets the look-and-feel of the example.
   */
  Override
  protected void setLookAndFeel(UIManager.LookAndFeelInfo laf) {
    super.setLookAndFeel(laf);
    // Sets the look & feel on the printing controller too.
    if (ResourceDataPrintActions.printController != null) {
      ResourceDataPrintActions.printController.setLookAndFeel(laf);
    }
  }

  /**
   * Sets the language-sensitive orientation of the example.
   * @param o The orientation.
   */
  Override
  public void setComponentOrientation(ComponentOrientation o) {
    super.setComponentOrientation(o);
    // Sets the orientation on the printing controller too.
    if (ResourceDataPrintActions.printController != null) {
      ResourceDataPrintActions.printController.setComponentOrientation(o);
    }
  }


  // =========================================
  // Toolbar
  // =========================================

  /**
   * Populates the toolbar file actions.
   */
  Override
  protected void populateToolBarFileActions(JToolBar toolbar) {
    int initialActionCount = toolbar.getComponentCount();
    super.populateToolBarFileActions(toolbar);
    int fileActions = toolbar.getComponentCount() - initialActionCount;

    if (isPrintingConfigured()) {
      if (fileActions > 0) {
        toolbar.addSeparator();
      }
      addAction(toolbar, printAction);
      addAction(toolbar, printSetupAction);
      addAction(toolbar, printPreviewAction);
      if (isLocalFileAccessAllowed()) {
        addAction(toolbar, savePDFAction);
      }
    }
  }


  // =========================================
  // Example Application
  // =========================================

  /**
   * Returns the title of the example.
   *
   * @return The title of the example.
   */
  Override
  public String getTitle() {
    return "Resource Data Chart Print Sample";
  }

  /**
   * Application mainline.
   *
   * @param args The command line arguments.
   */
  public static void main (String[] args) {
    ExampleFrame.createAndShowGUI(ResourceDataPrintExample.class);
  }

}