// 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.

#ifndef CHROME_BROWSER_UI_COCOA_CONFIRM_BUBBLE_COCOA_H_
#define CHROME_BROWSER_UI_COCOA_CONFIRM_BUBBLE_COCOA_H_

#import <Cocoa/Cocoa.h>

#include "base/mac/scoped_nsobject.h"

@class ConfirmBubbleController;
class ConfirmBubbleModel;

// A view class that implements a bubble consisting of the following items:
// * one icon ("icon")
// * one title text ("title")
// * one message text ("message")
// * one optional link ("link")
// * two optional buttons ("ok" and "cancel")
//
// This bubble is convenient when we wish to ask transient, non-blocking
// questions. Unlike a dialog, a bubble menu disappears when we click outside of
// its window to avoid blocking user operations. A bubble is laid out as
// follows:
//
//   +------------------------+
//   | icon title             |
//   | message                |
//   | link                   |
//   |          [Cancel] [OK] |
//   +------------------------+
//
@interface ConfirmBubbleCocoa : NSView<NSTextViewDelegate> {
 @private
  NSView* parent_;  // weak
  ConfirmBubbleController* controller_;  // weak

  // Controls used in this bubble.
  base::scoped_nsobject<NSImageView> icon_;
  base::scoped_nsobject<NSTextView> titleLabel_;
  base::scoped_nsobject<NSTextView> messageLabel_;
  base::scoped_nsobject<NSButton> okButton_;
  base::scoped_nsobject<NSButton> cancelButton_;
}

// Initializes a bubble view. Since this initializer programmatically creates a
// custom NSView (i.e. without using a nib file), this function should be called
// from loadView: of the controller object which owns this view.
- (id)initWithParent:(NSView*)parent
          controller:(ConfirmBubbleController*)controller;

@end

// Exposed only for unit testing.
@interface ConfirmBubbleCocoa (ExposedForUnitTesting)
- (void)clickOk;
- (void)clickCancel;
- (void)clickLink;
@end

#endif  // CHROME_BROWSER_UI_COCOA_CONFIRM_BUBBLE_COCOA_H_
