/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */

/*
  Part of the Processing project - http://processing.org

  Copyright (c) 2006-14 Ben Fry and Casey Reas

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License version 2
  as published by the Free Software Foundation.

  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package processing.app.tools;

import processing.app.*;
import processing.app.ui.ColorChooser;
import processing.app.ui.Toolkit;

import java.awt.Color;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;


/**
 * Color selector tool for the Tools menu.
 * <p/>
 * Using the keyboard shortcuts, you can copy/paste the values for the
 * colors and paste them into your program. We didn't do any sort of
 * auto-insert of colorMode() or fill() or stroke() code cuz we couldn't
 * decide on a good way to do this... your contributions welcome).
 */
@SuppressWarnings("unused")
public class ColorSelector implements Tool {

  /**
   * Only create one instance, otherwise we'll have dozens of animation
   * threads going if you open/close a lot of editor windows.
   */
  private static volatile ColorChooser selector;

  private Base base;


  public String getMenuTitle() {
    return Language.text("menu.tools.color_selector");
  }


  public void init(Base base) {
    this.base = base;
  }


  public void run() {
    if (selector == null) {
      synchronized (ColorSelector.class) {
        if (selector == null) {
          selector = new ColorChooser(base.getActiveEditor(),
                                      false, Color.WHITE,
                                      Language.text("menu.edit.copy"),
            e -> {
              Clipboard c = Toolkit.getSystemClipboard();
              c.setContents(new StringSelection(selector.getHexColor()), null);
            });
        }
      }
    }
    selector.show();
  }
}
