Ejemplo n.º 1
0
        public SnookerBreakControl(SnookerMatchMetadata metadata, Label labelPointsLeft, BallsOnTable ballsOnTable, LargeNumberEntry2 entryA, LargeNumberEntry2 entryB)
        {
            this.metadata           = metadata;
            this.sbcLabelPointsLeft = labelPointsLeft;
            this.localBallsOnTable  = ballsOnTable;
            this.framePointsEntryA  = entryA;
            this.framePointsEntryB  = entryB;

            if ((this.framePointsEntryA.Number != null) &&
                (this.framePointsEntryB.Number != null))
            {
                curA = (int)this.framePointsEntryA.Number;
                curB = (int)this.framePointsEntryB.Number;
            }
            else
            {
                curA = 0;
                curB = 0;
            }

            updatePointsDiff();

            /// pocketed balls
            ///

            this.panelPocketedBalls1 = new StackLayout()
            {
                HeightRequest   = Config.SmallBallSize + (Config.IsTablet ? 5 : 2),
                Orientation     = StackOrientation.Horizontal,
                VerticalOptions = LayoutOptions.Center,
                Spacing         = Config.IsTablet ? 3 : 1,
                Padding         = new Thickness(0),
            };
            this.panelPocketedBalls2 = new StackLayout()
            {
                HeightRequest   = Config.SmallBallSize + (Config.IsTablet ? 5 : 2),
                Orientation     = StackOrientation.Horizontal,
                VerticalOptions = LayoutOptions.Center,
                Spacing         = Config.IsTablet ? 3 : 1,
                Padding         = new Thickness(0),
            };
            this.panelPocketedBalls3 = new StackLayout()
            {
                HeightRequest   = Config.SmallBallSize + (Config.IsTablet ? 5 : 2),
                Orientation     = StackOrientation.Horizontal,
                VerticalOptions = LayoutOptions.Center,
                Spacing         = Config.IsTablet ? 3 : 1,
                Padding         = new Thickness(0),
            };
            this.labelPoints = new BybLabel()
            {
                Text            = "",
                TextColor       = Config.ColorTextOnBackground,
                VerticalOptions = LayoutOptions.Center,
            };
            this.labelNoPoints = new BybLabel()
            {
                IsVisible = true,

                Text = "Tap on balls, then swipe here to finish break",
                //Text = "Tap on balls\r\nThen swipe here to assign to a player",
                //Text = "Tap balls, then swipe here to assign to player",
                TextColor = Config.ColorGrayTextOnWhite,
                //FontFamily = Config.FontFamily,
                //FontSize = Config.DefaultFontSize - 1,
                VerticalOptions         = LayoutOptions.Fill,
                VerticalTextAlignment   = TextAlignment.Center,
                HorizontalOptions       = LayoutOptions.Fill,
                HorizontalTextAlignment = TextAlignment.Center,
            };
            this.buttonDelete = new BybLabel()
            {
                Text                    = "X",
                TextColor               = Config.ColorTextOnBackground,
                WidthRequest            = Config.IsTablet ? 35 : 25,
                HeightRequest           = Config.IsTablet ? 35 : 30,
                HorizontalTextAlignment = TextAlignment.Center,
                VerticalTextAlignment   = TextAlignment.Center,
            };
            this.buttonDelete.GestureRecognizers.Add(new TapGestureRecognizer()
            {
                Command = new Command(() => { this.buttonDelete_Clicked(this, EventArgs.Empty); })
            });

            this.foulCheckbox = new CheckBox()
            {
                Checked           = false,
                DefaultText       = "- tap here if a foul -",
                UncheckedText     = "- tap here if a foul -",
                CheckedText       = "Foul",
                FontSize          = Config.DefaultFontSize,
                FontName          = Config.FontFamily,
                HorizontalOptions = LayoutOptions.Start,
                VerticalOptions   = LayoutOptions.Center,
            };
            this.foulCheckbox.CheckedChanged += (s1, e1) =>
            {
                updateFoul(this.foulCheckbox.Checked);
            };

            // container for balls and delete button
            var panelPocketedBallsActualBallsContainer = new StackLayout()
            {
                Orientation       = StackOrientation.Horizontal,
                VerticalOptions   = LayoutOptions.FillAndExpand,
                HorizontalOptions = LayoutOptions.Center,
                Spacing           = 0,
                Padding           = new Thickness(0),
                //BackgroundColor = Color.Yellow,
                Children =
                {
                    this.labelNoPoints,
                    this.labelPoints,
                    new StackLayout()
                    {
                        Orientation       = StackOrientation.Vertical,
                        Padding           = new Thickness(0),
                        Spacing           = 0,
                        HorizontalOptions = LayoutOptions.FillAndExpand,
                        VerticalOptions   = LayoutOptions.Center,
                        Children          =
                        {
                            this.panelPocketedBalls1,
                            this.panelPocketedBalls2,
                            this.panelPocketedBalls3,
                        }
                    },
                    this.buttonDelete,
                    this.foulCheckbox
                }
            };

            /// the panel with pocketed balls and tips
            ///

            // draggable panel
            this.swipePanel = new SwipePanel(
                panelPocketedBallsActualBallsContainer,
                "Add to " + (this.metadata.OpponentAthleteName ?? "Opponent"),
                "Add to " + (this.metadata.PrimaryAthleteName ?? "You"),
                this.panelPocketedBallsHeight)
            {
                Opacity           = 0.01,
                HeightRequest     = this.panelPocketedBallsHeight,
                Padding           = new Thickness(0, 0, 0, 0),
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.Start,
                BackgroundColor   = Config.ColorBlackBackground,
            };
            this.swipePanel.breakOwnerChanged += swipePanel_breakOwnerChanged;

            this.swipePanel.DraggedLeft += () =>
            {
                if (true == this.swipePanel.getIsOpponentBreak())
                {
                    // if Swiped left, but was counting for opponent:
                    //   - change the break owner first
                    //   - and update the frame score
                    this.swipePanel.setIsOpponentBreak(false);
                    updateOwnerChanged();
                }
                localBallsOnTable.breakFinished();
                updatePointsDiff();

                if (this.DoneLeft != null)
                {
                    this.DoneLeft(this, EventArgs.Empty);
                }
            };
            this.swipePanel.DraggedRight += () =>
            {
                if (false == this.swipePanel.getIsOpponentBreak())
                {
                    // if Swiped right, but was counting for "me":
                    //   - change the break owner first
                    //   - and update the frame score
                    this.swipePanel.setIsOpponentBreak(true);
                    updateOwnerChanged();
                }
                localBallsOnTable.breakFinished();
                updatePointsDiff();

                if (this.DoneRight != null)
                {
                    this.DoneRight(this, EventArgs.Empty);
                }
            };

            /// balls
            ///
            buttonsBalls = new List <Button>();
            foreach (var color in Config.BallColors)
            {
                Color textColor = Color.White;
                if (Config.BallColors.IndexOf(color) == 0)
                {
                    textColor = Color.Gray;
                }
                if (Config.BallColors.IndexOf(color) == 2)
                {
                    textColor = Color.Gray;
                }
                Color borderColor = Color.Black;
                if (Config.BallColors.IndexOf(color) == 7)
                {
                    borderColor = Config.ColorTextOnBackgroundGrayed;
                }

                var buttonBall = new BybButton
                {
                    Text                 = Config.BallColors.IndexOf(color) == 0 ? "x" : Config.BallColors.IndexOf(color).ToString(),
                    BackgroundColor      = color,
                    BorderColor          = borderColor,
                    TextColor            = textColor,
                    BorderWidth          = 1,
                    BorderRadius         = (int)(sizeOfBalls / 2),
                    HeightRequest        = sizeOfBalls,
                    MinimumHeightRequest = sizeOfBalls,
                    WidthRequest         = sizeOfBalls,
                    MinimumWidthRequest  = sizeOfBalls,

                    FontFamily     = Config.FontFamily,
                    FontSize       = Config.LargerFontSize,
                    FontAttributes = Config.BallColors.IndexOf(color) == 1 ? FontAttributes.Bold : FontAttributes.None
                };
                buttonBall.Clicked += buttonBall_Clicked;
                buttonsBalls.Add(buttonBall);
            }

            this.grid = new Grid()
            {
                HorizontalOptions = LayoutOptions.Fill,
                VerticalOptions   = LayoutOptions.Fill,
                ColumnSpacing     = 0,
                RowSpacing        = 0,
                Padding           = new Thickness(0, padding, 0, 0),
                BackgroundColor   = Config.ColorBlackBackground,
                ColumnDefinitions =
                {
                    //new ColumnDefinition() { Width = new GridLength(90, GridUnitType.Absolute) },
                    new ColumnDefinition()
                    {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                    //new ColumnDefinition() { Width = new GridLength(90, GridUnitType.Absolute) },
                },
                RowDefinitions =
                {
                    new RowDefinition()
                    {
                        Height = new GridLength(1, GridUnitType.Star)
                    }
                },
            };

            this.buildPanelBalls();
            //grid.Children.Add(panelBalls, 0, 0);//1, 0);

            this.HelpButtonControl = new HelpButtonControl()
            {
                HorizontalOptions = LayoutOptions.Start,
                Padding           = new Thickness(0, 0, 0, 0),
            };

            this.label_ballsOnTable = new BybLabel()
            {
                Text                    = "On table",
                TextColor               = Config.ColorGrayTextOnWhite,
                VerticalOptions         = LayoutOptions.Fill,
                VerticalTextAlignment   = TextAlignment.Start,
                HorizontalOptions       = LayoutOptions.Fill,
                HorizontalTextAlignment = TextAlignment.Start,
            };

            // add a ball
            this.label_redsOnTable = new BybLabel()
            {
                Text            = "15",
                TextColor       = Config.ColorTextOnBackground,
                VerticalOptions = LayoutOptions.Center,
            };
            int   ballScore      = 1; // or for lowest colored
            Color color2         = Config.BallColors[ballScore];
            Color borderColor2   = color2;
            Color textColor2     = Color.Black;
            int   ballSizeMedium = (int)(Config.SmallBallSize * 1.5);

            redBall = new BybButton
            {
                IsEnabled            = true,
                Text                 = "",
                BackgroundColor      = color2,
                BorderColor          = borderColor2,
                FontFamily           = Config.FontFamily,
                FontSize             = Config.LargerFontSize,
                TextColor            = textColor2,
                BorderWidth          = 1,
                BorderRadius         = (int)(ballSizeMedium / 2),
                HeightRequest        = ballSizeMedium,
                MinimumHeightRequest = ballSizeMedium,
                WidthRequest         = ballSizeMedium,
                MinimumWidthRequest  = ballSizeMedium,
                VerticalOptions      = LayoutOptions.Center,
                HorizontalOptions    = LayoutOptions.Center
            };
            redBall.Clicked += (object sender, EventArgs e) =>
            {
                Console.WriteLine("Red ball clicked ");
                pickerReds.IsEnabled = true;
                pickerReds.Focus();
            };

            this.pickerReds = new BybNoBorderPicker()
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.Center,
                IsVisible         = false,
                IsEnabled         = false
            };
            this.pickerReds.Items.Add("0");
            this.pickerReds.Items.Add("1");
            this.pickerReds.Items.Add("2");
            this.pickerReds.Items.Add("3");
            this.pickerReds.Items.Add("4");
            this.pickerReds.Items.Add("5");
            this.pickerReds.Items.Add("6");
            this.pickerReds.Items.Add("7");
            this.pickerReds.Items.Add("8");
            this.pickerReds.Items.Add("9");
            this.pickerReds.Items.Add("10");
            this.pickerReds.Items.Add("11");
            this.pickerReds.Items.Add("12");
            this.pickerReds.Items.Add("13");
            this.pickerReds.Items.Add("14");
            this.pickerReds.Items.Add("15");
            this.pickerReds.SelectedIndex         = 0;
            this.pickerReds.SelectedIndexChanged += pickerReds_SelectedIndexChanged;

            this.pickerColors = new BybNoBorderPicker()
            {
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.Center,
                //HeightRequest = 50
            };
            this.pickerColors.Items.Add("2");
            this.pickerColors.Items.Add("3");
            this.pickerColors.Items.Add("4");
            this.pickerColors.Items.Add("5");
            this.pickerColors.Items.Add("6");
            this.pickerColors.Items.Add("7");
            this.pickerColors.SelectedIndex         = 0;
            this.pickerColors.SelectedIndexChanged += pickerColors_SelectedIndexChanged;

            // add colored ball
            ballScore    = 2; // or for lowest colored
            color2       = Config.BallColors[ballScore];
            borderColor2 = color2;
            textColor2   = Color.Gray;

            coloredBall = new BybButton
            {
                IsEnabled            = true,
                Text                 = "",
                BackgroundColor      = color2,
                BorderColor          = borderColor2,
                FontFamily           = Config.FontFamily,
                FontSize             = Config.LargerFontSize,
                TextColor            = textColor2,
                BorderWidth          = 1,
                BorderRadius         = (int)(ballSizeMedium / 2),
                HeightRequest        = ballSizeMedium,
                MinimumHeightRequest = ballSizeMedium,
                WidthRequest         = ballSizeMedium,
                MinimumWidthRequest  = ballSizeMedium,
                VerticalOptions      = LayoutOptions.Center,
                HorizontalOptions    = LayoutOptions.Center
            };
            coloredBall.Clicked += (object sender, EventArgs e) =>
            {
                if (0 != localBallsOnTable.numberOfReds)
                {
                    Console.WriteLine("Colored ball clicked: but there are reds on the table, so ignore");
                }
                else
                {
                    Console.WriteLine("Colored ball clicked ");
                    pickerColors.IsEnabled = true;
                    pickerColors.Focus();
                }
            };
            this.stack_ballsOnTable = new StackLayout
            {
                Orientation = StackOrientation.Vertical,
                Padding     = new Thickness(Config.IsTablet ? 30 : 15, 0, 0, 0),
                Spacing     = 10,
                //HorizontalOptions = LayoutOptions.Center,
                HorizontalOptions = LayoutOptions.Start,
                VerticalOptions   = LayoutOptions.Center,
                Children          =
                {
                    label_ballsOnTable,
                    new StackLayout
                    {
                        Orientation       = StackOrientation.Horizontal,
                        HorizontalOptions = LayoutOptions.Start,
                        Spacing           = buttonSpacing,
                        Padding           = new Thickness(0),
                        Children          =
                        {
                            redBall,
                            label_redsOnTable,
                            pickerReds
                        }
                    },
                    new StackLayout
                    {
                        Orientation       = StackOrientation.Horizontal,
                        HorizontalOptions = LayoutOptions.Start,
                        Spacing           = buttonSpacing,
                        Padding           = new Thickness(0),
                        Children          =
                        {
                            coloredBall,
                            pickerColors
                        }
                    },
                }
            };

            this.VoiceButtonControl = new VoiceButtonControl()
            {
                HorizontalOptions = LayoutOptions.Start,
                Padding           = new Thickness(0, 0, 0, 0),
            };
            grid.Children.Add(new StackLayout()
            {
                Orientation       = StackOrientation.Vertical,
                Padding           = new Thickness(Config.IsTablet ? 30 : 15, 0, 0, 0),
                Spacing           = 10,
                HorizontalOptions = LayoutOptions.Start,
                VerticalOptions   = LayoutOptions.Center,
                Children          =
                {
                    this.stack_ballsOnTable,
                    (new BoxView()
                    {
                        HeightRequest = 40,
                        BackgroundColor = Config.ColorBlackBackground,
                    }),
                    this.HelpButtonControl,
                    this.VoiceButtonControl,
                }
            }, 0, 0);

            /// content
            ///
            this.BackgroundColor = Config.ColorBlackBackground;
            this.Padding         = new Thickness(0);
            this.Spacing         = 0;
            this.Orientation     = StackOrientation.Vertical;

            this.Children.Add(new BoxView()
            {
                HeightRequest   = 1,
                BackgroundColor = Config.ColorBackground,
            });
            this.Children.Add(this.swipePanel);
            this.Children.Add(new BoxView()
            {
                HeightRequest   = 1,
                BackgroundColor = Config.ColorBackground,
            });
            this.Children.Add(grid);

            this.updateControls();

            // update pickers
            updateBallsOnTable_ballsChanged();
        }
Ejemplo n.º 2
0
        void init()
        {
            /// top panel
            ///

            this.buttonBack = new BybBackButton()
            {
                LabelText = Config.App == MobileAppEnum.SnookerForVenues ? "All frames" : ""
            };
            this.buttonBack.Clicked += (s1, e1) =>
            {
                if (this.UserTappedBack != null)
                {
                    UserTappedBack();
                }
            };
            this.labelTop = new BybLabel()
            {
                Text              = "Frame " + (MatchScore.FrameScores.IndexOf(CurrentFrameScore) + 1).ToString(),
                TextColor         = Color.White,
                FontFamily        = Config.FontFamily,
                FontSize          = Config.LargerFontSize,
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
            };
            this.labelDone = new BybLabel()
            {
                Text                    = "Done",
                TextColor               = Color.White,
                FontFamily              = Config.FontFamily,
                FontSize                = Config.LargerFontSize,
                HorizontalOptions       = LayoutOptions.End,
                VerticalOptions         = LayoutOptions.FillAndExpand,
                HorizontalTextAlignment = TextAlignment.End,
                VerticalTextAlignment   = TextAlignment.Center,
            };
            Grid buttonDone = new Grid()
            {
                Padding           = new Thickness(0, 0, Config.IsTablet ? 20 : 10, 0),
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.FillAndExpand,
                //HasShadow = false,
                BackgroundColor = Config.ColorBlackBackground,
                //Content = this.labelDone,
                Children =
                {
                    this.labelDone
                }
            };

            buttonDone.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(() =>
                {
                    if (this.UserTappedDone != null)
                    {
                        UserTappedDone();
                    }
                })
            });
            this.panelTop = new Grid()
            {
                BackgroundColor   = Config.ColorBlackBackground,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.Fill,
                Padding           = new Thickness(0, 20, 0, 0),
                ColumnSpacing     = 0,
                RowSpacing        = 0,
                RowDefinitions    =
                {
                    new RowDefinition()
                    {
                        Height = new GridLength(1, GridUnitType.Star)
                    },
                },
                ColumnDefinitions =
                {
                    new ColumnDefinition()
                    {
                        Width = new GridLength(Config.App == MobileAppEnum.SnookerForVenues ? 200 : 100, GridUnitType.Absolute)
                    },
                    new ColumnDefinition()
                    {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                    new ColumnDefinition()
                    {
                        Width = new GridLength(Config.App == MobileAppEnum.SnookerForVenues ? 200 : 100, GridUnitType.Absolute)
                    },
                }
            };
            panelTop.Children.Add(buttonBack, 0, 0);
            panelTop.Children.Add(this.labelTop, 1, 0);
            panelTop.Children.Add(buttonDone, 2, 0);
            if (Config.App == MobileAppEnum.SnookerForVenues)
            {
                // add a horizontal line
                panelTop.Children.Add(new BoxView()
                {
                    HeightRequest     = 1,
                    BackgroundColor   = Config.ColorBackground,
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                    VerticalOptions   = LayoutOptions.End,
                }, 0, 3, 0, 1);
            }

            /// panel with the frame score, inside secondPanel
            ///
            this.entryCurrentFrameA = new LargeNumberEntry2(Config.ColorBlackBackground)
            {
                BackgroundColor   = Config.ColorBlackBackground,
                HorizontalOptions = LayoutOptions.Fill,
                VerticalOptions   = LayoutOptions.FillAndExpand,
                Padding           = new Thickness(0, Config.IsTablet ? 15 : 5, 0, 0),
                WidthRequest      = Config.App == MobileAppEnum.SnookerForVenues ? 200 : (Config.IsTablet ? 70 : 60),
                TextAlignment     = TextAlignment.End,
            };
            this.entryCurrentFrameB = new LargeNumberEntry2(Config.ColorBlackBackground)
            {
                BackgroundColor   = Config.ColorBlackBackground,
                HorizontalOptions = LayoutOptions.Fill,
                VerticalOptions   = LayoutOptions.FillAndExpand,
                Padding           = new Thickness(0, Config.IsTablet ? 15 : 5, 0, 0),
                WidthRequest      = Config.App == MobileAppEnum.SnookerForVenues ? 200 : (Config.IsTablet ? 70 : 60),
                TextAlignment     = TextAlignment.Start,
            };
            this.labelMatchScore = new BybLabel()
            {
                //Text = "Edit score",
                Text              = "Match score",
                TextColor         = Config.ColorTextOnBackgroundGrayed,
                HorizontalOptions = LayoutOptions.Center,
            };
            this.labelMatchScoreDigits = new BybLabel()
            {
                //Text = "Edit score",
                Text              = (this.MatchScore.MatchScoreA).ToString() + ":" + (this.MatchScore.MatchScoreB).ToString(),
                TextColor         = Config.ColorTextOnBackgroundGrayed,
                HorizontalOptions = LayoutOptions.Center,
            };

            /*
             *          this.labelTapToEditFrameScore = new BybLabel ()
             *          {
             *                  //Text = "Edit score",
             *                  Text = "Frame score",
             *                  TextColor = Config.ColorTextOnBackgroundGrayed,
             *                  HorizontalOptions = LayoutOptions.Center,
             *          };
             */
            this.labelPointsLeft = new BybLabel()
            {
                Text                  = "",
                TextColor             = Config.ColorTextOnBackgroundGrayed,
                HorizontalOptions     = LayoutOptions.Center,
                VerticalTextAlignment = TextAlignment.Center,
            };
            if (Config.IsTablet)
            {
                this.labelPointsLeft.HeightRequest = 40;
            }
            this.entryCurrentFrameA.FocusedOnNumber     += entryCurrentFrameA_FocusedOnNumber;
            this.entryCurrentFrameB.FocusedOnNumber     += entryCurrentFrameB_FocusedOnNumber;
            this.entryCurrentFrameA.UnfocusedFromNumber += entryCurrentFrameA_UnfocusedFromNumber;
            this.entryCurrentFrameB.UnfocusedFromNumber += entryCurrentFrameB_UnfocusedFromNumber;
            this.entryCurrentFrameA.NumberChanged       += entryCurrentFrameA_NumberChanged;
            this.entryCurrentFrameB.NumberChanged       += entryCurrentFrameB_NumberChanged;
            this.panelFrame = new StackLayout()
            {
                IsVisible         = true,
                Orientation       = StackOrientation.Vertical,
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
                Spacing           = 0,
                Padding           = new Thickness(0, 0, 0, 0),
                //BackgroundColor = Color.Olive,
                Children =
                {
                    this.labelMatchScore,
                    this.labelMatchScoreDigits,
                    //this.labelTapToEditFrameScore,
                    new StackLayout()
                    {
                        //BackgroundColor = Color.Red,
                        Orientation       = StackOrientation.Horizontal,
                        Spacing           = 0,
                        Padding           = new Thickness(0,      0, 0, 0),
                        HorizontalOptions = LayoutOptions.Center,
                        Children          =
                        {
                            this.entryCurrentFrameA,
                            new BybLabel()
                            {
                                Text                    = ":",
                                FontSize                = Config.App == MobileAppEnum.SnookerForVenues ? 50 : Config.VeryLargeFontSize,
                                TextColor               = Config.ColorTextOnBackgroundGrayed,
                                WidthRequest            = 15,
                                HeightRequest           = Config.App == MobileAppEnum.SnookerForVenues ? 100 : 38,
                                VerticalOptions         = LayoutOptions.End,
                                HorizontalTextAlignment = TextAlignment.Center,
                                VerticalTextAlignment   = TextAlignment.Center,
                            },
                            this.entryCurrentFrameB,
                        }
                    },
                    this.labelPointsLeft,
                }
            };

            /// second panel
            ///
            this.imageYou = new BybPersonImage()
            {
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
                WidthRequest      = imageSize,
                HeightRequest     = imageSize,
                BackgroundColor   = Color.Transparent,
                Background        = BackgroundEnum.Black,
            };
            this.imageOpponent = new BybPersonImage()
            {
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
                WidthRequest      = imageSize,
                HeightRequest     = imageSize,
                BackgroundColor   = Color.Transparent,
                Background        = BackgroundEnum.Black,
            };
            this.imageYou.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(() => { this.imageYou_Clicked(); }),
                NumberOfTapsRequired = 1
            });
            this.imageOpponent.GestureRecognizers.Add(new TapGestureRecognizer
            {
                Command = new Command(() => { this.imageOpponent_Clicked(); }),
                NumberOfTapsRequired = 1
            });
            this.panelSecond = new Grid
            {
                BackgroundColor   = Config.ColorBlackBackground,
                HorizontalOptions = LayoutOptions.Fill,
                VerticalOptions   = LayoutOptions.Fill,
                Padding           = new Thickness(15, panelSecondPaddingTop, 15, panelSecondPaddingBottom),
                ColumnSpacing     = 0,
                RowSpacing        = 0,
                ColumnDefinitions =
                {
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Auto)
                    },
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                },
                RowDefinitions =
                {
                    new RowDefinition {
                        Height = new GridLength(1, GridUnitType.Star)
                    },
                },
            };
            panelSecond.Children.Add(this.imageYou, 0, 0);
            panelSecond.Children.Add(this.panelFrame, 1, 0);
            panelSecond.Children.Add(this.imageOpponent, 2, 0);

            /// a panel for entering frame score
            ///
            this.labelEnteringFrameScore = new BybLabel
            {
                Text                    = "",
                TextColor               = Config.ColorTextOnBackground,
                HeightRequest           = 40,
                HorizontalOptions       = LayoutOptions.Center,
                HorizontalTextAlignment = TextAlignment.Center,
            };
            panelEnteringFrameScore = new StackLayout()
            {
                IsVisible         = false,
                Orientation       = StackOrientation.Vertical,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                Padding           = new Thickness(0, 20, 0, 0),
                Spacing           = 5,
                BackgroundColor   = Config.ColorBlackBackground,
                Children          =
                {
                    this.labelEnteringFrameScore,
                    new BybLabel
                    {
                        Text                    = "Tap here when done.",
                        TextColor               = Config.ColorTextOnBackground,
                        HorizontalOptions       = LayoutOptions.Center,
                        HorizontalTextAlignment = TextAlignment.Center,
                        //VerticalTextAlignment = TextAlignment.Center
                    }
                }
            };

            /// the current snooker break
            ///
            this.snookerBreakControl                   = new SnookerBreakControl(new MetadataHelper().FromScoreForYou(this.MatchScore), labelPointsLeft, CurrentFrameScore.ballsOnTable, entryCurrentFrameA, entryCurrentFrameB);
            this.snookerBreakControl.Padding           = new Thickness(0, 0, 0, 0);
            this.snookerBreakControl.VerticalOptions   = LayoutOptions.FillAndExpand;
            this.snookerBreakControl.HorizontalOptions = LayoutOptions.FillAndExpand;
            this.snookerBreakControl.DoneLeft         += snookerBreakControl_DoneLeft;
            this.snookerBreakControl.DoneRight        += snookerBreakControl_DoneRight;
            this.snookerBreakControl.BallsChanged     += snookerBreakControl_BallsChanged;

            /// list of past breaks
            ///
            this.listOfBreaksInMatchControl                    = new ListOfBreaksInMatchControl();
            this.listOfBreaksInMatchControl.Padding            = new Thickness(Config.IsTablet ? 15 : 0, 0, Config.IsTablet ? 15 : 0, 0);
            this.listOfBreaksInMatchControl.UserTappedOnBreak += this.listOfBreaksInMatchControl_UserTappedOnBreak;
            this.labelPastBreaks = new SimpleButtonWithLittleDownArrow(false)
            {
                Text   = "Show previous",
                IsBold = false,
                //IsSmallerFont = true,
                HeightRequest     = heightOfLabelPastBreaks,
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
                IsVisible         = Config.App != MobileAppEnum.SnookerForVenues,
            };
            this.labelPastBreaks2 = new BybLabel()
            {
                IsVisible         = false,
                Text              = "",
                TextColor         = Config.ColorTextOnBackgroundGrayed,
                HeightRequest     = heightOfLabelPastBreaks,
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
            };
            this.panelPastBreaks = new StackLayout()
            {
                Orientation       = StackOrientation.Vertical,
                HorizontalOptions = LayoutOptions.Fill,
                VerticalOptions   = LayoutOptions.Start,
                Spacing           = 0,
                BackgroundColor   = Config.ColorBackground,//Color.Black,
                Children          =
                {
                    new BoxView()
                    {
                        HeightRequest   = 1,
                        BackgroundColor = Config.ColorBackground,
                    },
                    this.labelPastBreaks,
//                    new Frame
//                    {
//                        IsVisible = Config.App != MobileAppEnum.SnookerForVenues,
//                        HeightRequest = heightOfLabelPastBreaks,
//                        Padding = new Thickness(0),
//                        HorizontalOptions = LayoutOptions.Center,
//                        VerticalOptions = LayoutOptions.Start,
//                        HasShadow = false,
//                        BackgroundColor = Color.Transparent,
//                        Content = this.labelPastBreaks,
//                    },
                    this.labelPastBreaks2,
                    this.listOfBreaksInMatchControl,
                }
            };
            this.labelPastBreaks.Clicked += (s1, e1) => { this.panelPastBreaksTapped(); };
            this.panelPastBreaks.GestureRecognizers.Add(new TapGestureRecognizer()
            {
                Command = new Command(() => { this.panelPastBreaksTapped(); })
            });

            /// content
            ///
            this.absoluteLayout = new AbsoluteLayout()
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
            };
            this.absoluteLayout.Children.Add(this.panelTop);
            this.absoluteLayout.Children.Add(this.panelSecond);
            this.absoluteLayout.Children.Add(this.snookerBreakControl);
            this.absoluteLayout.Children.Add(this.panelPastBreaks);
            this.absoluteLayout.Children.Add(this.panelEnteringFrameScore);
            Content = this.absoluteLayout;

            this.Padding         = new Thickness(0, 0, 0, 0);
            this.BackgroundColor = Color.Black;

            this.snookerBreakControl.VoiceButtonControl.PageTopLevelLayout = absoluteLayout;
            this.snookerBreakControl.HelpButtonControl.PageTopLevelLayout  = absoluteLayout;
        }