/*
 * @(#)InitialLayoutDockDemo.java 6/5/2005
 *
 * Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
 */

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.RootPaneContainer;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import com.jidesoft.docking.DefaultDockingManager;
import com.jidesoft.docking.DockableFrame;
import com.jidesoft.docking.DockableHolderPanel;
import com.jidesoft.docking.DockingManager;
import com.jidesoft.docking.FrameContainer;
import com.jidesoft.swing.JideSwingUtilities;
import com.jidesoft.swing.JideTabbedPane;

/**
 * <br> Required jar files: jide-common.jar, jide-dock.jar <br> Required L&F: any L&F
 */
public class InitialLayoutDockDemo extends JFrame {
    private static final long serialVersionUID = -8591461681019408554L;
//    private DockableHolderPanel _panel;
    private DockableHolderPanel _panel;
    
    private JideTabbedPane jideTabbedPane;

    public InitialLayoutDockDemo() {

    	setTitle("Tab button Test");
    	setLayout(new BorderLayout());
    	getContentPane().add(getDemoPanel(), BorderLayout.CENTER);
    	getContentPane().add(getOptionsPanel(), BorderLayout.WEST);
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	setVisible(true);
    	pack();

    }

    public Component getOptionsPanel() {
        JPanel panel = new JPanel(new GridLayout(3, 1, 3, 3));
        panel.add(new JButton(new AbstractAction("Load Edit Layout") {
            public void actionPerformed(ActionEvent e) {
            	SwingUtilities.invokeLater(new Runnable() {

					public void run() {
						loadInitialLayout("edit.ilayout");
					}

				});

            }
        }));
        
        panel.add(new JButton(new AbstractAction("Change Skin") {
			
			public void actionPerformed(ActionEvent e) {
				changeSkin();
				
			}
		}));

        return panel;
    }
    
    protected void changeSkin() {
    	resetSkin();
    	jideTabbedPane.revalidate();
    	jideTabbedPane.repaint();
    	validate();
    	repaint();
	}

	private void resetSkin() {
    	int index = jideTabbedPane.getSelectedIndex();
		int tabCount = jideTabbedPane.getTabCount();
		try {
			for (int i = 0; i < tabCount; i++) {
				if (i == index) {
					jideTabbedPane.setForegroundAt(i,Color.ORANGE);
					jideTabbedPane.setBackgroundAt(i,Color.GREEN);
				} else {
					jideTabbedPane.setForegroundAt(i,Color.ORANGE);
					jideTabbedPane.setBackgroundAt(i,Color.RED);
				}
				jideTabbedPane.revalidate();
		    	jideTabbedPane.repaint();
			}
		} catch (Exception e2) {
		}
    	
    }

    public Component getDemoPanel() {
    	
//    	 _panel = new DockableHolderPanel();
        _panel = new DockableHolderPanel() {
            @Override
            protected DockingManager createDockingManager(RootPaneContainer container) {
                return new DefaultDockingManager(container, this) {
                    @Override
                    public FrameContainer createFrameContainer() {
                        FrameContainer_test frameContainer = new FrameContainer_test(this);
                        
                        customizeFrameContainer(frameContainer);
                        return frameContainer;
                    }
                };
            }
        };

        setHolderPanelSettings();
        _panel.getDockingManager().setDockableFrameFactory(new com.jidesoft.docking.DockableFrameFactory() {
            public DockableFrame create(String key) {
                DockableFrame frame = new DockableFrame(key);
                frame.getContentPane().add(new JScrollPane(new JTextArea()));
                frame.setPreferredSize(new Dimension(250, 250));
                frame.setSize(new Dimension(250, 250));
                frame.setMinimumSize(new Dimension(250, 250));
                frame.setMaximumSize(new Dimension(250, 250));
            	frame.setDefaultCloseAction(DockableFrame.CLOSE_ACTION_TO_REMOVE);
                frame.setVisible(true);
                
                return frame;
            }
        });

        setTabCustomizer();
        
        _panel.setPreferredSize(new Dimension(800, 500));
        return _panel;
    }

    
	private void setTabCustomizer() { 
        _panel.getDockingManager().setTabbedPaneCustomizer(new DockingManager.TabbedPaneCustomizer() {

			public void customize( final JideTabbedPane arg0) {
            	jideTabbedPane = arg0;
            	arg0.setTabPlacement(SwingConstants.TOP);
        		arg0.setBoldActiveTab(true);
        		arg0.setTabShape(JideTabbedPane.SHAPE_OFFICE2003);
        		arg0.setUseDefaultShowCloseButtonOnTab(true);
        		arg0.setTabClosableAt(0, true);
        		arg0.setAutoFocusOnTabHideClose(true);
        		arg0.setTabEditingAllowed(true);
        		arg0.setShowCloseButtonOnTab(true);
        		arg0.setTabResizeMode(JideTabbedPane.RESIZE_MODE_NONE);
        		arg0.setHideOneTab(false);
        		arg0.setBorder(BorderFactory.createEmptyBorder (0, 0, 0, 0));
        		arg0.addChangeListener(new ChangeListener() {
        			public void stateChanged(ChangeEvent changeEvent) {
        				int index = arg0.getSelectedIndex();
        				int tabCount = arg0.getTabCount();
        				try {
        					for (int i = 0; i < tabCount; i++) {
        						if (i == index) {
        							arg0.setForegroundAt(i,Color.BLUE);
        							arg0.setBackgroundAt(i,Color.GREEN);
        						} else {
        							arg0.setForegroundAt(i,Color.BLUE);
        							arg0.setBackgroundAt(i,Color.RED);
        						}
        					}
        				} catch (Exception e2) {
        				}
        			}
        		});
            }
        });
    }

 	private void setHolderPanelSettings() {
		System.out.println(_panel.getClass());
		System.out.println(_panel.getDockingManager().getClass());
		System.out.println(_panel.getDockingManager().getAllFrameNames());

//		_panel.setOpaque(false);
		_panel.setBorder(BorderFactory.createTitledBorder("Test"));
		_panel.getDockingManager().getContentContainer().setBackground(Color.GRAY);
		_panel.setBackground(Color.BLACK);
		_panel.getDockingManager().setShowContextMenu(true);
		_panel.getDockingManager().setShowTitleOnOutline(true);
		_panel.getDockingManager().setEasyTabDock(true);
		_panel.getDockingManager().setShowTitleBar(false);
		_panel.getDockingManager().setNestedFloatingAllowed(true);
		_panel.getDockingManager().setShowWorkspace(true);
	}


	private void loadInitialLayout(String resourceName) {
        _panel.getDockingManager().switchRootPaneContainer((RootPaneContainer) _panel.getTopLevelAncestor());
        try {
            _panel.getDockingManager().loadInitialLayout(getClass().getClassLoader().getResourceAsStream(resourceName));
        }
        catch (ParserConfigurationException e) {
            JideSwingUtilities.printException(e);
        }
        catch (SAXException e) {
            JideSwingUtilities.printException(e);
        }
        catch (IOException e) {
            JideSwingUtilities.printException(e);
        }

        _panel.getDockingManager().resetToDefault();
    }

    static public void main(String[] s) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            	new InitialLayoutDockDemo();

            }
        });

    }
}