folder_header_view.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1// Copyright (c) 2013 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 UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_
6#define UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_
7
8#include <string>
9
10#include "ui/app_list/app_list_item_observer.h"
11#include "ui/views/controls/button/button.h"
12#include "ui/views/controls/textfield/textfield_controller.h"
13#include "ui/views/view.h"
14
15namespace views {
16class ImageButton;
17}  // namespace views
18
19namespace app_list {
20
21class AppListFolderItem;
22class AppListFolderView;
23class FolderHeaderViewDelegate;
24
25// FolderHeaderView contains a back button and an editable folder name field.
26class FolderHeaderView : public views::View,
27                         public views::TextfieldController,
28                         public views::ButtonListener,
29                         public AppListItemObserver {
30 public:
31  explicit FolderHeaderView(FolderHeaderViewDelegate* delegate);
32  virtual ~FolderHeaderView();
33
34  void SetFolderItem(AppListFolderItem* folder_item);
35  void UpdateFolderNameVisibility(bool visible);
36  void OnFolderItemRemoved();
37
38  // Overridden from views::View:
39  virtual gfx::Size GetPreferredSize() OVERRIDE;
40
41 private:
42  class FolderNameView;
43
44  // Updates UI.
45  void Update();
46
47  // views::View overrides:
48  virtual void Layout() OVERRIDE;
49  virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
50  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
51
52  // views::TextfieldController overrides:
53  virtual void ContentsChanged(views::Textfield* sender,
54                               const base::string16& new_contents) OVERRIDE;
55
56  // views::ButtonListener overrides:
57  virtual void ButtonPressed(views::Button* sender,
58                             const ui::Event& event) OVERRIDE;
59
60  // AppListItemObserver overrides:
61  virtual void ItemIconChanged() OVERRIDE;
62  virtual void ItemNameChanged() OVERRIDE;
63  virtual void ItemHighlightedChanged() OVERRIDE;
64  virtual void ItemIsInstallingChanged() OVERRIDE;
65  virtual void ItemPercentDownloadedChanged() OVERRIDE;
66
67  AppListFolderItem* folder_item_;  // Not owned.
68
69  views::ImageButton* back_button_;  // Owned by views hierarchy.
70  FolderNameView* folder_name_view_;  // Owned by views hierarchy.
71
72  FolderHeaderViewDelegate* delegate_;
73
74  bool folder_name_visible_;
75
76  DISALLOW_COPY_AND_ASSIGN(FolderHeaderView);
77};
78
79}  // namespace app_list
80
81#endif  // UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_
82