using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CategoryTheory;
using DiagramUI;
using DataPerformer.Interfaces;
using DataPerformer;
namespace DataPerformerUI.UserControls
{
/// <summary>
/// Container of measurements
/// </summary>
public partial class UserControlMeasureContainer : UserControl
{
private List<UserControlMeasureContainer> list;
private IMeasurements measurements;
private IDataConsumer consumer;
private string name;
private Dictionary<IMeasure, UserControlMeasureContainer> dict;
private Dictionary<string, Color> colors;
private Dictionary<string, bool> steps;
/// <summary>
/// Defaut constructor
/// </summary>
public UserControlMeasureContainer()
{
InitializeComponent();
list = new List<UserControlMeasureContainer>();
dict = new Dictionary<IMeasure, UserControlMeasureContainer>();
list.Add(this);
}
private UserControlMeasureContainer(List<UserControlMeasureContainer> list)
{
InitializeComponent();
this.list = list;
Dock = DockStyle.Top;
}
internal void SetAll(IDataConsumer consumer, IMeasurements measurements)
{
if (measurements.Count == 0)
{
panelTop.Controls.Clear();
return;
}
UserControlMeasureContainer uc = this;
uc.Set(consumer, measurements);
uc.Measure = measurements[0];
for (int i = 1; i < measurements.Count; i++)
{
uc.Add();
//uc.Measure = measurements[i];
}
}
void Set(IDataConsumer consumer, IMeasurements measurements)
{
this.consumer = consumer;
this.measurements = measurements;
name = consumer.GetMeasurementName(measurements);
userControlMeasure.ParentName = name;
}
/// <summary>
/// Creates container
/// </summary>
/// <param name="measurements">Measurements</param>
/// <param name="consumer">Data consumer</param>
/// <returns>The container</returns>
public static UserControlMeasureContainer Create(IMeasurements measurements, IDataConsumer consumer)
{
if (measurements.Count == 0)
{
return null;
}
UserControlMeasureContainer uc = new UserControlMeasureContainer();
uc.Set(consumer, measurements);
uc.Measure = measurements[0];
for (int i = 1; i < measurements.Count; i++)
{
uc.Add();
}
return uc;
}
internal void Add(Dictionary<IMeasure, Color> d)
{
foreach (UserControlMeasureContainer c in list)
{
c.userControlMeasure.Add(d);
}
}
internal void Add(Dictionary<string, IMeasure> d)
{
foreach (UserControlMeasureContainer uc in list)
{
uc.add(d);
}
}
internal Dictionary<string, Color> Colors
{
set
{
colors = value;
foreach (UserControlMeasureContainer uc in list)
{
uc.Set(colors);
}
}
}
internal Dictionary<string, bool> Steps
{
set
{
steps = value;
foreach (UserControlMeasureContainer uc in list)
{
uc.Set(steps);
}
}
}
void Set(Dictionary<string, Color> colors)
{
this.colors = colors;
userControlMeasure.Colors = colors;
}
void Set(Dictionary<string, bool> steps)
{
this.steps = steps;
userControlMeasure.Steps = steps;
}
void add(Dictionary<string, IMeasure> d)
{
IMeasure m = Measure;
string n = consumer.GetName(m);
d[n] = m;
}
private void Add()
{
int n = list.Count;
UserControlMeasureContainer fin = list[n - 1];
UserControlMeasureContainer uc = new UserControlMeasureContainer(list);
uc.dict = dict;
uc.Set(consumer, measurements);
uc.Measure = measurements[n];
for (int i = 0; i < n; i++)
{
list[i].Height += uc.Height;
}
fin.panelCenter.Controls.Add(uc);
list.Add(uc);
}
internal Dictionary<IMeasure, object> Dictionary
{
set
{
foreach (UserControlMeasureContainer uc in list)
{
uc.userControlMeasure.Dictionary = value;
}
}
}
internal IMeasure Measure
{
get
{
return userControlMeasure.Measure;
}
set
{
userControlMeasure.Measure = value;
dict[value] = this;
}
}
}
}