// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_PANELS_PANEL_H_ #define CHROME_BROWSER_UI_PANELS_PANEL_H_ #pragma once #include "chrome/browser/ui/browser_window.h" #include "base/memory/scoped_ptr.h" #include "ui/gfx/rect.h" class PanelManager; // A platform independent implementation of BrowserWindow for Panels. This // class would get the first crack at all the BrowserWindow calls for Panels and // do one or more of the following: // - Do nothing. The function is not relevant to Panels. // - Throw an exceptions. The function shouldn't be called for Panels. // - Do Panel specific platform independent processing and then invoke the // function on the platform specific BrowserWindow member. For example, // Panel size is restricted to certain limits. // - Invoke an appropriate PanelManager function to do stuff that might affect // other Panels. For example deleting a panel would rearrange other panels. class Panel : public BrowserWindow { public: virtual ~Panel(); // Returns the PanelManager associated with this panel. PanelManager* manager() const; void Minimize(); void Restore(); const gfx::Rect& bounds() const { return bounds_; } bool minimized() const { return minimized_; } // BrowserWindow overrides. virtual void Show(); virtual void ShowInactive(); virtual void SetBounds(const gfx::Rect& bounds); virtual void Close(); virtual void Activate(); virtual void Deactivate(); virtual bool IsActive() const; virtual void FlashFrame(); virtual gfx::NativeWindow GetNativeHandle(); virtual BrowserWindowTesting* GetBrowserWindowTesting(); virtual StatusBubble* GetStatusBubble(); virtual void ToolbarSizeChanged(bool is_animating); virtual void UpdateTitleBar(); virtual void ShelfVisibilityChanged(); virtual void UpdateDevTools(); virtual void UpdateLoadingAnimations(bool should_animate); virtual void SetStarredState(bool is_starred); virtual gfx::Rect GetRestoredBounds() const; virtual gfx::Rect GetBounds() const; virtual bool IsMaximized() const; virtual void SetFullscreen(bool fullscreen); virtual bool IsFullscreen() const; virtual bool IsFullscreenBubbleVisible() const; virtual LocationBar* GetLocationBar() const; virtual void SetFocusToLocationBar(bool select_all); virtual void UpdateReloadStopState(bool is_loading, bool force); virtual void UpdateToolbar(TabContentsWrapper* contents, bool should_restore_state); virtual void FocusToolbar(); virtual void FocusAppMenu(); virtual void FocusBookmarksToolbar(); virtual void FocusChromeOSStatus(); virtual void RotatePaneFocus(bool forwards); virtual bool IsBookmarkBarVisible() const; virtual bool IsBookmarkBarAnimating() const; virtual bool IsTabStripEditable() const; virtual bool IsToolbarVisible() const; virtual void DisableInactiveFrame(); virtual void ConfirmSetDefaultSearchProvider( TabContents* tab_contents, TemplateURL* template_url, TemplateURLModel* template_url_model); virtual void ConfirmAddSearchProvider(const TemplateURL* template_url, Profile* profile); virtual void ToggleBookmarkBar(); virtual void ShowAboutChromeDialog(); virtual void ShowUpdateChromeDialog(); virtual void ShowTaskManager(); virtual void ShowBackgroundPages(); virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked); virtual bool IsDownloadShelfVisible() const; virtual DownloadShelf* GetDownloadShelf(); virtual void ShowRepostFormWarningDialog(TabContents* tab_contents); virtual void ShowCollectedCookiesDialog(TabContents* tab_contents); virtual void ShowThemeInstallBubble(); virtual void ConfirmBrowserCloseWithPendingDownloads(); virtual void ShowHTMLDialog(HtmlDialogUIDelegate* delegate, gfx::NativeWindow parent_window); virtual void UserChangedTheme(); virtual int GetExtraRenderViewHeight() const; virtual void TabContentsFocused(TabContents* tab_contents); virtual void ShowPageInfo(Profile* profile, const GURL& url, const NavigationEntry::SSLStatus& ssl, bool show_history); virtual void ShowAppMenu(); virtual bool PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, bool* is_keyboard_shortcut); virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event); virtual void ShowCreateWebAppShortcutsDialog( TabContentsWrapper* tab_contents); virtual void ShowCreateChromeAppShortcutsDialog(Profile* profile, const Extension* app); virtual void Cut(); virtual void Copy(); virtual void Paste(); virtual void ToggleTabStripMode(); #if defined(OS_MACOSX) virtual void OpenTabpose(); #endif virtual void PrepareForInstant(); virtual void ShowInstant(TabContentsWrapper* preview); virtual void HideInstant(bool instant_is_active); virtual gfx::Rect GetInstantBounds(); #if defined(OS_CHROMEOS) virtual void ShowKeyboardOverlay(gfx::NativeWindow owning_window); #endif // Construct a native panel BrowserWindow implementation for the specified // |browser|. static BrowserWindow* CreateNativePanel(Browser* browser, Panel* panel); protected: virtual void DestroyBrowser(); private: friend class PanelManager; // Panel can only be created using PanelManager::CreatePanel(). Panel(Browser* browser, const gfx::Rect& bounds); // Platform specifc BrowserWindow implementation for panels. It'd be one of // PanelBrowserWindowGtk/PanelBrowserView/PanelBrowserWindowCocoa. scoped_ptr<BrowserWindow> browser_window_; gfx::Rect bounds_; // Is the panel minimized? bool minimized_; DISALLOW_COPY_AND_ASSIGN(Panel); }; #endif // CHROME_BROWSER_UI_PANELS_PANEL_H_