OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ | 5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ |
6 #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ | 6 #define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/gtest_prod_util.h" | 10 #include "base/gtest_prod_util.h" |
11 #include "base/memory/scoped_ptr.h" | 11 #include "base/memory/scoped_ptr.h" |
12 #include "ui/gfx/rect.h" | 12 #include "ui/gfx/rect.h" |
13 #include "ui/views/layout/layout_manager.h" | 13 #include "ui/views/layout/layout_manager.h" |
14 | 14 |
15 class BookmarkBarView; | 15 class BookmarkBarView; |
16 class Browser; | 16 class Browser; |
17 class BrowserView; | 17 class BrowserView; |
18 class ContentsContainer; | 18 class ContentsContainer; |
19 class DownloadShelfView; | 19 class ImmersiveModeController; |
20 class InfoBarContainerView; | 20 class InfoBarContainerView; |
21 class OverlayContainer; | 21 class OverlayContainer; |
22 class TabContentsContainer; | 22 class TabContentsContainer; |
23 class TabStrip; | 23 class TabStrip; |
24 class ToolbarView; | 24 class TopContainerView; |
25 class WebContentsModalDialogHost; | 25 class WebContentsModalDialogHost; |
26 | 26 |
27 namespace gfx { | 27 namespace gfx { |
28 class Point; | 28 class Point; |
29 class Size; | 29 class Size; |
30 } | 30 } |
31 | 31 |
32 namespace views { | 32 namespace views { |
33 class SingleSplitView; | 33 class SingleSplitView; |
34 } | 34 } |
35 | 35 |
36 // Delegate class to allow BrowserViewLayout to be decoupled from BrowserView | |
37 // for testing. Not a nested class so it can be forward declared. | |
38 class BrowserViewLayoutDelegate { | |
sky
2013/05/15 00:37:22
put in its own header.
James Cook
2013/05/15 16:45:39
Done.
| |
39 public: | |
40 virtual ~BrowserViewLayoutDelegate() {} | |
sky
2013/05/15 00:37:22
nit: make protected as BrowserViewLayout doesn't o
James Cook
2013/05/15 16:45:39
I don't understand this suggestion. BrowserView ow
sky
2013/05/15 17:24:52
Makes ownership simpler. BrowserView has and owns
| |
41 | |
42 virtual bool IsTabStripVisible() const = 0; | |
43 virtual gfx::Rect GetBoundsForTabStrip(views::View* tab_strip) const = 0; | |
44 virtual bool IsToolbarVisible() const = 0; | |
45 virtual bool IsBookmarkBarVisible() const = 0; | |
46 virtual bool DownloadShelfNeedsLayout() const = 0; | |
47 }; | |
48 | |
36 // The layout manager used in chrome browser. | 49 // The layout manager used in chrome browser. |
37 class BrowserViewLayout : public views::LayoutManager { | 50 class BrowserViewLayout : public views::LayoutManager { |
38 public: | 51 public: |
39 // The vertical overlap between the TabStrip and the Toolbar. | 52 // The vertical overlap between the TabStrip and the Toolbar. |
40 static const int kToolbarTabStripVerticalOverlap; | 53 static const int kToolbarTabStripVerticalOverlap; |
41 | 54 |
42 BrowserViewLayout(); | 55 BrowserViewLayout(); |
43 virtual ~BrowserViewLayout(); | 56 virtual ~BrowserViewLayout(); |
44 | 57 |
45 // Sets all the views to be managed. Tests may inject stubs or NULL. | 58 // Sets all the views to be managed. Tests may inject stubs or NULL. |
59 // Does not take ownership. | |
46 void Init(Browser* browser, | 60 void Init(Browser* browser, |
61 BrowserViewLayoutDelegate* delegate, | |
47 BrowserView* browser_view, | 62 BrowserView* browser_view, |
63 views::View* top_container, | |
64 TabStrip* tab_strip, | |
65 views::View* toolbar, | |
48 InfoBarContainerView* infobar_container, | 66 InfoBarContainerView* infobar_container, |
49 views::SingleSplitView* contents_split, | 67 views::View* contents_split, |
50 ContentsContainer* contents_container, | 68 ContentsContainer* contents_container, |
51 OverlayContainer* overlay_container); | 69 OverlayContainer* overlay_container, |
70 ImmersiveModeController* immersive_mode_controller); | |
52 | 71 |
53 // Sets or updates views that are not available when |this| is initialized. | 72 // Sets or updates views that are not available when |this| is initialized. |
73 void set_window_switcher_button(views::View* button) { | |
74 window_switcher_button_ = button; | |
75 } | |
76 void set_tab_strip(TabStrip* tab_strip) { | |
77 tab_strip_ = tab_strip; | |
78 } | |
54 void set_bookmark_bar(BookmarkBarView* bookmark_bar) { | 79 void set_bookmark_bar(BookmarkBarView* bookmark_bar) { |
55 bookmark_bar_ = bookmark_bar; | 80 bookmark_bar_ = bookmark_bar; |
56 } | 81 } |
57 void set_download_shelf(DownloadShelfView* download_shelf) { | 82 void set_download_shelf(views::View* download_shelf) { |
58 download_shelf_ = download_shelf; | 83 download_shelf_ = download_shelf; |
59 } | 84 } |
60 | 85 |
61 WebContentsModalDialogHost* GetWebContentsModalDialogHost(); | 86 WebContentsModalDialogHost* GetWebContentsModalDialogHost(); |
62 | 87 |
63 // Returns the minimum size of the browser view. | 88 // Returns the minimum size of the browser view. |
64 gfx::Size GetMinimumSize(); | 89 gfx::Size GetMinimumSize(); |
65 | 90 |
66 // Returns the bounding box, in widget coordinates, for the find bar. | 91 // Returns the bounding box, in widget coordinates, for the find bar. |
67 gfx::Rect GetFindBarBoundingBox() const; | 92 gfx::Rect GetFindBarBoundingBox() const; |
68 | 93 |
69 // Returns true if the specified point(BrowserView coordinates) is in | 94 // Returns true if the specified point(BrowserView coordinates) is in |
70 // in the window caption area of the browser window. | 95 // in the window caption area of the browser window. |
71 bool IsPositionInWindowCaption(const gfx::Point& point); | 96 bool IsPositionInWindowCaption(const gfx::Point& point); |
72 | 97 |
73 // Tests to see if the specified |point| (in nonclient view's coordinates) | 98 // Tests to see if the specified |point| (in nonclient view's coordinates) |
74 // is within the views managed by the laymanager. Returns one of | 99 // is within the views managed by the laymanager. Returns one of |
75 // HitTestCompat enum defined in ui/base/hit_test.h. | 100 // HitTestCompat enum defined in ui/base/hit_test.h. |
76 // See also ClientView::NonClientHitTest. | 101 // See also ClientView::NonClientHitTest. |
77 int NonClientHitTest(const gfx::Point& point); | 102 int NonClientHitTest(const gfx::Point& point); |
78 | 103 |
79 // views::LayoutManager overrides: | 104 // views::LayoutManager overrides: |
80 virtual void Layout(views::View* host) OVERRIDE; | 105 virtual void Layout(views::View* host) OVERRIDE; |
81 virtual gfx::Size GetPreferredSize(views::View* host) OVERRIDE; | 106 virtual gfx::Size GetPreferredSize(views::View* host) OVERRIDE; |
82 | 107 |
83 private: | 108 private: |
84 FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, BrowserViewLayout); | 109 FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, BrowserViewLayout); |
85 FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, Layout); | 110 FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, Layout); |
111 FRIEND_TEST_ALL_PREFIXES(BrowserViewLayoutTest, LayoutDownloadShelf); | |
86 class WebContentsModalDialogHostViews; | 112 class WebContentsModalDialogHostViews; |
87 | 113 |
88 enum InstantUIState { | 114 enum InstantUIState { |
89 // No instant suggestions are being shown. | 115 // No instant suggestions are being shown. |
90 kInstantUINone, | 116 kInstantUINone, |
91 // Instant suggestions are displayed in a overlay overlapping the tab | 117 // Instant suggestions are displayed in a overlay overlapping the tab |
92 // contents. | 118 // contents. |
93 kInstantUIOverlay, | 119 kInstantUIOverlay, |
94 // Instant suggestions are displayed in the main tab contents. | 120 // Instant suggestions are displayed in the main tab contents. |
95 kInstantUIFullPageResults, | 121 kInstantUIFullPageResults, |
96 }; | 122 }; |
97 | 123 |
98 Browser* browser() { return browser_; } | 124 Browser* browser() { return browser_; } |
99 | 125 |
100 // Layout the tab strip region, returns the coordinate of the bottom of the | 126 // Layout the tab strip region, returns the coordinate of the bottom of the |
101 // TabStrip, for laying out subsequent controls. | 127 // TabStrip, for laying out subsequent controls. |
102 int LayoutTabStripRegion(); | 128 int LayoutTabStripRegion(views::View* browser_view); |
103 | 129 |
104 // Layout the following controls, starting at |top|, returns the coordinate | 130 // Layout the following controls, starting at |top|, returns the coordinate |
105 // of the bottom of the control, for laying out the next control. | 131 // of the bottom of the control, for laying out the next control. |
106 int LayoutToolbar(int top); | 132 int LayoutToolbar(int top); |
107 int LayoutBookmarkAndInfoBars(int top); | 133 int LayoutBookmarkAndInfoBars(int top); |
108 int LayoutBookmarkBar(int top); | 134 int LayoutBookmarkBar(int top); |
109 int LayoutInfoBar(int top); | 135 int LayoutInfoBar(int top); |
110 | 136 |
111 // Layout the |contents_split_| view between the coordinates |top| and | 137 // Layout the |contents_split_| view between the coordinates |top| and |
112 // |bottom|. See browser_view.h for details of the relationship between | 138 // |bottom|. See browser_view.h for details of the relationship between |
(...skipping 23 matching lines...) Expand all Loading... | |
136 // Layout the Download Shelf, returns the coordinate of the top of the | 162 // Layout the Download Shelf, returns the coordinate of the top of the |
137 // control, for laying out the previous control. | 163 // control, for laying out the previous control. |
138 int LayoutDownloadShelf(int bottom); | 164 int LayoutDownloadShelf(int bottom); |
139 | 165 |
140 // Returns true if an infobar is showing. | 166 // Returns true if an infobar is showing. |
141 bool InfobarVisible() const; | 167 bool InfobarVisible() const; |
142 | 168 |
143 // The browser from the owning BrowserView. | 169 // The browser from the owning BrowserView. |
144 Browser* browser_; | 170 Browser* browser_; |
145 | 171 |
172 // The delegate interface. May be a mock in tests. | |
173 BrowserViewLayoutDelegate* delegate_; | |
174 | |
146 // The owning BrowserView. May be NULL in tests. | 175 // The owning BrowserView. May be NULL in tests. |
176 // TODO(jamescook): Remove this, use the views::View passed in to Layout(). | |
147 BrowserView* browser_view_; | 177 BrowserView* browser_view_; |
148 | 178 |
149 // Child views that the layout manager manages. | 179 // Child views that the layout manager manages. |
180 // NOTE: If you add a view, try to add it as a views::View, which makes | |
181 // testing much easier. | |
182 views::View* top_container_; | |
183 TabStrip* tab_strip_; | |
184 views::View* toolbar_; | |
150 BookmarkBarView* bookmark_bar_; | 185 BookmarkBarView* bookmark_bar_; |
151 InfoBarContainerView* infobar_container_; | 186 InfoBarContainerView* infobar_container_; |
152 views::SingleSplitView* contents_split_; | 187 views::View* contents_split_; |
153 ContentsContainer* contents_container_; | 188 ContentsContainer* contents_container_; |
154 OverlayContainer* overlay_container_; | 189 OverlayContainer* overlay_container_; |
155 DownloadShelfView* download_shelf_; | 190 views::View* window_switcher_button_; |
191 views::View* download_shelf_; | |
192 | |
193 ImmersiveModeController* immersive_mode_controller_; | |
156 | 194 |
157 // The bounds within which the vertically-stacked contents of the BrowserView | 195 // The bounds within which the vertically-stacked contents of the BrowserView |
158 // should be laid out within. This is just the local bounds of the | 196 // should be laid out within. This is just the local bounds of the |
159 // BrowserView. | 197 // BrowserView. |
160 // TODO(jamescook): Remove this and just use browser_view_->GetLocalBounds(). | 198 // TODO(jamescook): Remove this and just use browser_view_->GetLocalBounds(). |
161 gfx::Rect vertical_layout_rect_; | 199 gfx::Rect vertical_layout_rect_; |
162 | 200 |
163 // The host for use in positioning the web contents modal dialog. | 201 // The host for use in positioning the web contents modal dialog. |
164 scoped_ptr<WebContentsModalDialogHostViews> dialog_host_; | 202 scoped_ptr<WebContentsModalDialogHostViews> dialog_host_; |
165 | 203 |
166 // The distance the web contents modal dialog is from the top of the window, | 204 // The distance the web contents modal dialog is from the top of the window, |
167 // in pixels. | 205 // in pixels. |
168 int web_contents_modal_dialog_top_y_; | 206 int web_contents_modal_dialog_top_y_; |
169 | 207 |
170 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayout); | 208 DISALLOW_COPY_AND_ASSIGN(BrowserViewLayout); |
171 }; | 209 }; |
172 | 210 |
173 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ | 211 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_VIEW_LAYOUT_H_ |
OLD | NEW |