1 // Copyright 2014 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.
5 #import <Cocoa/Cocoa.h>
7 #include "base/mac/scoped_nsobject.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/translate/chrome_translate_client.h"
10 #import "chrome/browser/ui/cocoa/base_bubble_controller.h"
11 #include "components/translate/core/common/translate_errors.h"
13 @
class BrowserWindowController
;
15 class LanguageComboboxModel
;
16 class TranslateBubbleModel
;
17 class TranslateDenialComboboxModel
;
23 // Displays the Translate bubble. The Translate bubble is a bubble which
24 // pops up when clicking the Translate icon on Omnibox. This bubble
25 // allows us to translate a foreign page into user-selected language,
26 // revert this, and configure the translate setting.
27 @interface TranslateBubbleController
: BaseBubbleController
{
29 content::WebContents
* webContents_
;
30 scoped_ptr
<TranslateBubbleModel
> model_
;
32 // The views of each state. The keys are TranslateBubbleModel::ViewState,
33 // and the values are NSView*.
34 base::scoped_nsobject
<NSDictionary
> views_
;
36 // The 'Done' or 'Translate' button on the advanced (option) panel.
37 NSButton
* advancedDoneButton_
;
39 // The 'Cancel' button on the advanced (option) panel.
40 NSButton
* advancedCancelButton_
;
42 // The 'Always translate' checkbox on the advanced (option) panel.
43 // This is nil when the current WebContents is in an incognito window.
44 NSButton
* alwaysTranslateCheckbox_
;
46 // The combobox model which is used to deny translation at the view before
48 scoped_ptr
<TranslateDenialComboboxModel
> translateDenialComboboxModel_
;
50 // The combobox model for source languages on the advanced (option) panel.
51 scoped_ptr
<LanguageComboboxModel
> sourceLanguageComboboxModel_
;
53 // The combobox model for target languages on the advanced (option) panel.
54 scoped_ptr
<LanguageComboboxModel
> targetLanguageComboboxModel_
;
56 // Whether the translation is actually executed once at least.
57 BOOL translateExecuted_
;
60 @
property(readonly
, nonatomic
) const content::WebContents
* webContents
;
61 @
property(readonly
, nonatomic
) const TranslateBubbleModel
* model
;
63 - (id
)initWithParentWindow
:(BrowserWindowController
*)controller
64 model
:(scoped_ptr
<TranslateBubbleModel
>)model
65 webContents
:(content::WebContents
*)webContents
;
66 - (void)switchView
:(TranslateBubbleModel::ViewState
)viewState
;
67 - (void)switchToErrorView
:(translate::TranslateErrors::Type
)errorType
;
71 // The methods on this category are used internally by the controller and are
72 // only exposed for testing purposes. DO NOT USE OTHERWISE.
73 @interface
TranslateBubbleController (ExposedForTesting
)
74 - (void)handleTranslateButtonPressed
;