package de.javasoft.synthetica.democenter.examples.taskpane;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Box;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import org.jdesktop.swingx.JXTaskPane;
import org.jdesktop.swingx.JXTaskPaneContainer;
import org.jdesktop.swingx.VerticalLayout;

/**
 * A simple TaskPane application used to demonstrate and explain  
 * basic functionality.
 */
@SuppressWarnings("serial")
public class SimpleTaskPane extends JFrame
{
  public SimpleTaskPane()
  {
    super("Simple TaskPane");
//@highlight
    //add taskPane at the left side of the frame (contentpane has BorderLayout)
    add(createTaskPaneContainer(), BorderLayout.WEST);
//@/highlight
    getContentPane().setBackground(Color.WHITE);
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setSize(640, 480);
    setLocationRelativeTo(null);        //center
    setVisible(true);
  }

//@highlight
  /**
   * Create a simple taskPaneContainer including all taskPanes. The taskPaneContainer
   * is placed in a scrollpane.
   */
  private Component createTaskPaneContainer()
  {
    Icon iconNew = new ImageIcon(this.getClass().getResource("/resources/icons/filenew.png"));
    Icon iconOpen = new ImageIcon(this.getClass().getResource("/resources/icons/fileopen.png"));
    Icon iconSave = new ImageIcon(this.getClass().getResource("/resources/icons/filesave.png"));
    Icon iconDisplay = new ImageIcon(this.getClass().getResource("/resources/icons/display.png"));
    
    JXTaskPane fileTaskPane = new JXTaskPane();
    fileTaskPane.setTitle("Special TaskPane");
    fileTaskPane.setIcon(iconOpen);
    //Enable special to highlight the panel
    fileTaskPane.setSpecial(true);

    //by adding an action a JXHyperlink component will be created
    fileTaskPane.add(createTaskPaneAction("Hyperlink Button 1", iconNew));
    fileTaskPane.add(createTaskPaneAction("Hyperlink Button 2", iconOpen));
    fileTaskPane.add(createTaskPaneAction("Hyperlink Button 3", iconSave));
    fileTaskPane.add(Box.createVerticalStrut(10));
    fileTaskPane.add(new JLabel("Search"));
    fileTaskPane.add(new JTextField());
    
    JXTaskPane displayTaskPane = new JXTaskPane();
    displayTaskPane.setTitle("Another TaskPane");
    displayTaskPane.setIcon(iconDisplay);
    displayTaskPane.add(createTaskPaneAction("Hyperlink Button 1", iconDisplay));
    displayTaskPane.add(createTaskPaneAction("Hyperlink Button 2", iconDisplay));
    displayTaskPane.add(Box.createVerticalStrut(20));
    displayTaskPane.add(new JButton("Reset Display Settings"));

    JXTaskPaneContainer taskPaneContainer = new JXTaskPaneContainer();
    //reduce space between taskpanes
    taskPaneContainer.setLayout(new VerticalLayout(8));
    //reduce container padding
    taskPaneContainer.setBorder(new EmptyBorder(8,8,8,8));
    taskPaneContainer.add(fileTaskPane);
    taskPaneContainer.add(displayTaskPane);

    JScrollPane scrollPane = new JScrollPane(taskPaneContainer);
    scrollPane.setBorder(new EmptyBorder(0,0,0,0));
    
    return scrollPane; 
  }
//@/highlight

  /**
   * Method for creating a dummy action. 
   */
  private Action createTaskPaneAction(String name, Icon icon)
  {
    return new AbstractAction(name, icon)
    {
      public void actionPerformed(ActionEvent e)
      {        
      }
    };
  }
  
  /**
   * Static main method for application startup. 
   */
  public static void main(String[] args)
  {
    EventQueue.invokeLater(new Runnable()
    {
      public void run()
      {
        try
        {
          UIManager.setLookAndFeel("de.javasoft.plaf.synthetica.SyntheticaStandardLookAndFeel");
          new SimpleTaskPane();
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
    });
  }
}
