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

Unified 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: Cleanup 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 side-by-side diff with in-line comments
Download patch
Index: ui/app_list/views/app_list_menu_views.cc
diff --git a/ui/app_list/views/app_list_menu_views.cc b/ui/app_list/views/app_list_menu_views.cc
new file mode 100644
index 0000000000000000000000000000000000000000..82143b4ecc89d17b1d0639780c68993571d6a94d
--- /dev/null
+++ b/ui/app_list/views/app_list_menu_views.cc
@@ -0,0 +1,136 @@
+// Copyright 2013 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.
+
+#include "grit/ui_resources.h"
+#include "ui/app_list/app_list_view_delegate.h"
+#include "ui/app_list/views/app_list_menu_views.h"
tapted 2013/03/20 07:44:20 should be first include, for own header.
benwells 2013/03/20 08:43:34 Done.
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/views/controls/button/menu_button.h"
+#include "ui/views/controls/image_view.h"
+#include "ui/views/controls/label.h"
+#include "ui/views/controls/menu/menu_config.h"
+#include "ui/views/controls/menu/menu_item_view.h"
+#include "ui/views/layout/grid_layout.h"
+
+using views::MenuItemView;
+
+namespace app_list {
+
+namespace {
+
+class CurrentUserView : public views::View {
+ public:
+ explicit CurrentUserView(const string16& user_name,
tapted 2013/03/20 07:44:20 I think it's uncommon to use explicit when there a
benwells 2013/03/20 08:43:34 Yeap was a relic from an earlier time.
+ const string16& user_email,
+ const gfx::ImageSkia& icon) {
+ const views::MenuConfig& menu_config = views::MenuConfig::instance(NULL);
+ views::GridLayout* layout = new views::GridLayout(this);
+ int item_right_padding = menu_config.label_to_arrow_padding +
+ menu_config.arrow_width +
+ menu_config.arrow_to_edge_padding;
+
+ layout->SetInsets(0, 0, 0, item_right_padding);
+ SetLayoutManager(layout);
+
+ views::ColumnSet* columns = layout->AddColumnSet(0);
+ columns->AddColumn(views::GridLayout::FILL,
+ views::GridLayout::FILL,
+ 0,
+ views::GridLayout::USE_PREF,
+ 0,
+ menu_config.check_width + menu_config.item_left_margin);
+ columns->AddColumn(views::GridLayout::FILL,
+ views::GridLayout::FILL,
+ 1,
+ views::GridLayout::USE_PREF,
+ 0,
+ 0);
+
+ layout->StartRow(0, 0);
+ views::ImageView* image_view = new views::ImageView();
+ image_view->SetImage(icon);
+ layout->AddView(image_view);
+
+ views::Label* user_name_view = new views::Label(user_name);
+ user_name_view->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ layout->AddView(user_name_view);
+
+ layout->StartRow(0, 0);
+ views::Label* user_email_view = new views::Label(user_email);
+ user_email_view->SetHorizontalAlignment(gfx::ALIGN_LEFT);
+ user_email_view->SetEnabled(false);
+ layout->SkipColumns(1);
+ layout->AddView(user_email_view);
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CurrentUserView);
+};
+
+class CurrentUserMenuItem : public MenuItemView {
+ public:
+ explicit CurrentUserMenuItem(MenuItemView* parent,
+ int id,
+ const string16& user_name,
+ const string16& user_email,
+ const gfx::ImageSkia& icon)
+ : MenuItemView(parent, id, MenuItemView::NORMAL) {
+ AddChildView(new CurrentUserView(user_name, user_email, icon));
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CurrentUserMenuItem);
+};
+
+class AppListMenuModelAdapter : public views::MenuModelAdapter {
+ public:
+ AppListMenuModelAdapter(ui::MenuModel* menu_model,
+ AppListViewDelegate* delegate)
+ : views::MenuModelAdapter(menu_model),
+ delegate_(delegate) {};
tapted 2013/03/20 08:24:34 stray semicolon
benwells 2013/03/20 08:43:34 Done.
+ virtual ~AppListMenuModelAdapter() {};
tapted 2013/03/20 08:24:34 stray semicolon
benwells 2013/03/20 08:43:34 Done.
+
+ // Overridden from views::MenuModelAdapter.
tapted 2013/03/20 08:24:34 nit: I think these comments usually end in a colon
benwells 2013/03/20 08:43:34 Done.
+ MenuItemView* CreateCustomItem(MenuItemView* parent, int id) OVERRIDE {
+ if (id == AppListMenu::CURRENT_USER) {
tapted 2013/03/20 08:24:34 maybe early return if id != CURRENT_USER ?
benwells 2013/03/20 08:43:34 Done.
+ ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
+ return new CurrentUserMenuItem(
+ parent,
+ id,
+ delegate_->GetCurrentUserName(),
+ delegate_->GetCurrentUserEmail(),
+ *rb.GetImageSkiaNamed(IDR_APP_LIST_USER_INDICATOR));
+ }
+
+ return NULL;
+ }
+
+ private:
+ AppListViewDelegate* delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(AppListMenuModelAdapter);
+};
+
+}
tapted 2013/03/20 07:44:20 nit: // namespace
benwells 2013/03/20 08:43:34 Done.
+
+AppListMenuViews::AppListMenuViews(AppListViewDelegate* delegate)
+ : AppListMenu(delegate) {
+ menu_delegate_.reset(new AppListMenuModelAdapter(&menu_model_, delegate));
+ menu_ = new MenuItemView(menu_delegate_.get());
+ menu_runner_.reset(new views::MenuRunner(menu_));
+ menu_delegate_->BuildMenu(menu_);
+}
+
+void AppListMenuViews::RunMenuAt(views::MenuButton* button,
+ const gfx::Point& point) {
+ menu_runner_->RunMenuAt(button->GetWidget(), button,
+ gfx::Rect(point, gfx::Size()),
+ MenuItemView::TOPRIGHT, 0);
+}
+
+void AppListMenuViews::Cancel() {
+ menu_runner_->Cancel();
+}
+
+} // namespace app_list

Powered by Google App Engine
This is Rietveld 408576698