/// <summary>
        /// Publishes the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        private void Publish(MarbleBase item, VisualRxProxyWrapper[] proxies)
        {
            item.Keywords   = _keyworkds;
            item.IndexOrder = _indexOrder;

            VisualRxSettings.Send(item, proxies);
        }
Exemple #2
0
        /// <summary>
        /// Selects the template.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="element">The element.</param>
        /// <returns></returns>
        public DataTemplate SelectTemplate(MarbleBase item, FrameworkElement element)
        {
            DataTemplate template = null;

            if (item.Name == "Stock")
            {
                IList <double> lst = item.RawValue as IList <double>;
                if (lst != null)
                {
                    if (lst[0] < lst[1])
                    {
                        template = element.FindResource("StockUpTemplate") as DataTemplate;
                    }
                    else
                    {
                        template = element.FindResource("StockDownTemplate") as DataTemplate;
                    }
                }
                else
                {
                    Trace.WriteLine(item.RawValue.GetType().Name);
                }
            }
            return(template);
        }
Exemple #3
0
 public CreateStreamVMRequest(MarbleBase item, IVMDataStream parent, string[] path, int level)
 {
     Item         = item;
     Parent       = parent;
     Path         = path;
     Level        = level;
     _fullName    = string.Join(".", Path, 0, Level);
     _isLastLevel = Path.Length == Level;
 }
        /// <summary>
        /// Selects the template.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="element">The element.</param>
        /// <returns></returns>
        public DataTemplate SelectTemplate(MarbleBase item, FrameworkElement element)
        {
            DataTemplate template  = null;
            bool         startWith = item.Name.ToLower().StartsWith("sec");
            bool         isDivBy10 = Convert.ToInt32(item.RawValue) % 10 == 0;

            if (startWith && isDivBy10)
            {
                template = element.FindResource("CustomMarbleNextTemplate") as DataTemplate;
            }
            return(template);
        }
Exemple #5
0
        /// <summary>
        /// Append new stream to the stream hierarchic.
        /// </summary>
        /// <param name="item">The item.</param>
        private void AppendStream(MarbleBase item)
        {
            string fullName = item.Name;

            #region Validation

            if (string.IsNullOrEmpty(fullName))
            {
                return; // TODO: error log
            }
            #endregion  // Validation

            string[]      path    = fullName.Split(new [] { "." }, StringSplitOptions.RemoveEmptyEntries);
            IVMDataStream parent  = _hierarchic.FirstOrDefault(node => node.Name == path[0]);
            var           request = new CreateStreamVMRequest(item, parent, path.ToArray(), 1);
            CreateStreamVMRecursive(request);
        }
        /// <summary>
        /// Appends the marble.
        /// </summary>
        /// <param name="itemWrapper">The item wrapper.</param>
        public void AppendMarble(MarbleItemViewModel itemWrapper)
        {
            #region Validation

            if (itemWrapper == null)
            {
                throw new NullReferenceException("itemWrapper");
            }

            #endregion Validation

            MarbleBase item = itemWrapper.Item;

            if (TabKind == TabKind.Flat)
            {
                FlatItems.AddAsync(item);
                return;
            }

            itemWrapper.MainContext = this;

            #region Diagrams.AddAsync(diagram)

            MarbleDiagramModel diagram;
            if (!_marbleDiagrams.TryGetValue(item.Name, out diagram))
            {
                diagram = new MarbleDiagramModel(item.Name, item.IndexOrder, this);
                if (_marbleDiagrams.TryAdd(item.Name, diagram))
                {
                    Diagrams.AddAsync(diagram);
                }
                else
                {
                    diagram.Dispose();
                    diagram = _marbleDiagrams[item.Name];
                }
            }

            #endregion // Diagrams.AddAsync(diagram)

            itemWrapper = itemWrapper.Clone(diagram);
            diagram.AppendMarble(itemWrapper);
        }
        /// <summary>
        /// Tries the select custom template.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="element">The element.</param>
        /// <param name="plugin">The plugin.</param>
        /// <returns></returns>
        private DataTemplate TrySelectCustomTemplate(
            IMarbleItemPlugin plugin,
            MarbleBase item,
            FrameworkElement element)
        {
            try
            {
                return(plugin.SelectTemplate(item, element));
            }

            #region Exception Handling

            catch (Exception ex)
            {
                TraceSourceMonitorHelper.Error("Fail to select template for marble item, plugins: {0}, item = {1}, \r\n\terror = {2}",
                                               plugin, item.Value, ex);
                return(null);
            }

            #endregion Exception Handling
        }
        /// <summary>
        /// Sends the specified item.
        /// </summary>
        /// <param name="item">The item.</param>
        internal static void Send(MarbleBase item, IEnumerable <VisualRxProxyWrapper> proxies)
        {
            #region Validation

            if (VisualRxSettings.Proxies == null || !VisualRxSettings.Proxies.Any())
            {
                TraceSourceMonitorHelper.Warn("MonitorOperator: No proxy found");
                return;
            }

            #endregion Validation

            foreach (VisualRxProxyWrapper proxy in proxies)
            {
                try
                {
                    //string kind = proxy.Kind;
                    //if (!VisualRxSettings.Filter(item, kind))
                    //    continue;

                    //if (!proxy.Filter(item))
                    //    continue;

                    // the proxy wrapper apply parallelism and batching (VIA Rx Subject)
                    proxy.Send(item);
                }
                #region Exception Handling

                catch (Exception ex)
                {
                    TraceSourceMonitorHelper.Error("MonitorOperator: {0}", ex);
                }

                #endregion Exception Handling
            }
        }
        /// <summary>
        /// Translates the offset.
        /// </summary>
        /// <param name="itemWrapper">The item wrapper.</param>
        /// <returns></returns>
        public double TranslateOffset(MarbleItemViewModel itemWrapper)
        {
            #region Validation

            if (itemWrapper == null)
            {
                throw new NullReferenceException("itemWrapper");
            }

            #endregion Validation

            MarbleBase            item    = itemWrapper.Item;
            TimeSpan              offset  = item.Offset;
            IMarbleDiagramContext diagram = itemWrapper.DiagramContext;

            double totalSeconds = offset.TotalSeconds;

            double initTimeInSeconds = _initTimeInSeconds;
            double totalSecondsByDiagram;
            if (_initTimeInSeconds == -1)
            {
                initTimeInSeconds = Interlocked.CompareExchange(ref _initTimeInSeconds, totalSeconds, -1);
            }
            totalSecondsByDiagram = diagram.GetLocalTimeInSeconds(totalSeconds);

            #region totalSeconds = ... (PositioningStrategy)

            switch (diagram.PositioningStrategy)
            {
            case MarblePositioningStrategy.GlobalTime:
                totalSeconds -= _initTimeInSeconds;
                totalSeconds  = TranslateByFactor(offset, totalSeconds);
                break;

            case MarblePositioningStrategy.PrivateTime:
                totalSeconds = TranslateByFactor(offset, totalSecondsByDiagram);
                break;

            case MarblePositioningStrategy.Sequence:
                totalSeconds = itemWrapper.Sequence;
                break;
            }

            #endregion totalSeconds = ... (PositioningStrategy)

            int    correction = diagram.Size + MarbleDiagramModel.DIAGRAM_WIDTH_CORRECTION;
            double result     = totalSeconds * (itemWrapper.DiagramContext.Size * 2 + 5);
            if ((item.Kind == MarbleKind.OnCompleted || item.Kind == MarbleKind.OnError) &&
                diagram.PositioningStrategy != MarblePositioningStrategy.Sequence)
            {
                result += itemWrapper.DiagramContext.Size;
            }

            double candidateWidth = result + correction;
            if (candidateWidth > _diagramWidth)
            {
                _diagramWidth = candidateWidth;
                PropertyChanged(this, new PropertyChangedEventArgs("DiagramWidth"));
            }

            return(result);
        }
Exemple #10
0
 /// <summary>
 /// Sends the specified item.
 /// </summary>
 /// <param name="item">The item.</param>
 public void Send(MarbleBase item)
 {
     _subject.OnNext(item);
 }
Exemple #11
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MarbleItemViewModel"/> class.
 /// </summary>
 /// <param name="item">The item.</param>
 public MarbleItemViewModel(MarbleBase item)
 {
     Item = item;
 }