15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_COCOA_CONFIRM_BUBBLE_COCOA_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_COCOA_CONFIRM_BUBBLE_COCOA_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#import <Cocoa/Cocoa.h> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/mac/scoped_nsobject.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@class ConfirmBubbleController; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ConfirmBubbleModel; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A view class that implements a bubble consisting of the following items: 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * one icon ("icon") 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * one title text ("title") 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * one message text ("message") 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * one optional link ("link") 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// * two optional buttons ("ok" and "cancel") 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This bubble is convenient when we wish to ask transient, non-blocking 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// questions. Unlike a dialog, a bubble menu disappears when we click outside of 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// its window to avoid blocking user operations. A bubble is laid out as 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// follows: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +------------------------+ 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// | icon title | 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// | message | 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// | link | 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// | [Cancel] [OK] | 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// +------------------------+ 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@interface ConfirmBubbleCocoa : NSView<NSTextViewDelegate> { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) @private 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NSView* parent_; // weak 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConfirmBubbleController* controller_; // weak 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Controls used in this bubble. 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::scoped_nsobject<NSImageView> icon_; 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::scoped_nsobject<NSTextView> titleLabel_; 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::scoped_nsobject<NSTextView> messageLabel_; 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::scoped_nsobject<NSButton> okButton_; 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::scoped_nsobject<NSButton> cancelButton_; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initializes a bubble view. Since this initializer programmatically creates a 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// custom NSView (i.e. without using a nib file), this function should be called 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from loadView: of the controller object which owns this view. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (id)initWithParent:(NSView*)parent 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller:(ConfirmBubbleController*)controller; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@end 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Exposed only for unit testing. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@interface ConfirmBubbleCocoa (ExposedForUnitTesting) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (void)clickOk; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (void)clickCancel; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)- (void)clickLink; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@end 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_COCOA_CONFIRM_BUBBLE_COCOA_H_ 63