| Index: ios/chrome/browser/ui/bookmarks/bookmark_menu_item.mm
|
| diff --git a/ios/chrome/browser/ui/bookmarks/bookmark_menu_item.mm b/ios/chrome/browser/ui/bookmarks/bookmark_menu_item.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..45c6b0eee9d0507d8ce80ba59114b452a80d253f
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/bookmarks/bookmark_menu_item.mm
|
| @@ -0,0 +1,243 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h"
|
| +
|
| +#include "base/hash.h"
|
| +#include "base/logging.h"
|
| +#include "base/mac/objc_property_releaser.h"
|
| +#include "base/strings/sys_string_conversions.h"
|
| +#include "components/bookmarks/browser/bookmark_node.h"
|
| +#import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
|
| +#include "ios/chrome/grit/ios_strings.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +
|
| +using bookmarks::BookmarkNode;
|
| +
|
| +namespace bookmarks {
|
| +BOOL NumberIsValidMenuItemType(int number) {
|
| + // Invalid and deprecated numbers.
|
| + if (number < 0 || number > MenuItemLast)
|
| + return NO;
|
| + MenuItemType type = static_cast<MenuItemType>(number);
|
| + switch (type) {
|
| + case MenuItemAll:
|
| + case MenuItemFolder:
|
| + return YES;
|
| +
|
| + case MenuItemDivider:
|
| + case MenuItemSectionHeader:
|
| + return NO;
|
| + }
|
| +}
|
| +} // namespace bookmarks
|
| +
|
| +@interface BookmarkMenuItem () {
|
| + base::mac::ObjCPropertyReleaser _propertyReleaser_BookmarkMenuItem;
|
| +}
|
| +// Redefined to be read-write.
|
| +@property(nonatomic, assign) const BookmarkNode* folder;
|
| +@property(nonatomic, assign) const BookmarkNode* rootAncestor;
|
| +// Redefined to be read-write.
|
| +@property(nonatomic, assign) bookmarks::MenuItemType type;
|
| +// Redefined to be read-write.
|
| +@property(nonatomic, copy) NSString* sectionTitle;
|
| +@end
|
| +
|
| +@implementation BookmarkMenuItem
|
| +@synthesize folder = _folder;
|
| +@synthesize rootAncestor = _rootAncestor;
|
| +@synthesize sectionTitle = _sectionTitle;
|
| +@synthesize type = _type;
|
| +
|
| +- (instancetype)init {
|
| + self = [super init];
|
| + if (self) {
|
| + _propertyReleaser_BookmarkMenuItem.Init(self, [BookmarkMenuItem class]);
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +- (UIAccessibilityTraits)accessibilityTraits {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemAll:
|
| + case bookmarks::MenuItemFolder:
|
| + return super.accessibilityTraits |= UIAccessibilityTraitButton;
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return super.accessibilityTraits |= UIAccessibilityTraitHeader;
|
| + case bookmarks::MenuItemDivider:
|
| + return UIAccessibilityTraitNone;
|
| + }
|
| +}
|
| +
|
| +- (NSString*)title {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemAll:
|
| + return l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_ALL_BOOKMARKS_LABEL);
|
| + case bookmarks::MenuItemDivider:
|
| + return nil;
|
| + case bookmarks::MenuItemFolder:
|
| + return bookmark_utils_ios::TitleForBookmarkNode(self.folder);
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return self.sectionTitle;
|
| + }
|
| +}
|
| +
|
| +- (NSString*)titleForMenu {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemAll:
|
| + return l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_ALL_BOOKMARKS_LABEL);
|
| + case bookmarks::MenuItemDivider:
|
| + case bookmarks::MenuItemFolder:
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return [self title];
|
| + }
|
| +}
|
| +
|
| +- (NSString*)titleForNavigationBar {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemAll:
|
| + return l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_BOOKMARKS_LABEL);
|
| + case bookmarks::MenuItemDivider:
|
| + case bookmarks::MenuItemFolder:
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return [self title];
|
| + }
|
| +}
|
| +
|
| +- (NSString*)accessibilityIdentifier {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemAll:
|
| + return @"MenuItemAll";
|
| + case bookmarks::MenuItemDivider:
|
| + return nil;
|
| + case bookmarks::MenuItemFolder:
|
| + return @"MenuItemFolder";
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return @"MenuItemSectionHeader";
|
| + }
|
| +}
|
| +
|
| +- (UIImage*)imagePrimary:(BOOL)primary {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemAll:
|
| + if (primary)
|
| + return [UIImage imageNamed:@"bookmark_blue_star"];
|
| + else
|
| + return [UIImage imageNamed:@"bookmark_gray_star"];
|
| + case bookmarks::MenuItemFolder:
|
| + if (self.folder->type() == BookmarkNode::BOOKMARK_BAR ||
|
| + self.folder->type() == BookmarkNode::MOBILE ||
|
| + self.folder->type() == BookmarkNode::OTHER_NODE) {
|
| + if (primary)
|
| + return [UIImage imageNamed:@"bookmark_blue_folder"];
|
| + else
|
| + return [UIImage imageNamed:@"bookmark_gray_folder"];
|
| + }
|
| + case bookmarks::MenuItemDivider:
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return nil;
|
| + }
|
| +}
|
| +
|
| +- (CGFloat)height {
|
| + if (self.type == bookmarks::MenuItemDivider)
|
| + return 1;
|
| + return 48;
|
| +}
|
| +
|
| +- (BOOL)canBeSelected {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemDivider:
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return NO;
|
| + case bookmarks::MenuItemAll:
|
| + case bookmarks::MenuItemFolder:
|
| + return YES;
|
| + }
|
| +}
|
| +
|
| +- (BOOL)supportsEditing {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemAll:
|
| + case bookmarks::MenuItemFolder:
|
| + return YES;
|
| + case bookmarks::MenuItemDivider:
|
| + case bookmarks::MenuItemSectionHeader:
|
| + NOTREACHED();
|
| + return NO;
|
| + }
|
| +}
|
| +
|
| +- (BOOL)isEqual:(id)other {
|
| + if (other == self)
|
| + return YES;
|
| + if (!other || ![other isKindOfClass:[self class]])
|
| + return NO;
|
| + BookmarkMenuItem* otherMenuItem = static_cast<BookmarkMenuItem*>(other);
|
| + if (self.type != otherMenuItem.type)
|
| + return NO;
|
| +
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemDivider:
|
| + case bookmarks::MenuItemAll:
|
| + return YES;
|
| + case bookmarks::MenuItemFolder:
|
| + return self.folder == otherMenuItem.folder;
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return self.sectionTitle == otherMenuItem.sectionTitle;
|
| + }
|
| +}
|
| +
|
| +- (BookmarkMenuItem*)parentItem {
|
| + if (self.type != bookmarks::MenuItemFolder)
|
| + return self;
|
| + BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease];
|
| + item.type = self.type;
|
| + item.folder = self.rootAncestor;
|
| + item.rootAncestor = self.rootAncestor;
|
| + return item;
|
| +}
|
| +
|
| +- (NSUInteger)hash {
|
| + switch (self.type) {
|
| + case bookmarks::MenuItemDivider:
|
| + case bookmarks::MenuItemAll:
|
| + return self.type;
|
| + case bookmarks::MenuItemFolder:
|
| + return self.type + reinterpret_cast<NSUInteger>(self.folder);
|
| + case bookmarks::MenuItemSectionHeader:
|
| + return self.type + [self.sectionTitle hash];
|
| + }
|
| +}
|
| +
|
| ++ (BookmarkMenuItem*)allMenuItem {
|
| + BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease];
|
| + item.type = bookmarks::MenuItemAll;
|
| + return item;
|
| +}
|
| +
|
| ++ (BookmarkMenuItem*)dividerMenuItem {
|
| + BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease];
|
| + item.type = bookmarks::MenuItemDivider;
|
| + return item;
|
| +}
|
| +
|
| ++ (BookmarkMenuItem*)folderMenuItemForNode:(const BookmarkNode*)node
|
| + rootAncestor:(const BookmarkNode*)ancestor {
|
| + BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease];
|
| + item.type = bookmarks::MenuItemFolder;
|
| + item.folder = node;
|
| + item.rootAncestor = ancestor;
|
| + return item;
|
| +}
|
| +
|
| ++ (BookmarkMenuItem*)sectionMenuItemWithTitle:(NSString*)title {
|
| + BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease];
|
| + item.type = bookmarks::MenuItemSectionHeader;
|
| + item.sectionTitle = title;
|
| + return item;
|
| +}
|
| +
|
| +@end
|
|
|