1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#ifndef CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#import <Cocoa/Cocoa.h>
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "base/mac/scoped_nsobject.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/omnibox/autocomplete_match.h"
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
13effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass OmniboxPopupViewMac;
14effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// OmniboxPopupCell overrides how backgrounds are displayed to
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// handle hover versus selected.  So long as we're in there, it also
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// provides some default initialization.
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch@interface OmniboxPopupCell : NSButtonCell {
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) @private
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The popup view parent of this cell.
21effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  OmniboxPopupViewMac* parent_;
22effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // The match which will be rendered for this row in omnibox dropdown.
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  AutocompleteMatch match_;
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // NSAttributedString instances for various match components.
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  base::scoped_nsobject<NSAttributedString> separator_;
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  base::scoped_nsobject<NSAttributedString> description_;
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // NOTE: While |prefix_| is used only for postfix suggestions, it still needs
31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // to be a member of the class. This allows the |NSAttributedString| instance
32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // to stay alive between the call to |drawTitle| and the actual paint event
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // which accesses the |NSAttributedString| instance.
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  base::scoped_nsobject<NSAttributedString> prefix_;
35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The width of widest match contents in a set of infinite suggestions.
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  CGFloat maxMatchContentsWidth_;
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // The offset at which the infinite suggesiton contents should be displayed.
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  CGFloat contentsOffset_;
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)- (void)setMatch:(const AutocompleteMatch&)match;
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch- (void)setMaxMatchContentsWidth:(CGFloat)maxMatchContentsWidth;
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch- (void)setContentsOffset:(CGFloat)contentsOffset;
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Returns the width of the match contents.
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch- (CGFloat)getMatchContentsWidth;
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Returns the offset of the start of the contents in the input text for the
53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// given match. It is costly to compute this offset, so it is computed once and
54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// shared by all OmniboxPopupCell instances through OmniboxPopupViewMac parent.
55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch+ (CGFloat)computeContentsOffset:(const AutocompleteMatch&)match;
56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch@end
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif  // CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_
60