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