Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: ui/app_list/views/app_list_menu_views.cc

Issue 20656002: Add profile selector menu to app list. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase, remove dead code in app_list_menu_views, add ui assets Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/app_list/views/app_list_menu_views.h" 5 #include "ui/app_list/views/app_list_menu_views.h"
6 6
7 #include "grit/ui_resources.h" 7 #include "grit/ui_resources.h"
8 #include "ui/app_list/app_list_model.h" 8 #include "ui/app_list/app_list_model.h"
9 #include "ui/app_list/app_list_view_delegate.h" 9 #include "ui/app_list/app_list_view_delegate.h"
10 #include "ui/base/resource/resource_bundle.h" 10 #include "ui/base/resource/resource_bundle.h"
11 #include "ui/views/controls/button/menu_button.h" 11 #include "ui/views/controls/button/menu_button.h"
12 #include "ui/views/controls/image_view.h" 12 #include "ui/views/controls/image_view.h"
13 #include "ui/views/controls/label.h" 13 #include "ui/views/controls/label.h"
14 #include "ui/views/controls/menu/menu_config.h" 14 #include "ui/views/controls/menu/menu_config.h"
15 #include "ui/views/controls/menu/menu_item_view.h" 15 #include "ui/views/controls/menu/menu_item_view.h"
16 #include "ui/views/controls/menu/submenu_view.h" 16 #include "ui/views/controls/menu/submenu_view.h"
17 #include "ui/views/layout/grid_layout.h" 17 #include "ui/views/layout/grid_layout.h"
18 18
19 using views::MenuItemView; 19 using views::MenuItemView;
20 20
21 namespace app_list { 21 namespace app_list {
22 22
23 namespace {
24
25 class CurrentUserView : public views::View {
koz (OOO until 15th September) 2013/09/09 22:58:07 Nice!
26 public:
27 CurrentUserView(const base::string16& user_name,
28 const base::string16& user_email,
29 const gfx::ImageSkia& icon) {
30 const views::MenuConfig& menu_config = views::MenuConfig::instance(NULL);
31 views::GridLayout* layout = new views::GridLayout(this);
32 int item_right_padding = menu_config.label_to_arrow_padding +
33 menu_config.arrow_width +
34 menu_config.arrow_to_edge_padding;
35
36 layout->SetInsets(0, 0, 0, item_right_padding);
37 SetLayoutManager(layout);
38
39 views::ColumnSet* columns = layout->AddColumnSet(0);
40 columns->AddColumn(views::GridLayout::FILL,
41 views::GridLayout::FILL,
42 0,
43 views::GridLayout::USE_PREF,
44 0,
45 menu_config.check_width + menu_config.item_left_margin);
46 columns->AddColumn(views::GridLayout::FILL,
47 views::GridLayout::FILL,
48 1,
49 views::GridLayout::USE_PREF,
50 0,
51 0);
52
53 layout->StartRow(0, 0);
54 views::ImageView* image_view = new views::ImageView();
55 image_view->SetImage(icon);
56 layout->AddView(image_view);
57
58 views::Label* user_name_view = new views::Label(user_name);
59 user_name_view->SetHorizontalAlignment(gfx::ALIGN_LEFT);
60 layout->AddView(user_name_view);
61
62 layout->StartRow(0, 0);
63 views::Label* user_email_view = new views::Label(user_email);
64 user_email_view->SetHorizontalAlignment(gfx::ALIGN_LEFT);
65 user_email_view->SetEnabled(false);
66 layout->SkipColumns(1);
67 layout->AddView(user_email_view);
68 }
69
70 private:
71 DISALLOW_COPY_AND_ASSIGN(CurrentUserView);
72 };
73
74 class CurrentUserMenuItem : public MenuItemView {
75 public:
76 CurrentUserMenuItem(MenuItemView* parent,
77 int id,
78 const base::string16& user_name,
79 const base::string16& user_email,
80 const gfx::ImageSkia& icon)
81 : MenuItemView(parent, id, MenuItemView::NORMAL) {
82 AddChildView(new CurrentUserView(user_name, user_email, icon));
83 }
84
85 private:
86 DISALLOW_COPY_AND_ASSIGN(CurrentUserMenuItem);
87 };
88
89 class AppListMenuModelAdapter : public views::MenuModelAdapter {
90 public:
91 AppListMenuModelAdapter(ui::MenuModel* menu_model,
92 AppListViewDelegate* delegate,
93 AppListModel* app_list_model)
94 : views::MenuModelAdapter(menu_model),
95 delegate_(delegate),
96 app_list_model_(app_list_model) {}
97 virtual ~AppListMenuModelAdapter() {}
98
99 // Overridden from views::MenuModelAdapter:
100 virtual MenuItemView* AppendMenuItem(MenuItemView* menu,
101 ui::MenuModel* model,
102 int index) OVERRIDE {
103 if (!delegate_)
104 return NULL;
105
106 int id = model->GetCommandIdAt(index);
107 if (id != AppListMenu::CURRENT_USER)
108 return MenuModelAdapter::AppendMenuItem(menu, model, index);
109
110 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
111 MenuItemView* item = new CurrentUserMenuItem(
112 menu,
113 id,
114 app_list_model_->current_user_name(),
115 app_list_model_->current_user_email(),
116 *rb.GetImageSkiaNamed(IDR_APP_LIST_USER_INDICATOR));
117 menu->CreateSubmenu();
118 menu->GetSubmenu()->AddChildViewAt(item, index);
119 return item;
120 }
121
122 private:
123 AppListViewDelegate* delegate_;
124 AppListModel* app_list_model_; // Weak. Owned by AppListView.
125
126 DISALLOW_COPY_AND_ASSIGN(AppListMenuModelAdapter);
127 };
128
129 } // namespace
130
131 AppListMenuViews::AppListMenuViews(AppListViewDelegate* delegate, 23 AppListMenuViews::AppListMenuViews(AppListViewDelegate* delegate,
132 AppListModel* app_list_model) 24 AppListModel* app_list_model)
133 : AppListMenu(delegate) { 25 : AppListMenu(delegate, app_list_model->users()) {
134 menu_delegate_.reset(new AppListMenuModelAdapter(menu_model(), 26 menu_delegate_.reset(new views::MenuModelAdapter(menu_model()));
135 delegate,
136 app_list_model));
137 menu_ = new MenuItemView(menu_delegate_.get()); 27 menu_ = new MenuItemView(menu_delegate_.get());
138 menu_runner_.reset(new views::MenuRunner(menu_)); 28 menu_runner_.reset(new views::MenuRunner(menu_));
139 menu_delegate_->BuildMenu(menu_); 29 menu_delegate_->BuildMenu(menu_);
140 } 30 }
141 31
142 AppListMenuViews::~AppListMenuViews() {} 32 AppListMenuViews::~AppListMenuViews() {}
143 33
144 void AppListMenuViews::RunMenuAt(views::MenuButton* button, 34 void AppListMenuViews::RunMenuAt(views::MenuButton* button,
145 const gfx::Point& point) { 35 const gfx::Point& point) {
146 ignore_result(menu_runner_->RunMenuAt(button->GetWidget(), button, 36 ignore_result(menu_runner_->RunMenuAt(button->GetWidget(), button,
147 gfx::Rect(point, gfx::Size()), 37 gfx::Rect(point, gfx::Size()),
148 MenuItemView::TOPRIGHT, 38 MenuItemView::TOPRIGHT,
149 ui::MENU_SOURCE_NONE, 0)); 39 ui::MENU_SOURCE_NONE, 0));
150 } 40 }
151 41
152 void AppListMenuViews::Cancel() { 42 void AppListMenuViews::Cancel() {
153 menu_runner_->Cancel(); 43 menu_runner_->Cancel();
154 } 44 }
155 45
156 } // namespace app_list 46 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698