diff options
author | Rui Marinho <me@ruimarinho.net> | 2017-01-26 15:33:15 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-26 15:33:15 +0000 |
commit | 52fc04724fc163c68c54cf33a5931871f8c1ee8e (patch) | |
tree | 28a56527e0886e616735d5334f7b10688c255074 /Xamarin.Forms.Platform.MacOS/NativeToolbarTracker.cs | |
parent | 6b2a69d930d42657aff2b9ad769503b4939568ab (diff) | |
download | xamarin-forms-52fc04724fc163c68c54cf33a5931871f8c1ee8e.tar.gz xamarin-forms-52fc04724fc163c68c54cf33a5931871f8c1ee8e.tar.bz2 xamarin-forms-52fc04724fc163c68c54cf33a5931871f8c1ee8e.zip |
MacOS (#650)
* [MacOS] Add SwitchRenderer
* [MacOS] Add TimePickerRenderer
* [MacOS] Cleanup TimePcikerRender
* [MacOS] Add WebViewRenderer
* [MacOS] Add Javascript evaluate to webview
* [MacOS] Fix build error on WebViewRenderer
* [MacOS] Add Base and TextCell renderers
* [MacOS] Start on ListViewRenderer
* [MacOS] Cleanup
* [MacOS] Vertical center text on default NSTextField
* [MacOS] Center NSTextField vertically
* [MacOS] Add ImageCellRenderer
* [MacOS] Add SwitchCellRenderer
* [MacOS] Add SwitchCellRenderer
* [iOS] Allow to set background color on other CellRenderers
* [MacOS] Fix selection mode on ListView
* [MacOS] Set background on Entry of entry cell
* [MacOS] Fix casting bug on CellRenderer
* [MacOS] Other fix on CellRenderer background
* [MacOS] Add ViewCellRenderer
* [MacOS] Fixes and cleanup on cells
* [MacOS] Add NSScrollView so NSTableView can scroll
* [MacOS] Add HeaderView to ListView
* [MacOS] Cleanup
* [Controls] Add Header support to ListView
* [MacOS] NSView reuse on NSTableView
* [MacOS] Some fix on layour order
* [MacOS] Add CarouselPageRenderer
* [MacOS] Implement EventTracker on PageRenderer
* [MacOS] Cleanup CarouselPageRenderer
* [MacOS] Add MasterDetailPage renderer
* [MacOS] MDP renderer don't allow drag of splitter
* [MacOS] Add TabbedPage renderer
* [MacOS] Initial sketch of NavigationPageRenderer
* [MacOS] Send disappearing of CurrentPage on Dispose on NavigationPageRenderer
* [MacOS] Add Gallery page for Mac
* [MacOS] Add MacOSExpressionSearch
* [MacOS] Fix ColorExtension
* [MacOS] Fix MDP renderer layout
* [MacOS] Implement native selection on ListViewRenderer
* [MacOS] Deselect a item on NSTableView
* [MacOS] Remove previous SplitViewItems
* [MacOS] Fix navigationpage height
* [MacOS] Add toolbar for NavigationPageRenderer
* [MacOS] Don't remove selection for now (crashing)
* [MacOS] Refactor page and back button title on NavigationPageRenderer
* [MacOS] Fix bug when native navigate back
* [MacOS] Hide layer when transition
* [MacOS] ListviewRenderer fix BbackgroundColor
* [MacOS] Fix background on ScrollViewRenderer
* [MacOS] Fix header measure on ListViewRenderer
* [MacOS] Add Mac twitter demo
* [Controls] Spaces for easy reading
* [MacOS] More xaml cleanup
* [Core] Add Mac as aTargetPlatform
* [MacOS] Add alerts and actionsheets
* [MacOS] Add GestureRecognizers
* [MacOS] Fix Layout issues when adding children, enable transformations
* [MacOS] Fix title on tab item, move to tabbed navigation based on segmented control
* [MacOS] Hide toolbar when not needed, this allows to work with tabbed page, cleanup
* [MacOS] Add NativeBindings and NativeViewWrapper
* [MacOS] Fix AssemblyInfo
* [MacOS] FIX NRE on SetBackgroundColor BoxView
* [MacOS] Fix NavigationPageRenderer
* [MacOS] Fix build
* [MacOS] Also update page when it resizes
* [MacOS] Add LayoutRenderer for handle items position when the bounds change.
* [MacOS] Refactor/Cleanup
* [MacOS] Add toolbar items support to NavigationPage
* [MacOS] Resize images for TabViewITems
* [MacOS] Fix TabbedPage resize issues , allow users to override some features when creating TVI
* [MacOS] Fix hide/show Navigation toolbar
* [MacOS] Redo CarouselPageRenderer with NSPageController
* [MacOS] Add support for Modal pages
* [MacOS] Refactor navigation from platform
* [Nuget] Add nuget for MacOS
* [Nuget]Fix nuspec
* [Nuget] Add variables for CI
* [Controls] Remove MainMenu from MacOS
* [MacOS] Add TableView renderer (no headers yet)
* [MacOS] Refactoring, marking extensions as internal
* [MacOS] Add group headers for TableViewRenderer
* [MacOS] Workaround for updates on listview collection
* [MacOS] Handle updates of rows in the ListViewRenderer properly
* [MacOS] Fix navigation animation
* Fix navigation header issues with modal pages
* [MacOS] Fix MDP issues with resizing
* [MacOS] Fix general dispose
* [MacOS] Add a ViewControllerWrapper for NSSplitView
* [MacOS] MDP renderer fix animation
* [MacOS] Fix ListView selection bug
* [MacOS] Fix rendering MDP Layout inside wrappers
* [MacOS] Re write the MainToolbar handler
* [MacOS] Don't use Sierra new extensions so we can run in stable channel
* [MacOS] Another way to hide the toolbar (smarter i think)
* [MacOS] Fix MDP bug and remove debug color
* [Controls] Add HanselForms sample
* [MacOS] Fix NRE WebviewRenderer
* [MacOS] Fix uneven rows on ListView renderer
* [MacOS] Fix NRE on load (can+t find the reason this happens)
* [MacOS] Fix uneven rows
* [MacOS] Fix header sizing on ListViewRenderer
* [Controls] More stuff on HanselForms
* [MacOS] Remove warning from ListViewRenderer
* [MacOS] Fix PageRenderer bug double init
* [MacOS] Don't calculate height if RowHeight is provided
* [Controls] More Hanselforms stuff
* [MacOS] Once again a new implementation for the NavigationBar, this time using a custom view to support BackgroundColor
* [MacOS] Fix build
* [MacOS] Refactoring AwesomeBar related controls
* Fix build
* [MacOS] NavigationBar update background and t test colors
* [MacOS] Fix when we remove navigation so it works when the NavigationRenderer wasn't removed from the parent controller like in a TabbedPage
* [MacOS] Add support for ListView grouping
* [MacOS] Fix image extension method.
* [MacOS] Add base Maps project
* [MacOS] Export MapRenderer
* [MacOS] Add pin click and geocoderbacked for Maps
* [MacOS] Add extra binding project for API not in stable.
* [MacOS] Add MacOS Maps lib
* [MacOS]Fix build on alpha
* [MacOS] Remove MacOS Maps extra binding
* [UITest] Basic macOS setup
* [UITest] Add MacOSApp wrapper implementation
* [MacOS] Set AutomationID
* [UITests] Add ActionSheetUITests to MacOS UITest
* [MacOS] Fix bug on Picker
* [UITests] Link basic uitest basefixture and related files
* [MacOS] Fix pickers reuse
* [UItests] Fix MacOS app path
* [UITest] Ignore UItest for appearing on macOS for now
* [UITest] Update macOS for 2.0.3
* [UITest] Refactor EnterText MacOS app
* [UITest]Fix ViewQuery on MacOS
* [UITest]Fix IsEnabled UItest on macOS
* [UITest] Implement Enter, mark some tests inconclusive fix others
* [MacOS] Implement Entry Completed event
* [UITests] Fix UITest for IsVisible, ignore ToolbarItem test for now
* [UITests] Fix ISVisible again add extra category
* [Controls] Cleanup macOS gallery
* [MacOS] Fix Assembly info
* [Docs] Fix docs
* Fix build
* [Nuget] Fix nuspec
* [Controls] Link files on MacOS
* [Core] Update Forms stack before firing a event saying page was removed, possible breaking change
* [MacOS] Implement RemovePage on NavigationPAgeRenderer
* [UItest] Ignore some , implement back on MacOS UITest app
* [MacOS] Add default back button name (needs to be translated)
* [MacOS] Fix dispose
* [UITest] Make 29257 work on MacOS
* [MacOS] Rename stuff
* [MacOS] More renaming and cleanup
* [MacOS] Share implementations for iOS
* [MacOS] Reuse more IOS extensions
* [MacOS] Reuse FontExtensions
* [MacOS] Share NativeViewWrapper related stuff
* [MAcOS] Share event args and ExportRenderer
* [MacOS] Share platform effect
* [MacOS] Fix build
* [Docs]Fixing docs
* [MacOS] Fix ViewCell reuse
* [Core] Support ListView CachingStrategy on MacOS
* [MacOS] Fix issues with TextCell and ImageCell (we can’t set null to a NSControl value)
* [MacOS] Fix MDP child sizing bug
[UITest] Query marked by id and text
* [MacOS] Comment test related with context actions
* [MacOS] Implement missing stuff on ticker
* [MacOS] Make sure VisualElemenTracker calls the ticker update
* [UITests]Ignore context actions and not possible to test
* [MacOS] Fix Grouping bug on Listview
* [MacOS] Fix selection on Listview when using grouping
* [MacOS] Update navbar when page is popped
* [MacOS] Cleanup NavigationBar
* [Controls] More info on exceptions
* [MacOS] Fix bug animation pop modal
* [MacOS] Bring back BackgroundColor of NavigationBar
* [MacOS] Fix UITest animation delay
* [MacOS] Treat warnings as errors
* [MacOS] Center title on toolbar
* [Core] Add Platform configuration specific for MacOS
* [MacOS] Implement TabbedPage platform specific to handle TabItems on NavigationPage bar
* [MacOS] Fix warning
* [MacOS] Fix bug on SearchBar color
* [MacOS]Fix build
* [MacOS] remove extra dll from maps
* [Docs] Update docs
* [MacOS]Cleanup and refactoring
* Revert "[MacOS] remove extra dll from maps"
This reverts commit 73b948937001fea3f28449a963d0b94943e07aa0.
* [MacOS] Fix wrong refactoring
* [MacOS] Remove gallery and uitest project
* [MacOS] dix formatting
* [MacOS] Remove extra stuff
* Merge branch 'master' into macOS-gallery
* [MacOS] Fix rebase
* [MacOS] Fix TargetPlatform
* fix docs
* [MacOS] Fix bug on TabbedPageRenderer no title
* [MacOS] Remove FormsNSView
* [MacOS] Cleanup on dispose on MDP renderer
* [MacOS] Update current page when source changes
* [MacOS] More cleanup
* [MacOS] Make sure we show the previous page when popping a Modal
* [MacOS] Fix issue with sizing the Header and visibility, remove for now header renderer reuse
* [MacOS] Clean CustomNSTableView
* [MacOS] Share LabelRenderer with iOS
* [MacOS] Share ResourcesProvider with iOS
* [MAcoS] Share VisualElementPackager with iOS
* [MacOS] Share ViewRenderer with iOS
* [MacOS] Merge with VisualElementTracker from iOS
* [MacOS] Merge with EventTracker from iOS
* [MacOS] Merge with VisualElementRenderer of iOS
* [MacOS] Make sure we always have a layer
* [MacOS] Fix Tracker merge with iOS version
* [MacOS] Fix bug with tabbed page on modal without navigation
* [Core] Rever change on core
* [MacOS] Clear renderers before setting them MDP
* [MacOS] Update tabbedPage ContainerArea
* [MacOS] Fix ListViewRenderer
* [MacOS] Make sure we don’t pass null to TextField string value
* [MacOS] Support for multiple clicks in same selected item on NSTableView
* [MacOS] Support Focus on EntryRenderer
* [MacOS] Fix index bug on TablevIewDataSource
* [MacOS] Fix SelectedItem TableViewDataSource
* [Nuget] Add Mac to Maps nuspec
* [Nuget]Fix path
* [macOS] Fixed Tab NSImage crash in TabbedPageRenderer (#705)
* [macOS] Fixed Tab NSImage crash in TabbedPageRenderer
* Coding Style
* Coding Style
* [MacOS] Fix previous merge with master
* [MacOS] Possible simple fix for click on views overlapping
* [MacOS] Rename to IsOnViewCell
* [MacOS] Cleanup, Address feedback from Samantha’s review
Diffstat (limited to 'Xamarin.Forms.Platform.MacOS/NativeToolbarTracker.cs')
-rw-r--r-- | Xamarin.Forms.Platform.MacOS/NativeToolbarTracker.cs | 429 |
1 files changed, 429 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.MacOS/NativeToolbarTracker.cs b/Xamarin.Forms.Platform.MacOS/NativeToolbarTracker.cs new file mode 100644 index 00000000..826b5b73 --- /dev/null +++ b/Xamarin.Forms.Platform.MacOS/NativeToolbarTracker.cs @@ -0,0 +1,429 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using AppKit; +using CoreGraphics; +using Xamarin.Forms.Internals; +using Xamarin.Forms.PlatformConfiguration.macOSSpecific; + +namespace Xamarin.Forms.Platform.MacOS +{ + class NativeToolbarGroup + { + public class Item + { + public NSToolbarItem ToolbarItem; + public NSButton Button; + } + + public NativeToolbarGroup(NSToolbarItemGroup itemGroup) + { + Group = itemGroup; + Items = new List<Item>(); + } + + public NSToolbarItemGroup Group { get; } + + public List<Item> Items { get; } + } + + internal class NativeToolbarTracker : NSToolbarDelegate + { + const string ToolBarId = "AwesomeBarToolbar"; + + INavigationPageController NavigationController => _navigation; + + readonly string _defaultBackButtonTitle = "Back"; + readonly ToolbarTracker _toolbarTracker; + + NSToolbar _toolbar; + NavigationPage _navigation; + + bool _hasTabs; + + const double BackButtonItemWidth = 36; + const double ToolbarItemWidth = 44; + const double ToolbarItemHeight = 25; + const double ToolbarItemSpacing = 6; + const double ToolbarHeight = 30; + const double NavigationTitleMinSize = 300; + + const string NavigationGroupIdentifier = "NavigationGroup"; + const string TabbedGroupIdentifier = "TabbedGroup"; + const string ToolbarItemsGroupIdentifier = "ToolbarGroup"; + const string TitleGroupIdentifier = "TitleGroup"; + + NativeToolbarGroup _navigationGroup; + NativeToolbarGroup _tabbedGroup; + NativeToolbarGroup _toolbarGroup; + NativeToolbarGroup _titleGroup; + + NSView _nsToolbarItemViewer; + + public NativeToolbarTracker() + { + _toolbarTracker = new ToolbarTracker(); + _toolbarTracker.CollectionChanged += ToolbarTrackerOnCollectionChanged; + } + + public NavigationPage Navigation + { + get { return _navigation; } + set + { + if (_navigation == value) + return; + + if (_navigation != null) + _navigation.PropertyChanged -= NavigationPagePropertyChanged; + + _navigation = value; + + if (_navigation != null) + { + var parentTabbedPage = _navigation.Parent as TabbedPage; + if (parentTabbedPage != null) + { + _hasTabs = parentTabbedPage.OnThisPlatform().GetTabsStyle() == TabsStyle.OnNavigation; + } + _toolbarTracker.Target = _navigation.CurrentPage; + _navigation.PropertyChanged += NavigationPagePropertyChanged; + } + + UpdateToolBar(); + } + } + + public void TryHide(NavigationPage navPage = null) + { + if (navPage == null || navPage == _navigation) + { + Navigation = null; + } + } + + public override string[] AllowedItemIdentifiers(NSToolbar toolbar) + { + return new string[] { }; + } + + public override string[] DefaultItemIdentifiers(NSToolbar toolbar) + { + return new string[] { }; + } + + public override NSToolbarItem WillInsertItem(NSToolbar toolbar, string itemIdentifier, bool willBeInserted) + { + var group = new NSToolbarItemGroup(itemIdentifier); + var view = new NSView(); + group.View = view; + + if (itemIdentifier == NavigationGroupIdentifier) + _navigationGroup = new NativeToolbarGroup(group); + else if (itemIdentifier == TitleGroupIdentifier) + _titleGroup = new NativeToolbarGroup(group); + else if (itemIdentifier == TabbedGroupIdentifier) + _tabbedGroup = new NativeToolbarGroup(group); + else if (itemIdentifier == ToolbarItemsGroupIdentifier) + _toolbarGroup = new NativeToolbarGroup(group); + + return group; + } + + protected virtual bool HasTabs => _hasTabs; + + protected virtual NSToolbar ConfigureToolbar() + { + var toolbar = new NSToolbar(ToolBarId) + { + DisplayMode = NSToolbarDisplayMode.Icon, + AllowsUserCustomization = false, + ShowsBaselineSeparator = true, + SizeMode = NSToolbarSizeMode.Regular, + Delegate = this + }; + + return toolbar; + } + + internal void UpdateToolBar() + { + if (NSApplication.SharedApplication.MainWindow == null) + return; + + if (NavigationController == null) + { + if (_toolbar != null) + _toolbar.Visible = false; + _toolbar = null; + return; + } + + var currentPage = NavigationController.Peek(); + + if (NavigationPage.GetHasNavigationBar(currentPage)) + { + if (_toolbar == null) + { + _toolbar = ConfigureToolbar(); + NSApplication.SharedApplication.MainWindow.Toolbar = _toolbar; + + _toolbar.InsertItem(NavigationGroupIdentifier, 0); + _toolbar.InsertItem( + HasTabs ? NSToolbar.NSToolbarSpaceItemIdentifier : NSToolbar.NSToolbarFlexibleSpaceItemIdentifier, 1); + _toolbar.InsertItem(HasTabs ? TabbedGroupIdentifier : TitleGroupIdentifier, 2); + _toolbar.InsertItem(NSToolbar.NSToolbarFlexibleSpaceItemIdentifier, 3); + _toolbar.InsertItem(ToolbarItemsGroupIdentifier, 4); + } + + _toolbar.Visible = true; + UpdateToolbarItems(); + UpdateTitle(); + UpdateNavigationItems(); + if (HasTabs) + UpdateTabbedItems(); + UpdateBarBackgroundColor(); + } + else + { + if (_toolbar != null) + { + _toolbar.Visible = false; + } + } + } + + void UpdateBarBackgroundColor() + { + var bgColor = GetBackgroundColor().CGColor; + + if (_nsToolbarItemViewer?.Superview?.Superview == null || + _nsToolbarItemViewer.Superview.Superview.Superview == null) return; + // NSTitlebarView + _nsToolbarItemViewer.Superview.Superview.Superview.WantsLayer = true; + _nsToolbarItemViewer.Superview.Superview.Superview.Layer.BackgroundColor = bgColor; + } + + void NavigationPagePropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) + { + if (e.PropertyName.Equals(NavigationPage.BarTextColorProperty.PropertyName) || + e.PropertyName.Equals(NavigationPage.BarBackgroundColorProperty.PropertyName)) + UpdateToolBar(); + } + + void ToolbarTrackerOnCollectionChanged(object sender, EventArgs eventArgs) + { + UpdateToolbarItems(); + } + + async Task NavigateBackFrombackButton() + { + var popAsyncInner = NavigationController?.PopAsyncInner(true, true); + if (popAsyncInner != null) + await popAsyncInner; + } + + bool ShowBackButton() + { + if (_navigation == null) + return false; + + return NavigationPage.GetHasBackButton(_navigation.CurrentPage) && !IsRootPage(); + } + + bool IsRootPage() + { + if (NavigationController == null) + return true; + return NavigationController.StackDepth <= 1; + } + + NSColor GetBackgroundColor() + { + var backgroundNSColor = NSColor.Clear; + if (Navigation != null && Navigation.BarBackgroundColor != Color.Default) + backgroundNSColor = Navigation.BarBackgroundColor.ToNSColor(); + return backgroundNSColor; + } + + NSColor GetTitleColor() + { + var titleNSColor = NSColor.Black; + if (Navigation != null && Navigation?.BarTextColor != Color.Default) + titleNSColor = Navigation.BarTextColor.ToNSColor(); + + return titleNSColor; + } + + string GetCurrentPageTitle() + { + if (NavigationController == null) + return string.Empty; + return NavigationController.Peek().Title ?? ""; + } + + string GetPreviousPageTitle() + { + if (NavigationController == null || NavigationController.StackDepth <= 1) + return string.Empty; + + return NavigationController.Peek(1).Title ?? _defaultBackButtonTitle; + } + + List<ToolbarItem> GetToolbarItems() + { + return _toolbarTracker.ToolbarItems.ToList(); + } + + void UpdateTitle() + { + if (_toolbar == null || _navigation == null || _titleGroup == null) + return; + + var title = GetCurrentPageTitle(); + var item = new NSToolbarItem(title); + var view = new NSView(); + var titleField = new NSTextField + { + AllowsEditingTextAttributes = true, + Bordered = false, + DrawsBackground = false, + Bezeled = false, + Editable = false, + Selectable = false, + Cell = new VerticallyCenteredTextFieldCell(0f, NSFont.TitleBarFontOfSize(18)), + StringValue = title + }; + titleField.Cell.TextColor = GetTitleColor(); + titleField.SizeToFit(); + _titleGroup.Group.MinSize = new CGSize(NavigationTitleMinSize, ToolbarHeight); + _titleGroup.Group.Subitems = new NSToolbarItem[] { item }; + view.AddSubview(titleField); + _titleGroup.Group.View = view; + //save a reference so we can paint this for the background + _nsToolbarItemViewer = _titleGroup.Group.View.Superview; + //position is hard .. we manually set the title to be centered + var totalWidth = _titleGroup.Group.View.Superview.Superview.Frame.Width; + var fieldWidth = titleField.Frame.Width; + var x = ((totalWidth - fieldWidth) / 2) - _nsToolbarItemViewer.Frame.X; + titleField.Frame = new CGRect(x, 0, fieldWidth, ToolbarHeight); + } + + void UpdateToolbarItems() + { + if (_toolbar == null || _navigation == null || _toolbarGroup == null) + return; + + var currentPage = NavigationController.Peek(); + UpdateGroup(_toolbarGroup, currentPage.ToolbarItems, ToolbarItemWidth, ToolbarItemSpacing); + } + + void UpdateNavigationItems() + { + if (_toolbar == null || _navigation == null || _navigationGroup == null) + return; + var items = new List<ToolbarItem>(); + if (ShowBackButton()) + { + var backButtonItem = new ToolbarItem + { + Text = GetPreviousPageTitle(), + Command = new Command(async () => await NavigateBackFrombackButton()) + }; + items.Add(backButtonItem); + } + + UpdateGroup(_navigationGroup, items, BackButtonItemWidth, -1); + + var navItemBack = _navigationGroup.Items.FirstOrDefault(); + if (navItemBack != null) + { + navItemBack.Button.Image = NSImage.ImageNamed(NSImageName.GoLeftTemplate); + navItemBack.Button.SizeToFit(); + navItemBack.Button.AccessibilityTitle = "NSBackButton"; + } + } + + void UpdateTabbedItems() + { + if (_toolbar == null || _navigation == null || _tabbedGroup == null) + return; + + var items = new List<ToolbarItem>(); + + var tabbedPage = _navigation.Parent as TabbedPage; + if (tabbedPage != null) + { + foreach (var item in tabbedPage.Children) + { + var tbI = new ToolbarItem + { + Text = item.Title, + Icon = item.Icon, + Command = new Command(() => tabbedPage.SelectedItem = item) + }; + items.Add(tbI); + } + } + + UpdateGroup(_tabbedGroup, items, ToolbarItemWidth, ToolbarItemSpacing); + } + + static void UpdateGroup(NativeToolbarGroup group, IList<ToolbarItem> toolbarItems, double itemWidth, + double itemSpacing) + { + int count = toolbarItems.Count; + group.Items.Clear(); + if (count > 0) + { + var subItems = new NSToolbarItem[count]; + var view = new NSView(); + nfloat totalWidth = 0; + var currentX = 0.0; + for (int i = 0; i < toolbarItems.Count; i++) + { + var element = toolbarItems[i]; + + var item = new NSToolbarItem(element.Text); + item.Activated += (sender, e) => (element as IMenuItemController).Activate(); + + var button = new NSButton(); + button.Title = element.Text; + button.SizeToFit(); + var buttonWidth = itemWidth; + if (button.FittingSize.Width > itemWidth) + { + buttonWidth = button.FittingSize.Width + 10; + } + button.Frame = new CGRect(currentX + i * itemSpacing, 0, buttonWidth, ToolbarItemHeight); + currentX += buttonWidth; + totalWidth += button.Frame.Width; + button.Activated += (sender, e) => (element as IMenuItemController).Activate(); + + button.BezelStyle = NSBezelStyle.TexturedRounded; + if (!string.IsNullOrEmpty(element.Icon)) + button.Image = new NSImage(element.Icon); + + button.SizeToFit(); + view.AddSubview(button); + + item.Label = item.PaletteLabel = item.ToolTip = button.ToolTip = element.Text; + + subItems[i] = item; + + group.Items.Add(new NativeToolbarGroup.Item { ToolbarItem = item, Button = button }); + } + view.Frame = new CGRect(0, 0, totalWidth + (itemSpacing * (count - 1)), ToolbarItemHeight); + + group.Group.Subitems = subItems; + group.Group.View = view; + } + else + { + group.Group.Subitems = new NSToolbarItem[] { }; + group.Group.View = new NSView(); + } + } + } +}
\ No newline at end of file |