1 // Copyright (c) 2011 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_CHROMEOS_FRAME_BROWSER_VIEW_H_ 6 #define CHROME_BROWSER_CHROMEOS_FRAME_BROWSER_VIEW_H_ 7 #pragma once 8 9 #include <vector> 10 11 #include "chrome/browser/chromeos/status/status_area_host.h" 12 #include "chrome/browser/ui/views/frame/browser_view.h" 13 #include "views/controls/menu/menu_wrapper.h" 14 15 class AccessibleToolbarView; 16 class Profile; 17 class TabStripModel; 18 19 namespace ui { 20 class SimpleMenuModel; 21 } // namespace ui 22 23 namespace views { 24 class ImageButton; 25 class ImageView; 26 class Menu2; 27 } // namespace views 28 29 namespace chromeos { 30 31 class StatusAreaView; 32 class StatusAreaButton; 33 34 // chromeos::BrowserView adds ChromeOS specific controls and menus to a 35 // BrowserView created with Browser::TYPE_NORMAL. This extender adds controls 36 // to the title bar as follows: 37 // ____ __ __ 38 // / \ \ \ [StatusArea] 39 // 40 // and adds the system context menu to the remaining arae of the titlebar. 41 class BrowserView : public ::BrowserView, 42 public views::ContextMenuController, 43 public views::MenuListener, 44 public StatusAreaHost { 45 public: 46 explicit BrowserView(Browser* browser); 47 virtual ~BrowserView(); 48 49 // BrowserView overrides. 50 virtual void Init() OVERRIDE; 51 virtual void Show() OVERRIDE; 52 virtual void ShowInactive() OVERRIDE; 53 virtual void FocusChromeOSStatus() OVERRIDE; 54 virtual views::LayoutManager* CreateLayoutManager() const OVERRIDE; 55 virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; 56 virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const OVERRIDE; 57 virtual void Cut() OVERRIDE; 58 virtual void Copy() OVERRIDE; 59 virtual void Paste() OVERRIDE; 60 61 // views::ContextMenuController overrides. 62 virtual void ShowContextMenuForView(views::View* source, 63 const gfx::Point& p, 64 bool is_mouse_gesture) OVERRIDE; 65 66 // views::MenuListener implementation. 67 virtual void OnMenuOpened() OVERRIDE; 68 69 // StatusAreaHost overrides. 70 virtual Profile* GetProfile() const OVERRIDE; 71 virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE; 72 virtual bool ShouldOpenButtonOptions( 73 const views::View* button_view) const OVERRIDE; 74 virtual void ExecuteBrowserCommand(int id) const OVERRIDE; 75 virtual void OpenButtonOptions(const views::View* button_view) OVERRIDE; 76 virtual ScreenMode GetScreenMode() const OVERRIDE; 77 virtual TextStyle GetTextStyle() const OVERRIDE; 78 saved_focused_widget()79 gfx::NativeView saved_focused_widget() const { 80 return saved_focused_widget_; 81 } 82 83 protected: 84 virtual void GetAccessiblePanes( 85 std::vector<AccessiblePaneView*>* panes); 86 87 private: 88 void InitSystemMenu(); 89 90 void ShowInternal(bool is_active); 91 92 // Status Area view. 93 StatusAreaView* status_area_; 94 95 // System menus. 96 scoped_ptr<ui::SimpleMenuModel> system_menu_contents_; 97 scoped_ptr<views::Menu2> system_menu_menu_; 98 99 // Focused native widget before wench menu shows up. We need this to properly 100 // perform cut, copy and paste. See http://crosbug.com/8496 101 gfx::NativeView saved_focused_widget_; 102 103 DISALLOW_COPY_AND_ASSIGN(BrowserView); 104 }; 105 106 } // namespace chromeos 107 108 #endif // CHROME_BROWSER_CHROMEOS_FRAME_BROWSER_VIEW_H_ 109