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