11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifndef UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_ 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_ 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <string> 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/app_list/app_list_export.h" 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/app_list/app_list_item_observer.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/controls/button/button.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/controls/textfield/textfield_controller.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/views/view.h" 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace views { 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class ImageButton; 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace views 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace app_list { 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class AppListFolderItem; 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class AppListFolderView; 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class FolderHeaderViewDelegate; 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace test { 27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass FolderHeaderViewTest; 28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// FolderHeaderView contains a back button and an editable folder name field. 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass APP_LIST_EXPORT FolderHeaderView : public views::View, 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public views::TextfieldController, 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public views::ButtonListener, 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public AppListItemObserver { 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) explicit FolderHeaderView(FolderHeaderViewDelegate* delegate); 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~FolderHeaderView(); 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SetFolderItem(AppListFolderItem* folder_item); 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void UpdateFolderNameVisibility(bool visible); 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnFolderItemRemoved(); 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Overridden from views::View: 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE; 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) class FolderNameView; 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch friend class test::FolderHeaderViewTest; 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Updates UI. 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void Update(); 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Updates the accessible name of the folder name control. 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void UpdateFolderNameAccessibleName(); 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Gets and sets the folder name for test. 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const base::string16& GetFolderNameForTest(); 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void SetFolderNameForTest(const base::string16& name); 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Returns true if folder name is enabled, only for testing use. 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool IsFolderNameEnabledForTest() const; 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // views::View overrides: 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void Layout() OVERRIDE; 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE; 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // views::TextfieldController overrides: 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ContentsChanged(views::Textfield* sender, 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::string16& new_contents) OVERRIDE; 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // views::ButtonListener overrides: 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const ui::Event& event) OVERRIDE; 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // AppListItemObserver overrides: 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void ItemNameChanged() OVERRIDE; 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AppListFolderItem* folder_item_; // Not owned. 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) views::ImageButton* back_button_; // Owned by views hierarchy. 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FolderNameView* folder_name_view_; // Owned by views hierarchy. 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 8423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const base::string16 folder_name_placeholder_text_; 8523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FolderHeaderViewDelegate* delegate_; 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool folder_name_visible_; 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FolderHeaderView); 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace app_list 941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_ 96