diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-16 03:01:31 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-16 03:01:31 +0000 |
commit | 16f2d3fc202e6950aa1bd145d9f71106fa779e49 (patch) | |
tree | f45e74cb6c5cf8f288c300d6c7b9fe530f627d93 /ash/launcher | |
parent | c39c9229daf3995a6d1cec55ae1f89021fd4eb66 (diff) | |
download | chromium_src-16f2d3fc202e6950aa1bd145d9f71106fa779e49.zip chromium_src-16f2d3fc202e6950aa1bd145d9f71106fa779e49.tar.gz chromium_src-16f2d3fc202e6950aa1bd145d9f71106fa779e49.tar.bz2 |
Refactors launcher related ShellDelegate methods into standalone
class.
BUG=none
TEST=none
R=ben@chromium.org
Review URL: http://codereview.chromium.org/9403002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122227 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/launcher')
-rw-r--r-- | ash/launcher/launcher.cc | 4 | ||||
-rw-r--r-- | ash/launcher/launcher.h | 5 | ||||
-rw-r--r-- | ash/launcher/launcher_delegate.h | 38 | ||||
-rw-r--r-- | ash/launcher/launcher_view.cc | 34 | ||||
-rw-r--r-- | ash/launcher/launcher_view.h | 6 | ||||
-rw-r--r-- | ash/launcher/launcher_window_cycler.cc | 6 | ||||
-rw-r--r-- | ash/launcher/launcher_window_cycler.h | 8 |
7 files changed, 75 insertions, 26 deletions
diff --git a/ash/launcher/launcher.cc b/ash/launcher/launcher.cc index 4908aa1..891b789 100644 --- a/ash/launcher/launcher.cc +++ b/ash/launcher/launcher.cc @@ -4,6 +4,7 @@ #include "ash/launcher/launcher.h" +#include "ash/launcher/launcher_delegate.h" #include "ash/launcher/launcher_model.h" #include "ash/launcher/launcher_view.h" #include "ash/shell.h" @@ -106,6 +107,7 @@ Launcher::Launcher(aura::Window* window_container) window_container_(window_container), delegate_view_(NULL) { model_.reset(new LauncherModel); + delegate_.reset(Shell::GetInstance()->delegate()->CreateLauncherDelegate()); widget_.reset(new views::Widget); views::Widget::InitParams params( @@ -116,7 +118,7 @@ Launcher::Launcher(aura::Window* window_container) params.parent = Shell::GetInstance()->GetContainer( ash::internal::kShellWindowId_LauncherContainer); internal::LauncherView* launcher_view = - new internal::LauncherView(model_.get()); + new internal::LauncherView(model_.get(), delegate_.get()); launcher_view->Init(); delegate_view_ = new DelegateView; delegate_view_->AddChildView(launcher_view); diff --git a/ash/launcher/launcher.h b/ash/launcher/launcher.h index 612ebb2..f910367 100644 --- a/ash/launcher/launcher.h +++ b/ash/launcher/launcher.h @@ -20,6 +20,7 @@ class Widget; namespace ash { +class LauncherDelegate; class LauncherModel; class ASH_EXPORT Launcher { @@ -31,6 +32,8 @@ class ASH_EXPORT Launcher { void SetStatusWidth(int width); int GetStatusWidth(); + LauncherDelegate* delegate() { return delegate_.get(); } + LauncherModel* model() { return model_.get(); } views::Widget* widget() { return widget_.get(); } @@ -54,6 +57,8 @@ class ASH_EXPORT Launcher { // Contents view of the widget. Houses the LauncherView. DelegateView* delegate_view_; + scoped_ptr<LauncherDelegate> delegate_; + DISALLOW_COPY_AND_ASSIGN(Launcher); }; diff --git a/ash/launcher/launcher_delegate.h b/ash/launcher/launcher_delegate.h new file mode 100644 index 0000000..5dbb033 --- /dev/null +++ b/ash/launcher/launcher_delegate.h @@ -0,0 +1,38 @@ +// 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. + +#ifndef ASH_LAUNCHER_LAUNCHER_DELEGATE_H_ +#define ASH_LAUNCHER_LAUNCHER_DELEGATE_H_ +#pragma once + +#include "ash/ash_export.h" +#include "base/string16.h" + +namespace ash { + +struct LauncherItem; + +// Delegate for the Launcher. +class ASH_EXPORT LauncherDelegate { + public: + virtual ~LauncherDelegate() {} + + // Invoked when the user clicks on button in the launcher to create a new + // window. + virtual void CreateNewWindow() = 0; + + // Invoked when the user clicks on a window entry in the launcher. + virtual void ItemClicked(const LauncherItem& item) = 0; + + // Returns the resource id of the image to show on the browser shortcut + // button. + virtual int GetBrowserShortcutResourceId() = 0; + + // Returns the title to display for the specified launcher item. + virtual string16 GetTitle(const LauncherItem& item) = 0; +}; + +} // namespace ash + +#endif // ASH_LAUNCHER_LAUNCHER_DELEGATE_H_ diff --git a/ash/launcher/launcher_view.cc b/ash/launcher/launcher_view.cc index ec93a28..b95fcd8 100644 --- a/ash/launcher/launcher_view.cc +++ b/ash/launcher/launcher_view.cc @@ -5,6 +5,7 @@ #include "ash/launcher/launcher_view.h" #include "ash/launcher/app_launcher_button.h" +#include "ash/launcher/launcher_delegate.h" #include "ash/launcher/launcher_model.h" #include "ash/launcher/launcher_window_cycler.h" #include "ash/launcher/tabbed_launcher_button.h" @@ -183,8 +184,9 @@ class LauncherView::StartFadeAnimationDelegate : DISALLOW_COPY_AND_ASSIGN(StartFadeAnimationDelegate); }; -LauncherView::LauncherView(LauncherModel* model) +LauncherView::LauncherView(LauncherModel* model, LauncherDelegate* delegate) : model_(model), + delegate_(delegate), view_model_(new ViewModel), overflow_button_(NULL), dragging_(NULL), @@ -328,14 +330,13 @@ views::View* LauncherView::CreateViewForItem(const LauncherItem& item) { case TYPE_BROWSER_SHORTCUT: { ResourceBundle& rb = ResourceBundle::GetSharedInstance(); views::ImageButton* button = new AppLauncherButton(this, this); - ShellDelegate* delegate = Shell::GetInstance()->delegate(); - int image_id = delegate ? - delegate->GetBrowserShortcutResourceId() : + int image_id = delegate_ ? + delegate_->GetBrowserShortcutResourceId() : IDR_AURA_LAUNCHER_BROWSER_SHORTCUT; button->SetImage(views::CustomButton::BS_NORMAL, rb.GetImageNamed(image_id).ToSkBitmap()); view = button; - cycler_.reset(new LauncherWindowCycler); + cycler_.reset(new LauncherWindowCycler(delegate_)); break; } @@ -418,8 +419,7 @@ void LauncherView::GetOverflowItems(std::vector<LauncherItem>* items) { void LauncherView::ShowOverflowMenu() { #if !defined(OS_MACOSX) - ShellDelegate* delegate = Shell::GetInstance()->delegate(); - if (!delegate) + if (!delegate_) return; std::vector<LauncherItem> items; @@ -429,10 +429,8 @@ void LauncherView::ShowOverflowMenu() { MenuDelegateImpl menu_delegate; ui::SimpleMenuModel menu_model(&menu_delegate); - for (size_t i = 0; i < items.size(); ++i) { - menu_model.AddItem(static_cast<int>(i), - delegate->GetLauncherItemTitle(items[i])); - } + for (size_t i = 0; i < items.size(); ++i) + menu_model.AddItem(static_cast<int>(i), delegate_->GetTitle(items[i])); views::MenuModelAdapter menu_adapter(&menu_model); overflow_menu_runner_.reset(new views::MenuRunner(menu_adapter.CreateMenu())); gfx::Rect bounds(overflow_button_->size()); @@ -448,9 +446,7 @@ void LauncherView::ShowOverflowMenu() { LauncherItems::const_iterator window_iter = model_->ItemByID(activated_id); if (window_iter == model_->items().end()) return; // Window was deleted while menu was up. - if (!delegate) - return; - delegate->LauncherItemClicked(*window_iter); + delegate_->ItemClicked(*window_iter); #endif // !defined(OS_MACOSX) } @@ -618,8 +614,7 @@ void LauncherView::ButtonPressed(views::Button* sender, if (sender == overflow_button_) ShowOverflowMenu(); - ShellDelegate* delegate = Shell::GetInstance()->delegate(); - if (!delegate) + if (!delegate_) return; int view_index = view_model_->GetIndexOfView(sender); // May be -1 while in the process of animating closed. @@ -629,7 +624,7 @@ void LauncherView::ButtonPressed(views::Button* sender, switch (model_->items()[view_index].type) { case TYPE_TABBED: case TYPE_APP: - delegate->LauncherItemClicked(model_->items()[view_index]); + delegate_->ItemClicked(model_->items()[view_index]); break; case TYPE_APP_LIST: @@ -646,8 +641,7 @@ void LauncherView::ButtonPressed(views::Button* sender, } string16 LauncherView::GetAccessibleName(views::View* view) { - ShellDelegate* delegate = Shell::GetInstance()->delegate(); - if (!delegate) + if (!delegate_) return string16(); int view_index = view_model_->GetIndexOfView(view); // May be -1 while in the process of animating closed. @@ -657,7 +651,7 @@ string16 LauncherView::GetAccessibleName(views::View* view) { switch (model_->items()[view_index].type) { case TYPE_TABBED: case TYPE_APP: - return delegate->GetLauncherItemTitle(model_->items()[view_index]); + return delegate_->GetTitle(model_->items()[view_index]); case TYPE_APP_LIST: return l10n_util::GetStringUTF16(IDS_AURA_APP_LIST_TITLE); diff --git a/ash/launcher/launcher_view.h b/ash/launcher/launcher_view.h index f43e369..f4173b5 100644 --- a/ash/launcher/launcher_view.h +++ b/ash/launcher/launcher_view.h @@ -21,6 +21,7 @@ class MenuRunner; namespace ash { +class LauncherDelegate; struct LauncherItem; class LauncherModel; class LauncherWindowCycler; @@ -33,7 +34,7 @@ class LauncherView : public views::WidgetDelegateView, public views::ButtonListener, public LauncherButtonHost { public: - explicit LauncherView(LauncherModel* model); + LauncherView(LauncherModel* model, LauncherDelegate* delegate); virtual ~LauncherView(); void Init(); @@ -118,6 +119,9 @@ class LauncherView : public views::WidgetDelegateView, // The model; owned by Launcher. LauncherModel* model_; + // Delegate; owned by Launcher. + LauncherDelegate* delegate_; + // Used to manage the set of active launcher buttons. There is a view per // item in |model_|. scoped_ptr<ViewModel> view_model_; diff --git a/ash/launcher/launcher_window_cycler.cc b/ash/launcher/launcher_window_cycler.cc index c689c4e..75f22ac 100644 --- a/ash/launcher/launcher_window_cycler.cc +++ b/ash/launcher/launcher_window_cycler.cc @@ -4,6 +4,7 @@ #include "ash/launcher/launcher_window_cycler.h" +#include "ash/launcher/launcher_delegate.h" #include "ash/shell.h" #include "ash/shell_delegate.h" #include "ash/wm/window_cycle_controller.h" @@ -11,7 +12,8 @@ namespace ash { -LauncherWindowCycler::LauncherWindowCycler() { +LauncherWindowCycler::LauncherWindowCycler(LauncherDelegate* delegate) + : delegate_(delegate) { } LauncherWindowCycler::~LauncherWindowCycler() { @@ -27,7 +29,7 @@ void LauncherWindowCycler::Cycle() { ShellDelegate::SOURCE_LAUNCHER, ShellDelegate::ORDER_MRU))); } if (windows_->empty()) - ash::Shell::GetInstance()->delegate()->CreateNewWindow(); + delegate_->CreateNewWindow(); else windows_->Step(WindowCycleList::FORWARD); } diff --git a/ash/launcher/launcher_window_cycler.h b/ash/launcher/launcher_window_cycler.h index 4ab3077..6a148e1 100644 --- a/ash/launcher/launcher_window_cycler.h +++ b/ash/launcher/launcher_window_cycler.h @@ -12,15 +12,16 @@ namespace ash { +class LauncherDelegate; class WindowCycleList; // LauncherWindowCycler is used when the user clicks the browser shortcut button // in the launcher. If there are no windows to cycle through a new one is -// created (by way of ShellDelegate::CreateNewWindow), otherwise it cycles +// created (by way of LauncherDelegate::CreateNewWindow), otherwise it cycles // through the existing windows until Reset() is invoked. class ASH_EXPORT LauncherWindowCycler { public: - LauncherWindowCycler(); + explicit LauncherWindowCycler(LauncherDelegate* delegate); ~LauncherWindowCycler(); // Invoked each time the button is pressed on the browser shortcut. If not @@ -35,6 +36,9 @@ class ASH_EXPORT LauncherWindowCycler { private: scoped_ptr<WindowCycleList> windows_; + // Owned by Launcher. + LauncherDelegate* delegate_; + DISALLOW_COPY_AND_ASSIGN(LauncherWindowCycler); }; |