private void UpdateGearItemGrid(SelectedGearItemGrid gearItemGrid, CharacterSheet.GearItem item, int itemIndex)
        {
            var sheet = CharacterSheetStorage.Instance.selectedCharacter;

            if (sheet == null)
            {
                return;
            }

            if (gearItemGrid.selectedHandler != null)
            {
                gearItemGrid.selected.CheckedChanged -= gearItemGrid.selectedHandler;
            }
            gearItemGrid.selectedHandler          = (s, e) => GearItem_CheckedChanged(item, e.Value);
            gearItemGrid.selected.IsChecked       = item.selected;
            gearItemGrid.selected.CheckedChanged += gearItemGrid.selectedHandler;

            gearItemGrid.name.Text        = item.name;
            gearItemGrid.amount.Text      = item.amount.GetTotal(sheet).ToString();
            gearItemGrid.weight.Text      = item.weight.GetTotal(sheet).ToString();
            gearItemGrid.description.Text = item.description;

            if (gearItemGrid.viewButtonHandler != null)
            {
                gearItemGrid.viewButton.Clicked -= gearItemGrid.viewButtonHandler;
            }
            gearItemGrid.viewButtonHandler   = (s, e) => GearItemViewButton_Tap(item, itemIndex);
            gearItemGrid.viewButton.Clicked += gearItemGrid.viewButtonHandler;

            MainPage.SetTapHandler(gearItemGrid.grid, (s, e) => GearItem_DoubleTap(item, itemIndex), 2);
#if EXPAND_WITH_TAP
            MainPage.AddTapHandler(gearItemGrid.grid, (s, e) => GearItem_Tap(gearItemGrid.selected), 1);
#endif
        }
 private void RemoveGearItemGrid(SelectedGearItemGrid gearItemGrid)
 {
     if (gearItemGrid == null)
     {
         return;
     }
     Gear.Children.Remove(gearItemGrid.grid);
     gearItemGrids.Remove(gearItemGrid);
     selectedGearItemGridsPool.Add(gearItemGrid);
 }
        private SelectedGearItemGrid CreateSelectedGearItemGrid(CharacterSheet.GearItem item, int itemIndex)
        {
            if (item == null)
            {
                return(null);
            }
            var sheet = CharacterSheetStorage.Instance.selectedCharacter;

            if (sheet == null)
            {
                return(null);
            }
            if (selectedGearItemGridsPool.Count > 0)
            {
                var gearItemGrid = selectedGearItemGridsPool[0];
                selectedGearItemGridsPool.RemoveAt(0);
                UpdateGearItemGrid(gearItemGrid, item, itemIndex);
                return(gearItemGrid);
            }
            var grid = new Grid()
            {
                ColumnSpacing   = 5,
                RowSpacing      = 5,
                BackgroundColor = Color.LightGray,
            };

            grid.ColumnDefinitions = new ColumnDefinitionCollection()
            {
                new ColumnDefinition()
                {
                    Width = GridLength.Auto
                }
                ,
                new ColumnDefinition()
                {
                    Width = GridLength.Star
                },
            };
            const int count          = 14;
            var       rowDefinitions = new RowDefinitionCollection();

            for (var i = 0; i < count; i++)
            {
                rowDefinitions.Add(new RowDefinition()
                {
                    Height = GridLength.Auto
                });
            }
            grid.RowDefinitions = rowDefinitions;
            var selectedcb = new CheckBox()
            {
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
                IsChecked         = item.selected,
            };
            EventHandler <CheckedChangedEventArgs> selectedHandler = (s, e) => GearItem_CheckedChanged(item, e.Value);

            selectedcb.CheckedChanged += selectedHandler;
            var nameTitle      = CreateLabel("Name: ");
            var nameTitleStack = new StackLayout()
            {
                Orientation       = StackOrientation.Horizontal,
                HorizontalOptions = LayoutOptions.Center,
                VerticalOptions   = LayoutOptions.Center,
            };

            nameTitleStack.Children.Add(selectedcb);
            nameTitleStack.Children.Add(nameTitle);

            var nameValueStack = new StackLayout()
            {
                Orientation       = StackOrientation.Horizontal,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                VerticalOptions   = LayoutOptions.FillAndExpand,
            };
            var nameValue  = CreateFrame(item.name);
            var viewButton = new Button()
            {
                Text              = "View",
                FontSize          = Device.GetNamedSize(NamedSize.Medium, typeof(Button)),
                TextColor         = Color.Black,
                VerticalOptions   = LayoutOptions.Center,
                HorizontalOptions = LayoutOptions.Center,
            };
            EventHandler viewButtonHandler = (s, e) => GearItemViewButton_Tap(item, itemIndex);

            viewButton.Clicked += viewButtonHandler;
            nameValueStack.Children.Add(nameValue);
            nameValueStack.Children.Add(viewButton);

            var row = 0;

            grid.Children.Add(nameTitleStack, 0, row);
            grid.Children.Add(nameValueStack, 1, row);
            row += 1;

            var amountTitle = CreateLabel("Amount: ");
            var amountValue = CreateFrame(item.amount.GetTotal(sheet).ToString());

            grid.Children.Add(amountTitle, 0, row);
            grid.Children.Add(amountValue, 1, row);
            row += 1;

            var weightTitle = CreateLabel("Weight: ");
            var weightValue = CreateFrame(item.weight.GetTotal(sheet).ToString());

            grid.Children.Add(weightTitle, 0, row);
            grid.Children.Add(weightValue, 1, row);
            row += 1;

            var descriptionTitle = CreateLabel("Description: ");

            grid.Children.Add(descriptionTitle, 0, 2, row, row + 1);
            row += 1;

            var descriptionValue = CreateFrame(item.description);

            grid.Children.Add(descriptionValue, 0, 2, row, row + 1);
            row += 1;

            MainPage.AddTapHandler(grid, (s, e) => GearItem_DoubleTap(item, itemIndex), 2);
#if EXPAND_WITH_TAP
            MainPage.AddTapHandler(grid, (s, e) => GearItem_Tap(selectedcb), 1);
#endif
            var newGearItemGrid = new SelectedGearItemGrid()
            {
                grid              = grid,
                selectedHandler   = selectedHandler,
                selected          = selectedcb,
                viewButtonHandler = viewButtonHandler,
                viewButton        = viewButton,
                nameTitle         = nameTitle,
                name              = nameValue.Content as Label,
                amountTitle       = amountTitle,
                amount            = amountValue.Content as Label,
                weightTitle       = weightTitle,
                weight            = weightValue.Content as Label,
                descriptionTitle  = descriptionTitle,
                description       = descriptionValue.Content as Label,
            };
            return(newGearItemGrid);
        }
 private void UpdateGearItemGrid(SelectedGearItemGrid gearItemGrid, KeyValuePair <CharacterSheet.GearItem, int> kvp)
 {
     UpdateGearItemGrid(gearItemGrid, kvp.Key, kvp.Value);
 }