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

Side by Side Diff: chrome/browser/ui/cocoa/passwords/manage_credential_item_view_controller.mm

Issue 1411733009: Bulk rename files in chrome/browser/ui/cocoa/passwords/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fix-federation
Patch Set: Created 5 years, 1 month 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 2015 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 "chrome/browser/ui/cocoa/passwords/manage_credential_item_view_controlle r.h"
6
7 #include <algorithm>
8
9 #include "base/i18n/rtl.h"
10 #include "chrome/browser/ui/chrome_style.h"
11 #import "chrome/browser/ui/cocoa/passwords/credential_item_view.h"
12 #include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h"
13 #include "components/password_manager/core/common/password_manager_ui.h"
14 #include "grit/components_strings.h"
15 #include "grit/generated_resources.h"
16 #include "skia/ext/skia_utils_mac.h"
17 #import "ui/base/cocoa/controls/hyperlink_button_cell.h"
18 #import "ui/base/cocoa/hover_image_button.h"
19 #include "ui/base/l10n/l10n_util.h"
20 #include "ui/base/resource/resource_bundle.h"
21 #include "ui/gfx/image/image.h"
22 #include "ui/resources/grit/ui_resources.h"
23
24 namespace {
25
26 // Horizontal space betweeen subviews of a credential item.
27 const CGFloat kItemSubviewsHorizontalSpacing = 20.0f;
28
29 // Lays out |leftSubview| and |rightSubview| within |item| so that they stick
30 // to the left and right sides of |item|, respectively, and resizes |item| to
31 // hold them. Flipped in RTL.
32 void LayOutItem(NSView* item, NSView* leftSubview, NSView* rightSubview) {
33 const CGFloat width = NSWidth([leftSubview frame]) +
34 kItemSubviewsHorizontalSpacing +
35 NSWidth([rightSubview frame]);
36 const CGFloat height =
37 std::max(NSHeight([leftSubview frame]), NSHeight([rightSubview frame]));
38 [item setFrameSize:NSMakeSize(width, height)];
39 [leftSubview
40 setFrameOrigin:NSMakePoint(base::i18n::IsRTL()
41 ? width - NSWidth([leftSubview frame])
42 : 0,
43 0)];
44 [rightSubview
45 setFrameOrigin:NSMakePoint(
46 base::i18n::IsRTL()
47 ? 0
48 : width - NSWidth([rightSubview frame]),
49 (height - NSHeight([rightSubview frame])) / 2.0f)];
50 [leftSubview setAutoresizingMask:NSViewWidthSizable |
51 (base::i18n::IsRTL() ? NSViewMinXMargin
52 : NSViewMaxXMargin)];
53 [rightSubview setAutoresizingMask:(base::i18n::IsRTL() ? NSViewMaxXMargin
54 : NSViewMinXMargin)];
55 }
56 } // namespace
57
58 @implementation ManageCredentialItemView : NSView
59
60 - (id)initWithPasswordForm:(const autofill::PasswordForm&)passwordForm
61 delegate:(id<CredentialItemDelegate>)delegate
62 target:(id)target
63 action:(SEL)action {
64 if ((self = [super initWithFrame:NSZeroRect])) {
65
66 // ----------------------------------------------
67 // | | John Q. Facebooker | |
68 // | icon | john@somewhere.com | X |
69 // | | | |
70 // ----------------------------------------------
71
72 // Create the views.
73 credentialItem_.reset([[CredentialItemView alloc]
74 initWithPasswordForm:passwordForm
75 credentialType:password_manager::CredentialType::
76 CREDENTIAL_TYPE_PASSWORD
77 style:password_manager_mac::CredentialItemStyle::
78 ACCOUNT_CHOOSER
79 delegate:delegate]);
80 [self addSubview:credentialItem_];
81
82 deleteButton_.reset([[HoverImageButton alloc]
83 initWithFrame:NSMakeRect(0, 0, chrome_style::GetCloseButtonSize(),
84 chrome_style::GetCloseButtonSize())]);
85 [deleteButton_ setBordered:NO];
86 [[deleteButton_ cell] setHighlightsBy:NSNoCellMask];
87 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
88 [deleteButton_
89 setDefaultImage:bundle.GetNativeImageNamed(IDR_CLOSE_2).ToNSImage()];
90 [deleteButton_
91 setHoverImage:bundle.GetNativeImageNamed(IDR_CLOSE_2_H).ToNSImage()];
92 [deleteButton_
93 setPressedImage:bundle.GetNativeImageNamed(IDR_CLOSE_2_P).ToNSImage()];
94 [deleteButton_ setTarget:target];
95 [deleteButton_ setAction:action];
96 [self addSubview:deleteButton_];
97
98 LayOutItem(self, credentialItem_, deleteButton_);
99 }
100 return self;
101 }
102
103 @end
104
105 @implementation DeletedCredentialItemView : NSView
106 - (id)initWithTarget:(id)target action:(SEL)action {
107 if ((self = [super initWithFrame:NSZeroRect])) {
108
109 // ----------------------------------------------
110 // | Such-and-such has been deleted. [Undo]
111 // ----------------------------------------------
112
113 // Create the views.
114 base::scoped_nsobject<NSTextField> explanationLabel(
115 [[NSTextField alloc] initWithFrame:NSZeroRect]);
116 [explanationLabel
117 setStringValue:l10n_util::GetNSString(IDS_MANAGE_PASSWORDS_DELETED)];
118 NSFont* font = ResourceBundle::GetSharedInstance()
119 .GetFontList(ResourceBundle::SmallFont)
120 .GetPrimaryFont()
121 .GetNativeFont();
122 [explanationLabel setFont:font];
123 [explanationLabel setEditable:NO];
124 [explanationLabel setSelectable:NO];
125 [explanationLabel setDrawsBackground:NO];
126 [explanationLabel setBezeled:NO];
127 [explanationLabel sizeToFit];
128 [self addSubview:explanationLabel];
129
130 undoButton_.reset([[NSButton alloc] initWithFrame:NSZeroRect]);
131 base::scoped_nsobject<HyperlinkButtonCell> cell([[HyperlinkButtonCell alloc]
132 initTextCell:l10n_util::GetNSString(IDS_MANAGE_PASSWORDS_UNDO)]);
133 [cell setControlSize:NSSmallControlSize];
134 [cell setShouldUnderline:NO];
135 [cell setUnderlineOnHover:NO];
136 [cell setTextColor:gfx::SkColorToCalibratedNSColor(
137 chrome_style::GetLinkColor())];
138 [undoButton_ setCell:cell.get()];
139 [undoButton_ sizeToFit];
140 [undoButton_ setTarget:target];
141 [undoButton_ setAction:action];
142 [self addSubview:undoButton_];
143
144 LayOutItem(self, explanationLabel, undoButton_);
145 }
146 return self;
147 }
148
149 @end
150
151 @interface ManageCredentialItemViewController()
152 - (void)deleteCredential:(id)sender;
153 - (void)undoDelete:(id)sender;
154 @end
155
156 @implementation ManageCredentialItemViewController
157 - (id)initWithPasswordForm:(const autofill::PasswordForm&)passwordForm
158 model:(ManagePasswordsBubbleModel*)model
159 delegate:(id<CredentialItemDelegate>)delegate {
160 if ((self = [super initWithNibName:nil bundle:nil])) {
161 passwordForm_ = passwordForm;
162 model_ = model;
163 delegate_ = delegate;
164 [self changeToManageView];
165 }
166 return self;
167 }
168
169 - (void)performLayout {
170 [self view].subviews = @[ contentView_ ];
171 [[self view] setFrameSize:[contentView_ frame].size];
172 [contentView_ setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
173 }
174
175 - (void)loadView {
176 [self setView:[[[NSView alloc] initWithFrame:NSZeroRect] autorelease]];
177 [self performLayout];
178 }
179
180 - (void)deleteCredential:(id)sender {
181 model_->OnPasswordAction(passwordForm_,
182 ManagePasswordsBubbleModel::REMOVE_PASSWORD);
183 [self changeToDeletedView];
184 [self performLayout];
185 }
186
187 - (void)undoDelete:(id)sender {
188 model_->OnPasswordAction(passwordForm_,
189 ManagePasswordsBubbleModel::ADD_PASSWORD);
190 [self changeToManageView];
191 [self performLayout];
192 }
193
194 - (void)changeToManageView {
195 contentView_.reset([[ManageCredentialItemView alloc]
196 initWithPasswordForm:passwordForm_
197 delegate:delegate_
198 target:self
199 action:@selector(deleteCredential:)]);
200 }
201
202 - (void)changeToDeletedView {
203 contentView_.reset([[DeletedCredentialItemView alloc]
204 initWithTarget:self
205 action:@selector(undoDelete:)]);
206 }
207 @end
208
209 @implementation ManageCredentialItemViewController (Testing)
210
211 - (const autofill::PasswordForm&)passwordForm {
212 return passwordForm_;
213 }
214
215 - (NSView*)contentView {
216 return contentView_.get();
217 }
218
219 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698