browser_non_client_frame_view.h revision 8bcbed890bc3ce4d7a057a8f32cab53fa534672e
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 CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_H_
6#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_H_
7
8#include "chrome/browser/ui/views/new_avatar_button.h"
9#include "ui/views/window/non_client_view.h"
10
11class AvatarLabel;
12class AvatarMenuButton;
13class BrowserFrame;
14class BrowserView;
15class NewAvatarButton;
16
17// A specialization of the NonClientFrameView object that provides additional
18// Browser-specific methods.
19class BrowserNonClientFrameView : public views::NonClientFrameView {
20 public:
21  // Insets around the tabstrip.
22  struct TabStripInsets {
23    TabStripInsets() : top(0), left(0), right(0) {}
24    TabStripInsets(int top, int left, int right)
25        : top(top),
26          left(left),
27          right(right) {}
28
29    int top;
30    int left;
31    int right;
32  };
33
34  BrowserNonClientFrameView(BrowserFrame* frame, BrowserView* browser_view);
35  virtual ~BrowserNonClientFrameView();
36
37  AvatarMenuButton* avatar_button() const { return avatar_button_; }
38
39  NewAvatarButton* new_avatar_button() const { return new_avatar_button_; }
40
41  AvatarLabel* avatar_label() const { return avatar_label_; }
42
43  // Returns the bounds within which the TabStrip should be laid out.
44  virtual gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const = 0;
45
46  // Returns the TabStripInsets within the window at which the tab strip is
47  // positioned. If |as_restored| is true, this is calculated as if we were in
48  // restored mode regardless of the current mode.
49  virtual TabStripInsets GetTabStripInsets(bool force_restored) const = 0;
50
51  // Returns the amount that the theme background should be inset.
52  virtual int GetThemeBackgroundXInset() const = 0;
53
54  // Updates the throbber.
55  virtual void UpdateThrobber(bool running) = 0;
56
57  // Overriden from views::View.
58  virtual void VisibilityChanged(views::View* starting_from,
59                                 bool is_visible) OVERRIDE;
60  virtual void OnThemeChanged() OVERRIDE;
61
62 protected:
63  BrowserView* browser_view() const { return browser_view_; }
64  BrowserFrame* frame() const { return frame_; }
65
66  // Updates the title and icon of the avatar button.
67  void UpdateAvatarInfo();
68
69  // Updates the title of the avatar button displayed in the caption area.
70  // The button uses |style| to match the browser window style and notifies
71  // |listener| when it is clicked.
72  void UpdateNewStyleAvatarInfo(views::ButtonListener* listener,
73                                const NewAvatarButton::AvatarButtonStyle style);
74
75  // Anchor and show the ProfileChooser bubble under the avatar button in
76  // the caption area.
77  void ShowProfileChooserViewBubble();
78
79 private:
80  // The frame that hosts this view.
81  BrowserFrame* frame_;
82
83  // The BrowserView hosted within this View.
84  BrowserView* browser_view_;
85
86  // Menu button that displays that either the incognito icon or the profile
87  // icon.  May be NULL for some frame styles.
88  AvatarMenuButton* avatar_button_;
89
90  // Avatar label that is used for a managed user.
91  AvatarLabel* avatar_label_;
92
93  // Menu button that displays the name of the active or guest profile.
94  // May be NULL and will not be displayed for off the record profiles.
95  NewAvatarButton* new_avatar_button_;
96};
97
98namespace chrome {
99
100// Provided by a browser_non_client_frame_view_factory_*.cc implementation
101BrowserNonClientFrameView* CreateBrowserNonClientFrameView(
102    BrowserFrame* frame, BrowserView* browser_view);
103
104}  // namespace chrome
105
106#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_H_
107