Index: chrome/browser/ui/panels/detached_panel_collection.cc |
diff --git a/chrome/browser/ui/panels/detached_panel_collection.cc b/chrome/browser/ui/panels/detached_panel_collection.cc |
deleted file mode 100644 |
index d3e614cde5424a4523eb332d12eaa9a2a32cbe9c..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/panels/detached_panel_collection.cc |
+++ /dev/null |
@@ -1,291 +0,0 @@ |
-// Copyright (c) 2012 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. |
- |
-#include "chrome/browser/ui/panels/detached_panel_collection.h" |
- |
-#include <algorithm> |
-#include "base/logging.h" |
-#include "chrome/browser/ui/panels/display_settings_provider.h" |
-#include "chrome/browser/ui/panels/panel_drag_controller.h" |
-#include "chrome/browser/ui/panels/panel_manager.h" |
- |
-namespace { |
-// How much horizontal and vertical offset there is between newly opened |
-// detached panels. |
-const int kPanelTilePixels = 10; |
- |
-// When the stacking mode is enabled, the detached panel will be positioned |
-// near the top of the working area such that the subsequent panel could be |
-// stacked to the bottom of the detached panel. This value is experimental |
-// and subjective. |
-const int kDetachedPanelStartingYPositionOnStackingEnabled = 20; |
-} // namespace |
- |
-DetachedPanelCollection::DetachedPanelCollection(PanelManager* panel_manager) |
- : PanelCollection(PanelCollection::DETACHED), |
- panel_manager_(panel_manager) { |
-} |
- |
-DetachedPanelCollection::~DetachedPanelCollection() { |
- DCHECK(panels_.empty()); |
-} |
- |
-void DetachedPanelCollection::OnDisplayChanged() { |
- DisplaySettingsProvider* display_settings_provider = |
- panel_manager_->display_settings_provider(); |
- |
- for (Panels::const_iterator iter = panels_.begin(); |
- iter != panels_.end(); ++iter) { |
- Panel* panel = *iter; |
- gfx::Rect work_area = |
- display_settings_provider->GetWorkAreaMatching(panel->GetBounds()); |
- |
- // Update size if needed. |
- panel->LimitSizeToWorkArea(work_area); |
- |
- // Update bounds to make sure the panel falls completely within the work |
- // area. Note that the origin of the work area might also change. |
- gfx::Rect bounds = panel->GetBounds(); |
- if (panel->full_size() != bounds.size()) { |
- bounds.set_size(panel->full_size()); |
- if (bounds.right() > work_area.right()) |
- bounds.set_x(work_area.right() - bounds.width()); |
- if (bounds.bottom() > work_area.bottom()) |
- bounds.set_y(work_area.bottom() - bounds.height()); |
- } |
- if (bounds.x() < work_area.x()) |
- bounds.set_x(work_area.x()); |
- if (bounds.y() < work_area.y()) |
- bounds.set_y(work_area.y()); |
- panel->SetPanelBoundsInstantly(bounds); |
- } |
-} |
- |
-void DetachedPanelCollection::RefreshLayout() { |
- // A detached panel would still maintain its minimized state when it was |
- // moved out the stack and the drag has not ended. When the drag ends, it |
- // needs to be expanded. This could occur in the following scenarios: |
- // 1) It was originally a minimized panel that was dragged out of a stack. |
- // 2) It was originally a minimized panel that was the top panel in a stack. |
- // The panel below it was dragged out of the stack which also caused |
- // the top panel became detached. |
- for (Panels::const_iterator iter = panels_.begin(); |
- iter != panels_.end(); ++iter) { |
- Panel* panel = *iter; |
- if (!panel->in_preview_mode() && |
- panel->expansion_state() != Panel::EXPANDED) |
- panel->SetExpansionState(Panel::EXPANDED); |
- } |
-} |
- |
-void DetachedPanelCollection::AddPanel(Panel* panel, |
- PositioningMask positioning_mask) { |
- // positioning_mask is ignored since the detached panel is free-floating. |
- DCHECK_NE(this, panel->collection()); |
- panel->set_collection(this); |
- panels_.push_back(panel); |
- |
- // Offset the default position of the next detached panel if the current |
- // default position is used. |
- if (panel->GetBounds().origin() == default_panel_origin_) |
- ComputeNextDefaultPanelOrigin(); |
-} |
- |
-void DetachedPanelCollection::RemovePanel(Panel* panel, RemovalReason reason) { |
- DCHECK_EQ(this, panel->collection()); |
- panel->set_collection(NULL); |
- panels_.remove(panel); |
-} |
- |
-void DetachedPanelCollection::CloseAll() { |
- // Make a copy as closing panels can modify the iterator. |
- Panels panels_copy = panels_; |
- |
- for (Panels::const_iterator iter = panels_copy.begin(); |
- iter != panels_copy.end(); ++iter) |
- (*iter)->Close(); |
-} |
- |
-void DetachedPanelCollection::OnPanelAttentionStateChanged(Panel* panel) { |
- DCHECK_EQ(this, panel->collection()); |
- // Nothing to do. |
-} |
- |
-void DetachedPanelCollection::OnPanelTitlebarClicked(Panel* panel, |
- panel::ClickModifier modifier) { |
- DCHECK_EQ(this, panel->collection()); |
- // Click on detached panel titlebars does not do anything. |
-} |
- |
-void DetachedPanelCollection::ResizePanelWindow( |
- Panel* panel, |
- const gfx::Size& preferred_window_size) { |
- // We should get this call only of we have the panel. |
- DCHECK_EQ(this, panel->collection()); |
- |
- // Make sure the new size does not violate panel's size restrictions. |
- gfx::Size new_size(preferred_window_size.width(), |
- preferred_window_size.height()); |
- new_size = panel->ClampSize(new_size); |
- |
- // Update restored size. |
- if (new_size != panel->full_size()) |
- panel->set_full_size(new_size); |
- |
- gfx::Rect bounds = panel->GetBounds(); |
- |
- // When we resize a detached panel, its origin does not move. |
- // So we set height and width only. |
- bounds.set_size(new_size); |
- |
- if (bounds != panel->GetBounds()) |
- panel->SetPanelBounds(bounds); |
-} |
- |
-void DetachedPanelCollection::ActivatePanel(Panel* panel) { |
- DCHECK_EQ(this, panel->collection()); |
- // No change in panel's appearance. |
-} |
- |
-void DetachedPanelCollection::MinimizePanel(Panel* panel) { |
- DCHECK_EQ(this, panel->collection()); |
- // Detached panels do not minimize. However, extensions may call this API |
- // regardless of which collection the panel is in. So we just quietly return. |
-} |
- |
-void DetachedPanelCollection::RestorePanel(Panel* panel) { |
- DCHECK_EQ(this, panel->collection()); |
- // Detached panels do not minimize. However, extensions may call this API |
- // regardless of which collection the panel is in. So we just quietly return. |
-} |
- |
-void DetachedPanelCollection::OnMinimizeButtonClicked( |
- Panel* panel, panel::ClickModifier modifier) { |
- panel->MinimizeBySystem(); |
-} |
- |
-void DetachedPanelCollection::OnRestoreButtonClicked( |
- Panel* panel, panel::ClickModifier modifier) { |
- // No restore button is present. |
- NOTREACHED(); |
-} |
- |
-bool DetachedPanelCollection::CanShowMinimizeButton(const Panel* panel) const { |
- // We also show minimize button for detached panel when stacking mode is |
- // enabled. |
- return PanelManager::IsPanelStackingEnabled() && |
- PanelManager::CanUseSystemMinimize(); |
-} |
- |
-bool DetachedPanelCollection::CanShowRestoreButton(const Panel* panel) const { |
- // The minimize button is used for system minimize and thus there is no |
- // restore button. |
- return false; |
-} |
- |
-bool DetachedPanelCollection::IsPanelMinimized(const Panel* panel) const { |
- DCHECK_EQ(this, panel->collection()); |
- // Detached panels do not minimize. |
- return false; |
-} |
- |
-bool DetachedPanelCollection::UsesAlwaysOnTopPanels() const { |
- return false; |
-} |
- |
-void DetachedPanelCollection::SavePanelPlacement(Panel* panel) { |
- DCHECK(!saved_panel_placement_.panel); |
- saved_panel_placement_.panel = panel; |
- saved_panel_placement_.position = panel->GetBounds().origin(); |
-} |
- |
-void DetachedPanelCollection::RestorePanelToSavedPlacement() { |
- DCHECK(saved_panel_placement_.panel); |
- |
- gfx::Rect new_bounds(saved_panel_placement_.panel->GetBounds()); |
- new_bounds.set_origin(saved_panel_placement_.position); |
- saved_panel_placement_.panel->SetPanelBounds(new_bounds); |
- |
- DiscardSavedPanelPlacement(); |
-} |
- |
-void DetachedPanelCollection::DiscardSavedPanelPlacement() { |
- DCHECK(saved_panel_placement_.panel); |
- saved_panel_placement_.panel = NULL; |
-} |
- |
-panel::Resizability DetachedPanelCollection::GetPanelResizability( |
- const Panel* panel) const { |
- return panel::RESIZABLE_ALL; |
-} |
- |
-void DetachedPanelCollection::OnPanelResizedByMouse( |
- Panel* panel, const gfx::Rect& new_bounds) { |
- DCHECK_EQ(this, panel->collection()); |
- panel->set_full_size(new_bounds.size()); |
-} |
- |
-bool DetachedPanelCollection::HasPanel(Panel* panel) const { |
- return std::find(panels_.begin(), panels_.end(), panel) != panels_.end(); |
-} |
- |
-void DetachedPanelCollection::SortPanels(PanelsComparer comparer) { |
- panels_.sort(comparer); |
-} |
- |
-void DetachedPanelCollection::UpdatePanelOnCollectionChange(Panel* panel) { |
- panel->set_attention_mode( |
- static_cast<Panel::AttentionMode>(Panel::USE_PANEL_ATTENTION | |
- Panel::USE_SYSTEM_ATTENTION)); |
- panel->ShowShadow(true); |
- panel->UpdateMinimizeRestoreButtonVisibility(); |
- panel->SetWindowCornerStyle(panel::ALL_ROUNDED); |
-} |
- |
-void DetachedPanelCollection::OnPanelExpansionStateChanged(Panel* panel) { |
- // This should only be reached when a minimized stacked panel is dragged out |
- // of the stack to become detached. For this case, the panel needs to be |
- // restored. |
- DCHECK_EQ(Panel::EXPANDED, panel->expansion_state()); |
- |
- gfx::Rect bounds = panel->GetBounds(); |
- bounds.set_height(panel->full_size().height()); |
- panel->SetPanelBounds(bounds); |
-} |
- |
-void DetachedPanelCollection::OnPanelActiveStateChanged(Panel* panel) { |
-} |
- |
-gfx::Rect DetachedPanelCollection::GetInitialPanelBounds( |
- const gfx::Rect& requested_bounds) const { |
- if (!PanelManager::IsPanelStackingEnabled()) |
- return requested_bounds; |
- |
- gfx::Rect work_area = panel_manager_->display_settings_provider()-> |
- GetWorkAreaMatching(requested_bounds); |
- gfx::Rect initial_bounds = requested_bounds; |
- initial_bounds.set_y( |
- work_area.y() + kDetachedPanelStartingYPositionOnStackingEnabled); |
- return initial_bounds; |
-} |
- |
-gfx::Point DetachedPanelCollection::GetDefaultPanelOrigin() { |
- if (!default_panel_origin_.x() && !default_panel_origin_.y()) { |
- gfx::Rect work_area = |
- panel_manager_->display_settings_provider()->GetPrimaryWorkArea(); |
- default_panel_origin_.SetPoint(kPanelTilePixels + work_area.x(), |
- kPanelTilePixels + work_area.y()); |
- } |
- return default_panel_origin_; |
-} |
- |
-void DetachedPanelCollection::ComputeNextDefaultPanelOrigin() { |
- default_panel_origin_.Offset(kPanelTilePixels, kPanelTilePixels); |
- gfx::Rect work_area = |
- panel_manager_->display_settings_provider()->GetPrimaryWorkArea(); |
- if (!work_area.Contains(default_panel_origin_)) { |
- default_panel_origin_.SetPoint(kPanelTilePixels + work_area.x(), |
- kPanelTilePixels + work_area.y()); |
- } |
-} |