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

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

Issue 12789010: [win] Change app launcher profile indicator to be a menu. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Feedback Created 7 years, 9 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "ui/app_list/views/app_list_menu_views.h"
6
7 #include "grit/ui_resources.h"
8 #include "ui/app_list/app_list_view_delegate.h"
9 #include "ui/base/resource/resource_bundle.h"
10 #include "ui/views/controls/button/menu_button.h"
11 #include "ui/views/controls/image_view.h"
12 #include "ui/views/controls/label.h"
13 #include "ui/views/controls/menu/menu_config.h"
14 #include "ui/views/controls/menu/menu_item_view.h"
15 #include "ui/views/layout/grid_layout.h"
16
17 using views::MenuItemView;
18
19 namespace app_list {
20
21 namespace {
22
23 class CurrentUserView : public views::View {
24 public:
25 CurrentUserView(const string16& user_name,
26 const string16& user_email,
27 const gfx::ImageSkia& icon) {
28 const views::MenuConfig& menu_config = views::MenuConfig::instance(NULL);
29 views::GridLayout* layout = new views::GridLayout(this);
30 int item_right_padding = menu_config.label_to_arrow_padding +
31 menu_config.arrow_width +
32 menu_config.arrow_to_edge_padding;
33
34 layout->SetInsets(0, 0, 0, item_right_padding);
35 SetLayoutManager(layout);
36
37 views::ColumnSet* columns = layout->AddColumnSet(0);
38 columns->AddColumn(views::GridLayout::FILL,
39 views::GridLayout::FILL,
40 0,
41 views::GridLayout::USE_PREF,
42 0,
43 menu_config.check_width + menu_config.item_left_margin);
44 columns->AddColumn(views::GridLayout::FILL,
45 views::GridLayout::FILL,
46 1,
47 views::GridLayout::USE_PREF,
48 0,
49 0);
50
51 layout->StartRow(0, 0);
52 views::ImageView* image_view = new views::ImageView();
53 image_view->SetImage(icon);
54 layout->AddView(image_view);
55
56 views::Label* user_name_view = new views::Label(user_name);
57 user_name_view->SetHorizontalAlignment(gfx::ALIGN_LEFT);
58 layout->AddView(user_name_view);
59
60 layout->StartRow(0, 0);
61 views::Label* user_email_view = new views::Label(user_email);
62 user_email_view->SetHorizontalAlignment(gfx::ALIGN_LEFT);
63 user_email_view->SetEnabled(false);
64 layout->SkipColumns(1);
65 layout->AddView(user_email_view);
66 }
67
68 private:
69 DISALLOW_COPY_AND_ASSIGN(CurrentUserView);
70 };
71
72 class CurrentUserMenuItem : public MenuItemView {
73 public:
74 CurrentUserMenuItem(MenuItemView* parent,
75 int id,
76 const string16& user_name,
77 const string16& user_email,
78 const gfx::ImageSkia& icon)
79 : MenuItemView(parent, id, MenuItemView::NORMAL) {
80 AddChildView(new CurrentUserView(user_name, user_email, icon));
81 }
82
83 private:
84 DISALLOW_COPY_AND_ASSIGN(CurrentUserMenuItem);
85 };
86
87 class AppListMenuModelAdapter : public views::MenuModelAdapter {
88 public:
89 AppListMenuModelAdapter(ui::MenuModel* menu_model,
90 AppListViewDelegate* delegate)
91 : views::MenuModelAdapter(menu_model),
92 delegate_(delegate) {}
93 virtual ~AppListMenuModelAdapter() {}
94
95 // Overridden from views::MenuModelAdapter:
96 MenuItemView* CreateCustomItem(MenuItemView* parent, int id) OVERRIDE {
97 if (id != AppListMenu::CURRENT_USER)
98 return NULL;
99
100 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
101 return new CurrentUserMenuItem(
102 parent,
103 id,
104 delegate_->GetCurrentUserName(),
105 delegate_->GetCurrentUserEmail(),
106 *rb.GetImageSkiaNamed(IDR_APP_LIST_USER_INDICATOR));
107 }
108
109 private:
110 AppListViewDelegate* delegate_;
111
112 DISALLOW_COPY_AND_ASSIGN(AppListMenuModelAdapter);
113 };
114
115 } // namespace
116
117 AppListMenuViews::AppListMenuViews(AppListViewDelegate* delegate)
118 : AppListMenu(delegate) {
119 menu_delegate_.reset(new AppListMenuModelAdapter(menu_model(), delegate));
120 menu_ = new MenuItemView(menu_delegate_.get());
121 menu_runner_.reset(new views::MenuRunner(menu_));
122 menu_delegate_->BuildMenu(menu_);
123 }
124
125 AppListMenuViews::~AppListMenuViews() {}
126
127 void AppListMenuViews::RunMenuAt(views::MenuButton* button,
128 const gfx::Point& point) {
129 menu_runner_->RunMenuAt(button->GetWidget(), button,
130 gfx::Rect(point, gfx::Size()),
131 MenuItemView::TOPRIGHT, 0);
132 }
133
134 void AppListMenuViews::Cancel() {
135 menu_runner_->Cancel();
136 }
137
138 } // namespace app_list
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698