Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / ui / panels / detached_panel_collection.h
blob21aeeac9179f2c39f8eed6d47ef826492cb042da
1 // Copyright (c) 2012 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.
5 #ifndef CHROME_BROWSER_UI_PANELS_DETACHED_PANEL_COLLECTION_H_
6 #define CHROME_BROWSER_UI_PANELS_DETACHED_PANEL_COLLECTION_H_
8 #include <list>
9 #include "base/basictypes.h"
10 #include "chrome/browser/ui/panels/panel.h"
11 #include "chrome/browser/ui/panels/panel_collection.h"
12 #include "ui/gfx/point.h"
13 #include "ui/gfx/rect.h"
15 class PanelManager;
17 // This class manages a group of free-floating panels.
18 class DetachedPanelCollection : public PanelCollection {
19 public:
20 typedef std::list<Panel*> Panels;
21 typedef bool (*PanelsComparer)(Panel* panel1, Panel* panel2);
23 explicit DetachedPanelCollection(PanelManager* panel_manager);
24 virtual ~DetachedPanelCollection();
26 // PanelCollection OVERRIDES:
27 virtual void OnDisplayChanged() OVERRIDE;
28 virtual void RefreshLayout() OVERRIDE;
29 virtual void AddPanel(Panel* panel,
30 PositioningMask positioning_mask) OVERRIDE;
31 virtual void RemovePanel(Panel* panel, RemovalReason reason) OVERRIDE;
32 virtual void CloseAll() OVERRIDE;
33 virtual void ResizePanelWindow(
34 Panel* panel,
35 const gfx::Size& preferred_window_size) OVERRIDE;
36 virtual panel::Resizability GetPanelResizability(
37 const Panel* panel) const OVERRIDE;
38 virtual void OnPanelResizedByMouse(Panel* panel,
39 const gfx::Rect& new_bounds) OVERRIDE;
40 virtual void OnPanelAttentionStateChanged(Panel* panel) OVERRIDE;
41 virtual void OnPanelTitlebarClicked(Panel* panel,
42 panel::ClickModifier modifier) OVERRIDE;
43 virtual void ActivatePanel(Panel* panel) OVERRIDE;
44 virtual void MinimizePanel(Panel* panel) OVERRIDE;
45 virtual void RestorePanel(Panel* panel) OVERRIDE;
46 virtual void OnMinimizeButtonClicked(Panel* panel,
47 panel::ClickModifier modifier) OVERRIDE;
48 virtual void OnRestoreButtonClicked(Panel* panel,
49 panel::ClickModifier modifier) OVERRIDE;
50 virtual bool CanShowMinimizeButton(const Panel* panel) const OVERRIDE;
51 virtual bool CanShowRestoreButton(const Panel* panel) const OVERRIDE;
52 virtual bool IsPanelMinimized(const Panel* panel) const OVERRIDE;
53 virtual bool UsesAlwaysOnTopPanels() const OVERRIDE;
54 virtual void SavePanelPlacement(Panel* panel) OVERRIDE;
55 virtual void RestorePanelToSavedPlacement() OVERRIDE;
56 virtual void DiscardSavedPanelPlacement() OVERRIDE;
57 virtual void UpdatePanelOnCollectionChange(Panel* panel) OVERRIDE;
58 virtual void OnPanelExpansionStateChanged(Panel* panel) OVERRIDE;
59 virtual void OnPanelActiveStateChanged(Panel* panel) OVERRIDE;
60 virtual gfx::Rect GetInitialPanelBounds(
61 const gfx::Rect& requested_bounds) const OVERRIDE;
63 bool HasPanel(Panel* panel) const;
65 void SortPanels(PanelsComparer comparer);
67 int num_panels() const { return panels_.size(); }
68 const Panels& panels() const { return panels_; }
70 // Returns default top-left to use for a detached panel whose position is
71 // not specified during panel creation.
72 gfx::Point GetDefaultPanelOrigin();
74 private:
75 // Offset the default panel top-left position by kPanelTilePixels. Wrap
76 // around to initial position if position goes beyond display area.
77 void ComputeNextDefaultPanelOrigin();
79 struct PanelPlacement {
80 Panel* panel;
81 gfx::Point position;
83 PanelPlacement() : panel(NULL) { }
86 PanelManager* panel_manager_; // Weak, owns us.
88 // Collection of all panels.
89 Panels panels_;
91 // Used to save the placement information for a panel.
92 PanelPlacement saved_panel_placement_;
94 // Default top-left position to use for next detached panel if position is
95 // unspecified by panel creator.
96 gfx::Point default_panel_origin_;
98 DISALLOW_COPY_AND_ASSIGN(DetachedPanelCollection);
101 #endif // CHROME_BROWSER_UI_PANELS_DETACHED_PANEL_COLLECTION_H_