/*
 * 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.
 */

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import ilog.views.IlvManager;
import ilog.views.IlvManagerView;
import ilog.views.IlvManagerViewInteractor;
//import ilog.views.util.IlvProductUtil;
import ilog.views.event.InteractorChangedEvent;
import ilog.views.event.InteractorListener;
import ilog.views.interactor.IlvSelectInteractor;
import ilog.views.interactor.IlvUnZoomViewInteractor;
import ilog.views.interactor.IlvZoomViewInteractor;
import ilog.views.swing.IlvJScrollManagerView;

/**
 * A small JViews example.
 */
public class Sample3 extends JFrame
implements InteractorListener
{
  IlvManager manager;
  IlvManagerView mgrview;
  IlvSelectInteractor selectInteractor;
  IlvManagerViewInteractor zoomInteractor, unZoomInteractor;
  JButton selectButton, zoomButton, unZoomButton;

  public Sample3()
  {
    // Creates the manager object and reads an IVL file.
    manager = new IlvManager();
    try {
      manager.read("data/lou.ivl");
    } catch (Exception e) {}

    // Creates a view associated to the manager
    mgrview = new IlvManagerView(manager);
    mgrview.setAntialiasing(true);
    mgrview.setBackground(Color.white);

    // Creates the necessary swing components
    getContentPane().setLayout(new BorderLayout(0,0));
    getContentPane().add(new IlvJScrollManagerView(mgrview),
                         BorderLayout.CENTER);

    // Creates additional buttons
    createButtons();

    // Listens to modification of interactors
    mgrview.addInteractorListener(this);

  }

  /**
   * Creates some swing buttons.
   */
  void createButtons()
  {
    JPanel buttons = new JPanel();

    // A button to install a select interactor
    selectButton = new JButton("Select");
    selectButton.setBackground(Color.gray);
    selectButton.addActionListener(new ActionListener() {
      Override
      public void actionPerformed(ActionEvent evt) {
        if (selectInteractor == null)
          selectInteractor = new IlvSelectInteractor();
        if (mgrview.getInteractor() != selectInteractor)
          mgrview.setInteractor(selectInteractor);
      }
    });
    buttons.add(selectButton);

    // A button to install the unzoom interactor
    unZoomButton = new JButton("-");
    unZoomButton.setBackground(Color.gray);
    unZoomButton.addActionListener(new ActionListener() {
      Override
      public void actionPerformed(ActionEvent evt) {
        if (unZoomInteractor == null)
          unZoomInteractor = new IlvUnZoomViewInteractor();
        if (mgrview.getInteractor() != unZoomInteractor)
          mgrview.setInteractor(unZoomInteractor);
      }
    });

    // a button to install the zoom interactor
    buttons.add(unZoomButton);
    zoomButton = new JButton("+");
    zoomButton.setBackground(Color.gray);
    zoomButton.addActionListener(new ActionListener() {
      Override
      public void actionPerformed(ActionEvent evt) {
        if (zoomInteractor == null)
          zoomInteractor = new IlvZoomViewInteractor();
        if (mgrview.getInteractor() != zoomInteractor)
          mgrview.setInteractor(zoomInteractor);
      }
    });
    buttons.add(zoomButton);

    getContentPane().add(buttons, BorderLayout.SOUTH);
  }

  /**
   * A method that gets called when the interactor of the
   * view (IlvManagerView) changes.
   * The method changes the color of the corresponding
   * interactor to red.
   */
  Override
  public void interactorChanged(InteractorChangedEvent event)
  {
    IlvManagerViewInteractor oldI = event.getOldValue();
    IlvManagerViewInteractor newI = event.getNewValue();

    if (oldI == selectInteractor)
      selectButton.setBackground(Color.gray);
    else if (oldI == zoomInteractor)
      zoomButton.setBackground(Color.gray);
    else if (oldI == unZoomInteractor)
      unZoomButton.setBackground(Color.gray);

    // there is no new interactor
    if (newI == null)
      return;
    if (newI == selectInteractor)
      selectButton.setBackground(Color.red);
    else if (newI == zoomInteractor)
      zoomButton.setBackground(Color.red);
    else if (newI == unZoomInteractor)
      unZoomButton.setBackground(Color.red);
  }

  public static void main(String[] args)
  {
    // This sample uses JViews Diagrammer features. When deploying an
    // application that includes this code, you need to be in possession
    // of a Perforce JViews Diagrammer Deployment license.
//    IlvProductUtil.DeploymentLicenseRequired(
//        IlvProductUtil.JViews_Diagrammer_Deployment);

    // Sun recommends that to put the entire GUI initialization into the
    // AWT thread
    SwingUtilities.invokeLater(
      new Runnable() {
        Override
        public void run() {
          JFrame frame = new Sample3();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.setSize(450,350);
          frame.setVisible(true);
        }
      });
  }
}