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

Unified Diff: chrome/browser/ui/cocoa/one_click_signin_bubble_controller.mm

Issue 9863032: [Sync] [Mac] Implement one-click signin bubble for OS X (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address sky's comments Created 8 years, 9 months 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/one_click_signin_bubble_controller.mm
diff --git a/chrome/browser/ui/cocoa/one_click_signin_bubble_controller.mm b/chrome/browser/ui/cocoa/one_click_signin_bubble_controller.mm
new file mode 100644
index 0000000000000000000000000000000000000000..d5c0dd75637e715108ec7bc81436001424e0e475
--- /dev/null
+++ b/chrome/browser/ui/cocoa/one_click_signin_bubble_controller.mm
@@ -0,0 +1,103 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/ui/cocoa/one_click_signin_bubble_controller.h"
+
+#include "base/logging.h"
+#import "chrome/browser/ui/cocoa/browser_window_controller.h"
+#import "chrome/browser/ui/cocoa/info_bubble_view.h"
+#import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#import "third_party/GTM/AppKit/GTMUILocalizerAndLayoutTweaker.h"
+#include "ui/base/l10n/l10n_util.h"
+#import "ui/base/l10n/l10n_util_mac.h"
+
+namespace {
+
+// Shift the origin of |view|'s frame by the given amount in the
+// positive y direction (up).
+void ShiftOriginY(NSView* view, CGFloat amount) {
+ NSPoint origin = [view frame].origin;
+ origin.y += amount;
+ [view setFrameOrigin:origin];
+}
+
+} // namespace
+
+@implementation OneClickSigninBubbleController
+
+- (id)initWithBrowserWindowController:(BrowserWindowController*)controller
+ learnMoreCallback:(const base::Closure&)learnMoreCallback
+ advancedCallback:(const base::Closure&)advancedCallback {
+ NSWindow* parentWindow = [controller window];
+
+ // Set the anchor point to right below the wrench menu.
+ NSView* wrenchButton = [[controller toolbarController] wrenchButton];
+ const NSRect bounds = [wrenchButton bounds];
+ NSPoint anchorPoint = NSMakePoint(NSMidX(bounds), NSMaxY(bounds));
+ anchorPoint = [wrenchButton convertPoint:anchorPoint toView:nil];
+ anchorPoint = [parentWindow convertBaseToScreen:anchorPoint];
+
+ if (self = [super initWithWindowNibPath:@"OneClickSigninBubble"
+ parentWindow:parentWindow
+ anchoredAt:anchorPoint]) {
+ learnMoreCallback_ = learnMoreCallback;
+ advancedCallback_ = advancedCallback;
+ DCHECK(!learnMoreCallback_.is_null());
+ DCHECK(!advancedCallback_.is_null());
+ }
+ return self;
+}
+
+- (IBAction)ok:(id)sender {
+ [self close];
+}
+
+- (IBAction)onClickLearnMoreLink:(id)sender {
+ learnMoreCallback_.Run();
+}
+
+- (IBAction)onClickAdvancedLink:(id)sender {
+ advancedCallback_.Run();
+}
+
+- (void)awakeFromNib {
+ [super awakeFromNib];
+
+ // Set the message text manually, since we have to interpolate the
+ // product name.
+ NSString* message =
+ l10n_util::GetNSStringF(
+ IDS_SYNC_PROMO_NTP_BUBBLE_MESSAGE,
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME));
+ [messageField_ setStringValue:message];
+
+ // Lay out the text controls from the bottom up.
+ CGFloat totalYOffset = 0.0;
+
+ totalYOffset +=
+ [GTMUILocalizerAndLayoutTweaker sizeToFitView:advancedLink_].height;
+
+ ShiftOriginY(learnMoreLink_, totalYOffset);
+ totalYOffset +=
+ [GTMUILocalizerAndLayoutTweaker sizeToFitView:learnMoreLink_].height;
+
+ ShiftOriginY(messageField_, totalYOffset);
+ totalYOffset +=
+ [GTMUILocalizerAndLayoutTweaker
+ sizeToFitFixedWidthTextField:messageField_];
+
+ NSSize delta = NSMakeSize(0.0, totalYOffset);
+
+ // Resize bubble and window to hold the controls.
+ [GTMUILocalizerAndLayoutTweaker
+ resizeViewWithoutAutoResizingSubViews:[self bubble]
+ delta:delta];
+ [GTMUILocalizerAndLayoutTweaker
+ resizeWindowWithoutAutoResizingSubViews:[self window]
+ delta:delta];
+}
+
+@end // OneClickSigninBubbleController

Powered by Google App Engine
This is Rietveld 408576698