| Colors |

    package ij.plugin;
    import ij.*;
    import ij.gui.*;
    import ij.process.*;
    import ij.io.*;
    import ij.plugin.filter.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.Vector;

    /** This plugin implements most of the Edit/Options/Colors command. */
    public class Colors implements PlugIn, ItemListener {
        private String[] colors = {"red","green","blue","magenta","cyan","yellow","orange","black","white"};
        private Choice fchoice, bchoice, schoice;
        private Color fc2, bc2, sc2;

        public void run(String arg) {
            if (arg.equals("point"))
                pointToolOptions();
            else
                showDialog();
        }

        void showDialog() {
            Color fc =Toolbar.getForegroundColor();
            String fname = getColorName(fc, "black");
            Color bc =Toolbar.getBackgroundColor();
            String bname = getColorName(bc, "white");
            Color sc =Roi.getColor();
            String sname = getColorName(sc, "yellow");
            GenericDialog gd = new GenericDialog("Colors");
            gd.addChoice("Foreground:", colors, fname);
            gd.addChoice("Background:", colors, bname);
            gd.addChoice("Selection:", colors, sname);
            Vector choices = gd.getChoices();
            fchoice = (Choice)choices.elementAt(0);
            bchoice = (Choice)choices.elementAt(1);
            schoice = (Choice)choices.elementAt(2);
            fchoice.addItemListener(this);
            bchoice.addItemListener(this);
            schoice.addItemListener(this);

            gd.showDialog();
            if (gd.wasCanceled()) {
                if (fc2!=fc) Toolbar.setForegroundColor(fc);
                if (bc2!=bc) Toolbar.setBackgroundColor(bc);
                if (sc2!=sc) {
                    Roi.setColor(sc);
                    ImagePlus imp = WindowManager.getCurrentImage();
                    if (imp!=null && imp.getRoi()!=null) imp.draw();
                }
                return;
            }
            fname = gd.getNextChoice();
            bname = gd.getNextChoice();
            sname = gd.getNextChoice();
            fc2 = getColor(fname, Color.black);
            bc2 = getColor(bname, Color.white);
            sc2 = getColor(sname, Color.yellow);
            if (fc2!=fc) Toolbar.setForegroundColor(fc2);
            if (bc2!=bc) Toolbar.setBackgroundColor(bc2);
            if (sc2!=sc) {
                Roi.setColor(sc2);
                ImagePlus imp = WindowManager.getCurrentImage();
                if (imp!=null) imp.draw();
                Toolbar.getInstance().repaint();
            }
        }

        String getColorName(Color c, String defaultName) {
            String name = defaultName;
            if (c.equals(Color.red)) name = colors[0];
            else if (c.equals(Color.green)) name = colors[1];
            else if (c.equals(Color.blue)) name = colors[2];
            else if (c.equals(Color.magenta)) name = colors[3];
            else if (c.equals(Color.cyan)) name = colors[4];
            else if (c.equals(Color.yellow)) name = colors[5];
            else if (c.equals(Color.orange)) name = colors[6];
            else if (c.equals(Color.black)) name = colors[7];
            else if (c.equals(Color.white)) name = colors[8];
            return name;
        }

        Color getColor(String name, Color defaultColor) {
            Color c = defaultColor;
            if (name.equals(colors[0])) c = Color.red;
            else if (name.equals(colors[1])) c = Color.green;
            else if (name.equals(colors[2])) c = Color.blue;
            else if (name.equals(colors[3])) c = Color.magenta;
            else if (name.equals(colors[4])) c = Color.cyan;
            else if (name.equals(colors[5])) c = Color.yellow;
            else if (name.equals(colors[6])) c = Color.orange;
            else if (name.equals(colors[7])) c = Color.black;
            else if (name.equals(colors[8])) c = Color.white;
            return c;
        }

        public void itemStateChanged(ItemEvent e) {
            Choice choice = (Choice)e.getSource();
            String item = choice.getSelectedItem();
            Color color = getColor(item, Color.black);
            if (choice==fchoice)
                Toolbar.setForegroundColor(color);
            else if (choice==bchoice)
                Toolbar.setBackgroundColor(color);
            else if (choice==schoice) {
                Roi.setColor(color);
                ImagePlus imp = WindowManager.getCurrentImage();
                if (imp!=null && imp.getRoi()!=null) imp.draw();
                Toolbar.getInstance().repaint();
            }
        }

        // Point tool options
        void pointToolOptions() {
            boolean saveNoPointLabels = Prefs.noPointLabels;
            Color sc =Roi.getColor();
            String sname = getColorName(sc, "yellow");
            GenericDialog gd = new GenericDialog("Point Tool");
            gd.addNumericField("Mark Width:", Analyzer.markWidth, 0, 2, "pixels");
            gd.addCheckbox("Auto-Measure", Prefs.pointAutoMeasure);
            gd.addCheckbox("Auto-Next Slice", Prefs.pointAutoNextSlice);
            gd.addCheckbox("Label Points", !Prefs.noPointLabels);
            gd.addChoice("Selection Color:", colors, sname);
            Vector choices = gd.getChoices();
            schoice = (Choice)choices.elementAt(0);
            schoice.addItemListener(this);
            gd.showDialog();
            if (gd.wasCanceled()) {
                if (sc2!=sc) {
                    Roi.setColor(sc);
                    ImagePlus imp = WindowManager.getCurrentImage();
                    if (imp!=null && imp.getRoi()!=null) imp.draw();
                    Toolbar.getInstance().repaint();
                }
                return;
            }
            int width = (int)gd.getNextNumber();
            if (width<0) width = 0;
            Analyzer.markWidth = width;
            Prefs.pointAutoMeasure = gd.getNextBoolean();
            Prefs.pointAutoNextSlice = gd.getNextBoolean();
            Prefs.noPointLabels = !gd.getNextBoolean();
            sname = gd.getNextChoice();
            sc2 = getColor(sname, Color.yellow);
            if (Prefs.pointAutoNextSlice) Prefs.pointAutoMeasure = true;
            if (Prefs.noPointLabels!=saveNoPointLabels) {
                ImagePlus imp = WindowManager.getCurrentImage();
                if (imp!=null) imp.draw();
            }
            if (sc2!=sc) {
                Roi.setColor(sc2);
                ImagePlus imp = WindowManager.getCurrentImage();
                if (imp!=null) imp.draw();
                Toolbar.getInstance().repaint();
            }
        }

    }

| Colors |