/// <summary>
        /// Returns contents of specified part.
        /// </summary>
        /// <param name="cell">Multiline cell.</param>
        /// <param name="part">Part.</param>
        /// <returns>Eves object in specified part.</returns>
        protected override EvasObject OnGetContent(Cell cell, string part)
        {
            MultilineCell multilineCell = (MultilineCell)cell;

            if (part == _iconPart && multilineCell.Icon != null)
            {
                var image = new NImage(Forms.NativeParent);
                SetUpImage(multilineCell, image);
                return(image);
            }
            else if (part == _endPart && multilineCell.IsCheckVisible)
            {
                var check = new Check(Forms.NativeParent);
                check.SetAlignment(-1, -1);
                check.SetWeight(1, 1);
                check.IsChecked = multilineCell.IsChecked;

                //It is a temporary way to prevent that the check of the Cell gets focus until the UX about views in the Cell for TV is defined.
                if (Device.Idiom == TargetIdiom.TV)
                {
                    check.AllowFocus(false);
                }

                return(check);
            }

            return(null);
        }
        /// <summary>
        /// Handles cell's properties change.
        /// Updates view properties.
        /// </summary>
        /// <param name="cell">Actual multiline cell.</param>
        /// <param name="property">Property name.</param>
        /// <param name="realizedView">Set of corresponding properties names and Evas Objects.</param>
        /// <returns>False if property has been changed. True otherwise.</returns>
        protected override bool OnCellPropertyChanged(Cell cell, string property, Dictionary <string, EvasObject> realizedView)
        {
            MultilineCell multilineCell = (MultilineCell)cell;

            if (property == MultilineCell.IconProperty.PropertyName)
            {
                if (!realizedView.ContainsKey(_iconPart) || multilineCell.Icon == null)
                {
                    return(true);
                }

                var image = realizedView[_iconPart] as NImage;
                SetUpImage(multilineCell, image);

                return(false);
            }
            else if (property == MultilineCell.IsCheckedProperty.PropertyName && realizedView.ContainsKey(_endPart))
            {
                var check = realizedView[_endPart] as Check;
                check.IsChecked = multilineCell.IsChecked;

                return(false);
            }
            else if (property == MultilineCell.IsCheckVisibleProperty.PropertyName ||
                     property == MultilineCell.TextProperty.PropertyName ||
                     property == MultilineCell.MultilineProperty.PropertyName)
            {
                return(true);
            }

            return(base.OnCellPropertyChanged(cell, property, realizedView));
        }
Пример #3
0
        /// <summary>
        /// Returns EvasObject which constitutes the cell
        /// </summary>
        /// <param name="cell">Cell</param>
        /// <param name="part">Cell's style name</param>
        /// <returns>EvasObject</returns>
        protected override EvasObject OnGetContent(Cell cell, string part)
        {
            MultilineCell multilineCell = (MultilineCell)cell;

            if (part == _iconPart && multilineCell.Icon != null)
            {
                var image = new NImage(Forms.Context.MainWindow);
                SetUpImage(multilineCell, image);
                return(image);
            }
            else if (part == _endPart && multilineCell.IsCheckVisible)
            {
                var check = new Check(Forms.Context.MainWindow)
                {
                    Style = "toggle"
                };
                check.SetAlignment(-1, -1);
                check.SetWeight(1, 1);
                check.IsChecked     = multilineCell.IsChecked;
                check.StateChanged += (sender, e) =>
                {
                    multilineCell.IsChecked = e.NewState;
                };
                return(check);
            }

            return(null);
        }
        /// <summary>
        /// Loads image.
        /// Sets images dimensions.
        /// </summary>
        /// <param name="cell">Multiline cell element.</param>
        /// <param name="image">Image element.</param>
        void SetUpImage(MultilineCell cell, NImage image)
        {
            if (cell.IconHeight > 0 && cell.IconWidth > 0)
            {
                image.MinimumWidth  = cell.IconWidth;
                image.MinimumHeight = cell.IconHeight;
            }
            else
            {
                image.LoadingCompleted += (sender, e) =>
                {
                    image.MinimumWidth  = image.ObjectSize.Width;
                    image.MinimumHeight = image.ObjectSize.Height;
                };
            }

            image.LoadFromImageSourceAsync(cell.Icon);
        }
        /// <summary>
        /// Returns new span component.
        /// </summary>
        /// <param name="cell">Cell element.</param>
        /// <param name="part">Source element.</param>
        /// <returns>Span component.</returns>
        protected override Span OnGetText(Cell cell, string part)
        {
            MultilineCell multilineCell = (MultilineCell)cell;

            if (part == "elm.text")
            {
                return(new Span()
                {
                    Text = multilineCell.Text,
                    FontSize = -1
                });
            }
            else if (part == "elm.text.multiline")
            {
                return(new Span()
                {
                    Text = multilineCell.Multiline,
                    FontSize = -1
                });
            }

            return(null);
        }