16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef ATHENA_HOME_ATHENA_START_PAGE_VIEW_H_ 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define ATHENA_HOME_ATHENA_START_PAGE_VIEW_H_ 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/athena_export.h" 903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/memory/weak_ptr.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/app_list/views/search_box_view_delegate.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/gfx/animation/tween.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/views/view.h" 136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace app_list { 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class AppListViewDelegate; 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class SearchBoxView; 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class SearchResultListView; 186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace athena { 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ATHENA_EXPORT AthenaStartPageView 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : public views::View, 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public app_list::SearchBoxViewDelegate { 256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) explicit AthenaStartPageView(app_list::AppListViewDelegate* delegate); 276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual ~AthenaStartPageView(); 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Requests the focus on the search box in the start page view. 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void RequestFocusOnSearchBox(); 3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Updates the layout state. See the comment of |layout_state_| field. 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetLayoutState(float layout_state); 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Updates the layout state and move the subviews to the target location with 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // animation. 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetLayoutStateWithAnimation(float layout_state, 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Tween::Type tween_type); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private: 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci friend class AthenaStartPageViewTest; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static const char kViewClassName[]; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // A struct which bundles the layout data of subviews. 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct LayoutData { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect search_box; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect icons; 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci gfx::Rect controls; 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float system_info_opacity; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float logo_opacity; 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float background_opacity; 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayoutData(); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns the bounds for |VISIBLE_BOTTOM|. 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayoutData CreateBottomBounds(int width); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns the bounds for |VISIBLE_CENTERED|. 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LayoutData CreateCenteredBounds(int width); 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Schedules the animation for the layout the search box and the search 6403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // results. 6503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void LayoutSearchResults(bool should_show_search_results); 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Called when the animation of search box / search results layout has 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // completed. 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void OnSearchResultLayoutAnimationCompleted(bool should_show_search_results); 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // views::View: 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void Layout() OVERRIDE; 7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual bool OnKeyPressed(const ui::KeyEvent& key_event) OVERRIDE; 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // app_list::SearchBoxViewDelegate: 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void QueryChanged(app_list::SearchBoxView* sender) OVERRIDE; 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Not owned. 7903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_list::AppListViewDelegate* delegate_; 8003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Views are owned through its hierarchy. 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci views::View* system_info_view_; 8303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) views::View* app_icon_container_; 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) views::View* search_box_container_; 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) views::View* control_icon_container_; 8603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) views::View* logo_; 8703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_list::SearchBoxView* search_box_view_; 8803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) app_list::SearchResultListView* search_results_view_; 8903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Do not use views::Background but a views::View with ui::Layer for gradient 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // background opacity update and animation. 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci views::View* background_; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // The expected height of |search_results_view_| 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int search_results_height_; 9603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The state to specify how each of the subviews should be laid out, in the 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // range of [0, 1]. 0 means fully BOTTOM state, and 1 is fully CENTERED state. 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci float layout_state_; 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::WeakPtrFactory<AthenaStartPageView> weak_factory_; 1026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AthenaStartPageView); 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 1056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace athena 1076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif // ATHENA_HOME_ATHENA_START_PAGE_VIEW_H_ 109