Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ui / app_list / views / folder_header_view.h
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_export.h"
11 #include "ui/app_list/app_list_item_observer.h"
12 #include "ui/views/controls/button/button.h"
13 #include "ui/views/controls/textfield/textfield_controller.h"
14 #include "ui/views/view.h"
15
16 namespace views {
17 class ImageButton;
18 }  // namespace views
19
20 namespace app_list {
21
22 class AppListFolderItem;
23 class AppListFolderView;
24 class FolderHeaderViewDelegate;
25
26 namespace test {
27 class FolderHeaderViewTest;
28 }
29
30 // FolderHeaderView contains a back button and an editable folder name field.
31 class APP_LIST_EXPORT FolderHeaderView : public views::View,
32                                          public views::TextfieldController,
33                                          public views::ButtonListener,
34                                          public AppListItemObserver {
35  public:
36   explicit FolderHeaderView(FolderHeaderViewDelegate* delegate);
37   virtual ~FolderHeaderView();
38
39   void SetFolderItem(AppListFolderItem* folder_item);
40   void UpdateFolderNameVisibility(bool visible);
41   void OnFolderItemRemoved();
42
43   // Overridden from views::View:
44   virtual gfx::Size GetPreferredSize() const OVERRIDE;
45
46  private:
47   class FolderNameView;
48   friend class test::FolderHeaderViewTest;
49
50   // Updates UI.
51   void Update();
52
53   // Updates the accessible name of the folder name control.
54   void UpdateFolderNameAccessibleName();
55
56   // Gets and sets the folder name for test.
57   const base::string16& GetFolderNameForTest();
58   void SetFolderNameForTest(const base::string16& name);
59
60   // Returns true if folder name is enabled, only for testing use.
61   bool IsFolderNameEnabledForTest() const;
62
63   // views::View overrides:
64   virtual void Layout() OVERRIDE;
65   virtual bool OnKeyPressed(const ui::KeyEvent& event) OVERRIDE;
66   virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
67
68   // views::TextfieldController overrides:
69   virtual void ContentsChanged(views::Textfield* sender,
70                                const base::string16& new_contents) OVERRIDE;
71
72   // views::ButtonListener overrides:
73   virtual void ButtonPressed(views::Button* sender,
74                              const ui::Event& event) OVERRIDE;
75
76   // AppListItemObserver overrides:
77   virtual void ItemNameChanged() OVERRIDE;
78
79   AppListFolderItem* folder_item_;  // Not owned.
80
81   views::ImageButton* back_button_;  // Owned by views hierarchy.
82   FolderNameView* folder_name_view_;  // Owned by views hierarchy.
83
84   const base::string16 folder_name_placeholder_text_;
85
86   FolderHeaderViewDelegate* delegate_;
87
88   bool folder_name_visible_;
89
90   DISALLOW_COPY_AND_ASSIGN(FolderHeaderView);
91 };
92
93 }  // namespace app_list
94
95 #endif  // UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_