#define Graph_And_Chart_PRO
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
namespace ChartAndGraph.Legened
{
///
/// class for canvas legned. this class basiically creates the legned prefab for each category in the chart
///
[ExecuteInEditMode]
class CanvasLegend : MonoBehaviour
{
[SerializeField]
private int fontSize;
[Serializable]
public class ImageOverride
{
public Texture2D Image = null;
public String category = "";
}
[SerializeField]
public ImageOverride[] CategoryImages = null;
private Dictionary CreateimageDictionary()
{
Dictionary dic = new Dictionary();
if (CategoryImages == null)
return dic;
foreach(ImageOverride ent in CategoryImages)
{
dic[ent.category] = ent.Image;
}
return dic;
}
public int FontSize
{
get { return fontSize; }
set
{
fontSize = value;
PropertyChanged();
}
}
[SerializeField]
private CanvasLegendItem legendItemPrefab;
public CanvasLegendItem LegenedItemPrefab
{
get { return legendItemPrefab; }
set
{
legendItemPrefab = value;
PropertyChanged();
}
}
[SerializeField]
private AnyChart chart;
List mToDispose = new List();
bool mGenerateNext = false;
public AnyChart Chart
{
get { return chart; }
set
{
if (chart != null)
((IInternalUse)chart).Generated -= CanvasLegend_Generated;
chart = value;
if(chart != null)
((IInternalUse)chart).Generated += CanvasLegend_Generated;
PropertyChanged();
}
}
void Start()
{
if (chart != null)
((IInternalUse)chart).Generated += CanvasLegend_Generated;
InnerGenerate();
}
void OnEnable()
{
if (chart != null)
((IInternalUse)chart).Generated += CanvasLegend_Generated;
InnerGenerate();
}
void OnDisable()
{
if (chart != null)
((IInternalUse)chart).Generated -= CanvasLegend_Generated;
// Clear();
}
void OnDestory()
{
if (chart != null)
((IInternalUse)chart).Generated -= CanvasLegend_Generated;
Clear();
}
private void CanvasLegend_Generated()
{
InnerGenerate();
}
protected void OnValidate()
{
if (chart != null)
((IInternalUse)chart).Generated += CanvasLegend_Generated;
Generate();
}
protected void PropertyChanged()
{
Generate();
}
public void Clear()
{
CanvasLegendItem[] items = gameObject.GetComponentsInChildren();
for(int i=0; i();
Texture2D overrideImage = null;
if (dic.TryGetValue(item.Name, out overrideImage) == false)
overrideImage = null;
if(overrideImage != null)
{
legendItemData.Image.material = null;
Texture2D tex = overrideImage;
legendItemData.Image.sprite = CreateSpriteFromTexture(tex);
}
else
if (legendItemData.Image != null)
{
if (item.Material == null)
legendItemData.Image.material = null;
else
{
if (isGradientShader(item.Material))
{
legendItemData.Image.material = CreateCanvasGradient(item.Material);
}
else
{
legendItemData.Image.material = null;
Texture2D tex = item.Material.mainTexture as Texture2D;
if (tex != null)
legendItemData.Image.sprite = CreateSpriteFromTexture(tex);
legendItemData.Image.color = item.Material.color;
}
}
}
if (legendItemData.Text != null)
{
legendItemData.Text.text = item.Name;
legendItemData.Text.fontSize = fontSize;
}
}
}
}
}