summaryrefslogtreecommitdiffstats
path: root/ash
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
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')
-rw-r--r--ash/ash.gyp1
-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
-rw-r--r--ash/shell/shell_main.cc53
-rw-r--r--ash/shell_delegate.h23
-rw-r--r--ash/test/test_shell_delegate.cc14
-rw-r--r--ash/test/test_shell_delegate.h5
12 files changed, 118 insertions, 79 deletions
diff --git a/ash/ash.gyp b/ash/ash.gyp
index 05d5fe5..2202d08 100644
--- a/ash/ash.gyp
+++ b/ash/ash.gyp
@@ -86,6 +86,7 @@
'launcher/app_launcher_button.h',
'launcher/launcher.cc',
'launcher/launcher.h',
+ 'launcher/launcher_delegate.h',
'launcher/launcher_model.cc',
'launcher/launcher_model.h',
'launcher/launcher_model_observer.h',
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);
};
diff --git a/ash/shell/shell_main.cc b/ash/shell/shell_main.cc
index e6a1efa..4dc19b3 100644
--- a/ash/shell/shell_main.cc
+++ b/ash/shell/shell_main.cc
@@ -5,6 +5,7 @@
#include <map>
#include "ash/launcher/launcher.h"
+#include "ash/launcher/launcher_delegate.h"
#include "ash/launcher/launcher_model.h"
#include "ash/launcher/launcher_types.h"
#include "ash/shell.h"
@@ -110,12 +111,13 @@ class WindowWatcher : public aura::WindowObserver {
DISALLOW_COPY_AND_ASSIGN(WindowWatcher);
};
-class ShellDelegateImpl : public ash::ShellDelegate {
+class LauncherDelegateImpl : public ash::LauncherDelegate {
public:
- ShellDelegateImpl() {}
-
- void set_watcher(WindowWatcher* watcher) { watcher_ = watcher; }
+ explicit LauncherDelegateImpl(WindowWatcher* watcher)
+ : watcher_(watcher) {
+ }
+ // LauncherDelegate overrides:
virtual void CreateNewWindow() OVERRIDE {
ash::shell::ToplevelWindow::CreateParams create_params;
create_params.can_resize = true;
@@ -123,6 +125,33 @@ class ShellDelegateImpl : public ash::ShellDelegate {
ash::shell::ToplevelWindow::CreateToplevelWindow(create_params);
}
+ virtual void ItemClicked(const ash::LauncherItem& item) OVERRIDE {
+ aura::Window* window = watcher_->GetWindowByID(item.id);
+ window->Show();
+ ash::ActivateWindow(window);
+ }
+
+ virtual int GetBrowserShortcutResourceId() OVERRIDE {
+ return IDR_AURA_LAUNCHER_BROWSER_SHORTCUT;
+ }
+
+ virtual string16 GetTitle(const ash::LauncherItem& item) OVERRIDE {
+ return watcher_->GetWindowByID(item.id)->title();
+ }
+
+ private:
+ // Used to update Launcher. Owned by main.
+ WindowWatcher* watcher_;
+
+ DISALLOW_COPY_AND_ASSIGN(LauncherDelegateImpl);
+};
+
+class ShellDelegateImpl : public ash::ShellDelegate {
+ public:
+ ShellDelegateImpl() {}
+
+ void set_watcher(WindowWatcher* watcher) { watcher_ = watcher; }
+
virtual views::Widget* CreateStatusArea() OVERRIDE {
return ash::internal::CreateStatusArea();
}
@@ -156,20 +185,8 @@ class ShellDelegateImpl : public ash::ShellDelegate {
return windows;
}
- virtual void LauncherItemClicked(
- const ash::LauncherItem& item) OVERRIDE {
- aura::Window* window = watcher_->GetWindowByID(item.id);
- window->Show();
- ash::ActivateWindow(window);
- }
-
- virtual int GetBrowserShortcutResourceId() OVERRIDE {
- return IDR_AURA_LAUNCHER_BROWSER_SHORTCUT;
- }
-
- virtual string16 GetLauncherItemTitle(
- const ash::LauncherItem& item) OVERRIDE {
- return watcher_->GetWindowByID(item.id)->title();
+ virtual ash::LauncherDelegate* CreateLauncherDelegate() OVERRIDE {
+ return new LauncherDelegateImpl(watcher_);
}
private:
diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h
index c574cd1..f268346 100644
--- a/ash/shell_delegate.h
+++ b/ash/shell_delegate.h
@@ -16,10 +16,6 @@ namespace aura {
class Window;
}
-namespace gfx {
-class Rect;
-}
-
namespace views {
class Widget;
}
@@ -28,6 +24,7 @@ namespace ash {
class AppListModel;
class AppListViewDelegate;
+class LauncherDelegate;
struct LauncherItem;
// Delegate of the Shell.
@@ -77,21 +74,9 @@ class ASH_EXPORT ShellDelegate {
CycleSource source,
CycleOrder order) const = 0;
- // Launcher related methods --------------------------------------------------
-
- // 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 LauncherItemClicked(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 GetLauncherItemTitle(const LauncherItem& item) = 0;
+ // Creates a new LauncherDelegate. Shell takes ownership of the returned
+ // value.
+ virtual LauncherDelegate* CreateLauncherDelegate() = 0;
};
} // namespace ash
diff --git a/ash/test/test_shell_delegate.cc b/ash/test/test_shell_delegate.cc
index 547becd..c78cc20 100644
--- a/ash/test/test_shell_delegate.cc
+++ b/ash/test/test_shell_delegate.cc
@@ -54,18 +54,8 @@ std::vector<aura::Window*> TestShellDelegate::GetCycleWindowList(
return windows;
}
-void TestShellDelegate::CreateNewWindow() {
-}
-
-void TestShellDelegate::LauncherItemClicked(const LauncherItem& item) {
-}
-
-int TestShellDelegate::GetBrowserShortcutResourceId() {
- return IDR_AURA_LAUNCHER_BROWSER_SHORTCUT;
-}
-
-string16 TestShellDelegate::GetLauncherItemTitle(const LauncherItem& item) {
- return string16();
+LauncherDelegate* TestShellDelegate::CreateLauncherDelegate() {
+ return NULL;
}
} // namespace test
diff --git a/ash/test/test_shell_delegate.h b/ash/test/test_shell_delegate.h
index cc9ef95..8474be1 100644
--- a/ash/test/test_shell_delegate.h
+++ b/ash/test/test_shell_delegate.h
@@ -28,10 +28,7 @@ class TestShellDelegate : public ShellDelegate {
virtual std::vector<aura::Window*> GetCycleWindowList(
CycleSource source,
CycleOrder order) const OVERRIDE;
- virtual void CreateNewWindow() OVERRIDE;
- virtual void LauncherItemClicked(const LauncherItem& item) OVERRIDE;
- virtual int GetBrowserShortcutResourceId() OVERRIDE;
- virtual string16 GetLauncherItemTitle(const LauncherItem& item) OVERRIDE;
+ virtual LauncherDelegate* CreateLauncherDelegate() OVERRIDE;
};
} // namespace test