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

Side by Side 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 unified diff | Download patch
OLDNEW
(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
OLDNEW
« 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