1// Copyright 2013 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.
4
5#ifndef CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_
6#define CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_
7
8#import <Cocoa/Cocoa.h>
9
10#include "base/mac/scoped_nsobject.h"
11#include "components/omnibox/autocomplete_match.h"
12
13class OmniboxPopupViewMac;
14
15// OmniboxPopupCell overrides how backgrounds are displayed to
16// handle hover versus selected.  So long as we're in there, it also
17// provides some default initialization.
18@interface OmniboxPopupCell : NSButtonCell {
19 @private
20  // The popup view parent of this cell.
21  OmniboxPopupViewMac* parent_;
22
23  // The match which will be rendered for this row in omnibox dropdown.
24  AutocompleteMatch match_;
25
26  // NSAttributedString instances for various match components.
27  base::scoped_nsobject<NSAttributedString> separator_;
28  base::scoped_nsobject<NSAttributedString> description_;
29
30  // NOTE: While |prefix_| is used only for postfix suggestions, it still needs
31  // to be a member of the class. This allows the |NSAttributedString| instance
32  // to stay alive between the call to |drawTitle| and the actual paint event
33  // which accesses the |NSAttributedString| instance.
34  base::scoped_nsobject<NSAttributedString> prefix_;
35
36  // The width of widest match contents in a set of infinite suggestions.
37  CGFloat maxMatchContentsWidth_;
38
39  // The offset at which the infinite suggesiton contents should be displayed.
40  CGFloat contentsOffset_;
41}
42
43- (void)setMatch:(const AutocompleteMatch&)match;
44
45- (void)setMaxMatchContentsWidth:(CGFloat)maxMatchContentsWidth;
46
47- (void)setContentsOffset:(CGFloat)contentsOffset;
48
49// Returns the width of the match contents.
50- (CGFloat)getMatchContentsWidth;
51
52// Returns the offset of the start of the contents in the input text for the
53// given match. It is costly to compute this offset, so it is computed once and
54// shared by all OmniboxPopupCell instances through OmniboxPopupViewMac parent.
55+ (CGFloat)computeContentsOffset:(const AutocompleteMatch&)match;
56
57@end
58
59#endif  // CHROME_BROWSER_UI_COCOA_OMNIBOX_OMNIBOX_POPUP_CELL_H_
60