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