| Index: ui/app_list/views/start_page_view.cc
|
| diff --git a/ui/app_list/views/start_page_view.cc b/ui/app_list/views/start_page_view.cc
|
| index e4d6487aa663f63f8c504426b1bb9390c56da275..6aea513b551b7260210540a1807ab8274bab4c76 100644
|
| --- a/ui/app_list/views/start_page_view.cc
|
| +++ b/ui/app_list/views/start_page_view.cc
|
| @@ -10,64 +10,83 @@
|
| #include "ui/app_list/app_list_model.h"
|
| #include "ui/app_list/app_list_view_delegate.h"
|
| #include "ui/app_list/views/app_list_main_view.h"
|
| +#include "ui/app_list/views/search_box_view.h"
|
| #include "ui/app_list/views/search_result_list_view.h"
|
| #include "ui/app_list/views/tile_item_view.h"
|
| #include "ui/gfx/canvas.h"
|
| -#include "ui/views/controls/button/custom_button.h"
|
| +#include "ui/views/background.h"
|
| #include "ui/views/controls/image_view.h"
|
| #include "ui/views/controls/label.h"
|
| +#include "ui/views/controls/textfield/textfield.h"
|
| #include "ui/views/layout/box_layout.h"
|
|
|
| namespace app_list {
|
|
|
| namespace {
|
|
|
| +// Layout constants.
|
| const int kTopMargin = 30;
|
| +const int kInstantContainerSpacing = 20;
|
|
|
| +// WebView constants.
|
| const int kWebViewWidth = 200;
|
| const int kWebViewHeight = 105;
|
|
|
| -const int kInstantContainerSpacing = 20;
|
| -const int kBarPlaceholderWidth = 490;
|
| -const int kBarPlaceholderHeight = 30;
|
| +// DummySearchBoxView constants.
|
| +const int kDummySearchBoxWidth = 490;
|
| +const int kDummySearchBoxHeight = 40;
|
| +const int kDummySearchBoxBorderWidth = 1;
|
| +const int kDummySearchBoxBorderBottomWidth = 2;
|
| +const int kDummySearchBoxBorderCornerRadius = 2;
|
|
|
| +// Tile container constants.
|
| const size_t kNumStartPageTiles = 5;
|
| const int kTileSpacing = 10;
|
|
|
| -// A button that is the placeholder for the search bar in the start page view.
|
| -class BarPlaceholderButton : public views::CustomButton {
|
| +// A background that paints a solid white rounded rect with a thin grey border.
|
| +class DummySearchBoxBackground : public views::Background {
|
| public:
|
| - explicit BarPlaceholderButton(views::ButtonListener* listener)
|
| - : views::CustomButton(listener) {}
|
| + DummySearchBoxBackground() {}
|
| + virtual ~DummySearchBoxBackground() {}
|
|
|
| - virtual ~BarPlaceholderButton() {}
|
| + private:
|
| + // views::Background overrides:
|
| + virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE {
|
| + gfx::Rect bounds = view->GetContentsBounds();
|
|
|
| - // Overridden from views::View:
|
| - virtual gfx::Size GetPreferredSize() const OVERRIDE {
|
| - return gfx::Size(kBarPlaceholderWidth, kBarPlaceholderHeight);
|
| + SkPaint paint;
|
| + paint.setFlags(SkPaint::kAntiAlias_Flag);
|
| + paint.setColor(kStartPageBorderColor);
|
| + canvas->DrawRoundRect(bounds, kDummySearchBoxBorderCornerRadius, paint);
|
| + bounds.Inset(kDummySearchBoxBorderWidth,
|
| + kDummySearchBoxBorderWidth,
|
| + kDummySearchBoxBorderWidth,
|
| + kDummySearchBoxBorderBottomWidth);
|
| + paint.setColor(SK_ColorWHITE);
|
| + canvas->DrawRoundRect(bounds, kDummySearchBoxBorderCornerRadius, paint);
|
| }
|
|
|
| - virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
|
| - PaintButton(
|
| - canvas,
|
| - state() == STATE_HOVERED ? kPagerHoverColor : kPagerNormalColor);
|
| + DISALLOW_COPY_AND_ASSIGN(DummySearchBoxBackground);
|
| +};
|
| +
|
| +// A placeholder search box which is sized to fit within the start page view.
|
| +class DummySearchBoxView : public SearchBoxView {
|
| + public:
|
| + DummySearchBoxView(SearchBoxViewDelegate* delegate,
|
| + AppListViewDelegate* view_delegate)
|
| + : SearchBoxView(delegate, view_delegate) {
|
| + set_background(new DummySearchBoxBackground());
|
| }
|
|
|
| - private:
|
| - // Paints a rectangular button.
|
| - void PaintButton(gfx::Canvas* canvas, SkColor base_color) {
|
| - gfx::Rect rect(GetContentsBounds());
|
| - rect.ClampToCenteredSize(
|
| - gfx::Size(kBarPlaceholderWidth, kBarPlaceholderHeight));
|
| + virtual ~DummySearchBoxView() {}
|
|
|
| - SkPaint paint;
|
| - paint.setAntiAlias(true);
|
| - paint.setStyle(SkPaint::kFill_Style);
|
| - paint.setColor(base_color);
|
| - canvas->DrawRect(rect, paint);
|
| + // Overridden from views::View:
|
| + virtual gfx::Size GetPreferredSize() const OVERRIDE {
|
| + return gfx::Size(kDummySearchBoxWidth, kDummySearchBoxHeight);
|
| }
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(BarPlaceholderButton);
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(DummySearchBoxView);
|
| };
|
|
|
| } // namespace
|
| @@ -77,13 +96,34 @@ StartPageView::StartPageView(AppListMainView* app_list_main_view,
|
| : app_list_main_view_(app_list_main_view),
|
| model_(NULL),
|
| view_delegate_(view_delegate),
|
| + search_box_view_(new DummySearchBoxView(this, view_delegate_)),
|
| results_view_(
|
| new SearchResultListView(app_list_main_view, view_delegate)),
|
| instant_container_(new views::View),
|
| tiles_container_(new views::View),
|
| show_state_(SHOW_START_PAGE) {
|
| - // The view containing the start page WebContents and the BarPlaceholder.
|
| + // The view containing the start page WebContents and DummySearchBoxView.
|
| + InitInstantContainer();
|
| AddChildView(instant_container_);
|
| +
|
| + // The view containing the search results.
|
| + AddChildView(results_view_);
|
| +
|
| + // The view containing the start page tiles.
|
| + InitTilesContainer();
|
| + AddChildView(tiles_container_);
|
| +
|
| + SetModel(view_delegate_->GetModel());
|
| + view_delegate_->AddObserver(this);
|
| +}
|
| +
|
| +StartPageView::~StartPageView() {
|
| + view_delegate_->RemoveObserver(this);
|
| + if (model_)
|
| + model_->RemoveObserver(this);
|
| +}
|
| +
|
| +void StartPageView::InitInstantContainer() {
|
| views::BoxLayout* instant_layout_manager = new views::BoxLayout(
|
| views::BoxLayout::kVertical, 0, 0, kInstantContainerSpacing);
|
| instant_layout_manager->set_inside_border_insets(
|
| @@ -92,17 +132,25 @@ StartPageView::StartPageView(AppListMainView* app_list_main_view,
|
| views::BoxLayout::MAIN_AXIS_ALIGNMENT_END);
|
| instant_container_->SetLayoutManager(instant_layout_manager);
|
|
|
| - views::View* web_view = view_delegate->CreateStartPageWebView(
|
| + views::View* web_view = view_delegate_->CreateStartPageWebView(
|
| gfx::Size(kWebViewWidth, kWebViewHeight));
|
| if (web_view)
|
| instant_container_->AddChildView(web_view);
|
| - instant_container_->AddChildView(new BarPlaceholderButton(this));
|
|
|
| - // The view containing the search results.
|
| - AddChildView(results_view_);
|
| + // TODO(calamity): This container is needed to horizontally center the search
|
| + // box view. Remove this container once BoxLayout supports CrossAxisAlignment.
|
| + views::View* search_box_container = new views::View();
|
| + views::BoxLayout* layout_manager =
|
| + new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0);
|
| + layout_manager->set_main_axis_alignment(
|
| + views::BoxLayout::MAIN_AXIS_ALIGNMENT_CENTER);
|
| + search_box_container->SetLayoutManager(layout_manager);
|
| + search_box_container->AddChildView(search_box_view_);
|
|
|
| - // The view containing the start page tiles.
|
| - AddChildView(tiles_container_);
|
| + instant_container_->AddChildView(search_box_container);
|
| +}
|
| +
|
| +void StartPageView::InitTilesContainer() {
|
| views::BoxLayout* tiles_layout_manager =
|
| new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, kTileSpacing);
|
| tiles_layout_manager->set_main_axis_alignment(
|
| @@ -113,15 +161,6 @@ StartPageView::StartPageView(AppListMainView* app_list_main_view,
|
| tiles_container_->AddChildView(tile_item);
|
| tile_views_.push_back(tile_item);
|
| }
|
| -
|
| - SetModel(view_delegate_->GetModel());
|
| - view_delegate_->AddObserver(this);
|
| -}
|
| -
|
| -StartPageView::~StartPageView() {
|
| - view_delegate_->RemoveObserver(this);
|
| - if (model_)
|
| - model_->RemoveObserver(this);
|
| }
|
|
|
| void StartPageView::SetModel(AppListModel* model) {
|
| @@ -155,6 +194,9 @@ void StartPageView::SetShowState(ShowState show_state) {
|
| instant_container_->SetVisible(show_state == SHOW_START_PAGE);
|
| results_view_->SetVisible(show_state == SHOW_SEARCH_RESULTS);
|
|
|
| + if (show_state == SHOW_START_PAGE)
|
| + search_box_view_->search_box()->RequestFocus();
|
| +
|
| if (show_state_ == show_state)
|
| return;
|
|
|
| @@ -189,9 +231,12 @@ void StartPageView::Layout() {
|
| tiles_container_->SetBoundsRect(bounds);
|
| }
|
|
|
| -void StartPageView::ButtonPressed(views::Button* sender,
|
| - const ui::Event& event) {
|
| - app_list_main_view_->OnStartPageSearchButtonPressed();
|
| +void StartPageView::QueryChanged(SearchBoxView* sender) {
|
| + // Forward the search terms on to the real search box and clear the dummy
|
| + // search box.
|
| + app_list_main_view_->OnStartPageSearchTextfieldChanged(
|
| + sender->search_box()->text());
|
| + sender->search_box()->SetText(base::string16());
|
| }
|
|
|
| void StartPageView::OnProfilesChanged() {
|
|
|