panel_browser_view.h revision 731df977c0511bca2206b5f333555b1205ff1f43
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "app/x11_util.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_ptr.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/frame/panel_controller.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/views/frame/browser_view.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.
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// NOTE: This inherits from ::BrowserView in chrome/browser/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 Init();
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Show();
31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual void SetBounds(const gfx::Rect& bounds);
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Close();
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void UpdateTitleBar();
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ActivationChanged(bool activated);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetCreatorView(PanelBrowserView* creator);
36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const;
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // PanelController::Delegate overrides
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual string16 GetPanelTitle();
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual SkBitmap GetPanelIcon();
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ClosePanel();
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void OnPanelStateChanged(PanelController::State state) {}
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  // Enforces the min, max, and default bounds.
46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  void LimitBounds(gfx::Rect* bounds) const;
47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Controls interactions with the window manager for popup panels.
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<chromeos::PanelController> panel_controller_;
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // X id for the content window of the panel that created this
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // panel.  This tells ChromeOS that it should be created next to the
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // content window of this panel.
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  XID creator_xid_;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(PanelBrowserView);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_CHROMEOS_FRAME_PANEL_BROWSER_VIEW_H_
61