1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_VIEW_MAC_H_
6 #define CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_VIEW_MAC_H_
8 #import <Cocoa/Cocoa.h>
10 #include "base/basictypes.h"
11 #include "base/mac/scoped_nsobject.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "chrome/browser/autocomplete/autocomplete_match.h"
14 #import "chrome/browser/ui/cocoa/omnibox/omnibox_popup_matrix.h"
15 #include "chrome/browser/ui/omnibox/omnibox_popup_view.h"
16 #include "ui/gfx/font.h"
18 class AutocompleteResult
;
19 class OmniboxEditModel
;
20 class OmniboxPopupModel
;
23 // Implements OmniboxPopupView using a raw NSWindow containing an
25 class OmniboxPopupViewMac
: public OmniboxPopupView
,
26 public OmniboxPopupMatrixDelegate
{
28 OmniboxPopupViewMac(OmniboxView
* omnibox_view
,
29 OmniboxEditModel
* edit_model
,
31 virtual ~OmniboxPopupViewMac();
33 // Overridden from OmniboxPopupView:
34 virtual bool IsOpen() const OVERRIDE
;
35 virtual void InvalidateLine(size_t line
) OVERRIDE
{}
36 virtual void UpdatePopupAppearance() OVERRIDE
;
37 virtual gfx::Rect
GetTargetBounds() OVERRIDE
;
38 // This is only called by model in SetSelectedLine() after updating
39 // everything. Popup should already be visible.
40 virtual void PaintUpdatesNow() OVERRIDE
;
41 virtual void OnDragCanceled() OVERRIDE
{}
43 // Overridden from OmniboxPopupMatrixDelegate:
44 virtual void OnMatrixRowSelected(OmniboxPopupMatrix
* matrix
,
46 virtual void OnMatrixRowClicked(OmniboxPopupMatrix
* matrix
,
48 virtual void OnMatrixRowMiddleClicked(OmniboxPopupMatrix
* matrix
,
51 OmniboxPopupMatrix
* matrix() { return matrix_
; }
54 // Gets the autocomplete results. This is virtual so that it can be overriden
56 virtual const AutocompleteResult
& GetResult() const;
59 // Create the popup_ instance if needed.
60 void CreatePopupIfNeeded();
62 // Calculate the appropriate position for the popup based on the
63 // field's screen position and the given target for the matrix
64 // height, and makes the popup visible. Animates to the new frame
65 // if the popup shrinks, snaps to the new frame if the popup grows,
66 // allows existing animations to continue if the size doesn't
68 void PositionPopup(const CGFloat matrixHeight
);
70 // Returns the NSImage that should be used as an icon for the given match.
71 NSImage
* ImageForMatch(const AutocompleteMatch
& match
);
73 // Opens the URL at the given row.
74 void OpenURLForRow(size_t row
, WindowOpenDisposition disposition
);
76 OmniboxView
* omnibox_view_
;
77 scoped_ptr
<OmniboxPopupModel
> model_
;
78 NSTextField
* field_
; // owned by tab controller
80 // Child window containing a matrix which implements the popup.
81 base::scoped_nsobject
<NSWindow
> popup_
;
82 NSRect target_popup_frame_
;
84 base::scoped_nsobject
<OmniboxPopupMatrix
> matrix_
;
85 base::scoped_nsobject
<NSView
> top_separator_view_
;
86 base::scoped_nsobject
<NSView
> bottom_separator_view_
;
87 base::scoped_nsobject
<NSBox
> background_view_
;
89 DISALLOW_COPY_AND_ASSIGN(OmniboxPopupViewMac
);
92 #endif // CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_VIEW_MAC_H_