first_run_search_engine_view.h revision ddb351dbec246cf1fab5ec20d2d5520909041de1
1// Copyright (c) 2010 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_VIEWS_FIRST_RUN_SEARCH_ENGINE_VIEW_H_ 6#define CHROME_BROWSER_UI_VIEWS_FIRST_RUN_SEARCH_ENGINE_VIEW_H_ 7#pragma once 8 9#include <vector> 10 11#include "chrome/browser/search_engines/template_url_model_observer.h" 12#include "ui/gfx/size.h" 13#include "views/controls/button/native_button.h" 14#include "views/view.h" 15#include "views/window/window_delegate.h" 16 17namespace views { 18class ButtonListener; 19class ImageView; 20class Label; 21class Separator; 22class Window; 23} 24 25class Profile; 26class TemplateURL; 27class TemplateURLModel; 28 29// This class holds the logo and TemplateURL for a search engine and serves 30// as its button in the search engine selection view. 31class SearchEngineChoice : public views::NativeButton { 32 public: 33 // |listener| is the FirstRunView that waits for the search engine selection 34 // to complete; |search_engine| holds the data for the particular search 35 // engine this button represents; |use_small_logos| is true if we're 36 // displaying more than three choices. 37 SearchEngineChoice(views::ButtonListener* listener, 38 const TemplateURL* search_engine, 39 bool use_small_logos); 40 41 virtual ~SearchEngineChoice() {} 42 43 // These methods return data about the logo or text view associated 44 // with this search engine choice. 45 views::View* GetView() { return choice_view_; } 46 int GetChoiceViewWidth(); 47 int GetChoiceViewHeight(); 48 49 // Set the bounds for the search engine choice view; called in the 50 // Layout method, when we know what the new bounds should be. 51 void SetChoiceViewBounds(int x, int y, int width, int height); 52 53 // Accessor for the search engine data this button represents. 54 const TemplateURL* GetSearchEngine() { return search_engine_; } 55 56 // Used for UX testing. 57 void set_slot(int slot) { slot_ = slot; } 58 int slot() const { return slot_; } 59 60 private: 61 // Either an ImageView of a logo, or a Label with text. Owned by 62 // FirstRunSearchEngineView. 63 views::View* choice_view_; 64 65 // True if choice_view_ is holding an ImageView. 66 bool is_image_label_; 67 68 // Data for the search engine held here. 69 const TemplateURL* search_engine_; 70 71 // Used for UX testing. Gives slot in which search engine was shown. 72 int slot_; 73 74 DISALLOW_COPY_AND_ASSIGN(SearchEngineChoice); 75}; 76 77// This class displays a large search engine choice dialog view during 78// initial first run import. 79class FirstRunSearchEngineView 80 : public views::View, 81 public views::ButtonListener, 82 public views::WindowDelegate, 83 public TemplateURLModelObserver { 84 public: 85 // |profile| allows us to get the set of imported search engines. 86 // |randomize| is true if logos are to be displayed in random order. 87 FirstRunSearchEngineView(Profile* profile, bool randomize); 88 89 virtual ~FirstRunSearchEngineView(); 90 91 bool IsAlwaysOnTop() const { return true; } 92 bool HasAlwaysOnTopMenu() const { return false; } 93 94 // Overridden from views::View: 95 virtual gfx::Size GetPreferredSize() OVERRIDE; 96 virtual void Layout() OVERRIDE; 97 virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; 98 99 // Overridden from views::WindowDelegate: 100 virtual std::wstring GetWindowTitle() const OVERRIDE; 101 views::View* GetContentsView() OVERRIDE { return this; } 102 bool CanResize() const OVERRIDE{ return false; } 103 bool CanMaximize() const OVERRIDE { return false; } 104 105 // Overridden from views::ButtonListener: 106 virtual void ButtonPressed(views::Button* sender, const views::Event& event) 107 OVERRIDE; 108 109 // Override from View so we can draw the gray background at dialog top. 110 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 111 112 // Overridden from TemplateURLModelObserver. When the search engines have 113 // loaded from the profile, we can populate the logos in the dialog box 114 // to present to the user. 115 virtual void OnTemplateURLModelChanged() OVERRIDE; 116 117 private: 118 // Initializes the labels and controls in the view. 119 void SetupControls(); 120 121 // Owned by the profile_. 122 TemplateURLModel* search_engines_model_; 123 124 // One for each search engine choice offered, either three or four. 125 std::vector<SearchEngineChoice*> search_engine_choices_; 126 127 // If logos are to be displayed in random order. Used for UX testing. 128 bool randomize_; 129 130 // The profile associated with this import process. 131 Profile* profile_; 132 133 bool text_direction_is_rtl_; 134 135 // Image of browser search box with grey background and bubble arrow. 136 views::ImageView* background_image_; 137 138 // UI elements: 139 views::Label* title_label_; 140 views::Label* text_label_; 141 142 DISALLOW_COPY_AND_ASSIGN(FirstRunSearchEngineView); 143}; 144 145#endif // CHROME_BROWSER_UI_VIEWS_FIRST_RUN_SEARCH_ENGINE_VIEW_H_ 146