/*
 * 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(22));

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

        JScrollPane files = new JScrollPane(lstSelectedFiles);
        files.setPreferredSize(new Dimension(10100));

        setLayout(new GridBagLayout());

        add(lblAdvisoryText, new GridBagConstraints(00210.00.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(10101010)00));
        add(_optionsPanel, new GridBagConstraints(01210.00.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0101010)00));
        add(lblOpenFileNameCaption, new GridBagConstraints(02110.00.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(101000)00));
        add(_selectFileFieldForOpen, new GridBagConstraints(12110.00.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(101000)00));
        add(lblSaveFileNameCaption, new GridBagConstraints(03110.00.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(101000)00));
        add(_selectFileFieldForSave, new GridBagConstraints(13110.00.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(101000)00));
        add(lblSelectedFiles, new GridBagConstraints(04110.00.0,
                GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(101000)00));
        add(files, new GridBagConstraints(05210.00.5,
                GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(010010)00));
        add(lblNote, new GridBagConstraints(06210.00.0,
                GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(101000)00));
        add(new JPanel()new GridBagConstraints(07211.01.0,
                GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(0000)00));

        super.initialize();
    }

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