/*
 * Copyright (c) 2002-2007 TeamDev Ltd. All rights reserved.
 *
 * Use is subject to license terms.
 *
 * The complete licence text can be found at
 * http://www.jniwrapper.com/pages/macpack/license
 */
package com.jniwrapper.macosx.samples.demo;

import com.jniwrapper.samples.shell.components.LazyPanel;
import com.jniwrapper.samples.shell.components.HTMLText;
import com.jniwrapper.macosx.ui.controls.SelectFileField;

import javax.swing.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeEvent;
import java.util.Vector;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

/**
 * @author Vadim Steshenko
 */
public class OpenSaveFileSample extends LazyPanel implements PropertyChangeListener
{
    private Vector _files;
    private JLabel lblAdvisoryText;
    private JLabel lblOpenFileNameCaption;
    private JLabel lblSaveFileNameCaption;
    private SelectFileField _selectFileFieldForOpen;
    private SelectFileField _selectFileFieldForSave;
    private JLabel lblSelectedFiles;
    private JLabel lblNote;
    private JList lstSelectedFiles;
    private JCheckBox cbAllowMultipleSelection;
    private JCheckBox cbAllowInvisibleFiles;
    private JCheckBox cbTreatsFilePackagesAsDirectories;
    private JCheckBox cbAllowCreateDiretories;
    JPanel _optionsPanel;

    public OpenSaveFileSample(Window parent)
    {
        super(parent);
    }

    public void initialize() throws Exception
    {
        _files = new Vector();
        lblAdvisoryText = new HTMLText("The page demonstrates Standard Open/Save file dialogs invoked using a special 'SelectFile' control.");
        lblOpenFileNameCaption = new JLabel("Select File For Open:");
        lblSaveFileNameCaption = new JLabel("Select File For Save:");
        _selectFileFieldForOpen = new SelectFileField();
        _selectFileFieldForSave = new SelectFileField(SelectFileField.MODE_SAVE_FILE);
        lblSelectedFiles = new JLabel("Selected Files:");
        lblNote = new HTMLText("<b>NOTE:</b> Multiple files selected in dialog are shown in the list above.");
        lstSelectedFiles = new JList(_files);

        _selectFileFieldForOpen.addPropertyChangeListener(SelectFileField.PROPERTY_FILE, this);
        _selectFileFieldForOpen.setAllowMultipleSelection(true);
        _selectFileFieldForSave.setAllowCreateDirectories(false);

        cbAllowMultipleSelection = new JCheckBox("Allow Multiple Selection", _selectFileFieldForOpen.isAllowMultipleSelection());
        cbAllowMultipleSelection.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                JCheckBox checkBox = (JCheckBox)event.getSource();
                _selectFileFieldForOpen.setAllowMultipleSelection(checkBox.isSelected());
            }
        });
        cbAllowInvisibleFiles = new JCheckBox("Show All Files", _selectFileFieldForOpen.isAllowInvisibleFiles());
        cbAllowInvisibleFiles.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                JCheckBox checkBox = (JCheckBox)event.getSource();
                _selectFileFieldForOpen.setAllowInvisibleFiles(checkBox.isSelected());
                _selectFileFieldForSave.setAllowInvisibleFiles(checkBox.isSelected());
            }
        });
        cbTreatsFilePackagesAsDirectories = new JCheckBox("Treats file packages as directories",
                                                          _selectFileFieldForOpen.isTreatsFilePackagesAsDirectories());
        cbTreatsFilePackagesAsDirectories.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                JCheckBox checkBox = (JCheckBox)event.getSource();
                _selectFileFieldForOpen.setTreatsFilePackagesAsDirectories(checkBox.isSelected());
                _selectFileFieldForSave.setTreatsFilePackagesAsDirectories(checkBox.isSelected());
            }
        });
        cbAllowCreateDiretories = new JCheckBox("Allow create directories", _selectFileFieldForOpen.isAllowCreateDirectories());
        cbAllowCreateDiretories.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent event)
            {
                JCheckBox checkBox = (JCheckBox)event.getSource();
                _selectFileFieldForOpen.setAllowCreateDirectories(checkBox.isSelected());
                _selectFileFieldForSave.setAllowCreateDirectories(checkBox.isSelected());
            }
        });

        _optionsPanel = new JPanel(new GridLayout(2, 2));

        _optionsPanel.add(cbAllowMultipleSelection);
        _optionsPanel.add(cbAllowInvisibleFiles);
        _optionsPanel.add(cbTreatsFilePackagesAsDirectories);
        _optionsPanel.add(cbAllowCreateDiretories);

        JScrollPane files = new JScrollPane(lstSelectedFiles);
        files.setPreferredSize(new Dimension(10, 100));

        setLayout(new GridBagLayout());

        add(lblAdvisoryText, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 10, 10, 10), 0, 0));
        add(_optionsPanel, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 10, 10, 10), 0, 0));
        add(lblOpenFileNameCaption, new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 0, 0), 0, 0));
        add(_selectFileFieldForOpen, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 0, 0), 0, 0));
        add(lblSaveFileNameCaption, new GridBagConstraints(0, 3, 1, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 0, 0), 0, 0));
        add(_selectFileFieldForSave, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 0, 0), 0, 0));
        add(lblSelectedFiles, new GridBagConstraints(0, 4, 1, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 0, 0), 0, 0));
        add(files, new GridBagConstraints(0, 5, 2, 1, 0.0, 0.5,
                GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0, 10, 0, 10), 0, 0));
        add(lblNote, new GridBagConstraints(0, 6, 2, 1, 0.0, 0.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10, 10, 0, 0), 0, 0));
        add(new JPanel(), new GridBagConstraints(0, 7, 2, 1, 1.0, 1.0,
                GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));

        super.initialize();
    }

    public void propertyChange(PropertyChangeEvent event)
    {
        _files.clear();
        _files.addAll(_selectFileFieldForOpen.getFiles());
        lstSelectedFiles.updateUI();
    }
}