Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Unified Diff: ios/chrome/browser/ui/bookmarks/bookmark_menu_item.mm

Issue 2586993002: Upstream Chrome on iOS source code [3/11]. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h ('k') | ios/chrome/browser/ui/bookmarks/bookmark_menu_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698