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_PANEL_BROWSER_VIEW_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_FRAME_PANEL_BROWSER_VIEW_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/frame/panel_controller.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/frame/browser_view.h" 1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/x/x11_util.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Browser; 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PanelController; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A browser view that implements Panel specific behavior. 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// NOTE: This inherits from ::BrowserView in chrome/browser/ui/views/frame/, 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// not chromeos::BrowserView in chrome/browser/chromeos/frame/. 23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass PanelBrowserView : public ::BrowserView, 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public PanelController::Delegate { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit PanelBrowserView(Browser* browser); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // BrowserView overrides. 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Show(); 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ShowInactive(); 31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void SetBounds(const gfx::Rect& bounds); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void Close(); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void UpdateTitleBar(); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void SetCreatorView(PanelBrowserView* creator); 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const; 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnWindowActivationChanged(bool active); 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // BrowserView : TabStripModelObserver overrides. 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void TabChangedAt(TabContentsWrapper* contents, 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int index, 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabChangeType change_type); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // PanelController::Delegate overrides 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual string16 GetPanelTitle(); 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual SkBitmap GetPanelIcon(); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool CanClosePanel(); 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void ClosePanel(); 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ActivatePanel(); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnPanelStateChanged(PanelController::State state) {} 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Enforces the min, max, and default bounds. 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void LimitBounds(gfx::Rect* bounds) const; 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void InitPanelController(bool is_active); 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Controls interactions with the window manager for popup panels. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<chromeos::PanelController> panel_controller_; 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // X id for the content window of the panel that created this 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // panel. This tells ChromeOS that it should be created next to the 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // content window of this panel. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch XID creator_xid_; 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(PanelBrowserView); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_FRAME_PANEL_BROWSER_VIEW_H_ 70