예제 #1
0
        void OnActionItemClickedImpl(IMenuItem item)
        {
            int index = item.ItemId;
            IMenuItemController action = ActionModeContext.ContextActions[index];

            action.Activate();
        }
        Native.Button GetToolbarButton(ToolbarButtonPosition position)
        {
            ToolbarItem item = _toolbarTracker.ToolbarItems.Where(
                i => (position == ToolbarButtonPosition.Right && i.Order <= ToolbarItemOrder.Primary) ||
                (position == ToolbarButtonPosition.Left && i.Order == ToolbarItemOrder.Secondary))
                               .OrderBy(i => i.Priority).FirstOrDefault();

            if (item == default(ToolbarItem))
            {
                return(null);
            }

            Native.Button button = new Native.Button(Forms.NativeParent);
            button.Clicked += (s, e) =>
            {
                IMenuItemController control = item;
                control.Activate();
            };
            button.Text            = item.Text;
            button.BackgroundColor = Color.Transparent.ToNative();

            if (string.IsNullOrEmpty(item.Icon))
            {
                if (string.IsNullOrEmpty(item.Text))
                {
                    // We assumed the default toolbar icon is "naviframe/drawer" if there are no icon and text.
                    button.Style = StyleDefaultToolbarIcon;
                }
                else
                {
                    if (position == ToolbarButtonPosition.Right)
                    {
                        button.Style = StyleRightToolbarButton;
                    }
                    else
                    {
                        button.Style = StyleLeftToolBarButton;
                    }
                }
            }
            else
            {
                Native.Image iconImage = new Native.Image(Forms.NativeParent);
                var          task      = iconImage.LoadFromImageSourceAsync(item.Icon);
                button.Image = iconImage;
            }

            return(button);
        }
예제 #3
0
        internal void PrepareMenu(IMenu menu)
        {
            if (_embedded)
            {
                return;
            }

            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                item.PropertyChanged -= HandleToolbarItemPropertyChanged;
            }
            menu.Clear();

            if (!ShouldShowActionBarTitleArea())
            {
                return;
            }

            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                IMenuItemController controller = item;
                item.PropertyChanged += HandleToolbarItemPropertyChanged;
                if (item.Order == ToolbarItemOrder.Secondary)
                {
                    IMenuItem menuItem = menu.Add(item.Text);
                    menuItem.SetEnabled(controller.IsEnabled);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                }
                else
                {
                    IMenuItem menuItem = menu.Add(item.Text);
                    var       icon     = item.Icon;
                    if (!string.IsNullOrEmpty(icon))
                    {
                        Drawable iconDrawable = _context.GetFormsDrawable(icon);
                        if (iconDrawable != null)
                        {
                            menuItem.SetIcon(iconDrawable);
                        }
                    }
                    menuItem.SetEnabled(controller.IsEnabled);
                    menuItem.SetShowAsAction(ShowAsAction.Always);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                }
            }
        }
        void UpdateMenu()
        {
            if (_disposed)
            {
                return;
            }

            AToolbar bar     = _toolbar;
            Context  context = Context;
            IMenu    menu    = bar.Menu;

            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                item.PropertyChanged -= HandleToolbarItemPropertyChanged;
            }
            menu.Clear();

            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                IMenuItemController controller = item;
                item.PropertyChanged += HandleToolbarItemPropertyChanged;
                if (item.Order == ToolbarItemOrder.Secondary)
                {
                    IMenuItem menuItem = menu.Add(item.Text);
                    menuItem.SetEnabled(controller.IsEnabled);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                }
                else
                {
                    IMenuItem       menuItem = menu.Add(item.Text);
                    FileImageSource icon     = item.Icon;
                    if (!string.IsNullOrEmpty(icon))
                    {
                        Drawable iconDrawable = context.GetFormsDrawable(icon);
                        if (iconDrawable != null)
                        {
                            menuItem.SetIcon(iconDrawable);
                        }
                    }
                    menuItem.SetEnabled(controller.IsEnabled);
                    menuItem.SetShowAsAction(ShowAsAction.Always);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                }
            }
        }
예제 #5
0
        internal void PrepareMenu(IMenu menu)
        {
            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                item.PropertyChanged -= HandleToolbarItemPropertyChanged;
            }
            menu.Clear();

            if (!ShouldShowActionBarTitleArea())
            {
                return;
            }

            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                IMenuItemController controller = item;
                item.PropertyChanged += HandleToolbarItemPropertyChanged;
                if (item.Order == ToolbarItemOrder.Secondary)
                {
                    IMenuItem menuItem = menu.Add(item.Text);
                    menuItem.SetEnabled(controller.IsEnabled);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                }
                else
                {
                    IMenuItem menuItem = menu.Add(item.Text);
                    if (!string.IsNullOrEmpty(item.Icon))
                    {
                        var iconBitmap = new BitmapDrawable(_context.Resources, ResourceManager.GetBitmap(_context.Resources, item.Icon));
                        if (iconBitmap != null && iconBitmap.Bitmap != null)
                        {
                            menuItem.SetIcon(iconBitmap);
                        }
                    }
                    menuItem.SetEnabled(controller.IsEnabled);
                    menuItem.SetShowAsAction(ShowAsAction.Always);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                }
            }
        }
예제 #6
0
        void UpdateMenu()
        {
            if (_disposed)
            {
                return;
            }

            AToolbar bar     = _toolbar;
            Context  context = Context;
            IMenu    menu    = bar.Menu;

            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                item.PropertyChanged -= OnToolbarItemPropertyChanged;
            }
            menu.Clear();

            foreach (ToolbarItem item in _toolbarTracker.ToolbarItems)
            {
                IMenuItemController controller = item;
                item.PropertyChanged += OnToolbarItemPropertyChanged;
                if (item.Order == ToolbarItemOrder.Secondary)
                {
                    IMenuItem menuItem = menu.Add(item.Text);
                    menuItem.SetEnabled(controller.IsEnabled);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                    menuItem.SetTitleOrContentDescription(item);
                }
                else
                {
                    IMenuItem menuItem = menu.Add(item.Text);
                    menuItem.SetEnabled(controller.IsEnabled);
                    UpdateMenuItemIcon(context, menuItem, item);
                    menuItem.SetShowAsAction(ShowAsAction.Always);
                    menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate));
                    menuItem.SetTitleOrContentDescription(item);
                }
            }
        }
        internal void UpdateMenuItemBadge(IMenuItem menuItem, BadgeToolbarItem item)
        {
            var color        = item.BadgeColor.ToAndroid();
            var colorPressed = item.BadgePressedColor.ToAndroid();
            var textColor    = item.BadgeTextColor.ToAndroid();

            var badgeStyle = new BadgeStyle(BadgeStyle.Style.Default,
                                            Resource.Layout.menu_action_item_badge,
                                            color,
                                            colorPressed,
                                            textColor);

            var iconDrawable = GetFormsDrawable(item.Icon);

            IMenuItemController menuItemController = item;

            ActionItemBadge.Update(MainActivity,
                                   menuItem,
                                   iconDrawable,
                                   badgeStyle,
                                   item.BadgeText,
                                   new MenuClickListener(menuItemController.Activate));
        }
예제 #8
0
            void TaggedAppBarButton_PropertyChanged(object sender, PropertyChangedEventArgs e)
            {
                var item = Tag as ToolbarItem;

                if (item == null)
                {
                    return;
                }

                IMenuItemController controller = item;

                if (e.PropertyName == controller.IsEnabledPropertyName)
                {
                    IsEnabled = controller.IsEnabled;
                }
                else if (e.PropertyName == MenuItem.TextProperty.PropertyName)
                {
                    Text = !string.IsNullOrWhiteSpace(item.Text) ? item.Text : (string)item.Icon ?? "ApplicationIcon.jpg";
                }
                else if (e.PropertyName == MenuItem.IconProperty.PropertyName)
                {
                    IconUri = new Uri(item.Icon ?? "ApplicationIcon.jpg", UriKind.Relative);
                }
            }
예제 #9
0
        void UpdateToolbarItems()
        {
            if (_page.ApplicationBar == null)
            {
                _page.ApplicationBar = new ApplicationBar();
            }

            ToolbarItem[]    items        = _tracker.ToolbarItems.ToArray();
            MasterDetailPage masterDetail = _tracker.Target.Descendants().Prepend(_tracker.Target).OfType <MasterDetailPage>().FirstOrDefault();

            TaggedAppBarButton oldMasterDetailButton = _page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().FirstOrDefault(b => b.Tag is MasterDetailPage && b.Tag != masterDetail);

            if (oldMasterDetailButton != null)
            {
                _page.ApplicationBar.Buttons.Remove(oldMasterDetailButton);
            }

            if (masterDetail != null)
            {
                if (masterDetail.ShouldShowToolbarButton())
                {
                    if (_page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().All(b => b.Tag != masterDetail))
                    {
                        var button = new TaggedAppBarButton
                        {
                            IconUri   = new Uri(masterDetail.Master.Icon ?? "ApplicationIcon.jpg", UriKind.Relative),
                            Text      = masterDetail.Master.Title,
                            IsEnabled = true,
                            Tag       = masterDetail
                        };
                        button.Click += (sender, args) =>
                        {
                            var masterDetailRenderer = GetRenderer(masterDetail) as MasterDetailRenderer;

                            if (masterDetailRenderer != null)
                            {
                                masterDetailRenderer.Toggle();
                            }
                        };
                        _page.ApplicationBar.Buttons.Add(button);
                    }
                }
            }

            var buttonsToAdd = new List <TaggedAppBarButton>();

            foreach (ToolbarItem item in items.Where(i => i.Order != ToolbarItemOrder.Secondary))
            {
                IMenuItemController controller = item;
                if (_page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().Any(b => b.Tag == item))
                {
                    continue;
                }

                var button = new TaggedAppBarButton
                {
                    IconUri   = new Uri(item.Icon ?? "ApplicationIcon.jpg", UriKind.Relative),
                    Text      = !string.IsNullOrWhiteSpace(item.Text) ? item.Text : (string)item.Icon ?? "ApplicationIcon.jpg",
                    IsEnabled = controller.IsEnabled,
                    Tag       = item
                };
                button.Click += (sender, args) => controller.Activate();
                buttonsToAdd.Add(button);
            }

            var menuItemsToAdd = new List <TaggedAppBarMenuItem>();

            foreach (ToolbarItem item in items.Where(i => i.Order == ToolbarItemOrder.Secondary))
            {
                if (_page.ApplicationBar.MenuItems.OfType <TaggedAppBarMenuItem>().Any(b => b.Tag == item))
                {
                    continue;
                }

                var button = new TaggedAppBarMenuItem {
                    Text = !string.IsNullOrWhiteSpace(item.Text) ? item.Text : (string)item.Icon ?? "MenuItem", IsEnabled = true, Tag = item
                };
                button.Click += (sender, args) => ((IMenuItemController)item).Activate();
                menuItemsToAdd.Add(button);
            }

            TaggedAppBarButton[] deadButtons = _page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().Where(b => b.Tag is ToolbarItem && !items.Contains(b.Tag)).ToArray();

            TaggedAppBarMenuItem[] deadMenuItems = _page.ApplicationBar.MenuItems.OfType <TaggedAppBarMenuItem>().Where(b => b.Tag is ToolbarItem && !items.Contains(b.Tag)).ToArray();

            // we must remove the dead buttons before adding the new ones so we don't accidentally go over the limit during the transition
            foreach (TaggedAppBarButton deadButton in deadButtons)
            {
                deadButton.Dispose();
                _page.ApplicationBar.Buttons.Remove(deadButton);
            }

            foreach (TaggedAppBarMenuItem deadMenuItem in deadMenuItems)
            {
                _page.ApplicationBar.MenuItems.Remove(deadMenuItem);
            }

            // fixme, insert in order
            foreach (TaggedAppBarButton newButton in buttonsToAdd)
            {
                _page.ApplicationBar.Buttons.Add(newButton);
            }

            foreach (TaggedAppBarMenuItem newMenuItem in menuItemsToAdd)
            {
                _page.ApplicationBar.MenuItems.Add(newMenuItem);
            }

            _page.ApplicationBar.IsVisible = _page.ApplicationBar.Buttons.Count > 0 || _page.ApplicationBar.MenuItems.Count > 0;
        }