package ij.plugin;
import ij.*;
import ij.process.*;
import ij.gui.*;
import ij.io.*;
import ij.plugin.frame.*;
import ij.text.TextWindow;
import ij.macro.Interpreter;
import java.awt.Frame;
import java.io.File;
import java.applet.Applet;
    
/** Runs File and Window menu commands. */
public class Commands implements PlugIn {
    
    public void run(String cmd) {
        if (cmd.equals("new"))
            new NewImage();
        else if (cmd.equals("open")) {
            if (Prefs.useJFileChooser && !IJ.macroRunning())
                new Opener().openMultiple();
            else
                new Opener().open();
        } else if (cmd.equals("close"))
            close();
        else if (cmd.equals("save"))
            save();
        else if (cmd.equals("ij")) {
            ImageJ ij = IJ.getInstance();
            if (ij!=null) ij.toFront();
        } else if (cmd.equals("tab"))
            WindowManager.putBehind();
        else if (cmd.equals("quit")) {
            ImageJ ij = IJ.getInstance();
            if (ij!=null) ij.quit();
        } else if (cmd.equals("revert"))
            revert();
        else if (cmd.equals("undo"))
            undo();
        else if (cmd.equals("startup"))
            openStartupMacros();
    }
    
    void revert() {
        ImagePlus imp = WindowManager.getCurrentImage();
        if (imp!=null)
            imp.revert();
        else
            IJ.noImage();
    }

    void save() {
        ImagePlus imp = WindowManager.getCurrentImage();
        if (imp!=null)
            new FileSaver(imp).save();
        else
            IJ.noImage();
    }
    
    void undo() {
        ImagePlus imp = WindowManager.getCurrentImage();
        if (imp!=null)
            Undo.undo();
        else
            IJ.noImage();
    }

    void close() {
        ImagePlus imp = WindowManager.getCurrentImage();
        Frame frame = WindowManager.getFrontWindow();
        if (frame==null || (Interpreter.isBatchMode() && frame instanceof ImageWindow))
            closeImage(imp);
        else if (frame instanceof PlugInFrame)
            ((PlugInFrame)frame).close();
        else if (frame instanceof TextWindow)
            ((TextWindow)frame).close();
        else
            closeImage(imp);
    }

    void closeImage(ImagePlus imp) {
        if (imp==null) {
            IJ.noImage();
            return;
        }
        imp.close();
        if (Recorder.record) {
            Recorder.record("close");
            Recorder.setCommand(null); // don't record run("Close")
        }
    }
    
    // Plugins>Macros>Open Startup Macros command
    void openStartupMacros() {
        Applet applet = IJ.getApplet();
        if (applet!=null) {
            IJ.run("URL...", "url=http://rsb.info.nih.gov/ij/applet/StartupMacros.txt");
        } else {
            String path = IJ.getDirectory("macros")+"/StartupMacros.txt";
            File f = new File(path);
            if (!f.exists())
                IJ.error("\"StartupMacros.txt\" not found in ImageJ/macros/");
            else
                IJ.open(path);
        }
    }
    
}