Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / ui / views / find_bar_view.h
blob7c41f36a8f9230d3568038ec200085b85598ddc3
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_VIEWS_FIND_BAR_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_FIND_BAR_VIEW_H_
8 #include "base/compiler_specific.h"
9 #include "base/strings/string16.h"
10 #include "chrome/browser/ui/views/dropdown_bar_view.h"
11 #include "ui/views/controls/button/button.h"
12 #include "ui/views/controls/textfield/textfield.h"
13 #include "ui/views/controls/textfield/textfield_controller.h"
15 class FindBarHost;
16 class FindNotificationDetails;
18 namespace views {
19 class ImageButton;
20 class Label;
21 class MouseEvent;
22 class View;
25 ////////////////////////////////////////////////////////////////////////////////
27 // The FindBarView is responsible for drawing the UI controls of the
28 // FindBar, the find text box, the 'Find' button and the 'Close'
29 // button. It communicates the user search words to the FindBarHost.
31 ////////////////////////////////////////////////////////////////////////////////
32 class FindBarView : public DropdownBarView,
33 public views::ButtonListener,
34 public views::TextfieldController {
35 public:
36 // A tag denoting which button the user pressed.
37 enum ButtonTag {
38 FIND_PREVIOUS_TAG = 0, // The Find Previous button.
39 FIND_NEXT_TAG, // The Find Next button.
40 CLOSE_TAG, // The Close button (the 'X').
43 explicit FindBarView(FindBarHost* host);
44 virtual ~FindBarView();
46 // Accessors for the text and selection displayed in the text box.
47 void SetFindTextAndSelectedRange(const base::string16& find_text,
48 const gfx::Range& selected_range);
49 base::string16 GetFindText() const;
50 gfx::Range GetSelectedRange() const;
52 // Gets the selected text in the text box.
53 base::string16 GetFindSelectedText() const;
55 // Gets the match count text displayed in the text box.
56 base::string16 GetMatchCountText() const;
58 // Updates the label inside the Find text box that shows the ordinal of the
59 // active item and how many matches were found.
60 void UpdateForResult(const FindNotificationDetails& result,
61 const base::string16& find_text);
63 // Clears the current Match Count value in the Find text box.
64 void ClearMatchCount();
66 // Claims focus for the text field and selects its contents.
67 virtual void SetFocusAndSelection(bool select_all) OVERRIDE;
69 // views::View:
70 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
71 virtual void Layout() OVERRIDE;
72 virtual gfx::Size GetPreferredSize() OVERRIDE;
74 // views::ButtonListener:
75 virtual void ButtonPressed(views::Button* sender,
76 const ui::Event& event) OVERRIDE;
78 // views::TextfieldController:
79 virtual bool HandleKeyEvent(views::Textfield* sender,
80 const ui::KeyEvent& key_event) OVERRIDE;
81 virtual void OnAfterUserAction(views::Textfield* sender) OVERRIDE;
82 virtual void OnAfterPaste() OVERRIDE;
84 private:
85 // Starts finding |search_text|. If the text is empty, stops finding.
86 void Find(const base::string16& search_text);
88 // Updates the appearance for the match count label.
89 void UpdateMatchCountAppearance(bool no_match);
91 // views::View:
92 virtual void OnThemeChanged() OVERRIDE;
94 // We use a hidden view to grab mouse clicks and bring focus to the find
95 // text box. This is because although the find text box may look like it
96 // extends all the way to the find button, it only goes as far as to the
97 // match_count label. The user, however, expects being able to click anywhere
98 // inside what looks like the find text box (including on or around the
99 // match_count label) and have focus brought to the find box.
100 class FocusForwarderView : public views::View {
101 public:
102 explicit FocusForwarderView(
103 views::Textfield* view_to_focus_on_mousedown)
104 : view_to_focus_on_mousedown_(view_to_focus_on_mousedown) {}
106 private:
107 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE;
109 views::Textfield* view_to_focus_on_mousedown_;
111 DISALLOW_COPY_AND_ASSIGN(FocusForwarderView);
114 // Returns the OS-specific view for the find bar that acts as an intermediary
115 // between us and the WebContentsView.
116 FindBarHost* find_bar_host() const;
118 // Used to detect if the input text, not including the IME composition text,
119 // has changed or not.
120 base::string16 last_searched_text_;
122 // The controls in the window.
123 views::Textfield* find_text_;
124 views::Label* match_count_text_;
125 FocusForwarderView* focus_forwarder_view_;
126 views::ImageButton* find_previous_button_;
127 views::ImageButton* find_next_button_;
128 views::ImageButton* close_button_;
130 // The preferred height of the find bar.
131 int preferred_height_;
133 // The background image for the Find text box, which we draw behind the Find
134 // box to provide the Chrome look to the edge of the text box.
135 const gfx::ImageSkia* text_box_background_;
137 // The rounded edge on the left side of the Find text box.
138 const gfx::ImageSkia* text_box_background_left_;
140 DISALLOW_COPY_AND_ASSIGN(FindBarView);
143 #endif // CHROME_BROWSER_UI_VIEWS_FIND_BAR_VIEW_H_