Chromium Code Reviews| Index: ios/clean/chrome/browser/ui/tools/menu_view_controller.mm |
| diff --git a/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm b/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm |
| index 0c2940a53a668ea7fbc9c8e2e51ade1e45b1b644..48f7e28f09cf83c29112ccfd3a6390224820dc79 100644 |
| --- a/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm |
| +++ b/ios/clean/chrome/browser/ui/tools/menu_view_controller.mm |
| @@ -9,6 +9,7 @@ |
| #import "base/macros.h" |
| #import "ios/chrome/browser/ui/rtl_geometry.h" |
| #import "ios/clean/chrome/browser/ui/commands/find_in_page_visibility_commands.h" |
| +#import "ios/clean/chrome/browser/ui/commands/navigation_commands.h" |
| #import "ios/clean/chrome/browser/ui/commands/tools_menu_commands.h" |
| #import "ios/clean/chrome/browser/ui/toolbar/toolbar_button.h" |
| #import "ios/clean/chrome/browser/ui/tools/menu_overflow_controls_stackview.h" |
| @@ -26,6 +27,7 @@ const CGFloat kMenuItemHeight = 48; |
| } |
| @interface MenuViewController ()<ToolsActions> |
| +@property(nonatomic, strong) UIStackView* menuStackView; |
| @property(nonatomic, strong) NSArray<ToolsMenuItem*>* menuItems; |
| @property(nonatomic, strong) |
| MenuOverflowControlsStackView* toolbarOverflowStackView; |
| @@ -34,6 +36,7 @@ const CGFloat kMenuItemHeight = 48; |
| @implementation MenuViewController |
| @synthesize dispatcher = _dispatcher; |
| @synthesize menuItems = _menuItems; |
| +@synthesize menuStackView = _menuStackView; |
| @synthesize toolbarOverflowStackView = _toolbarOverflowStackView; |
| - (void)loadView { |
| @@ -50,6 +53,7 @@ const CGFloat kMenuItemHeight = 48; |
| NSMutableArray<UIButton*>* buttons = |
| [[NSMutableArray alloc] initWithCapacity:_menuItems.count]; |
| + // Load menu items. |
| for (ToolsMenuItem* item in _menuItems) { |
| UIButton* menuButton = [UIButton buttonWithType:UIButtonTypeSystem]; |
| menuButton.translatesAutoresizingMaskIntoConstraints = NO; |
| @@ -59,7 +63,7 @@ const CGFloat kMenuItemHeight = 48; |
| [menuButton.titleLabel setFont:[MDCTypography subheadFont]]; |
| [menuButton.titleLabel setTextAlignment:NSTextAlignmentNatural]; |
| [menuButton addTarget:self |
| - action:@selector(closeToolsMenu:) |
| + action:@selector(closeToolsMenu) |
| forControlEvents:UIControlEventTouchUpInside]; |
| if (item.action) { |
| id target = (item.action == @selector(showFindInPage)) ? self : nil; |
| @@ -71,44 +75,61 @@ const CGFloat kMenuItemHeight = 48; |
| } |
| // Placeholder stack view to hold menu contents. |
| - UIStackView* menu = [[UIStackView alloc] initWithArrangedSubviews:buttons]; |
| - menu.translatesAutoresizingMaskIntoConstraints = NO; |
| - menu.axis = UILayoutConstraintAxisVertical; |
| - menu.distribution = UIStackViewDistributionFillEqually; |
| - menu.alignment = UIStackViewAlignmentLeading; |
| + self.menuStackView = [[UIStackView alloc] initWithArrangedSubviews:buttons]; |
| + self.menuStackView.translatesAutoresizingMaskIntoConstraints = NO; |
| + self.menuStackView.axis = UILayoutConstraintAxisVertical; |
| + self.menuStackView.distribution = UIStackViewDistributionFillEqually; |
| + self.menuStackView.alignment = UIStackViewAlignmentLeading; |
| // Stack view to hold overflow ToolbarButtons. |
| if (self.traitCollection.horizontalSizeClass == |
| UIUserInterfaceSizeClassCompact) { |
| - self.toolbarOverflowStackView = |
| - [[MenuOverflowControlsStackView alloc] init]; |
| - // PLACEHOLDER: ToolsMenuButton might end up being part of the MenuVC's view |
| - // instead of the StackView. We are waiting confirmation on this. |
| - [self.toolbarOverflowStackView.toolsMenuButton |
| - addTarget:nil |
| - action:@selector(closeToolsMenu:) |
| - forControlEvents:UIControlEventTouchUpInside]; |
| - [menu insertArrangedSubview:self.toolbarOverflowStackView atIndex:0]; |
| - [NSLayoutConstraint activateConstraints:@[ |
| - [self.toolbarOverflowStackView.leadingAnchor |
| - constraintEqualToAnchor:menu.leadingAnchor], |
| - [self.toolbarOverflowStackView.trailingAnchor |
| - constraintEqualToAnchor:menu.trailingAnchor], |
| - ]]; |
| + [self setUpOverFlowControlsStackView]; |
| } |
| - [self.view addSubview:menu]; |
| + // Setup constraints. |
| + [self.view addSubview:self.menuStackView]; |
| [NSLayoutConstraint activateConstraints:@[ |
| - [menu.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], |
| - [menu.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], |
| - [menu.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], |
| - [menu.topAnchor constraintEqualToAnchor:self.view.topAnchor], |
| + [self.menuStackView.leadingAnchor |
| + constraintEqualToAnchor:self.view.leadingAnchor], |
| + [self.menuStackView.trailingAnchor |
| + constraintEqualToAnchor:self.view.trailingAnchor], |
| + [self.menuStackView.bottomAnchor |
| + constraintEqualToAnchor:self.view.bottomAnchor], |
| + [self.menuStackView.topAnchor constraintEqualToAnchor:self.view.topAnchor], |
| + ]]; |
| +} |
| + |
| +- (void)setUpOverFlowControlsStackView { |
| + self.toolbarOverflowStackView = [[MenuOverflowControlsStackView alloc] init]; |
| + // PLACEHOLDER: ToolsMenuButton might end up being part of the MenuVC's view |
| + // instead of the StackView. We are waiting confirmation on this. |
| + [self.toolbarOverflowStackView.toolsMenuButton |
| + addTarget:nil |
|
lpromero
2017/04/18 09:34:11
This uses nil-targeting but not the others. Consid
sczs
2017/04/19 22:49:00
Good catch. Done.
|
| + action:@selector(closeToolsMenu) |
| + forControlEvents:UIControlEventTouchUpInside]; |
| + [self.toolbarOverflowStackView.reloadButton |
| + addTarget:self |
| + action:@selector(reloadPage) |
| + forControlEvents:UIControlEventTouchUpInside]; |
| + [self.toolbarOverflowStackView.stopButton |
| + addTarget:self |
| + action:@selector(stopLoadingPage) |
| + forControlEvents:UIControlEventTouchUpInside]; |
| + |
| + [self.menuStackView insertArrangedSubview:self.toolbarOverflowStackView |
| + atIndex:0]; |
| + [NSLayoutConstraint activateConstraints:@[ |
| + [self.toolbarOverflowStackView.leadingAnchor |
| + constraintEqualToAnchor:self.menuStackView.leadingAnchor], |
| + [self.toolbarOverflowStackView.trailingAnchor |
| + constraintEqualToAnchor:self.menuStackView.trailingAnchor], |
| ]]; |
| } |
| #pragma mark - ToolsMenuCommands |
| -- (void)closeToolsMenu:(id)sender { |
| +- (void)closeToolsMenu { |
| [self.dispatcher closeToolsMenu]; |
| } |
| @@ -116,6 +137,18 @@ const CGFloat kMenuItemHeight = 48; |
| [self.dispatcher showFindInPage]; |
|
lpromero
2017/04/18 09:34:11
Should this also close the tools menu if opened?
marq (ping after 24h)
2017/04/18 12:11:23
It does already; all of the regular menu buttons h
lpromero
2017/04/18 12:12:16
Acknowledged.
|
| } |
| +#pragma mark - NavigationCommands |
| + |
| +- (void)reloadPage { |
| + [self.dispatcher reloadPage]; |
| + [self closeToolsMenu]; |
|
marq (ping after 24h)
2017/04/18 12:11:23
Please follow the pattern of the other menu contro
sczs
2017/04/19 22:49:00
Done.
|
| +} |
| + |
| +- (void)stopLoadingPage { |
| + [self.dispatcher stopLoadingPage]; |
| + [self closeToolsMenu]; |
| +} |
| + |
| #pragma mark - Tools Consumer |
| - (void)setToolsMenuItems:(NSArray*)menuItems { |