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