• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 namespace views {
18 class ButtonListener;
19 class ImageView;
20 class Label;
21 class Separator;
22 class Window;
23 }
24 
25 class Profile;
26 class TemplateURL;
27 class 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.
31 class 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 
~SearchEngineChoice()41   virtual ~SearchEngineChoice() {}
42 
43   // These methods return data about the logo or text view associated
44   // with this search engine choice.
GetView()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.
GetSearchEngine()54   const TemplateURL* GetSearchEngine() { return search_engine_; }
55 
56   // Used for UX testing.
set_slot(int slot)57   void set_slot(int slot) { 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.
79 class 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 
IsAlwaysOnTop()91   bool IsAlwaysOnTop() const { return true; }
HasAlwaysOnTopMenu()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;
GetContentsView()101   views::View* GetContentsView() OVERRIDE { return this; }
CanResize()102   bool CanResize() const OVERRIDE{ return false; }
CanMaximize()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