Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(91)

Side by Side Diff: chrome/browser/ui/panels/detached_panel_strip.cc

Issue 9546001: Support detaching/attaching panels via inter-strip drags. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Patch to land Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 #include "chrome/browser/ui/panels/detached_panel_strip.h" 5 #include "chrome/browser/ui/panels/detached_panel_strip.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "chrome/browser/ui/panels/panel_drag_controller.h" 9 #include "chrome/browser/ui/panels/panel_drag_controller.h"
10 #include "chrome/browser/ui/panels/panel_manager.h" 10 #include "chrome/browser/ui/panels/panel_manager.h"
(...skipping 15 matching lines...) Expand all
26 if (panels_.empty()) 26 if (panels_.empty())
27 return; 27 return;
28 28
29 RefreshLayout(); 29 RefreshLayout();
30 } 30 }
31 31
32 void DetachedPanelStrip::RefreshLayout() { 32 void DetachedPanelStrip::RefreshLayout() {
33 NOTIMPLEMENTED(); 33 NOTIMPLEMENTED();
34 } 34 }
35 35
36 void DetachedPanelStrip::AddPanel(Panel* panel) { 36 void DetachedPanelStrip::AddPanel(Panel* panel,
37 PositioningMask positioning_mask) {
38 // positioning_mask is ignored since the detached panel is free-floating.
37 DCHECK_NE(this, panel->panel_strip()); 39 DCHECK_NE(this, panel->panel_strip());
38 panel->SetPanelStrip(this); 40 panel->SetPanelStrip(this);
39 panels_.insert(panel); 41 panels_.insert(panel);
42
43 panel->SetAlwaysOnTop(false);
40 } 44 }
41 45
42 void DetachedPanelStrip::RemovePanel(Panel* panel) { 46 void DetachedPanelStrip::RemovePanel(Panel* panel) {
43 DCHECK_EQ(this, panel->panel_strip()); 47 DCHECK_EQ(this, panel->panel_strip());
44 panel->SetPanelStrip(NULL); 48 panel->SetPanelStrip(NULL);
45 panels_.erase(panel); 49 panels_.erase(panel);
46 } 50 }
47 51
48 void DetachedPanelStrip::CloseAll() { 52 void DetachedPanelStrip::CloseAll() {
49 // Make a copy as closing panels can modify the iterator. 53 // Make a copy as closing panels can modify the iterator.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 DCHECK_EQ(this, panel->panel_strip()); 88 DCHECK_EQ(this, panel->panel_strip());
85 NOTIMPLEMENTED(); 89 NOTIMPLEMENTED();
86 return false; 90 return false;
87 } 91 }
88 92
89 bool DetachedPanelStrip::CanShowPanelAsActive(const Panel* panel) const { 93 bool DetachedPanelStrip::CanShowPanelAsActive(const Panel* panel) const {
90 // All detached panels can be shown as active. 94 // All detached panels can be shown as active.
91 return true; 95 return true;
92 } 96 }
93 97
98 void DetachedPanelStrip::SavePanelPlacement(Panel* panel) {
99 DCHECK(!saved_panel_placement_.panel);
100 saved_panel_placement_.panel = panel;
101 saved_panel_placement_.position = panel->GetBounds().origin();
102 }
103
104 void DetachedPanelStrip::RestorePanelToSavedPlacement() {
105 DCHECK(saved_panel_placement_.panel);
106
107 gfx::Rect new_bounds(saved_panel_placement_.panel->GetBounds());
108 new_bounds.set_origin(saved_panel_placement_.position);
109 saved_panel_placement_.panel->SetPanelBounds(new_bounds);
110
111 DiscardSavedPanelPlacement();
112 }
113
114 void DetachedPanelStrip::DiscardSavedPanelPlacement() {
115 DCHECK(saved_panel_placement_.panel);
116 saved_panel_placement_.panel = NULL;
117 }
118
94 bool DetachedPanelStrip::CanDragPanel(const Panel* panel) const { 119 bool DetachedPanelStrip::CanDragPanel(const Panel* panel) const {
95 // All detached panels are draggable. 120 // All detached panels are draggable.
96 return true; 121 return true;
97 } 122 }
98 123
99 void DetachedPanelStrip::StartDraggingPanel(Panel* panel) { 124 void DetachedPanelStrip::StartDraggingPanelWithinStrip(Panel* panel) {
125 DCHECK(HasPanel(panel));
100 } 126 }
101 127
102 void DetachedPanelStrip::DragPanel(Panel* panel, int delta_x, int delta_y) { 128 void DetachedPanelStrip::DragPanelWithinStrip(Panel* panel,
129 int delta_x,
130 int delta_y) {
103 gfx::Rect new_bounds(panel->GetBounds()); 131 gfx::Rect new_bounds(panel->GetBounds());
104 new_bounds.Offset(delta_x, delta_y); 132 new_bounds.Offset(delta_x, delta_y);
105 panel->SetPanelBounds(new_bounds); 133 panel->SetPanelBoundsInstantly(new_bounds);
106 } 134 }
107 135
108 void DetachedPanelStrip::EndDraggingPanel(Panel* panel, bool cancelled) { 136 void DetachedPanelStrip::EndDraggingPanelWithinStrip(Panel* panel,
109 if (cancelled) { 137 bool aborted) {
110 gfx::Rect new_bounds(panel->GetBounds());
111 new_bounds.set_origin(
112 panel_manager_->drag_controller()->dragging_panel_original_position());
113 panel->SetPanelBounds(new_bounds);
114 }
115 } 138 }
116 139
117 bool DetachedPanelStrip::HasPanel(Panel* panel) const { 140 bool DetachedPanelStrip::HasPanel(Panel* panel) const {
118 return panels_.find(panel) != panels_.end(); 141 return panels_.find(panel) != panels_.end();
119 } 142 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/panels/detached_panel_strip.h ('k') | chrome/browser/ui/panels/docked_panel_strip.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698