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

            if (sheet == null)
            {
                return;
            }
            MainPage.SetTapHandler(gearItemGrid.grid, (s, e) => GearItem_DoubleTap(item), 2);
#if EXPAND_SELECTED
            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;
#if EXPAND_WITH_TAP
            MainPage.AddTapHandler(gearItemGrid.grid, (s, e) => GearItem_Tap(gearItemGrid.selected), 1);
#endif
#endif
            gearItemGrid.name.Text = item.AsString(sheet);
            if (gearItemGrid.viewButtonHandler != null)
            {
                gearItemGrid.viewButton.Clicked -= gearItemGrid.viewButtonHandler;
            }
            gearItemGrid.viewButtonHandler   = (s, e) => GearItemViewButton_Tap(item);
            gearItemGrid.viewButton.Clicked += gearItemGrid.viewButtonHandler;
            gearItemGrid.name.FontAttributes = item.active ? FontAttributes.Bold : FontAttributes.None;
        }
        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
        }
        public void GearItem_DoubleTap(CharacterSheet.GearItem gearItem = null)
        {
            if (pushedPage != null)
            {
                return;
            }
            var egi = new EditGearItem();

            egi.InitEditor(gearItem);
            pushedPage = egi;
            Navigation.PushAsync(pushedPage);
        }
        public void GearItemViewButton_Tap(CharacterSheet.GearItem gearItem = null)
        {
            if (pushedPage != null)
            {
                return;
            }
            var vgi = new ViewGearItem();

            vgi.InitView(gearItem);
            pushedPage = vgi;
            Navigation.PushAsync(pushedPage);
        }
 public void GearItem_CheckedChanged(CharacterSheet.GearItem gearItem, bool value)
 {
     if (gearItem == null)
     {
         return;
     }
     if (gearItem.selected == value)
     {
         return;
     }
     gearItem.selected = value;
     CharacterSheetStorage.Instance.SaveCharacter();
     UpdateView();
 }
        private void SelectItem(CharacterSheet.GearItem item)
        {
            if (pushedPage != null)
            {
                return;
            }
            var sgi = new SelectGearItem();

            sgi.InitSelection((selected) =>
            {
                modifier.sourceItemUID = selected == null ? CharacterSheet.InvalidUID : selected.uid;
            }, item);
            pushedPage = sgi;
            Navigation.PushAsync(pushedPage);
        }
        private GearItemGrid CreateGearItemGrid(CharacterSheet.GearItem item, int itemIndex)
        {
            if (item == null)
            {
                return(null);
            }
            var sheet = CharacterSheetStorage.Instance.selectedCharacter;

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

            grid.ColumnDefinitions = new ColumnDefinitionCollection()
            {
#if EXPAND_SELECTED
                new ColumnDefinition()
                {
                    Width = GridLength.Auto
                },
#endif
                new ColumnDefinition()
                {
                    Width = GridLength.Star
                },
                new ColumnDefinition()
                {
                    Width = GridLength.Auto
                },
            };
            grid.RowDefinitions = new RowDefinitionCollection()
            {
                new RowDefinition()
                {
                    Height = GridLength.Auto
                },
            };
            MainPage.AddTapHandler(grid, (s, e) => GearItem_DoubleTap(item), 2);
#if EXPAND_SELECTED
            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;
#if EXPAND_WITH_TAP
            MainPage.AddTapHandler(grid, (s, e) => GearItem_Tap(selectedcb), 1);
#endif
#endif
            var gearItemNameFrame = CreateFrame(item.AsString(sheet));
            var gearItemName      = gearItemNameFrame.Content as Label;
            gearItemName.FontAttributes = item.active ? FontAttributes.Bold : FontAttributes.None;
            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);
            viewButton.Clicked += viewButtonHandler;
            var column = 0;
#if EXPAND_SELECTED
            grid.Children.Add(selectedcb, column++, 0);
#endif
            grid.Children.Add(gearItemNameFrame, column++, 0);
            grid.Children.Add(viewButton, column++, 0);
            var newGearItemGrid = new GearItemGrid()
            {
                grid = grid,
#if EXPAND_SELECTED
                selectedHandler = selectedHandler,
                selected        = selectedcb,
#endif
                name              = gearItemName,
                viewButton        = viewButton,
                viewButtonHandler = viewButtonHandler,
            };

            return(newGearItemGrid);
        }
        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);
        }
        public void UpdateView()
        {
            pushedPage = null;
            if (sheet == null)
            {
                return;
            }
            UpdateValue();
            if (modifier == null)
            {
                return;
            }

            CharacterSheet.GearItem item = null;
            if (modifier.sourceItemUID == CharacterSheet.InvalidUID)
            {
                LinkedItem.Text = string.Empty;
            }
            else
            {
                item = sheet.GetItemByUID(modifier.sourceItemUID);
                if (item != null)
                {
                    LinkedItem.Text           = item.AsString(sheet);
                    LinkedItem.FontAttributes = item.active ? FontAttributes.Bold : FontAttributes.None;
                    LinkedItem.TextColor      = (item.active || !modifier.mustBeActive) ? Color.Green : Color.Red;
                }
                else
                {
                    LinkedItem.Text      = "Item not found";
                    LinkedItem.TextColor = Color.Red;
                }
            }
            MainPage.SetTapHandler(LinkedItemFrame, (s, e) => SelectItem(item));
            var loc = sheet.GetLevelOfClass(modifier.className);

            if (!modifier.multiplyToLevel)
            {
                ClassName.Text = string.Empty;
            }
            else
            {
                if (string.IsNullOrWhiteSpace(modifier.className) || (loc != null))
                {
                    ClassName.Text      = loc == null ? "Total Level" : modifier.className;
                    ClassName.TextColor = Color.Green;
                }
                else
                {
                    ClassName.Text      = "Class \"" + modifier.className + "\" not found";
                    ClassName.TextColor = Color.Red;
                }
            }

            var lms = loc == null ? "Total Level" : "Level Of " + modifier.className;
            var lm  = modifier.levelMultiplier.AsString(lms);

            if (lm == lms)
            {
                lm = string.Empty;
            }
            LevelMultiplier.Text = !modifier.multiplyToLevel ? string.Empty : lm;
            LevelMultiplierFrame.BackgroundColor  = modifier.multiplyToLevel ? Color.White : Color.LightGray;
            LevelMultiplierFrame.InputTransparent = !modifier.multiplyToLevel;

            MainPage.SetTapHandler(ClassNameFrame, (s, e) => SelectClass(modifier.className));
            AutoNaming.IsChecked = modifier.autoNaming;
        }