15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef UI_APP_LIST_VIEWS_SEARCH_BOX_VIEW_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define UI_APP_LIST_VIEWS_SEARCH_BOX_VIEW_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/app_list/search_box_model_observer.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/app_list/speech_ui_model_observer.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/button/image_button.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/menu_button_listener.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/textfield/textfield_controller.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/view.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageView; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MenuButton; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Textfield; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace app_list { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass AppListMenuViews; 263240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdochclass AppListModel; 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class AppListViewDelegate; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchBoxModel; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SearchBoxViewDelegate; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// SearchBoxView consists of an icon and a Textfield. SearchBoxModel is its data 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// model that controls what icon to display, what placeholder text to use for 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Textfield. The text and selection model part could be set to change the 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// contents and selection model of the Textfield. 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class APP_LIST_EXPORT SearchBoxView : public views::View, 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public views::TextfieldController, 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public views::ButtonListener, 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public views::MenuButtonListener, 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public SearchBoxModelObserver, 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public SpeechUIModelObserver { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SearchBoxView(SearchBoxViewDelegate* delegate, 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AppListViewDelegate* view_delegate); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~SearchBoxView(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void ModelChanged(); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool HasSearch() const; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearSearch(); 49558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void InvalidateMenu(); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* search_box() { return search_box_; } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void set_contents_view(views::View* contents_view) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) contents_view_ = contents_view; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from views::View: 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) OVERRIDE; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates model text and selection model with current Textfield info. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateModel(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fires query change notification. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyQueryChanged(); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from views::TextfieldController: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ContentsChanged(views::Textfield* sender, 707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const base::string16& new_contents) OVERRIDE; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HandleKeyEvent(views::Textfield* sender, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ui::KeyEvent& key_event) OVERRIDE; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Overridden from views::ButtonListener: 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::Event& event) OVERRIDE; 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden from views::MenuButtonListener: 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnMenuButtonClicked(View* source, 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Point& point) OVERRIDE; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from SearchBoxModelObserver: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void IconChanged() OVERRIDE; 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SpeechRecognitionButtonPropChanged() OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void HintTextChanged() OVERRIDE; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SelectionModelChanged() OVERRIDE; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TextChanged() OVERRIDE; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Overridden from SpeechUIModelObserver: 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnSpeechRecognitionStateChanged( 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SpeechRecognitionState new_state) OVERRIDE; 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SearchBoxViewDelegate* delegate_; // Not owned. 94558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch AppListViewDelegate* view_delegate_; // Not owned. 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AppListModel* model_; // Owned by the profile-keyed service. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_ptr<AppListMenuViews> menu_; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::ImageView* icon_view_; // Owned by views hierarchy. 100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) views::ImageButton* speech_button_; // Owned by views hierarchy. 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) views::MenuButton* menu_button_; // Owned by views hierarchy. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::Textfield* search_box_; // Owned by views hierarchy. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) views::View* contents_view_; // Owned by views hierarchy. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SearchBoxView); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace app_list 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // UI_APP_LIST_VIEWS_SEARCH_BOX_VIEW_H_ 111