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