Ejemplo n.º 1
0
        /// <summary>
        /// Adds the representation of <see cref="HudBaseToolViewModel"/> to the associated <see cref="Canvas"/>
        /// </summary>
        /// <param name="toolViewModel">Tool to add</param>
        private void AddTool(HudBaseToolViewModel toolViewModel)
        {
            if (toolViewModel == null)
            {
                return;
            }

            var hudPanelService = ServiceLocator.Current.GetInstance <IHudPanelService>();

            var toolElement = hudPanelService.Create(toolViewModel);

            if (toolElement == null)
            {
                return;
            }

            Disposables.Add(Observable.FromEventPattern <SizeChangedEventHandler, SizeChangedEventArgs>(
                                h => toolElement.SizeChanged += h,
                                h => toolElement.SizeChanged -= h).Subscribe(x => ResizeCanvas()));

            Disposables.Add(Observable.FromEventPattern <RoutedEventHandler, RoutedEventArgs>(
                                h => toolElement.Loaded += h,
                                h => toolElement.Loaded -= h).Subscribe(x => ResizeCanvas()));

            AssociatedObject.Children.Add(toolElement);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Attaches context menu to the specified <see cref="FrameworkElement"/>
        /// </summary>
        /// <param name="hudToolViewModel"></param>
        /// <param name="hudTool"></param>
        protected virtual void AttachContextMenu(HudBaseToolViewModel hudToolViewModel, FrameworkElement hudTool)
        {
            if (hudToolViewModel == null || hudToolViewModel.Parent == null || hudTool == null)
            {
                return;
            }

            var menuItem = new RadMenuItem();

            var binding = new Binding(nameof(HudElementViewModel.NoteMenuItemText))
            {
                Source = hudToolViewModel.Parent,
                Mode   = BindingMode.OneWay
            };

            menuItem.SetBinding(RadMenuItem.HeaderProperty, binding);

            menuItem.Click += (s, e) =>
            {
                var playerNoteViewModel = new PlayerNoteViewModel(hudToolViewModel.Parent.PlayerId);

                var playerNoteView = new PlayerNoteView(playerNoteViewModel);
                playerNoteView.ShowDialog();

                hudToolViewModel.Parent.NoteToolTip = playerNoteViewModel.HasNotes ? playerNoteViewModel.Note : string.Empty;
            };

            var contextMenu = new RadContextMenu();

            contextMenu.Items.Add(menuItem);
            RadContextMenu.SetContextMenu(hudTool, contextMenu);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Calculates hudElement position in window
        /// </summary>
        /// <param name="hudElement">HUD element view model</param>
        /// <param name="window">Overlay window</param>
        /// <returns>Item1 - X, Item2 - Y</returns>
        public virtual Tuple <double, double> CalculatePositions(HudBaseToolViewModel toolViewModel, FrameworkElement toolElement, HudWindow window)
        {
            Check.ArgumentNotNull(() => toolViewModel);
            Check.ArgumentNotNull(() => window);
            Check.ArgumentNotNull(() => toolElement);

            var panelOffset = window.ViewModel.GetPanelOffset(toolViewModel);

            var xPosition = panelOffset.X != 0 ? panelOffset.X : toolViewModel.Position.X;
            var yPosition = panelOffset.Y != 0 ? panelOffset.Y : toolViewModel.Position.Y;

            var scaledXPosition = xPosition * window.ScaleX;
            var scaledYPosition = yPosition * window.ScaleY;

            // border limits
            var toolWidth = toolElement.ActualWidth != 0 && !double.IsNaN(toolElement.ActualWidth) ?
                            toolElement.ActualWidth :
                            (!double.IsNaN(toolViewModel.Width) ? toolViewModel.Width : 0);

            var toolHeight = toolElement.ActualHeight != 0 && !double.IsNaN(toolElement.ActualHeight) ?
                             toolElement.ActualHeight :
                             !double.IsNaN(toolViewModel.Height) ? toolViewModel.Height : 0;

            var widthLimit  = toolWidth >= HudDefaultSettings.MinimumDistanceToTheBorder ? HudDefaultSettings.MinimumDistanceToTheBorder : toolWidth;
            var heightLimit = toolHeight >= HudDefaultSettings.MinimumDistanceToTheBorder ? HudDefaultSettings.MinimumDistanceToTheBorder : toolHeight;

            if (toolWidth == 0 || toolWidth >= window.Width ||
                widthLimit >= window.Width || toolHeight == 0 ||
                toolHeight >= window.Height || (heightLimit + HudDefaultSettings.HudIconHeaderHeight) >= window.Height)
            {
                return(new Tuple <double, double>(scaledXPosition, scaledYPosition));
            }

            if (scaledXPosition > window.Width - widthLimit)
            {
                scaledXPosition       = window.Width - widthLimit;
                toolViewModel.OffsetX = window.ScaleX != 0 ? scaledXPosition / window.ScaleX : toolViewModel.OffsetX;
            }
            else if (scaledXPosition < widthLimit - toolWidth)
            {
                scaledXPosition       = widthLimit - toolWidth;
                toolViewModel.OffsetX = widthLimit - toolWidth;
            }

            if (scaledYPosition > window.Height - heightLimit - HudDefaultSettings.HudIconHeaderHeight)
            {
                scaledYPosition       = window.Height - heightLimit - HudDefaultSettings.HudIconHeaderHeight;
                toolViewModel.OffsetY = window.ScaleY != 0 ?
                                        ((window.Height - heightLimit) / window.ScaleY - HudDefaultSettings.HudIconHeaderHeight) :
                                        toolViewModel.OffsetY;
            }
            else if (scaledYPosition < heightLimit - toolHeight - HudDefaultSettings.HudIconHeaderHeight)
            {
                scaledYPosition       = heightLimit - toolHeight - HudDefaultSettings.HudIconHeaderHeight;
                toolViewModel.OffsetY = heightLimit - toolHeight - HudDefaultSettings.HudIconHeaderHeight;
            }

            return(new Tuple <double, double>(scaledXPosition, scaledYPosition));
        }
Ejemplo n.º 4
0
        internal void UpdatePanelOffset(HudBaseToolViewModel toolViewModel)
        {
            var toolKey = HudToolKey.BuildKey(toolViewModel);

            if (toolViewModel != null &&
                (toolViewModel.OffsetX.HasValue || toolViewModel.OffsetY.HasValue))
            {
                panelOffsets[toolKey] = new Point(toolViewModel.OffsetX ?? 0, toolViewModel.OffsetY ?? 0);
            }
        }
Ejemplo n.º 5
0
        internal Point GetPanelOffset(HudBaseToolViewModel toolViewModel)
        {
            var toolKey = HudToolKey.BuildKey(toolViewModel);

            if (toolViewModel != null && panelOffsets.ContainsKey(toolKey))
            {
                return(panelOffsets[toolKey]);
            }

            return(new Point(0, 0));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Converts offset values into position value
        /// </summary>
        /// <param name="hudElement">HUD element view model</param>
        /// <param name="window">Overlay window</param>
        /// <returns>Item1 - X, Item2 - Y</returns>
        public virtual Tuple <double, double> GetOffsetPosition(HudBaseToolViewModel toolViewModel, HudWindowViewModel viewModel)
        {
            Check.ArgumentNotNull(() => toolViewModel);
            Check.ArgumentNotNull(() => viewModel);

            var panelOffset = viewModel.GetPanelOffset(toolViewModel);

            var xPosition = panelOffset.X != 0 ? panelOffset.X : toolViewModel.Position.X;
            var yPosition = panelOffset.Y != 0 ? panelOffset.Y : toolViewModel.Position.Y;

            return(new Tuple <double, double>(xPosition, yPosition));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Applies restrictions to the specified <see cref="HudBaseToolViewModel"/> for the specified <see cref="HudElementViewModelCreationInfo"/>
        /// </summary>
        /// <param name="toolViewModel"></param>
        /// <param name="creationInfo"></param>
        private void ApplyRestrictions(HudBaseToolViewModel toolViewModel, HudElementViewModelCreationInfo creationInfo)
        {
            if (creationInfo == null || creationInfo.PokerSite != EnumPokerSites.PokerStars)
            {
                return;
            }

            if (toolViewModel is HudGaugeIndicatorViewModel)
            {
                (toolViewModel as HudGaugeIndicatorViewModel).IsGraphIndicatorsDisabled = true;
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Creates <see cref="FrameworkElement"/>  based on specified <see cref="HudBaseToolViewModel"/>
        /// </summary>
        /// <param name="hudToolElement"><see cref="HudBaseToolViewModel"/></param>
        /// <returns>HUD panel as <see cref="FrameworkElement"/></returns>
        public virtual FrameworkElement Create(HudBaseToolViewModel hudToolElement)
        {
            Check.Require(hudToolElement != null);

            FrameworkElement hudTool = null;

            switch (hudToolElement.ToolType)
            {
            case HudDesignerToolType.PlainStatBox:
                hudTool = new HudPlainBox();
                AttachContextMenu(hudToolElement, hudTool);
                break;

            case HudDesignerToolType.FourStatBox:
                hudTool = new HudFourStatsBox();
                break;

            case HudDesignerToolType.TiltMeter:
                hudTool = new HudTiltMeter();
                break;

            case HudDesignerToolType.PlayerProfileIcon:
                hudTool = new HudPlayerIcon();
                break;

            case HudDesignerToolType.TextBox:
                hudTool = new HudTextBox();
                break;

            case HudDesignerToolType.BumperStickers:
                hudTool = new HudBumperStickers();
                break;

            case HudDesignerToolType.GaugeIndicator:
            case HudDesignerToolType.Graph:
            case HudDesignerToolType.HeatMap:
                break;

            default:
                throw new NotSupportedException($"{hudToolElement.ToolType} isn't supported");
            }

            if (hudTool != null)
            {
                hudTool.DataContext = hudToolElement;
            }

            return(hudTool);
        }
Ejemplo n.º 9
0
            public static HudToolKey BuildKey(HudBaseToolViewModel toolViewModel)
            {
                if (toolViewModel == null)
                {
                    return(null);
                }

                var seat = toolViewModel.Parent != null ? toolViewModel.Parent.Seat : 1;

                var toolKey = new HudToolKey
                {
                    Id   = toolViewModel.Id,
                    Seat = seat
                };

                return(toolKey);
            }
Ejemplo n.º 10
0
        /// <summary>
        /// Creates <see cref="FrameworkElementFactory"/> for the specified <see cref="HudBaseToolViewModel" />
        /// </summary>
        /// <param name="hudToolElement"><see cref="HudBaseToolViewModel"/> to create <see cref="FrameworkElementFactory"/></param>
        /// <returns><see cref="FrameworkElementFactory"/> for the specified <see cref="HudBaseToolViewModel" /></returns>
        public virtual FrameworkElementFactory CreateFrameworkElementFactory(HudBaseToolViewModel hudToolElement)
        {
            FrameworkElementFactory factory = null;

            switch (hudToolElement.ToolType)
            {
            case HudDesignerToolType.GaugeIndicator:
                factory = new FrameworkElementFactory(typeof(HudGaugeIndicator));
                break;

            case HudDesignerToolType.Graph:
                factory = new FrameworkElementFactory(typeof(HudGraph));
                break;

            case HudDesignerToolType.HeatMap:
                factory = new FrameworkElementFactory(typeof(HudHeatMap));
                break;

            default:
                break;
            }

            return(factory);
        }