Пример #1
0
 /// <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>();
 }
Пример #2
0
        /// <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)
            { }
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
 private void Chart_OnUnSubscribeElement(IChartElement element)
 {
     if (element is ChartIndicatorElement indElem)
     {
         _indicators.Remove(indElem);
     }
 }
Пример #5
0
        /// <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);
            }
        }
Пример #6
0
 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));
 }
Пример #7
0
        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);
                                }
                            }
                        }
                    }
                }
            }
        }
Пример #8
0
 /// <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));
 }
Пример #9
0
 /// <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>();
 }
Пример #10
0
        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))
            }
        }
Пример #11
0
        public void ProcessElem(IChartElement element)
        {
            if (isPaint == false || can_draw == false)
            {
                return;
            }

            mediator.ProcessElem(element);
        }
Пример #12
0
        private void Chart_OnUnSubscribeElement(IChartElement element)
        {
            var indElem = element as ChartIndicatorElement;

            if (indElem != null)
            {
                _indicators.Remove(indElem);
            }
        }
Пример #13
0
 private void Chart_OnUnSubscribeElement(IChartElement element)
 {
     _dataThreadActions.Add(() =>
     {
         if (element is ChartIndicatorElement indElem)
         {
             _indicators.Remove(indElem);
         }
     });
 }
Пример #14
0
		public ChartAddElementCommand(ChartArea area, IChartElement element)
		{
			if (area == null)
				throw new ArgumentNullException("area");

			if (element == null)
				throw new ArgumentNullException("element");

			Area = area;
			Element = element;
		}
Пример #15
0
        private void AddElement(IChartElement element, CandleSeries candleSeries)
        {
            if (!_isLoaded || candleSeries == null)
            {
                return;
            }

            _changedElements.Add(element);
            _skipElements.Add(element);
            _drawTimer.Reset();
        }
Пример #16
0
        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;
		}
Пример #18
0
		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;
		}
Пример #19
0
 /// <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);
 }
Пример #20
0
		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);
        }
Пример #22
0
        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;
        }
Пример #24
0
 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);
 }
Пример #25
0
        /// <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);
        }
Пример #26
0
        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));
        }
Пример #27
0
        /// <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);
            }
        }
Пример #28
0
        /// <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);
        }
Пример #30
0
        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));
            }
        }
Пример #32
0
        /// <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);
            }
        }
Пример #33
0
		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);
			}
		}
Пример #34
0
		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);
				}
			}
		}
Пример #35
0
		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));
		}
Пример #38
0
        /// <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();
        }
Пример #39
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="parent">The parent chart element.</param>
 internal BorderSkin(IChartElement parent) : base(parent)
 {
 }
Пример #40
0
        /// <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();
        }
Пример #41
0
		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));
		}
Пример #42
0
 /// <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)
 {
 }
Пример #44
0
 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);
 }
Пример #45
0
		private void ChartPanelOnUnSubscribeElement(IChartElement element)
		{
			lock (_elements.SyncRoot)
				_elements.RemoveWhere(p => p.First == element);
		}