OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_STRIP_H_ | 5 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_STRIP_H_ |
6 #define CHROME_BROWSER_UI_PANELS_PANEL_STRIP_H_ | 6 #define CHROME_BROWSER_UI_PANELS_PANEL_STRIP_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
| 9 #include "ui/gfx/point.h" |
9 #include "ui/gfx/rect.h" | 10 #include "ui/gfx/rect.h" |
10 | 11 |
11 class Panel; | 12 class Panel; |
12 | 13 |
13 // Common base class for a collection of panels. Subclasses manage | 14 // Common base class for a collection of panels. Subclasses manage |
14 // various layouts for displaying panels in the collection. | 15 // various layouts for displaying panels in the collection. |
15 class PanelStrip { | 16 class PanelStrip { |
16 public: | 17 public: |
17 // Types of layout for the panel collections. | 18 // Types of layout for the panel collections. |
18 enum Type { | 19 enum Type { |
19 DETACHED, // free-floating panels | 20 DETACHED, // free-floating panels |
20 DOCKED, // panels are 'docked' along the window's edge | 21 DOCKED, // panels are 'docked' along the window's edge |
21 IN_OVERFLOW, // panels that cannot fit in the 'docked' panels area | 22 IN_OVERFLOW, // panels that cannot fit in the 'docked' panels area |
22 }; | 23 }; |
23 | 24 |
| 25 // Masks that control how the panel is added and positioned. |
| 26 enum PositioningMask { |
| 27 // The panel is added and placed at default position that is decided by the |
| 28 // strip. |
| 29 DEFAULT_POSITION = 0x0, |
| 30 // The panel is being added based on its current known position. |
| 31 KNOWN_POSITION = 0x1, |
| 32 // Do not update panel bounds. Only valid with DEFAULT_POSITION. |
| 33 DO_NOT_UPDATE_BOUNDS = 0x2 |
| 34 }; |
| 35 |
24 Type type() const { return type_; } | 36 Type type() const { return type_; } |
25 | 37 |
26 // Sets the bounds of the panel strip. | 38 // Sets the bounds of the panel strip. |
27 // |display_area| is in screen coordinates. | 39 // |display_area| is in screen coordinates. |
28 virtual void SetDisplayArea(const gfx::Rect& display_area) = 0; | 40 virtual void SetDisplayArea(const gfx::Rect& display_area) = 0; |
29 | 41 |
30 // Updates the positioning of all panels in the collection, usually as | 42 // Updates the positioning of all panels in the collection, usually as |
31 // a result of removing or resizing a panel in collection. | 43 // a result of removing or resizing a panel in collection. |
32 virtual void RefreshLayout() = 0; | 44 virtual void RefreshLayout() = 0; |
33 | 45 |
34 // Adds |panel| to the collection of panels. | 46 // Adds |panel| to the collection of panels. |
35 virtual void AddPanel(Panel* panel) = 0; | 47 // |positioning_mask| indicates how |panel| should be added and positioned. |
| 48 virtual void AddPanel(Panel* panel, PositioningMask positioning_mask) = 0; |
36 | 49 |
37 // Removes |panel| from the collection of panels. Invoked asynchronously | 50 // Removes |panel| from the collection of panels. Invoked asynchronously |
38 // after a panel has been closed. | 51 // after a panel has been closed. |
39 virtual void RemovePanel(Panel* panel) = 0; | 52 virtual void RemovePanel(Panel* panel) = 0; |
40 | 53 |
41 // Closes all panels in the collection. Panels will be removed after closing. | 54 // Closes all panels in the collection. Panels will be removed after closing. |
42 virtual void CloseAll() = 0; | 55 virtual void CloseAll() = 0; |
43 | 56 |
44 // Resizes the |panel| to the |preferred_window_size| and updates the layout | 57 // Resizes the |panel| to the |preferred_window_size| and updates the layout |
45 // of other panels in the collection accordingly. | 58 // of other panels in the collection accordingly. |
(...skipping 13 matching lines...) Expand all Loading... |
59 | 72 |
60 // Updates the display to show |panel| as minimized/restored. | 73 // Updates the display to show |panel| as minimized/restored. |
61 virtual void MinimizePanel(Panel* panel) = 0; | 74 virtual void MinimizePanel(Panel* panel) = 0; |
62 virtual void RestorePanel(Panel* panel) = 0; | 75 virtual void RestorePanel(Panel* panel) = 0; |
63 | 76 |
64 virtual bool IsPanelMinimized(const Panel* panel) const = 0; | 77 virtual bool IsPanelMinimized(const Panel* panel) const = 0; |
65 | 78 |
66 // Returns true if |panel| can be shown as active. | 79 // Returns true if |panel| can be shown as active. |
67 virtual bool CanShowPanelAsActive(const Panel* panel) const = 0; | 80 virtual bool CanShowPanelAsActive(const Panel* panel) const = 0; |
68 | 81 |
| 82 // Saves/restores/discards the placement information of |panel|. This is |
| 83 // useful in bringing back the dragging panel to its original positioning |
| 84 // when the drag is cancelled. After the placement information is saved, |
| 85 // the caller should only call one of RestorePanelToSavedPlacement or |
| 86 // DiscardSavedPanelPlacement. |
| 87 virtual void SavePanelPlacement(Panel* panel) = 0; |
| 88 virtual void RestorePanelToSavedPlacement() = 0; |
| 89 virtual void DiscardSavedPanelPlacement() = 0; |
| 90 |
69 // Returns true if |panel| is draggable. | 91 // Returns true if |panel| is draggable. |
70 virtual bool CanDragPanel(const Panel* panel) const = 0; | 92 virtual bool CanDragPanel(const Panel* panel) const = 0; |
71 | 93 |
72 // Drags |panel| in the bounds of this strip. | 94 // Starts dragging |panel| within this strip. The panel should already be |
73 virtual void StartDraggingPanel(Panel* panel) = 0; | 95 // in this strip. |
74 // |delta_x| and |delta_y| denotes how much the mouse has been moved since | 96 virtual void StartDraggingPanelWithinStrip(Panel* panel) = 0; |
75 // last time when DragPanel or StartDraggingPanel is called. | 97 |
76 virtual void DragPanel(Panel* panel, int delta_x, int delta_y) = 0; | 98 // Drags |panel| within this strip. |
77 virtual void EndDraggingPanel(Panel* panel, bool cancelled) = 0; | 99 // |delta_x| and |delta_y| represents the offset from the last mouse location |
| 100 // when StartDraggingPanelWithinStrip or DragPanelWithinStrip is called. |
| 101 virtual void DragPanelWithinStrip(Panel* panel, int delta_x, int delta_y) = 0; |
| 102 |
| 103 // Ends dragging |panel| within this strip. |aborted| means the drag within |
| 104 // this strip is aborted due to one of the following: |
| 105 // 1) the drag leaves this strip and enters other strip |
| 106 // 2) the drag gets cancelled |
| 107 // If |aborted| is true, |panel| will stay as it is; otherwise, it will be |
| 108 // moved to its finalized position. |
| 109 // The drag controller is responsible for restoring the panel back to its |
| 110 // original strip and position when the drag gets cancelled. |
| 111 virtual void EndDraggingPanelWithinStrip(Panel* panel, bool aborted) = 0; |
78 | 112 |
79 protected: | 113 protected: |
80 explicit PanelStrip(Type type); | 114 explicit PanelStrip(Type type); |
81 virtual ~PanelStrip(); | 115 virtual ~PanelStrip(); |
82 | 116 |
83 const Type type_; // Type of this panel strip. | 117 const Type type_; // Type of this panel strip. |
84 }; | 118 }; |
85 | 119 |
86 #endif // CHROME_BROWSER_UI_PANELS_PANEL_STRIP_H_ | 120 #endif // CHROME_BROWSER_UI_PANELS_PANEL_STRIP_H_ |
OLD | NEW |