#------------------------------------------------------------------------------
#
#  Copyright (c) 2005, Enthought, Inc.
#  All rights reserved.
#
#  This software is provided without warranty under the terms of the BSD
#  license included in enthought/LICENSE.txt and may be redistributed only
#  under the conditions described in the aforementioned license.  The license
#  is also available online at http://www.enthought.com/licenses/BSD.txt
#
#  Thanks for using Enthought open source!
#
#  Author: David C. Morrill
#  Date:   02/14/2005
#
#------------------------------------------------------------------------------

""" Trait definition for a null-based (i.e., no UI) color.
"""

#-------------------------------------------------------------------------
#  Imports:
#-------------------------------------------------------------------------

from __future__ import absolute_import

from traits.api import Trait, TraitError

#-------------------------------------------------------------------------
#  Convert a number into a wxColour object:
#-------------------------------------------------------------------------


def convert_to_color(object, name, value):
    """ Converts a number into a wxColour object.
    """
    if isinstance(value, int):
        return value & 0xFFFFFF

    elif isinstance(value, tuple):
        return (value[0] / 255., value[1] / 255., value[2] / 255.)

    raise TraitError

convert_to_color.info = ('an integer which in hex is of the form 0xRRGGBB, '
                         'where RR is red, GG is green, and BB is blue')

#-------------------------------------------------------------------------
#  Standard colors:
#-------------------------------------------------------------------------

standard_colors = {
    'aquamarine': 0x70DB93,
    'black': 0x000000,
    'blue': 0x0000FF,
    'blue violet': 0x9F5F9F,
    'brown': 0xA52A2A,
    'cadet blue': 0x5F9F9F,
    'coral': 0xFF7F00,
    'cornflower blue': 0x42426F,
    'cyan': 0x00FFFF,
    'dark grey': 0x2F2F2F,
    'dark green': 0x2F4F2F,
    'dark olive green': 0x4F4F2F,
    'dark orchid': 0x9932CC,
    'dark slate blue': 0x6B238E,
    'dark slate grey': 0x2F4F4F,
    'dark turquoise': 0x7093DB,
    'dim grey': 0x545454,
    'firebrick': 0x8E2323,
    'forest green': 0x238E23,
    'gold': 0xCC7F32,
    'goldenrod': 0xDBDB70,
    'grey': 0x808080,
    'green': 0x00FF00,
    'green yellow': 0x93DB70,
    'indian red': 0x4F2F2F,
    'khaki': 0x9F9F5F,
    'light blue': 0xBFD8D8,
    'light grey': 0xC0C0C0,
    'light steel': 0x000000,
    'blue': 0x0000FF,
    'lime green': 0x32CC32,
    'magenta': 0xFF00FF,
    'maroon': 0x8E236B,
    'medium aquamarine': 0x32CC99,
    'medium blue': 0x3232CC,
    'medium forest green': 0x6B8E23,
    'medium goldenrod': 0xEAEAAD,
    'medium orchid': 0x9370DB,
    'medium sea green': 0x426F42,
    'medium slate blue': 0x7F00FF,
    'medium spring green': 0x7FFF00,
    'medium turquoise': 0x70DBDB,
    'medium violet red': 0xDB7093,
    'midnight blue': 0x2F2F4F,
    'navy': 0x23238E,
    'orange': 0xCC3232,
    'orange red': 0xFF007F,
    'orchid': 0xDB70DB,
    'pale green': 0x8FBC8F,
    'pink': 0xBC8FEA,
    'plum': 0xEAADEA,
    'purple': 0xB000FF,
    'red': 0xFF0000,
    'salmon': 0x6F4242,
    'sea green': 0x238E6B,
    'sienna': 0x8E6B23,
    'sky blue': 0x3299CC,
    'slate blue': 0x007FFF,
    'spring green': 0x00FF7F,
    'steel blue': 0x236B8E,
    'tan': 0xDB9370,
    'thistle': 0xD8BFD8,
    'turquoise': 0xADEAEA,
    'violet': 0x4F2F4F,
    'violet red': 0xCC3299,
    'wheat': 0xD8D8BF,
    'white': 0xFFFFFF,
    'yellow': 0xFFFF00,
    'yellow green': 0x99CC32
}

#-------------------------------------------------------------------------
#  Define 'null' specific color traits:
#-------------------------------------------------------------------------

### Note: Declare the editor to be a function which returns the ColorEditor
# class from traits ui to avoid circular import issues. For backwards
# compatibility with previous Traits versions, the 'editors' folder in Traits
# project declares 'from api import *' in its __init__.py. The 'api' in turn
# can contain classes that have a Color trait which lead to this file getting
# imported. This leads to a circular import when declaring a Color trait.


def get_color_editor(*args, **traits):
    from ..api import ColorEditor
    return ColorEditor(*args, **traits)

# Color traits
NullColor = Trait('white', convert_to_color, standard_colors,
                  editor=get_color_editor)
