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_UI_PANELS_PANEL_H_
6#define CHROME_BROWSER_UI_PANELS_PANEL_H_
7#pragma once
8
9#include "chrome/browser/ui/browser_window.h"
10
11#include "base/memory/scoped_ptr.h"
12#include "ui/gfx/rect.h"
13
14class PanelManager;
15
16// A platform independent implementation of BrowserWindow for Panels.  This
17// class would get the first crack at all the BrowserWindow calls for Panels and
18// do one or more of the following:
19// - Do nothing.  The function is not relevant to Panels.
20// - Throw an exceptions.  The function shouldn't be called for Panels.
21// - Do Panel specific platform independent processing and then invoke the
22//   function on the platform specific BrowserWindow member.  For example,
23//   Panel size is restricted to certain limits.
24// - Invoke an appropriate PanelManager function to do stuff that might affect
25//   other Panels.  For example deleting a panel would rearrange other panels.
26class Panel : public BrowserWindow {
27 public:
28  virtual ~Panel();
29
30  // Returns the PanelManager associated with this panel.
31  PanelManager* manager() const;
32
33  void Minimize();
34
35  void Restore();
36
37  const gfx::Rect& bounds() const { return bounds_; }
38
39  bool minimized() const { return minimized_; }
40
41  // BrowserWindow overrides.
42  virtual void Show();
43  virtual void ShowInactive();
44  virtual void SetBounds(const gfx::Rect& bounds);
45  virtual void Close();
46  virtual void Activate();
47  virtual void Deactivate();
48  virtual bool IsActive() const;
49  virtual void FlashFrame();
50  virtual gfx::NativeWindow GetNativeHandle();
51  virtual BrowserWindowTesting* GetBrowserWindowTesting();
52  virtual StatusBubble* GetStatusBubble();
53  virtual void ToolbarSizeChanged(bool is_animating);
54  virtual void UpdateTitleBar();
55  virtual void ShelfVisibilityChanged();
56  virtual void UpdateDevTools();
57  virtual void UpdateLoadingAnimations(bool should_animate);
58  virtual void SetStarredState(bool is_starred);
59  virtual gfx::Rect GetRestoredBounds() const;
60  virtual gfx::Rect GetBounds() const;
61  virtual bool IsMaximized() const;
62  virtual void SetFullscreen(bool fullscreen);
63  virtual bool IsFullscreen() const;
64  virtual bool IsFullscreenBubbleVisible() const;
65  virtual LocationBar* GetLocationBar() const;
66  virtual void SetFocusToLocationBar(bool select_all);
67  virtual void UpdateReloadStopState(bool is_loading, bool force);
68  virtual void UpdateToolbar(TabContentsWrapper* contents,
69                             bool should_restore_state);
70  virtual void FocusToolbar();
71  virtual void FocusAppMenu();
72  virtual void FocusBookmarksToolbar();
73  virtual void FocusChromeOSStatus();
74  virtual void RotatePaneFocus(bool forwards);
75  virtual bool IsBookmarkBarVisible() const;
76  virtual bool IsBookmarkBarAnimating() const;
77  virtual bool IsTabStripEditable() const;
78  virtual bool IsToolbarVisible() const;
79  virtual void DisableInactiveFrame();
80  virtual void ConfirmSetDefaultSearchProvider(
81      TabContents* tab_contents,
82      TemplateURL* template_url,
83      TemplateURLModel* template_url_model);
84  virtual void ConfirmAddSearchProvider(const TemplateURL* template_url,
85                                        Profile* profile);
86  virtual void ToggleBookmarkBar();
87  virtual void ShowAboutChromeDialog();
88  virtual void ShowUpdateChromeDialog();
89  virtual void ShowTaskManager();
90  virtual void ShowBackgroundPages();
91  virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked);
92  virtual bool IsDownloadShelfVisible() const;
93  virtual DownloadShelf* GetDownloadShelf();
94  virtual void ShowRepostFormWarningDialog(TabContents* tab_contents);
95  virtual void ShowCollectedCookiesDialog(TabContents* tab_contents);
96  virtual void ShowThemeInstallBubble();
97  virtual void ConfirmBrowserCloseWithPendingDownloads();
98  virtual void ShowHTMLDialog(HtmlDialogUIDelegate* delegate,
99                              gfx::NativeWindow parent_window);
100  virtual void UserChangedTheme();
101  virtual int GetExtraRenderViewHeight() const;
102  virtual void TabContentsFocused(TabContents* tab_contents);
103  virtual void ShowPageInfo(Profile* profile,
104                            const GURL& url,
105                            const NavigationEntry::SSLStatus& ssl,
106                            bool show_history);
107  virtual void ShowAppMenu();
108  virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event,
109                                      bool* is_keyboard_shortcut);
110  virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event);
111  virtual void ShowCreateWebAppShortcutsDialog(
112      TabContentsWrapper* tab_contents);
113  virtual void ShowCreateChromeAppShortcutsDialog(Profile* profile,
114                                                  const Extension* app);
115  virtual void Cut();
116  virtual void Copy();
117  virtual void Paste();
118  virtual void ToggleTabStripMode();
119#if defined(OS_MACOSX)
120  virtual void OpenTabpose();
121#endif
122  virtual void PrepareForInstant();
123  virtual void ShowInstant(TabContentsWrapper* preview);
124  virtual void HideInstant(bool instant_is_active);
125  virtual gfx::Rect GetInstantBounds();
126#if defined(OS_CHROMEOS)
127  virtual void ShowKeyboardOverlay(gfx::NativeWindow owning_window);
128#endif
129
130  // Construct a native panel BrowserWindow implementation for the specified
131  // |browser|.
132  static BrowserWindow* CreateNativePanel(Browser* browser, Panel* panel);
133
134 protected:
135  virtual void DestroyBrowser();
136
137 private:
138  friend class PanelManager;
139
140  // Panel can only be created using PanelManager::CreatePanel().
141  Panel(Browser* browser, const gfx::Rect& bounds);
142
143  // Platform specifc BrowserWindow implementation for panels.  It'd be one of
144  // PanelBrowserWindowGtk/PanelBrowserView/PanelBrowserWindowCocoa.
145  scoped_ptr<BrowserWindow> browser_window_;
146
147  gfx::Rect bounds_;
148
149  // Is the panel minimized?
150  bool minimized_;
151
152  DISALLOW_COPY_AND_ASSIGN(Panel);
153};
154
155#endif  // CHROME_BROWSER_UI_PANELS_PANEL_H_
156