diff options
author | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-21 23:45:59 +0000 |
---|---|---|
committer | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-21 23:45:59 +0000 |
commit | bcf0eeac7fdeb911b28513d6509b18960861b779 (patch) | |
tree | 31e06725cc9f03d45d219f6907b396df0bd79235 /chrome/browser/ui/panels/panel_manager.cc | |
parent | 85ece055a9c048a34a63670580b3bc89543f77e4 (diff) | |
download | chromium_src-bcf0eeac7fdeb911b28513d6509b18960861b779.zip chromium_src-bcf0eeac7fdeb911b28513d6509b18960861b779.tar.gz chromium_src-bcf0eeac7fdeb911b28513d6509b18960861b779.tar.bz2 |
Refactor intra-strip panel drags by introducing PanelDragController.
Changes:
1) Add PanelDragController that is created and owned by PanelManager. Currently it only contains the logic for intra-strip drags.
2) Add dragging related base methods to PanelStrip.
3) PanelManager dragging methods will now call PanelDragController and then delegate to PanelStrip methods.
4) Add delta_y parameter to Drag method.
5) Remove is_draggble from Panel and replace it with PanelStrip::CanDragPanel.
BUG=none
TEST=new tests to cover detached panels
Review URL: http://codereview.chromium.org/9403035
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122914 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/panels/panel_manager.cc')
-rw-r--r-- | chrome/browser/ui/panels/panel_manager.cc | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/chrome/browser/ui/panels/panel_manager.cc b/chrome/browser/ui/panels/panel_manager.cc index 4b4848b..84f430f 100644 --- a/chrome/browser/ui/panels/panel_manager.cc +++ b/chrome/browser/ui/panels/panel_manager.cc @@ -10,8 +10,10 @@ #include "chrome/browser/fullscreen.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/panels/detached_panel_strip.h" #include "chrome/browser/ui/panels/docked_panel_strip.h" #include "chrome/browser/ui/panels/overflow_panel_strip.h" +#include "chrome/browser/ui/panels/panel_drag_controller.h" #include "chrome/browser/ui/panels/panel_mouse_watcher.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/chrome_switches.h" @@ -63,8 +65,10 @@ PanelManager::PanelManager() : panel_mouse_watcher_(PanelMouseWatcher::Create()), auto_sizing_enabled_(true), is_full_screen_(false) { + detached_strip_.reset(new DetachedPanelStrip(this)); docked_strip_.reset(new DockedPanelStrip(this)); overflow_strip_.reset(new OverflowPanelStrip(this)); + drag_controller_.reset(new PanelDragController()); auto_hiding_desktop_bar_ = AutoHidingDesktopBar::Create(this); OnDisplayChanged(); } @@ -160,15 +164,15 @@ void PanelManager::OnPanelRemoved(Panel* panel) { } void PanelManager::StartDragging(Panel* panel) { - docked_strip_->StartDragging(panel); + drag_controller_->StartDragging(panel); } -void PanelManager::Drag(int delta_x) { - docked_strip_->Drag(delta_x); +void PanelManager::Drag(int delta_x, int delta_y) { + drag_controller_->Drag(delta_x, delta_y); } void PanelManager::EndDragging(bool cancelled) { - docked_strip_->EndDragging(cancelled); + drag_controller_->EndDragging(cancelled); } void PanelManager::OnPanelExpansionStateChanged(Panel* panel) { @@ -244,16 +248,25 @@ void PanelManager::OnAutoHidingDesktopBarVisibilityChanged( } void PanelManager::CloseAll() { + DCHECK(!drag_controller_->IsDragging()); + + detached_strip_->CloseAll(); docked_strip_->CloseAll(); overflow_strip_->CloseAll(); } int PanelManager::num_panels() const { - return docked_strip_->num_panels() + overflow_strip_->num_panels(); + return detached_strip_->num_panels() + + docked_strip_->num_panels() + + overflow_strip_->num_panels(); } std::vector<Panel*> PanelManager::panels() const { std::vector<Panel*> panels; + for (DetachedPanelStrip::Panels::const_iterator iter = + detached_strip_->panels().begin(); + iter != detached_strip_->panels().end(); ++iter) + panels.push_back(*iter); for (DockedPanelStrip::Panels::const_iterator iter = docked_strip_->panels().begin(); iter != docked_strip_->panels().end(); ++iter) |