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" | |
10 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
11 #include "components/bookmarks/browser/bookmark_node.h" | 10 #include "components/bookmarks/browser/bookmark_node.h" |
12 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" | 11 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" |
13 #include "ios/chrome/grit/ios_strings.h" | 12 #include "ios/chrome/grit/ios_strings.h" |
14 #include "ui/base/l10n/l10n_util.h" | 13 #include "ui/base/l10n/l10n_util.h" |
15 | 14 |
| 15 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 16 #error "This file requires ARC support." |
| 17 #endif |
| 18 |
16 using bookmarks::BookmarkNode; | 19 using bookmarks::BookmarkNode; |
17 | 20 |
18 namespace bookmarks { | 21 namespace bookmarks { |
19 BOOL NumberIsValidMenuItemType(int number) { | 22 BOOL NumberIsValidMenuItemType(int number) { |
20 // Invalid and deprecated numbers. | 23 // Invalid and deprecated numbers. |
21 if (number < 1 || number > MenuItemLast) | 24 if (number < 1 || number > MenuItemLast) |
22 return NO; | 25 return NO; |
23 MenuItemType type = static_cast<MenuItemType>(number); | 26 MenuItemType type = static_cast<MenuItemType>(number); |
24 switch (type) { | 27 switch (type) { |
25 case MenuItemFolder: | 28 case MenuItemFolder: |
26 return YES; | 29 return YES; |
27 | 30 |
28 case MenuItemDivider: | 31 case MenuItemDivider: |
29 case MenuItemSectionHeader: | 32 case MenuItemSectionHeader: |
30 return NO; | 33 return NO; |
31 } | 34 } |
32 } | 35 } |
33 } // namespace bookmarks | 36 } // namespace bookmarks |
34 | 37 |
35 @interface BookmarkMenuItem () { | 38 @interface BookmarkMenuItem () |
36 base::mac::ObjCPropertyReleaser _propertyReleaser_BookmarkMenuItem; | |
37 } | |
38 // Redefined to be read-write. | 39 // Redefined to be read-write. |
39 @property(nonatomic, assign) const BookmarkNode* folder; | 40 @property(nonatomic, assign) const BookmarkNode* folder; |
40 @property(nonatomic, assign) const BookmarkNode* rootAncestor; | 41 @property(nonatomic, assign) const BookmarkNode* rootAncestor; |
41 // Redefined to be read-write. | 42 // Redefined to be read-write. |
42 @property(nonatomic, assign) bookmarks::MenuItemType type; | 43 @property(nonatomic, assign) bookmarks::MenuItemType type; |
43 // Redefined to be read-write. | 44 // Redefined to be read-write. |
44 @property(nonatomic, copy) NSString* sectionTitle; | 45 @property(nonatomic, copy) NSString* sectionTitle; |
45 @end | 46 @end |
46 | 47 |
47 @implementation BookmarkMenuItem | 48 @implementation BookmarkMenuItem |
48 @synthesize folder = _folder; | 49 @synthesize folder = _folder; |
49 @synthesize rootAncestor = _rootAncestor; | 50 @synthesize rootAncestor = _rootAncestor; |
50 @synthesize sectionTitle = _sectionTitle; | 51 @synthesize sectionTitle = _sectionTitle; |
51 @synthesize type = _type; | 52 @synthesize type = _type; |
52 | 53 |
53 - (instancetype)init { | |
54 self = [super init]; | |
55 if (self) { | |
56 _propertyReleaser_BookmarkMenuItem.Init(self, [BookmarkMenuItem class]); | |
57 } | |
58 return self; | |
59 } | |
60 | |
61 - (UIAccessibilityTraits)accessibilityTraits { | 54 - (UIAccessibilityTraits)accessibilityTraits { |
62 switch (self.type) { | 55 switch (self.type) { |
63 case bookmarks::MenuItemFolder: | 56 case bookmarks::MenuItemFolder: |
64 return super.accessibilityTraits |= UIAccessibilityTraitButton; | 57 return super.accessibilityTraits |= UIAccessibilityTraitButton; |
65 case bookmarks::MenuItemSectionHeader: | 58 case bookmarks::MenuItemSectionHeader: |
66 return super.accessibilityTraits |= UIAccessibilityTraitHeader; | 59 return super.accessibilityTraits |= UIAccessibilityTraitHeader; |
67 case bookmarks::MenuItemDivider: | 60 case bookmarks::MenuItemDivider: |
68 return UIAccessibilityTraitNone; | 61 return UIAccessibilityTraitNone; |
69 } | 62 } |
70 } | 63 } |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 case bookmarks::MenuItemFolder: | 161 case bookmarks::MenuItemFolder: |
169 return self.folder == otherMenuItem.folder; | 162 return self.folder == otherMenuItem.folder; |
170 case bookmarks::MenuItemSectionHeader: | 163 case bookmarks::MenuItemSectionHeader: |
171 return self.sectionTitle == otherMenuItem.sectionTitle; | 164 return self.sectionTitle == otherMenuItem.sectionTitle; |
172 } | 165 } |
173 } | 166 } |
174 | 167 |
175 - (BookmarkMenuItem*)parentItem { | 168 - (BookmarkMenuItem*)parentItem { |
176 if (self.type != bookmarks::MenuItemFolder) | 169 if (self.type != bookmarks::MenuItemFolder) |
177 return self; | 170 return self; |
178 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; | 171 BookmarkMenuItem* item = [[BookmarkMenuItem alloc] init]; |
179 item.type = self.type; | 172 item.type = self.type; |
180 item.folder = self.rootAncestor; | 173 item.folder = self.rootAncestor; |
181 item.rootAncestor = self.rootAncestor; | 174 item.rootAncestor = self.rootAncestor; |
182 return item; | 175 return item; |
183 } | 176 } |
184 | 177 |
185 - (NSUInteger)hash { | 178 - (NSUInteger)hash { |
186 switch (self.type) { | 179 switch (self.type) { |
187 case bookmarks::MenuItemDivider: | 180 case bookmarks::MenuItemDivider: |
188 return self.type; | 181 return self.type; |
189 case bookmarks::MenuItemFolder: | 182 case bookmarks::MenuItemFolder: |
190 return self.type + reinterpret_cast<NSUInteger>(self.folder); | 183 return self.type + reinterpret_cast<NSUInteger>(self.folder); |
191 case bookmarks::MenuItemSectionHeader: | 184 case bookmarks::MenuItemSectionHeader: |
192 return self.type + [self.sectionTitle hash]; | 185 return self.type + [self.sectionTitle hash]; |
193 } | 186 } |
194 } | 187 } |
195 | 188 |
196 + (BookmarkMenuItem*)dividerMenuItem { | 189 + (BookmarkMenuItem*)dividerMenuItem { |
197 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; | 190 BookmarkMenuItem* item = [[BookmarkMenuItem alloc] init]; |
198 item.type = bookmarks::MenuItemDivider; | 191 item.type = bookmarks::MenuItemDivider; |
199 return item; | 192 return item; |
200 } | 193 } |
201 | 194 |
202 + (BookmarkMenuItem*)folderMenuItemForNode:(const BookmarkNode*)node | 195 + (BookmarkMenuItem*)folderMenuItemForNode:(const BookmarkNode*)node |
203 rootAncestor:(const BookmarkNode*)ancestor { | 196 rootAncestor:(const BookmarkNode*)ancestor { |
204 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; | 197 BookmarkMenuItem* item = [[BookmarkMenuItem alloc] init]; |
205 item.type = bookmarks::MenuItemFolder; | 198 item.type = bookmarks::MenuItemFolder; |
206 item.folder = node; | 199 item.folder = node; |
207 item.rootAncestor = ancestor; | 200 item.rootAncestor = ancestor; |
208 return item; | 201 return item; |
209 } | 202 } |
210 | 203 |
211 + (BookmarkMenuItem*)sectionMenuItemWithTitle:(NSString*)title { | 204 + (BookmarkMenuItem*)sectionMenuItemWithTitle:(NSString*)title { |
212 BookmarkMenuItem* item = [[[BookmarkMenuItem alloc] init] autorelease]; | 205 BookmarkMenuItem* item = [[BookmarkMenuItem alloc] init]; |
213 item.type = bookmarks::MenuItemSectionHeader; | 206 item.type = bookmarks::MenuItemSectionHeader; |
214 item.sectionTitle = title; | 207 item.sectionTitle = title; |
215 return item; | 208 return item; |
216 } | 209 } |
217 | 210 |
218 @end | 211 @end |
OLD | NEW |