OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #import "ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h" |
| 6 |
| 7 #include "base/hash.h" |
| 8 #include "base/logging.h" |
| 9 #include "base/mac/objc_property_releaser.h" |
| 10 #include "base/strings/sys_string_conversions.h" |
| 11 #include "components/bookmarks/browser/bookmark_node.h" |
| 12 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" |
| 13 #include "ios/chrome/grit/ios_strings.h" |
| 14 #include "ui/base/l10n/l10n_util.h" |
| 15 |
| 16 using bookmarks::BookmarkNode; |
| 17 |
| 18 namespace bookmarks { |
| 19 BOOL NumberIsValidMenuItemType(int number) { |
| 20 // Invalid and deprecated numbers. |
| 21 if (number < 0 || number > MenuItemLast) |
| 22 return NO; |
| 23 MenuItemType type = static_cast<MenuItemType>(number); |
| 24 switch (type) { |
| 25 case MenuItemAll: |
| 26 case MenuItemFolder: |
| 27 return YES; |
| 28 |
| 29 case MenuItemDivider: |
| 30 case MenuItemSectionHeader: |
| 31 return NO; |
| 32 } |
| 33 } |
| 34 } // namespace bookmarks |
| 35 |
| 36 @interface BookmarkMenuItem () { |
| 37 base::mac::ObjCPropertyReleaser _propertyReleaser_BookmarkMenuItem; |
| 38 } |
| 39 // Redefined to be read-write. |
| 40 @property(nonatomic, assign) const BookmarkNode* folder; |
| 41 @property(nonatomic, assign) const BookmarkNode* rootAncestor; |
| 42 // Redefined to be read-write. |
| 43 @property(nonatomic, assign) bookmarks::MenuItemType type; |
| 44 // Redefined to be read-write. |
| 45 @property(nonatomic, copy) NSString* sectionTitle; |
| 46 @end |
| 47 |
| 48 @implementation BookmarkMenuItem |
| 49 @synthesize folder = _folder; |
| 50 @synthesize rootAncestor = _rootAncestor; |
| 51 @synthesize sectionTitle = _sectionTitle; |
| 52 @synthesize type = _type; |
| 53 |
| 54 - (instancetype)init { |
| 55 self = [super init]; |
| 56 if (self) { |
| 57 _propertyReleaser_BookmarkMenuItem.Init(self, [BookmarkMenuItem class]); |
| 58 } |
| 59 return self; |
| 60 } |
| 61 |
| 62 - (UIAccessibilityTraits)accessibilityTraits { |
| 63 switch (self.type) { |
| 64 case bookmarks::MenuItemAll: |
| 65 case bookmarks::MenuItemFolder: |
| 66 return super.accessibilityTraits |= UIAccessibilityTraitButton; |
| 67 case bookmarks::MenuItemSectionHeader: |
| 68 return super.accessibilityTraits |= UIAccessibilityTraitHeader; |
| 69 case bookmarks::MenuItemDivider: |
| 70 return UIAccessibilityTraitNone; |
| 71 } |
| 72 } |
| 73 |
| 74 - (NSString*)title { |
| 75 switch (self.type) { |
| 76 case bookmarks::MenuItemAll: |
| 77 return l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_ALL_BOOKMARKS_LABEL); |
| 78 case bookmarks::MenuItemDivider: |
| 79 return nil; |
| 80 case bookmarks::MenuItemFolder: |
| 81 return bookmark_utils_ios::TitleForBookmarkNode(self.folder); |
| 82 case bookmarks::MenuItemSectionHeader: |
| 83 return self.sectionTitle; |
| 84 } |
| 85 } |
| 86 |
| 87 - (NSString*)titleForMenu { |
| 88 switch (self.type) { |
| 89 case bookmarks::MenuItemAll: |
| 90 return l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_ALL_BOOKMARKS_LABEL); |
| 91 case bookmarks::MenuItemDivider: |
| 92 case bookmarks::MenuItemFolder: |
| 93 case bookmarks::MenuItemSectionHeader: |
| 94 return [self title]; |
| 95 } |
| 96 } |
| 97 |
| 98 - (NSString*)titleForNavigationBar { |
| 99 switch (self.type) { |
| 100 case bookmarks::MenuItemAll: |
| 101 return l10n_util::GetNSString(IDS_IOS_BOOKMARK_NEW_BOOKMARKS_LABEL); |
| 102 case bookmarks::MenuItemDivider: |
| 103 case bookmarks::MenuItemFolder: |
| 104 case bookmarks::MenuItemSectionHeader: |
| 105 return [self title]; |
| 106 } |
| 107 } |
| 108 |
| 109 - (NSString*)accessibilityIdentifier { |
| 110 switch (self.type) { |
| 111 case bookmarks::MenuItemAll: |
| 112 return @"MenuItemAll"; |
| 113 case bookmarks::MenuItemDivider: |
| 114 return nil; |
| 115 case bookmarks::MenuItemFolder: |
| 116 return @"MenuItemFolder"; |
| 117 case bookmarks::MenuItemSectionHeader: |
| 118 return @"MenuItemSectionHeader"; |
| 119 } |
| 120 } |
| 121 |
| 122 - (UIImage*)imagePrimary:(BOOL)primary { |
| 123 switch (self.type) { |
| 124 case bookmarks::MenuItemAll: |
| 125 if (primary) |
| 126 return [UIImage imageNamed:@"bookmark_blue_star"]; |
| 127 else |
| 128 return [UIImage imageNamed:@"bookmark_gray_star"]; |
| 129 case bookmarks::MenuItemFolder: |
| 130 if (self.folder->type() == BookmarkNode::BOOKMARK_BAR || |
| 131 self.folder->type() == BookmarkNode::MOBILE || |
| 132 self.folder->type() == BookmarkNode::OTHER_NODE) { |
| 133 if (primary) |
| 134 return [UIImage imageNamed:@"bookmark_blue_folder"]; |
| 135 else |
| 136 return [UIImage imageNamed:@"bookmark_gray_folder"]; |
| 137 } |
| 138 case bookmarks::MenuItemDivider: |
| 139 case bookmarks::MenuItemSectionHeader: |
| 140 return nil; |
| 141 } |
| 142 } |
| 143 |
| 144 - (CGFloat)height { |
| 145 if (self.type == bookmarks::MenuItemDivider) |
| 146 return 1; |
| 147 return 48; |
| 148 } |
| 149 |
| 150 - (BOOL)canBeSelected { |
| 151 switch (self.type) { |
| 152 case bookmarks::MenuItemDivider: |
| 153 case bookmarks::MenuItemSectionHeader: |
| 154 return NO; |
| 155 case bookmarks::MenuItemAll: |
| 156 case bookmarks::MenuItemFolder: |
| 157 return YES; |
| 158 } |
| 159 } |
| 160 |
| 161 - (BOOL)supportsEditing { |
| 162 switch (self.type) { |
| 163 case bookmarks::MenuItemAll: |
| 164 case bookmarks::MenuItemFolder: |
| 165 return YES; |
| 166 case bookmarks::MenuItemDivider: |
| 167 case bookmarks::MenuItemSectionHeader: |
| 168 NOTREACHED(); |
| 169 return NO; |
| 170 } |
| 171 } |
| 172 |
| 173 - (BOOL)isEqual:(id)other { |
| 174 if (other == self) |
| 175 return YES; |
| 176 if (!other || ![other isKindOfClass:[self class]]) |
| 177 return NO; |
| 178 BookmarkMenuItem* otherMenuItem = static_cast<BookmarkMenuItem*>(other); |
| 179 if (self.type != otherMenuItem.type) |
| 180 return NO; |
| 181 |
| 182 switch (self.type) { |
| 183 case bookmarks::MenuItemDivider: |
| 184 case bookmarks::MenuItemAll: |
| 185 return YES; |
| 186 case bookmarks::MenuItemFolder: |
| 187 return self.folder == otherMenuItem.folder; |
| 188 case bookmarks::MenuItemSectionHeader: |
| 189 return self.sectionTitle == otherMenuItem.sectionTitle; |
| 190 } |
| 191 } |
| 192 |
| 193 - (BookmarkMenuItem*)parentItem { |
| 194 if (self.type != bookmarks::MenuItemFolder) |
| 195 return self; |
| 196 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; |
| 197 item.type = self.type; |
| 198 item.folder = self.rootAncestor; |
| 199 item.rootAncestor = self.rootAncestor; |
| 200 return item; |
| 201 } |
| 202 |
| 203 - (NSUInteger)hash { |
| 204 switch (self.type) { |
| 205 case bookmarks::MenuItemDivider: |
| 206 case bookmarks::MenuItemAll: |
| 207 return self.type; |
| 208 case bookmarks::MenuItemFolder: |
| 209 return self.type + reinterpret_cast<NSUInteger>(self.folder); |
| 210 case bookmarks::MenuItemSectionHeader: |
| 211 return self.type + [self.sectionTitle hash]; |
| 212 } |
| 213 } |
| 214 |
| 215 + (BookmarkMenuItem*)allMenuItem { |
| 216 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; |
| 217 item.type = bookmarks::MenuItemAll; |
| 218 return item; |
| 219 } |
| 220 |
| 221 + (BookmarkMenuItem*)dividerMenuItem { |
| 222 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; |
| 223 item.type = bookmarks::MenuItemDivider; |
| 224 return item; |
| 225 } |
| 226 |
| 227 + (BookmarkMenuItem*)folderMenuItemForNode:(const BookmarkNode*)node |
| 228 rootAncestor:(const BookmarkNode*)ancestor { |
| 229 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; |
| 230 item.type = bookmarks::MenuItemFolder; |
| 231 item.folder = node; |
| 232 item.rootAncestor = ancestor; |
| 233 return item; |
| 234 } |
| 235 |
| 236 + (BookmarkMenuItem*)sectionMenuItemWithTitle:(NSString*)title { |
| 237 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; |
| 238 item.type = bookmarks::MenuItemSectionHeader; |
| 239 item.sectionTitle = title; |
| 240 return item; |
| 241 } |
| 242 |
| 243 @end |
OLD | NEW |