/*
   Copyright (C) 2013-2020 Nicola L.C. Talbot
   www.dickimaw-books.com

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
package com.dickimawbooks.makeglossariesgui;

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FileField extends JPanel
 implements ActionListener
{
  public FileField(MakeGlossariesGUI application,
    Container parent, JFileChooser fileChooser)
  {
     this(application, parent, null, fileChooser, JFileChooser.FILES_ONLY);
  }

  public FileField(MakeGlossariesGUI application,
    Container parent, JFileChooser fileChooser, int mode)
  {
     this(application, parent, null, fileChooser, mode);
  }

  public FileField(MakeGlossariesGUI application,
    Container parent, String fileName, JFileChooser fileChooser)
  {
     this(application, parent, fileName, fileChooser, JFileChooser.FILES_ONLY);
  }

  public FileField(MakeGlossariesGUI application,
    Container parent, String fileName, JFileChooser fileChooser, int mode)
  {
     super();

     this.application = application;
     this.fileChooser = fileChooser;
     this.parent = parent;
     this.mode = mode;

     textField = new JTextField(fileName == null ? "" : fileName, 20);

     add(textField);

     button = new JButton("...");

     button.setActionCommand("choose");
     button.addActionListener(this);

     add(button);
  }

  public void actionPerformed(ActionEvent evt)
  {
     String action = evt.getActionCommand();

     if (action == null) return;

     if (action.equals("choose"))
     {
        File file = getFile();

        if (file != null)
        {
           fileChooser.setCurrentDirectory(file.getParentFile());
        }

        fileChooser.setSelectedFile(file);

        fileChooser.setFileSelectionMode(mode);

        fileChooser.setApproveButtonMnemonic(
          application.getMnemonic("button.select"));

        if (fileChooser.showDialog(parent,
             application.getLabel("button.select"))
           == JFileChooser.APPROVE_OPTION)
        {
           textField.setText(fileChooser.getSelectedFile().getAbsolutePath());
        }
     }
  }

  public boolean requestFocusInWindow()
  {
     return textField.requestFocusInWindow();
  }

  public JTextField getTextField()
  {
     return textField;
  }

  public File getFile()
  {
     String fileName = getFileName();

     if (fileName == null || fileName.equals("")) return null;

     return new File(fileName);
  }

  public String getFileName()
  {
     return textField.getText();
  }

  public void setFileName(String name)
  {
     textField.setText(name);
  }

  public void setFile(File file)
  {
     setFileName(file.getAbsolutePath());

     File parent = file.getParentFile();

     if (parent != null)
     {
        fileChooser.setCurrentDirectory(parent);
     }
  }

  public void setEnabled(boolean flag)
  {
     super.setEnabled(flag);

     textField.setEnabled(flag);
     button.setEnabled(flag);
  }

  private JTextField textField;

  private JButton button;

  private JFileChooser fileChooser;

  private Container parent;

  private int mode;

  private MakeGlossariesGUI application;
}