15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <list> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/lazy_instance.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/display_settings_provider.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/panel.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/panels/panel_collection.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/panel_constants.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/rect.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DetachedPanelCollection; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DockedPanelCollection; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PanelDragController; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PanelResizeController; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PanelMouseWatcher; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class StackedPanelCollection; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class manages a set of panels. 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PanelManager : public DisplaySettingsProvider::DisplayObserver, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public DisplaySettingsProvider::FullScreenObserver { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) typedef std::list<StackedPanelCollection*> Stacks; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum CreateMode { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CREATE_AS_DOCKED, // Creates a docked panel. The default. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CREATE_AS_DETACHED // Creates a detached panel. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a single instance. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static PanelManager* GetInstance(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tells PanelManager to use |provider| for testing purpose. This has to be 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // called before GetInstance. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void SetDisplaySettingsProviderForTesting( 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DisplaySettingsProvider* provider); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if panels should be used for the extension. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool ShouldUsePanels(const std::string& extension_id); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if panel stacking support is enabled. 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool IsPanelStackingEnabled(); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // Returns true if a panel can be system-minimized by the desktop 53a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // environment. Some desktop environment, like Unity, does not trigger the 54a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // "window-state-event" which prevents the minimize and unminimize from 55a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) // working. 56a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) static bool CanUseSystemMinimize(); 57a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the default top-left position for a detached panel. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point GetDefaultDetachedPanelOrigin(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a panel and returns it. The panel might be queued for display 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // later. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |app_name| is the default title for Panels when the page content does not 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // provide a title. For extensions, this is usually the application name 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // generated from the extension id. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |requested_bounds| is the desired bounds for the panel, but actual 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bounds may differ after panel layout depending on create |mode|. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |mode| indicates whether panel should be created as docked or detached. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Panel* CreatePanel(const std::string& app_name, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& requested_bounds, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateMode mode); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Close all panels (asynchronous). Panels will be removed after closing. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CloseAll(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Asynchronous confirmation of panel having been closed. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnPanelClosed(Panel* panel); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates a StackedPanelCollection and returns it. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) StackedPanelCollection* CreateStack(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Deletes |stack|. The stack must be empty at the time of deletion. 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveStack(StackedPanelCollection* stack); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the maximum size that panel can be auto-resized or resized by the 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // API. 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetMaxPanelWidth(const gfx::Rect& work_area) const; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int GetMaxPanelHeight(const gfx::Rect& work_area) const; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Drags the given panel. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |mouse_location| is in screen coordinate system. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartDragging(Panel* panel, const gfx::Point& mouse_location); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Drag(const gfx::Point& mouse_location); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EndDragging(bool cancelled); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resizes the given panel. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |mouse_location| is in screen coordinate system. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartResizingByMouse(Panel* panel, const gfx::Point& mouse_location, 101f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int component); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ResizeByMouse(const gfx::Point& mouse_location); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EndResizingByMouse(bool cancelled); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when a panel's expansion state changes. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnPanelExpansionStateChanged(Panel* panel); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Moves the |panel| to a different collection. 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void MovePanelToCollection(Panel* panel, 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PanelCollection* target_collection, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PanelCollection::PositioningMask positioning_mask); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if we should bring up the titlebars, given the current mouse 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // point. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ShouldBringUpTitlebars(int mouse_x, int mouse_y) const; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Brings up or down the titlebars for all minimized panels. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void BringUpOrDownTitlebars(bool bring_up); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<Panel*> GetDetachedAndStackedPanels() const; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_panels() const; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<Panel*> panels() const; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Stacks& stacks() const { return stacks_; } 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int num_stacks() const { return stacks_.size(); } 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelDragController* drag_controller() const { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return drag_controller_.get(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef UNIT_TEST 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelResizeController* resize_controller() const { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return resize_controller_.get(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisplaySettingsProvider* display_settings_provider() const { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return display_settings_provider_.get(); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelMouseWatcher* mouse_watcher() const { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return panel_mouse_watcher_.get(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DetachedPanelCollection* detached_collection() const { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return detached_collection_.get(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DockedPanelCollection* docked_collection() const { 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return docked_collection_.get(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reduces time interval in tests to shorten test run time. 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wrapper should be used around all time intervals in panels code. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static inline double AdjustTimeInterval(double interval) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (shorten_time_intervals_) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return interval / 500.0; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return interval; 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool auto_sizing_enabled() const { 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return auto_sizing_enabled_; 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called from native level when panel animation ends. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnPanelAnimationEnded(Panel* panel); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef UNIT_TEST 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void shorten_time_intervals_for_testing() { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) shorten_time_intervals_ = true; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void set_display_settings_provider( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisplaySettingsProvider* display_settings_provider) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) display_settings_provider_.reset(display_settings_provider); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void enable_auto_sizing(bool enabled) { 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auto_sizing_enabled_ = enabled; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetMouseWatcherForTesting(PanelMouseWatcher* watcher) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetMouseWatcher(watcher); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct base::DefaultLazyInstanceTraits<PanelManager>; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PanelManager(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~PanelManager(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Initialize(DisplaySettingsProvider* provider); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Overridden from DisplaySettingsProvider::DisplayObserver: 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnDisplayChanged() OVERRIDE; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overridden from DisplaySettingsProvider::FullScreenObserver: 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnFullScreenModeChanged(bool is_full_screen) OVERRIDE; 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the collection to which a new panel should add. The new panel 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // is expected to be created with |bounds| and |mode|. The size of |bounds| 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // could be used to determine which collection is more appropriate to have 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the new panel. Upon return, |positioning_mask| contains the required mask 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to be applied when the new panel is being added to the collection. 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PanelCollection* GetCollectionForNewPanel( 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Panel* new_panel, 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& bounds, 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateMode mode, 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PanelCollection::PositioningMask* positioning_mask); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests may want to use a mock panel mouse watcher. 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetMouseWatcher(PanelMouseWatcher* watcher); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Tests may want to shorten time intervals to reduce running time. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool shorten_time_intervals_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<DetachedPanelCollection> detached_collection_; 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<DockedPanelCollection> docked_collection_; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Stacks stacks_; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PanelDragController> drag_controller_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PanelResizeController> resize_controller_; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Use a mouse watcher to know when to bring up titlebars to "peek" at 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // minimized panels. Mouse movement is only tracked when there is a minimized 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // panel. 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PanelMouseWatcher> panel_mouse_watcher_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DisplaySettingsProvider> display_settings_provider_; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether or not bounds will be updated when the preferred content size is 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // changed. The testing code could set this flag to false so that other tests 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will not be affected. 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool auto_sizing_enabled_; 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PanelManager); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_UI_PANELS_PANEL_MANAGER_H_ 244