Package ij.io

Source Code of ij.io.OpenDialog

package ij.io;
import ij.*;
import ij.gui.*;
import ij.plugin.frame.Recorder;
import ij.util.Java2;
import ij.macro.Interpreter;
import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.*;

/** This class displays a dialog window from
  which the user can select an input file. */
public class OpenDialog {

  private String dir;
  private String name;
  private boolean recordPath;
  private static String defaultDirectory;
  private static Frame sharedFrame;
  private String title;
  private static String lastDir, lastName;

 
  /** Displays a file open dialog with 'title' as
    the title. If 'path' is non-blank, it is
    used and the dialog is not displayed. Uses
    and updates the ImageJ default directory. */
  public OpenDialog(String title, String path) {
    String macroOptions = Macro.getOptions();
    if (macroOptions!=null && (path==null||path.equals(""))) {
      path = Macro.getValue(macroOptions, title, path);
      if (path==null || path.equals(""))
        path = Macro.getValue(macroOptions, "path", path);
      if ((path==null || path.equals("")) && title!=null && title.equals("Open As String"))
        path = Macro.getValue(macroOptions, "OpenAsString", path);
      path = lookupPathVariable(path);
    }
    if (path==null || path.equals("")) {
      if (Prefs.useJFileChooser)
        jOpen(title, getDefaultDirectory(), null);
      else
        open(title, getDefaultDirectory(), null);
      if (name!=null) defaultDirectory = dir;
      this.title = title;
      recordPath = true;
    } else {
      decodePath(path);
      recordPath = IJ.macroRunning();
    }
    IJ.register(OpenDialog.class);
  }
 
  /** Displays a file open dialog, using the specified
    default directory and file name. */
  public OpenDialog(String title, String defaultDir, String defaultName) {
    String path = null;
    String macroOptions = Macro.getOptions();
    if (macroOptions!=null)
      path = Macro.getValue(macroOptions, title, path);
    if (path!=null)
      decodePath(path);
    else {
      if (Prefs.useJFileChooser)
        jOpen(title, defaultDir, defaultName);
      else
        open(title, defaultDir, defaultName);
      this.title = title;
      recordPath = true;
    }
  }
 
  public static String lookupPathVariable(String path) {
    if (path!=null && path.indexOf(".")==-1 && !((new File(path)).exists())) {
      if (path.startsWith("&")) path=path.substring(1);
      Interpreter interp = Interpreter.getInstance();
      String path2 = interp!=null?interp.getStringVariable(path):null;
      if (path2!=null) path = path2;
    }
    return path;
  }

  // Uses JFileChooser to display file open dialog box.
  void jOpen(String title, String path, String fileName) {
    Java2.setSystemLookAndFeel();
    if (EventQueue.isDispatchThread())
      jOpenDispatchThread(title, path, fileName);
    else
      jOpenInvokeAndWait(title, path, fileName);
  }
   
  // Uses the JFileChooser class to display the dialog box.
  // Assumes we are running on the event dispatch thread
  void jOpenDispatchThread(String title, String path, final String fileName) {
    JFileChooser fc = new JFileChooser();
    fc.setDialogTitle(title);
    File fdir = null;
    if (path!=null)
      fdir = new File(path);
    if (fdir!=null)
      fc.setCurrentDirectory(fdir);
    if (fileName!=null)
      fc.setSelectedFile(new File(fileName));
    int returnVal = fc.showOpenDialog(IJ.getInstance());
    if (returnVal!=JFileChooser.APPROVE_OPTION)
      {Macro.abort(); return;}
    File file = fc.getSelectedFile();
    if (file==null)
      {Macro.abort(); return;}
    name = file.getName();
    dir = fc.getCurrentDirectory().getPath()+File.separator;
  }

  // Run JFileChooser on event dispatch thread to avoid deadlocks
  void jOpenInvokeAndWait(final String title, final String path, final String fileName) {
    try {
      EventQueue.invokeAndWait(new Runnable() {
        public void run() {
        JFileChooser fc = new JFileChooser();
        fc.setDialogTitle(title);
        File fdir = null;
        if (path!=null)
          fdir = new File(path);
        if (fdir!=null)
          fc.setCurrentDirectory(fdir);
        if (fileName!=null)
          fc.setSelectedFile(new File(fileName));
        int returnVal = fc.showOpenDialog(IJ.getInstance());
        if (returnVal!=JFileChooser.APPROVE_OPTION)
          {Macro.abort(); return;}
        File file = fc.getSelectedFile();
        if (file==null)
          {Macro.abort(); return;}
        name = file.getName();
        dir = fc.getCurrentDirectory().getPath()+File.separator;
        }
      });
    } catch (Exception e) {}
  }
 
  // Uses the AWT FileDialog class to display the dialog box
  void open(String title, String path, String fileName) {
    Frame parent = IJ.getInstance();
    if (parent==null) {
      if (sharedFrame==null) sharedFrame = new Frame();
      parent = sharedFrame;
    }
    FileDialog fd = new FileDialog(parent, title);
    if (path!=null)
      fd.setDirectory(path);
    if (fileName!=null)
      fd.setFile(fileName);
    //GUI.center(fd);
    fd.show();
    name = fd.getFile();
    if (name==null) {
      if (IJ.isMacOSX())
        System.setProperty("apple.awt.fileDialogForDirectories", "false");
      Macro.abort();
    } else
      dir = fd.getDirectory();
  }

  void decodePath(String path) {
    int i = path.lastIndexOf('/');
    if (i==-1)
      i = path.lastIndexOf('\\');
    if (i>0) {
      dir = path.substring(0, i+1);
      name = path.substring(i+1);
    } else {
      dir = "";
      name = path;
    }
  }

  /** Returns the selected directory. */
  public String getDirectory() {
    lastDir = dir;
    return dir;
  }
 
  /** Returns the selected file name. */
  public String getFileName() {
    if (Recorder.record && recordPath)
      Recorder.recordPath(title, dir+name);
    lastName = name;
    return name;
  }
   
  /** Returns the current working directory, which may be null. The
    returned string always ends with the separator character ("/" or "\").*/
  public static String getDefaultDirectory() {
    if (defaultDirectory==null)
      defaultDirectory = Prefs.getDefaultDirectory();
    return defaultDirectory;
  }

  /** Sets the current working directory. */
  public static void setDefaultDirectory(String defaultDir) {
    defaultDirectory = defaultDir;
    if (!defaultDirectory.endsWith(File.separator))
      defaultDirectory = defaultDirectory + File.separator;
  }
 
  /** Returns the path to the last directory opened by the user
    using a file open or file save dialog, or using drag and drop.
    Returns null if the users has not opened a file. */
  public static String getLastDirectory() {
    return lastDir;
  }
   
  /** Sets the path to the directory containing the last file opened by the user. */
  public static void setLastDirectory(String dir) {
    lastDir = dir;
  }

  /** Returns the name of the last file opened by the user
    using a file open or file save dialog, or using drag and drop.
    Returns null if the users has not opened a file. */
  public static String getLastName() {
    return lastName;
  }

  /** Sets the name of the last file opened by the user. */
  public static void setLastName(String name) {
    lastName = name;
  }

}
TOP

Related Classes of ij.io.OpenDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.