browser_non_client_frame_view.h revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
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/profiles/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  BrowserNonClientFrameView(BrowserFrame* frame, BrowserView* browser_view);
22  virtual ~BrowserNonClientFrameView();
23
24  AvatarMenuButton* avatar_button() const { return avatar_button_; }
25
26  NewAvatarButton* new_avatar_button() const { return new_avatar_button_; }
27
28  AvatarLabel* avatar_label() const { return avatar_label_; }
29
30  // Retrieves the bounds, in non-client view coordinates within which the
31  // TabStrip should be laid out.
32  virtual gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const = 0;
33
34  // Returns the inset of the topmost view in the client view from the top of
35  // the non-client view. The topmost view depends on the window type. The
36  // topmost view is the tab strip for tabbed browser windows, the toolbar for
37  // popups, the web contents for app windows and varies for fullscreen windows.
38  virtual int GetTopInset() const = 0;
39
40  // Returns the amount that the theme background should be inset.
41  virtual int GetThemeBackgroundXInset() const = 0;
42
43  // Updates the throbber.
44  virtual void UpdateThrobber(bool running) = 0;
45
46  // Overriden from views::View.
47  virtual void VisibilityChanged(views::View* starting_from,
48                                 bool is_visible) OVERRIDE;
49  virtual void OnThemeChanged() OVERRIDE;
50
51 protected:
52  BrowserView* browser_view() const { return browser_view_; }
53  BrowserFrame* frame() const { return frame_; }
54
55  // Updates the title and icon of the avatar button.
56  void UpdateAvatarInfo();
57
58  // Updates the title of the avatar button displayed in the caption area.
59  // The button uses |style| to match the browser window style and notifies
60  // |listener| when it is clicked.
61  void UpdateNewStyleAvatarInfo(views::ButtonListener* listener,
62                                const NewAvatarButton::AvatarButtonStyle style);
63
64 private:
65  // The frame that hosts this view.
66  BrowserFrame* frame_;
67
68  // The BrowserView hosted within this View.
69  BrowserView* browser_view_;
70
71  // Menu button that displays that either the incognito icon or the profile
72  // icon.  May be NULL for some frame styles.
73  AvatarMenuButton* avatar_button_;
74
75  // Avatar label that is used for a managed user.
76  AvatarLabel* avatar_label_;
77
78  // Menu button that displays the name of the active or guest profile.
79  // May be NULL and will not be displayed for off the record profiles.
80  NewAvatarButton* new_avatar_button_;
81};
82
83namespace chrome {
84
85// Provided by a browser_non_client_frame_view_factory_*.cc implementation
86BrowserNonClientFrameView* CreateBrowserNonClientFrameView(
87    BrowserFrame* frame, BrowserView* browser_view);
88
89}  // namespace chrome
90
91#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_NON_CLIENT_FRAME_VIEW_H_
92