summaryrefslogtreecommitdiffstats
path: root/ash/launcher
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-16 03:01:31 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-16 03:01:31 +0000
commit16f2d3fc202e6950aa1bd145d9f71106fa779e49 (patch)
treef45e74cb6c5cf8f288c300d6c7b9fe530f627d93 /ash/launcher
parentc39c9229daf3995a6d1cec55ae1f89021fd4eb66 (diff)
downloadchromium_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.cc4
-rw-r--r--ash/launcher/launcher.h5
-rw-r--r--ash/launcher/launcher_delegate.h38
-rw-r--r--ash/launcher/launcher_view.cc34
-rw-r--r--ash/launcher/launcher_view.h6
-rw-r--r--ash/launcher/launcher_window_cycler.cc6
-rw-r--r--ash/launcher/launcher_window_cycler.h8
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);
};