| // Copyright (c) 2010 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. |
| |
| #include <vector> |
| |
| #import <Cocoa/Cocoa.h> |
| |
| #import "chrome/browser/ui/cocoa/styled_text_field_cell.h" |
| |
| @class AutocompleteTextField; |
| class LocationBarDecoration; |
| |
| // AutocompleteTextFieldCell extends StyledTextFieldCell to provide support for |
| // certain decorations to be applied to the field. These are the search hint |
| // ("Type to search" on the right-hand side), the keyword hint ("Press [Tab] to |
| // search Engine" on the right-hand side), and keyword mode ("Search Engine:" in |
| // a button-like token on the left-hand side). |
| @interface AutocompleteTextFieldCell : StyledTextFieldCell { |
| @private |
| // Decorations which live to the left and right of the text, ordered |
| // from outside in. Decorations are owned by |LocationBarViewMac|. |
| std::vector<LocationBarDecoration*> leftDecorations_; |
| std::vector<LocationBarDecoration*> rightDecorations_; |
| |
| // If YES then the text field will not draw a focus ring or show the insertion |
| // pointer. |
| BOOL hideFocusState_; |
| } |
| |
| // Line height used for text in this cell. |
| - (CGFloat)lineHeight; |
| |
| // Clear |leftDecorations_| and |rightDecorations_|. |
| - (void)clearDecorations; |
| |
| // Add a new left-side decoration to the right of the existing |
| // left-side decorations. |
| - (void)addLeftDecoration:(LocationBarDecoration*)decoration; |
| |
| // Add a new right-side decoration to the left of the existing |
| // right-side decorations. |
| - (void)addRightDecoration:(LocationBarDecoration*)decoration; |
| |
| // The width available after accounting for decorations. |
| - (CGFloat)availableWidthInFrame:(const NSRect)frame; |
| |
| // Return the frame for |aDecoration| if the cell is in |cellFrame|. |
| // Returns |NSZeroRect| for decorations which are not currently |
| // visible. |
| - (NSRect)frameForDecoration:(const LocationBarDecoration*)aDecoration |
| inFrame:(NSRect)cellFrame; |
| |
| // Find the decoration under the event. |NULL| if |theEvent| is not |
| // over anything. |
| - (LocationBarDecoration*)decorationForEvent:(NSEvent*)theEvent |
| inRect:(NSRect)cellFrame |
| ofView:(AutocompleteTextField*)field; |
| |
| // Return the appropriate menu for any decorations under event. |
| // Returns nil if no menu is present for the decoration, or if the |
| // event is not over a decoration. |
| - (NSMenu*)decorationMenuForEvent:(NSEvent*)theEvent |
| inRect:(NSRect)cellFrame |
| ofView:(AutocompleteTextField*)controlView; |
| |
| // Called by |AutocompleteTextField| to let page actions intercept |
| // clicks. Returns |YES| if the click has been intercepted. |
| - (BOOL)mouseDown:(NSEvent*)theEvent |
| inRect:(NSRect)cellFrame |
| ofView:(AutocompleteTextField*)controlView; |
| |
| // These messages are passed down from the AutocompleteTextField, where they are |
| // received from tracking areas registered for decorations that act as buttons. |
| - (void)mouseEntered:(NSEvent*)theEvent |
| inView:(AutocompleteTextField*)controlView; |
| - (void)mouseExited:(NSEvent*)theEvent |
| inView:(AutocompleteTextField*)controlView; |
| |
| // Setup tracking areas for the decorations that are part of this cell, so they |
| // can receive |mouseEntered:| and |mouseExited:| events. |
| - (void)setUpTrackingAreasInRect:(NSRect)frame |
| ofView:(AutocompleteTextField*)view; |
| |
| // Overridden from StyledTextFieldCell to include decorations adjacent |
| // to the text area which don't handle mouse clicks themselves. |
| // Keyword-search bubble, for instance. |
| - (NSRect)textCursorFrameForFrame:(NSRect)cellFrame; |
| |
| // Setup decoration tooltips on |controlView| by calling |
| // |-addToolTip:forRect:|. |
| - (void)updateToolTipsInRect:(NSRect)cellFrame |
| ofView:(AutocompleteTextField*)controlView; |
| |
| // Gets and sets |hideFocusState|. This allows the text field to have focus but |
| // to appear unfocused. |
| - (BOOL)hideFocusState; |
| - (void)setHideFocusState:(BOOL)hideFocusState |
| ofView:(AutocompleteTextField*)controlView; |
| |
| @end |