#include "../wxsheaders.h"
#include "wxscolourproperty.h"

#include "../wxsglobals.h"
#include <wx/intl.h>

wxsColourProperty::wxsColourProperty(wxsProperties* Properties,wxUint32& _Type,wxColour& _Colour):
    wxsProperty(Properties),
    PGId(0),
    UseColId(0),
    ColId(0),
    Type(_Type),
    Colour(_Colour)
{
}

wxsColourProperty::~wxsColourProperty()
{
	//dtor
}

const wxString & wxsColourProperty::GetTypeName()
{
    static wxString Type(_T("wxColour"));
    return Type;
}

void wxsColourProperty::AddToPropGrid(wxPropertyGrid* Grid,const wxString& Name)
{
    PGId = Grid->Append( wxParentProperty(Name,wxPG_LABEL) );

    UseColId = Grid->AppendIn(
        PGId,
        wxBoolProperty(_("Use colour:"),wxPG_LABEL,Type != wxsNO_COLOUR ) );

    wxColour Col = wxColour(0,0,0);

    if ( Type == wxPG_COLOUR_CUSTOM )
    {
    	Col = Colour;
    }
    else if ( Type != wxsNO_COLOUR )
    {
    	Col = wxSystemSettings::GetColour((wxSystemColour)Type);
    }

    ColId = Grid->AppendIn(
        PGId,
        wxSystemColourProperty(_("Colour:"), wxPG_LABEL, Col ));
}

bool wxsColourProperty::PropGridChanged(wxPropertyGrid* Grid,wxPGId Id)
{
    if ( ( Id == PGId ) || ( Id == UseColId ) || ( Id == ColId ) )
    {
    	bool Use = Grid->GetPropertyValue(UseColId).GetBool();
    	if ( !Use )
    	{
    		Grid->EnableProperty(ColId,false);
    		Type = wxsNO_COLOUR;
    	}
    	else
    	{
    		Grid->EnableProperty(ColId,true);
            wxColourPropertyValue* ColVal =
                wxDynamicCast(Grid->GetPropertyValueAsWxObjectPtr(ColId),wxColourPropertyValue);
            Type = ColVal->m_type;
            Colour = wxColour(ColVal->m_colour);
    	}

    	return ValueChanged(true);
    }
    return true;
}

void wxsColourProperty::UpdatePropGrid(wxPropertyGrid* Grid)
{
	wxUint32 InternalType = wxPG_COLOUR_CUSTOM;
    if ( Type == wxsNO_COLOUR )
    {
    	Grid->SetPropertyValue(UseColId,false);
    	Grid->EnableProperty(ColId,false);
    }
    else
    {
    	Grid->SetPropertyValue(UseColId,true);
    	Grid->EnableProperty(ColId,true);
    	if ( Type != wxPG_COLOUR_CUSTOM )
    	{
    		Colour = wxSystemSettings::GetColour((wxSystemColour)Type);
    		InternalType = Type;
    	}
    }

    wxColourPropertyValue Value(InternalType,Colour);
    Grid->SetPropertyValue(ColId,Value);
}


syntax highlighted by Code2HTML, v. 0.9.1