#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx
from SyntaxHighlight import *
import wx.lib.colourselect as csel



class ColorPFrame(wx.Frame):
    """
    ColorPFrame

    Provides the necessary function and control to modify
    the lexer styles.
    """
    def __init__(self, parent=None):
        """
        __init__

        Makes its parent class global.
        """
        self.parent = parent

    def CollorPaletteWindow(self, event, IdRange):
        """
        CollorPaletteWindow

        Builds the GUI controls and binds the necessary
        binds to the corresponding functions.
        """
        wx.Frame.__init__(self, self.parent, -1, "Colour Palette", size=
                          (145, 530))

        self.SetIcon(wx.Icon('icons/gEcrit.png', wx.BITMAP_TYPE_PNG))
        CPalettePanel = wx.Panel(self)
        self.Bind(wx.EVT_CLOSE, self.HideMe)
        color_sizer = wx.BoxSizer(wx.VERTICAL)

        CPalettePanel.SetAutoLayout(True)
        mainSizer = wx.BoxSizer(wx.VERTICAL)
        CPalettePanel.SetSizer(mainSizer)

        KeyWordSel = csel.ColourSelect(CPalettePanel, -1, "Keywords",
                SyntCol.ReadColorFile("Keywords"), pos=(10, 10), size=(121,
                35))

        KeyWordSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                        "Keywords"))

        StringsSel = csel.ColourSelect(CPalettePanel, -1, "Strings",
                SyntCol.ReadColorFile("Strings"), pos=(10, 50), size=(121,
                35))
        StringsSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                        "Strings"))

        Quote3Sel = csel.ColourSelect(CPalettePanel, -1, "Triple Quotes",
                SyntCol.ReadColorFile("TripleQuotes"), pos=(10, 90),
                size=(121, 35))
        Quote3Sel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                       "TripleQuotes"))

        IntSel = csel.ColourSelect(CPalettePanel, -1, "Integers",
                                   SyntCol.ReadColorFile("Integers"),
                                   pos=(10, 130), size=(121, 35))
        IntSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                    "Integers"))

        CommentSel = csel.ColourSelect(CPalettePanel, -1, "Comments",
                SyntCol.ReadColorFile("Comments"), pos=(10, 170), size=(121,
                35))
        CommentSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                        "Comments"))

        BracketSel = csel.ColourSelect(CPalettePanel, -1, "Brackets",
                SyntCol.ReadColorFile("Brackets"), pos=(10, 210), size=(121,
                35))
        BracketSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                        "Brackets"))

        BadEOLSel = csel.ColourSelect(CPalettePanel, -1, "Bad EOL",
                SyntCol.ReadColorFile("BadEOL"), pos=(10, 250), size=(121,
                35))
        BadEOLSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                       "BadEOL"))

        FuncSel = csel.ColourSelect(CPalettePanel, -1, "Method Names",
                                    SyntCol.ReadColorFile("MethodNames"),
                                    pos=(10, 290), size=(121, 35))
        FuncSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                     "MethodNames"))

        OperatorSel = csel.ColourSelect(CPalettePanel, -1, "Operators",
                SyntCol.ReadColorFile("Operators"), pos=(10, 330), size=
                (121, 35))
        OperatorSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                         "Operators"))

        IdentifierSel = csel.ColourSelect(CPalettePanel, -1,
                "Identifiers", SyntCol.ReadColorFile("Identifiers"), pos=
                (10, 370), size=(121, 35))
        IdentifierSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                           "Identifiers"))

        EdgeLnSel = csel.ColourSelect(CPalettePanel, -1, "Edge Line",
                SyntCol.ReadColorFile("EdgeLine"), pos=(10, 410), size=(121,
                35))

        EdgeLnSel.Bind(csel.EVT_COLOURSELECT, lambda event: self.OnSelectColor(event,
                       "EdgeLine"))

        OKButton = wx.Button(CPalettePanel, -1, "OK", pos=(35, 455),
                             size=(-1, -1))
        OKButton.Bind(wx.EVT_BUTTON, lambda event: self.Close(True))
        OKButton.Bind(wx.EVT_BUTTON, lambda event: self.RefreshLexer(event,
                      IdRange))
        OKButton.Bind(wx.EVT_BUTTON, lambda event: self.RefreshLexer(event,
                      IdRange))

        color_sizer.Add(KeyWordSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(StringsSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(Quote3Sel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(IntSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(CommentSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(BracketSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(BadEOLSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(FuncSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(OperatorSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(IdentifierSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(EdgeLnSel, 0, wx.EXPAND | wx.ALL, 5)
        color_sizer.Add(OKButton, 0, wx.EXPAND | wx.ALL, 5)

        CPalettePanel.SetSizer(color_sizer)
        self.Hide()
        self.Centre()

    def HideMe(self, event):
        """
        HideMe

        Hides the window.
        """
        self.Hide()

    def ShowMe(self, event):
        """
        ShowMe

        Makes window visible.
        """
        self.Show()

    def OnSelectColor(self, event, item):
        """
        OnSelectColor

        Helper function to call SyntCol.ChangeColorFile
        """
        SyntCol.ChangeColorFile(item, event.GetValue())

    def RefreshLexer(self, event, IdRange):
        """
        RefreshLexer

        Updates the lexer with the changes.
        """
        for id in IdRange:
            SyntCol.ActivateSyntaxHighLight(id)
        event.Skip()


ColPal = ColorPFrame()
