1// Copyright (c) 2012 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 ASH_SYSTEM_TRAY_TRAY_DETAILS_VIEW_H_
6#define ASH_SYSTEM_TRAY_TRAY_DETAILS_VIEW_H_
7
8#include "ash/ash_export.h"
9#include "ash/system/tray/special_popup_row.h"
10#include "ui/views/view.h"
11
12namespace views {
13class ScrollView;
14}
15
16namespace ash {
17class FixedSizedScrollView;
18class ScrollBorder;
19class SystemTrayItem;
20class ViewClickListener;
21
22class ASH_EXPORT TrayDetailsView : public views::View {
23 public:
24  explicit TrayDetailsView(SystemTrayItem* owner);
25  virtual ~TrayDetailsView();
26
27  // Creates a row with special highlighting etc. This is typically the
28  // bottom-most row in the popup.
29  void CreateSpecialRow(int string_id, ViewClickListener* listener);
30
31  // Creates a scrollable list. The list has a border at the bottom if there is
32  // any other view between the list and the footer row at the bottom.
33  void CreateScrollableList();
34
35  // Adds a separator in scrollable list.
36  void AddScrollSeparator();
37
38  // Removes (and destroys) all child views.
39  void Reset();
40
41  // Transition to default view from details view. If |footer_| has focus before
42  // transition, the default view should focus on the owner of this details
43  // view.
44  void TransitionToDefaultView();
45
46  SystemTrayItem* owner() const { return owner_; }
47  SpecialPopupRow* footer() const { return footer_; }
48  FixedSizedScrollView* scroller() const { return scroller_; }
49  views::View* scroll_content() const { return scroll_content_; }
50
51 protected:
52  // Overridden from views::View.
53  virtual void Layout() OVERRIDE;
54  virtual void OnPaintBorder(gfx::Canvas* canvas) OVERRIDE;
55
56 private:
57  SystemTrayItem* owner_;
58  SpecialPopupRow* footer_;
59  FixedSizedScrollView* scroller_;
60  views::View* scroll_content_;
61  ScrollBorder* scroll_border_;  // Weak reference
62
63  DISALLOW_COPY_AND_ASSIGN(TrayDetailsView);
64};
65
66}  // namespace ash
67
68#endif  // ASH_SYSTEM_TRAY_TRAY_DETAILS_VIEW_H_
69