Home | History | Annotate | Download | only in views
      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 ItemIconChanged() OVERRIDE;
     78   virtual void ItemNameChanged() OVERRIDE;
     79   virtual void ItemHighlightedChanged() OVERRIDE;
     80   virtual void ItemIsInstallingChanged() OVERRIDE;
     81   virtual void ItemPercentDownloadedChanged() OVERRIDE;
     82 
     83   AppListFolderItem* folder_item_;  // Not owned.
     84 
     85   views::ImageButton* back_button_;  // Owned by views hierarchy.
     86   FolderNameView* folder_name_view_;  // Owned by views hierarchy.
     87 
     88   const base::string16 folder_name_placeholder_text_;
     89 
     90   FolderHeaderViewDelegate* delegate_;
     91 
     92   bool folder_name_visible_;
     93 
     94   DISALLOW_COPY_AND_ASSIGN(FolderHeaderView);
     95 };
     96 
     97 }  // namespace app_list
     98 
     99 #endif  // UI_APP_LIST_VIEWS_FOLDER_HEADER_VIEW_H_
    100