172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_FRAME_BROWSER_VIEW_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_FRAME_BROWSER_VIEW_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/status_area_host.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/frame/browser_view.h" 134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/menu/menu_wrapper.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AccessibleToolbarView; 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass Profile; 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabStripModel; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsennamespace ui { 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SimpleMenuModel; 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} // namespace ui 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace views { 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ImageButton; 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ImageView; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Menu2; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace views 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass StatusAreaView; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass StatusAreaButton; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// chromeos::BrowserView adds ChromeOS specific controls and menus to a 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// BrowserView created with Browser::TYPE_NORMAL. This extender adds controls 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to the title bar as follows: 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// ____ __ __ 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// / \ \ \ [StatusArea] 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// and adds the system context menu to the remaining arae of the titlebar. 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BrowserView : public ::BrowserView, 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public views::ContextMenuController, 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public views::MenuListener, 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public StatusAreaHost { 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit BrowserView(Browser* browser); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~BrowserView(); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // BrowserView overrides. 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Init() OVERRIDE; 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Show() OVERRIDE; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ShowInactive() OVERRIDE; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void FocusChromeOSStatus() OVERRIDE; 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual views::LayoutManager* CreateLayoutManager() const OVERRIDE; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const OVERRIDE; 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Cut() OVERRIDE; 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Copy() OVERRIDE; 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Paste() OVERRIDE; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // views::ContextMenuController overrides. 62dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen virtual void ShowContextMenuForView(views::View* source, 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const gfx::Point& p, 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_mouse_gesture) OVERRIDE; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // views::MenuListener implementation. 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnMenuOpened() OVERRIDE; 684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // StatusAreaHost overrides. 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual Profile* GetProfile() const OVERRIDE; 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual gfx::NativeWindow GetNativeWindow() const OVERRIDE; 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ShouldOpenButtonOptions( 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const views::View* button_view) const OVERRIDE; 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ExecuteBrowserCommand(int id) const OVERRIDE; 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OpenButtonOptions(const views::View* button_view) OVERRIDE; 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ScreenMode GetScreenMode() const OVERRIDE; 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual TextStyle GetTextStyle() const OVERRIDE; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch gfx::NativeView saved_focused_widget() const { 804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch return saved_focused_widget_; 814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch } 824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void GetAccessiblePanes( 85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<AccessiblePaneView*>* panes); 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void InitSystemMenu(); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ShowInternal(bool is_active); 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Status Area view. 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusAreaView* status_area_; 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // System menus. 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_ptr<ui::SimpleMenuModel> system_menu_contents_; 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<views::Menu2> system_menu_menu_; 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 994a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Focused native widget before wench menu shows up. We need this to properly 1004a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // perform cut, copy and paste. See http://crosbug.com/8496 1014a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch gfx::NativeView saved_focused_widget_; 1024a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(BrowserView); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_FRAME_BROWSER_VIEW_H_ 109