/// <summary> /// /// </summary> /// <param name="element"></param> /// <param name="config"></param> /// <exception cref="NotImplementedException"></exception> public FusionChartWrapper(IChartElement element, IChartConfig config) { _element = element; _config = config??_config; _elementName = determineName(_element); _eltype = _elementName.To<FusionChartElementType>(); _charttype = config.Type.To<FusionChartType>(); }
/// <summary> /// Override this function to support palette colors drawing /// </summary> /// <param name="e">Paint value event arguments.</param> public override void PaintValue(PaintValueEventArgs e) { try { if (e.Value is string) { // Get image loader ImageLoader imageLoader = null; if (e.Context != null && e.Context.Instance != null) { if (e.Context.Instance is Chart) { Chart chart = (Chart)e.Context.Instance; imageLoader = (ImageLoader)chart.GetService(typeof(ImageLoader)); } else if (e.Context.Instance is IChartElement) { IChartElement chartElement = (IChartElement)e.Context.Instance; imageLoader = (ImageLoader)chartElement.Common.ImageLoader; } } if (imageLoader != null && !string.IsNullOrEmpty((string)e.Value)) { // Load a image System.Drawing.Image image = imageLoader.LoadImage((string)e.Value); // Draw Image e.Graphics.DrawImage(image, e.Bounds); } } } catch (ArgumentException) { } }
private void RemoveSource(IChartElement element) { lock (_syncRoot) { var info = _elementsInfo.TryGetValue(element); if (info == null) { return; } _elementsInfo.Remove(element); var elements = _elementsBySeries.TryGetValue(info.Second); if (elements == null) { return; } elements.Remove(element); if (elements.Count != 0) { return; } UnSubscribeSeries(info.Second); _elementsBySeries.Remove(info.Second); } }
private void Chart_OnUnSubscribeElement(IChartElement element) { if (element is ChartIndicatorElement indElem) { _indicators.Remove(indElem); } }
/// <summary> /// добавить на график пользовательский элемент /// </summary> /// <param name="element">элемент</param> public void SetChartElement(IChartElement element) { try { if (_chartElements == null) { _chartElements = new List <IChartElement>(); } // 1 если такой элемент уже добавлен, заменяем его IChartElement myElement = _chartElements.Find(chartElement => chartElement.UniqName == element.UniqName); if (myElement != null) { _chartElements.Remove(myElement); myElement.UpdeteEvent -= myElement_UpdeteEvent; myElement.DeleteEvent -= myElement_DeleteEvent; } myElement = element; _chartElements.Add(myElement); myElement.UpdeteEvent += myElement_UpdeteEvent; myElement.DeleteEvent += myElement_DeleteEvent; // 2 отправляем на прорисовку ChartCandle.ProcessElem(myElement); } catch (Exception error) { NewLogMessage(error.ToString(), LogMessageType.Error); } }
private void OnChartPanelUnSubscribeElement(IChartElement element) { element.DoIf <IChartElement, ChartCandleElement>(e => new UnSubscribeCandleElementCommand(e).Process(this)); element.DoIf <IChartElement, ChartIndicatorElement>(e => new UnSubscribeIndicatorElementCommand(e).Process(this)); element.DoIf <IChartElement, ChartOrderElement>(e => new UnSubscribeOrderElementCommand(e).Process(this)); element.DoIf <IChartElement, ChartTradeElement>(e => new UnSubscribeTradeElementCommand(e).Process(this)); }
public static void WriteChartElement(this IChartElement element, BindingFlags bindingFlags, XmlWriter writer) { if (element == null) { return; } var elementType = element.GetType(); if (IsDebugEnabled) { log.Debug(@"타입[{0}]에서 속성 중에 XmlElement로 빌드할 정보를 생성합니다.", elementType.FullName); } var fields = elementType.Fields().ToList(); var properties = elementType.Properties(bindingFlags).ToList(); var elements = properties.Where( pi => pi.PropertyType.IsSameOrSubclassOf(ChartElementType) || (pi.PropertyType.IsSameOrSubclassOf(typeof(IEnumerable <>)) && pi.PropertyType != typeof(string))).ToArray(); foreach (var pi in elements) { var name = pi.Name; if (IsDebugEnabled) { log.Debug(@"IChartElement 속성 [{0}]을 Xml Element로 생성합니다.", name); } var fieldName = FasterflectTool.GetMemberName(name, MemberNamingRule.CamelCaseUndercore); var fieldValueExists = fields.Any(fi => fi.Name == fieldName) && (element.TryGetFieldValue(fieldName) != null); if (fieldValueExists) { var elem = element.TryGetPropertyValue(name); if (elem != null) { if (elem is IChartElement) { ((IChartElement)elem).WriteXmlElement(writer); } else if (elem is IEnumerable) { foreach (var x in (IEnumerable)elem) { if (x != null && x is IChartElement) { ((IChartElement)x).WriteXmlElement(writer); } } } } } } }
/// <summary> /// Возвращает адаптер для работы с графиком в API FusionChart /// </summary> /// <param name="chart"></param> /// <param name="config"></param> /// <returns></returns> public static FusionChartWrapper AsFusion(this IChartElement chart, IChartConfig config = null) { config = config ?? new ChartConfig() { Type = FusionChartType.Column2D.ToString() }; return(new FusionChartWrapper(chart, config)); }
/// <summary> /// /// </summary> /// <param name="element"></param> /// <param name="config"></param> /// <exception cref="NotImplementedException"></exception> public FusionChartWrapper(IChartElement element, IChartConfig config) { _element = element; _config = config ?? _config; _elementName = determineName(_element); _eltype = _elementName.To <FusionChartElementType>(); _charttype = config.Type.To <FusionChartType>(); }
public void ProcessElem(IChartElement element) { if (element is LineHorisontal) { var indi_area = indicators_list.Find(x => (string)x.Tag == element.Area); if (indi_area.lines_series_list.Exists(x => (string)x.Tag == element.UniqName + "HorLine")) { indi_area.lines_series_list.Remove(indi_area.lines_series_list.Find(x => (string)x.Tag == element.UniqName + "HorLine")); } var line = new LineSeries() { Color = OxyColor.FromArgb(((LineHorisontal)element).Color.A, ((LineHorisontal)element).Color.R, ((LineHorisontal)element).Color.G, ((LineHorisontal)element).Color.B), MarkerStrokeThickness = 1, StrokeThickness = 1, MarkerStroke = OxyColor.FromArgb(((LineHorisontal)element).Color.A, ((LineHorisontal)element).Color.R, ((LineHorisontal)element).Color.G, ((LineHorisontal)element).Color.B), Tag = (object)(element.UniqName + "HorLine"), }; line.Points.AddRange(new List <DataPoint>() { new DataPoint(DateTimeAxis.ToDouble(((LineHorisontal)element).TimeStart), (double)((LineHorisontal)element).Value), new DataPoint(DateTimeAxis.ToDouble(((LineHorisontal)element).TimeEnd), (double)((LineHorisontal)element).Value) }); indi_area.lines_series_list.Add(line); } if (element is PointElement) { //OxyArea area; //if (indicators_list.Exists(x => (string)x.Tag == element.Area)) //{ // area = indicators_list.Find(x => (string)x.Tag == element.Area); // if (((IndicatorArea)area).scatter_series_list.Exists(x => (string)x.Tag == element.UniqName)) // { // ((IndicatorArea)area).scatter_series_list.Remove(((IndicatorArea)area).scatter_series_list.Find(x => (string)x.Tag == element.UniqName)); // } //} //if (element.Area == "Prime") //{ // area = prime_chart; //} //if (area.) //lines_series_list.Remove(indi_area.lines_series_list.Find(x => (string)x.Tag == element.UniqName)); //if (indi_area.lines_series_list.Exists(x => (string)x.Tag == element.UniqName)) } }
public void ProcessElem(IChartElement element) { if (isPaint == false || can_draw == false) { return; } mediator.ProcessElem(element); }
private void Chart_OnUnSubscribeElement(IChartElement element) { var indElem = element as ChartIndicatorElement; if (indElem != null) { _indicators.Remove(indElem); } }
private void Chart_OnUnSubscribeElement(IChartElement element) { _dataThreadActions.Add(() => { if (element is ChartIndicatorElement indElem) { _indicators.Remove(indElem); } }); }
public ChartAddElementCommand(ChartArea area, IChartElement element) { if (area == null) throw new ArgumentNullException("area"); if (element == null) throw new ArgumentNullException("element"); Area = area; Element = element; }
private void AddElement(IChartElement element, CandleSeries candleSeries) { if (!_isLoaded || candleSeries == null) { return; } _changedElements.Add(element); _skipElements.Add(element); _drawTimer.Reset(); }
public static void Draw(this IChart chart, DateTimeOffset time, IChartElement element, object value) { if (chart == null) { throw new ArgumentNullException(nameof(chart)); } chart.Draw(time, new Dictionary <IChartElement, object> { { element, value } }); }
public ChartRemoveElementCommand(ChartArea area, IChartElement element) { if (area == null) throw new ArgumentNullException(nameof(area)); if (element == null) throw new ArgumentNullException(nameof(element)); Area = area; Element = element; }
public ChartAddElementCommand(ChartArea area, IChartElement element, CandleSeries series = null) { if (area == null) throw new ArgumentNullException(nameof(area)); if (element == null) throw new ArgumentNullException(nameof(element)); Area = area; Element = element; Series = series; }
/// <summary> /// входящее событие: элемент нужно перерисовать /// </summary> /// <param name="element">элемент</param> void myElement_UpdeteEvent(IChartElement element) { if (_chartElements == null) { _chartElements = new List <IChartElement>(); } if (_chartElements.Find(el => el.UniqName == element.UniqName) == null) { _chartElements.Add(element); } ChartCandle.ProcessElem(element); }
public ChartDrawCommand(DateTimeOffset time, IChartElement element, object value) { if (element == null) throw new ArgumentNullException(nameof(element)); if (value == null) throw new ArgumentNullException(nameof(value)); Values = new List<RefPair<DateTimeOffset, IDictionary<IChartElement, object>>> { new RefPair<DateTimeOffset, IDictionary<IChartElement, object>>(time, new Dictionary<IChartElement, object> { { element, value } }) }; }
/// <summary> /// Override this function to support chart type drawing /// </summary> /// <param name="context">Descriptor context.</param> /// <returns>Can paint values.</returns> public override bool GetPaintValueSupported(ITypeDescriptorContext context) { // Initialize the chartTypeRegistry using context if (context != null && context.Instance != null) { IChartElement chartElement = context.Instance as IChartElement; if (chartElement != null) { this._chartTypeRegistry = chartElement.Common.ChartTypeRegistry; } } // Always return true return(true); }
public ChartRemoveElementCommand(ChartArea area, IChartElement element) { if (area == null) { throw new ArgumentNullException(nameof(area)); } if (element == null) { throw new ArgumentNullException(nameof(element)); } Area = area; Element = element; }
public ChartAddElementCommand(ChartArea area, IChartElement element) { if (area == null) { throw new ArgumentNullException("area"); } if (element == null) { throw new ArgumentNullException("element"); } Area = area; Element = element; }
private string determineName(IChartElement element) { if (element is IChart) { return("chart"); } if (element is IChartSet) { return("set"); } if (element is IChartTrendLine) { return("line"); } throw new Exception("unknown type " + element.GetType().Name); }
/// <summary> /// Добавление элемента к элементу /// </summary> /// <param name="baseElement">Исходное представление элемента</param> /// <param name="element">Элемент для добавления</param> /// <returns>Замыкание на исходный элемент</returns> public static IChartElement Add(this IChartElement baseElement, IChartElement element) { if (baseElement is IChart) { (baseElement as IChart).Add(element); } else if (baseElement is IChartDataset) { if (element is IChartDataItem) { (baseElement as IChartDataset).Add(element as IChartDataItem); } } return(baseElement); }
private void OnChartPanelUnSubscribeElement(IChartElement element) { if (!_isLoaded) { return; } var series = (CandleSeries)_bufferedChart.GetSource(element); if (series == null) { return; } element.DoIf <IChartElement, ChartCandleElement>(e => _candleManager.Stop(series)); }
/// <summary> /// Добавление исправленного атрибута /// </summary> /// <param name="element">Элемент, с которым соотнести атрибут</param> /// <param name="attribute">Имя атрибута</param> /// <param name="value">Значение атрибута</param> public void AddFixedAttribute(IChartElement element, string attribute, object value) { if (!_fixedAttributes.ContainsKey(element)) { _fixedAttributes.Add(element, new Dictionary <string, object>()); } if (_fixedAttributes[element].ContainsKey(attribute)) { _fixedAttributes[element][attribute] = value; } else { _fixedAttributes[element].Add(attribute, value); } }
/// <summary> /// Добавление элемента к чарту /// </summary> /// <param name="chart">Исходное представление чарта</param> /// <param name="element">Элемент для добавления</param> /// <returns>Замыкание на чарт</returns> public static IChart Add(this IChart chart, IChartElement element) { if (element is IChartDatasets) { if (chart is Chart) { ((Chart)chart).Datasets = (IChartDatasets)element; } } else if (element is IChartDataset) { chart.Datasets.Add(element as IChartDataset); SetParent(element, chart.Datasets); } else if (element is IChartCategory) { chart.Categories.Add(element as IChartCategory); SetParent(element, chart.Categories); } else if (element is IChartDataItem) { var p = ParentOf <IChartDataset>(element); if (p != null) { p.Children.Add(element as IChartDataItem); SetParent(element, p); } } else if (element is IChartTrendLine) { var p = ParentOf <IChartTrendLines>(element); if (p == null) { chart.TrendLines.Add(element as IChartTrendLine); SetParent(element, chart.TrendLines); } else { p.Add(element as IChartTrendLine); SetParent(element, chart.TrendLines); } } return(chart); }
/// <summary> /// Gets the chart from context. /// </summary> /// <param name="context">The context.</param> public static Chart GetChartFromContext(ITypeDescriptorContext context) { if (context == null || context.Instance == null) { return(null); } IChartElement element = context.Instance as IChartElement; if (element != null && element.Common != null) { return(element.Common.Chart); } IList list = context.Instance as IList; if (list != null && list.Count > 0) { element = list[0] as IChartElement; if (element.Common != null) { return(element.Common.Chart); } } Chart chart = context.Instance as Chart; if (chart != null) { return(chart); } IServiceProvider provider = context.Instance as IServiceProvider; if (provider != null) { chart = provider.GetService(typeof(Chart)) as Chart; if (chart != null) { return(chart); } } return(null); }
public ChartDrawCommand(DateTimeOffset time, IChartElement element, object value) { if (element == null) { throw new ArgumentNullException("element"); } if (value == null) { throw new ArgumentNullException("value"); } Values = new List <RefPair <DateTimeOffset, IDictionary <IChartElement, object> > > { new RefPair <DateTimeOffset, IDictionary <IChartElement, object> >(time, new Dictionary <IChartElement, object> { { element, value } }) }; }
/// <summary> /// Checks if the instance belongs to Chart type or contains the field of chart type. /// NOTE: Required for the Diagram product. /// </summary> /// <param name="instance"> /// Instance to check. /// </param> /// <returns> /// Object of chart type. /// </returns> public static object GetChartReference(object instance) { // Check instance type. if (instance is Chart) { return(instance); } // Read chart reference from the "chart" field. IChartElement element = instance as IChartElement; if (element != null) { return(element.Common.Chart); } else { throw (new InvalidOperationException(SR.ExceptionEditorContectInstantsIsNotChartObject)); } }
/// <summary> /// удалить с графика пользовательский элемент /// </summary> /// <param name="element">элемент</param> public void DeleteChartElement(IChartElement element) { ChartCandle.ProcessClearElem(element); try { // если такой элемент есть в коллекции элементов - удаляем if (_chartElements != null && _chartElements.Count != 0) { IChartElement elem = _chartElements.Find(chartElement => chartElement.UniqName == element.UniqName); if (elem != null) { _chartElements.Remove(elem); } } } catch (Exception error) { NewLogMessage(error.ToString(), LogMessageType.Error); } }
private void RemoveSource(IChartElement element) { lock (_syncRoot) { var info = _elementsInfo.TryGetValue(element); if (info == null) return; _elementsInfo.Remove(element); var elements = _elementsBySeries.TryGetValue(info.Second); if (elements == null) return; elements.Remove(element); if (elements.Count != 0) return; UnSubscribeSeries(info.Second); _elementsBySeries.Remove(info.Second); } }
private void UnSubscribe(IDictionary<Security, List<IChartElement>> elements, IChartElement element) { lock (_syncRoot) { foreach (var pair in elements.ToArray()) { if (!pair.Value.Remove(element)) continue; if (pair.Value.Count == 0) elements.Remove(pair.Key); } } }
private void Subscribe(IDictionary<Security, List<IChartElement>> elements, Security security, IChartElement element) { lock (_syncRoot) elements.SafeAdd(security).Add(element); }
private void AddElement(IChartElement element, CandleSeries candleSeries) { if (!_isLoaded || candleSeries == null) return; _changedElements.Add(element); _skipElements.Add(element); _drawTimer.Activate(); }
private void OnChartPanelUnSubscribeElement(IChartElement element) { if (!_isLoaded) return; var series = (CandleSeries)_bufferedChart.GetSource(element); if (series == null) return; element.DoIf<IChartElement, ChartCandleElement>(e => _candleManager.Stop(series)); }
/// <summary> /// Registers the chart element. /// </summary> /// <param name="chartElement">The chart element to register.</param> /// <remarks> /// <para> /// Registering a chart element is necessary when <see cref="AutoScale"/> is set to /// <see langword="true"/>. In this case the axis calls /// <see cref="IChartElement.SuggestXScale"/> or <see cref="IChartElement.SuggestYScale"/> /// on all registered elements to determine the optimal scale. /// </para> /// <para> /// Elements derived from <see cref="ChartElement"/> are automatically registered when an /// axis is assigned (see <see cref="IChartElement.XAxis"/>, /// <see cref="IChartElement.YAxis"/>. /// </para> /// </remarks> /// <exception cref="ArgumentNullException"> /// <paramref name="chartElement"/> is <see langword="null"/>. /// </exception> internal void RegisterChartElement(IChartElement chartElement) { if (chartElement == null) throw new ArgumentNullException("chartElement"); if (_chartElements.Contains(chartElement)) return; _chartElements.Add(chartElement); if (AutoScale) Invalidate(); }
/// <summary> /// Constructor. /// </summary> /// <param name="parent">The parent chart element.</param> internal BorderSkin(IChartElement parent) : base(parent) { }
/// <summary> /// Unregisters the chart element. /// </summary> /// <param name="chartElement">The chart element to unregister.</param> internal void UnregisterChartElement(IChartElement chartElement) { _chartElements.Remove(chartElement); if (AutoScale) Invalidate(); }
private void OnChartPanelUnSubscribeElement(IChartElement element) { element.DoIf<IChartElement, ChartCandleElement>(e => new UnSubscribeCandleElementCommand(e).Process(this)); element.DoIf<IChartElement, ChartIndicatorElement>(e => new UnSubscribeIndicatorElementCommand(e).Process(this)); element.DoIf<IChartElement, ChartOrderElement>(e => new UnSubscribeOrderElementCommand(e).Process(this)); element.DoIf<IChartElement, ChartTradeElement>(e => new UnSubscribeTradeElementCommand(e).Process(this)); }
/// <summary> /// Добавление элементов к элементу /// </summary> /// <param name="baseElement">Исходное представление элемента</param> /// <param name="element">Элемент для добавления</param> /// <returns>Замыкание на исходный элемент</returns> public static IChartElement Add(this IChartElement baseElement, IEnumerable <IChartElement> element) { element.DoForEach(_ => Add(baseElement, (IChartElement)_)); return(baseElement); }
/// <summary> /// ElementPosition default constructor /// </summary> internal ElementPosition(IChartElement parent) : base(parent) { }
private string determineName(IChartElement element) { if (element is IChart) return "chart"; if (element is IChartSet) return "set"; if (element is IChartTrendLine) return "line"; throw new Exception("unknown type " + element.GetType().Name); }
private void ChartPanelOnUnSubscribeElement(IChartElement element) { lock (_elements.SyncRoot) _elements.RemoveWhere(p => p.First == element); }