OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/ui/views/avatar_menu_bubble_view.h" | 5 #include "chrome/browser/ui/views/avatar_menu_bubble_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "chrome/app/chrome_command_ids.h" |
10 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
11 #include "chrome/browser/profiles/avatar_menu_model.h" | 12 #include "chrome/browser/profiles/avatar_menu_model.h" |
12 #include "chrome/browser/profiles/profile_info_cache.h" | 13 #include "chrome/browser/profiles/profile_info_cache.h" |
13 #include "chrome/browser/profiles/profile_info_util.h" | 14 #include "chrome/browser/profiles/profile_info_util.h" |
14 #include "chrome/browser/profiles/profile_manager.h" | 15 #include "chrome/browser/profiles/profile_manager.h" |
15 #include "chrome/browser/ui/browser.h" | 16 #include "chrome/browser/ui/browser.h" |
| 17 #include "chrome/browser/ui/browser_commands.h" |
16 #include "grit/generated_resources.h" | 18 #include "grit/generated_resources.h" |
17 #include "grit/theme_resources.h" | 19 #include "grit/theme_resources.h" |
18 #include "ui/base/l10n/l10n_util.h" | 20 #include "ui/base/l10n/l10n_util.h" |
19 #include "ui/base/resource/resource_bundle.h" | 21 #include "ui/base/resource/resource_bundle.h" |
20 #include "ui/gfx/canvas.h" | 22 #include "ui/gfx/canvas.h" |
21 #include "ui/gfx/font.h" | 23 #include "ui/gfx/font.h" |
22 #include "ui/gfx/image/canvas_image_source.h" | 24 #include "ui/gfx/image/canvas_image_source.h" |
23 #include "ui/gfx/image/image.h" | 25 #include "ui/gfx/image/image.h" |
24 #include "ui/views/controls/button/custom_button.h" | 26 #include "ui/views/controls/button/custom_button.h" |
25 #include "ui/views/controls/button/image_button.h" | 27 #include "ui/views/controls/button/image_button.h" |
26 #include "ui/views/controls/image_view.h" | 28 #include "ui/views/controls/image_view.h" |
27 #include "ui/views/controls/label.h" | 29 #include "ui/views/controls/label.h" |
28 #include "ui/views/controls/link.h" | 30 #include "ui/views/controls/link.h" |
29 #include "ui/views/controls/separator.h" | 31 #include "ui/views/controls/separator.h" |
| 32 #include "ui/views/widget/widget.h" |
30 | 33 |
31 namespace { | 34 namespace { |
32 | 35 |
33 const int kItemHeight = 44; | 36 const int kItemHeight = 44; |
34 const int kItemMarginY = 4; | 37 const int kItemMarginY = 4; |
35 const int kIconMarginX = 6; | 38 const int kIconMarginX = 6; |
36 const int kSeparatorPaddingY = 5; | 39 const int kSeparatorPaddingY = 5; |
37 const int kMaxItemTextWidth = 200; | 40 const int kMaxItemTextWidth = 200; |
38 const SkColor kHighlightColor = 0xFFE3EDF6; | 41 const SkColor kHighlightColor = 0xFFE3EDF6; |
39 | 42 |
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 edit_link_->state() == views::CustomButton::STATE_HOVERED || | 383 edit_link_->state() == views::CustomButton::STATE_HOVERED || |
381 HasFocus() || | 384 HasFocus() || |
382 edit_link_->HasFocus(); | 385 edit_link_->HasFocus(); |
383 } | 386 } |
384 | 387 |
385 } // namespace | 388 } // namespace |
386 | 389 |
387 | 390 |
388 // AvatarMenuBubbleView ------------------------------------------------------- | 391 // AvatarMenuBubbleView ------------------------------------------------------- |
389 | 392 |
| 393 // static |
| 394 AvatarMenuBubbleView* AvatarMenuBubbleView::avatar_bubble_ = NULL; |
| 395 |
| 396 // static |
| 397 void AvatarMenuBubbleView::ShowBubble( |
| 398 views::View* anchor_view, |
| 399 views::BubbleBorder::ArrowLocation arrow_location, |
| 400 views::BubbleBorder::BubbleAlignment border_alignment, |
| 401 const gfx::Rect& anchor_rect, |
| 402 Browser* browser) { |
| 403 if (IsShowing()) |
| 404 return; |
| 405 |
| 406 DCHECK(chrome::IsCommandEnabled(browser, IDC_SHOW_AVATAR_MENU)); |
| 407 avatar_bubble_ = new AvatarMenuBubbleView( |
| 408 anchor_view, arrow_location, anchor_rect, browser); |
| 409 views::BubbleDelegateView::CreateBubble(avatar_bubble_); |
| 410 avatar_bubble_->SetAlignment(border_alignment); |
| 411 avatar_bubble_->Show(); |
| 412 } |
| 413 |
| 414 // static |
| 415 bool AvatarMenuBubbleView::IsShowing() { |
| 416 return avatar_bubble_ != NULL; |
| 417 } |
| 418 |
| 419 // static |
| 420 void AvatarMenuBubbleView::Hide() { |
| 421 if (IsShowing()) |
| 422 avatar_bubble_->GetWidget()->Close(); |
| 423 } |
| 424 |
390 AvatarMenuBubbleView::AvatarMenuBubbleView( | 425 AvatarMenuBubbleView::AvatarMenuBubbleView( |
391 views::View* anchor_view, | 426 views::View* anchor_view, |
392 views::BubbleBorder::ArrowLocation arrow_location, | 427 views::BubbleBorder::ArrowLocation arrow_location, |
393 const gfx::Rect& anchor_rect, | 428 const gfx::Rect& anchor_rect, |
394 Browser* browser) | 429 Browser* browser) |
395 : BubbleDelegateView(anchor_view, arrow_location), | 430 : BubbleDelegateView(anchor_view, arrow_location), |
396 add_profile_link_(NULL), | 431 add_profile_link_(NULL), |
397 anchor_rect_(anchor_rect), | 432 anchor_rect_(anchor_rect), |
398 browser_(browser) { | 433 browser_(browser) { |
399 avatar_menu_model_.reset(new AvatarMenuModel( | 434 avatar_menu_model_.reset(new AvatarMenuModel( |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 return anchor_rect_; | 548 return anchor_rect_; |
514 } | 549 } |
515 | 550 |
516 void AvatarMenuBubbleView::Init() { | 551 void AvatarMenuBubbleView::Init() { |
517 // Build the menu for the first time. | 552 // Build the menu for the first time. |
518 OnAvatarMenuModelChanged(avatar_menu_model_.get()); | 553 OnAvatarMenuModelChanged(avatar_menu_model_.get()); |
519 AddAccelerator(ui::Accelerator(ui::VKEY_DOWN, ui::EF_NONE)); | 554 AddAccelerator(ui::Accelerator(ui::VKEY_DOWN, ui::EF_NONE)); |
520 AddAccelerator(ui::Accelerator(ui::VKEY_UP, ui::EF_NONE)); | 555 AddAccelerator(ui::Accelerator(ui::VKEY_UP, ui::EF_NONE)); |
521 } | 556 } |
522 | 557 |
| 558 void AvatarMenuBubbleView::WindowClosing() { |
| 559 DCHECK_EQ(avatar_bubble_, this); |
| 560 avatar_bubble_ = NULL; |
| 561 } |
| 562 |
523 void AvatarMenuBubbleView::OnAvatarMenuModelChanged( | 563 void AvatarMenuBubbleView::OnAvatarMenuModelChanged( |
524 AvatarMenuModel* avatar_menu_model) { | 564 AvatarMenuModel* avatar_menu_model) { |
525 // Unset all our child view references and call RemoveAllChildViews() which | 565 // Unset all our child view references and call RemoveAllChildViews() which |
526 // will actually delete them. | 566 // will actually delete them. |
527 add_profile_link_ = NULL; | 567 add_profile_link_ = NULL; |
528 item_views_.clear(); | 568 item_views_.clear(); |
529 RemoveAllChildViews(true); | 569 RemoveAllChildViews(true); |
530 | 570 |
531 for (size_t i = 0; i < avatar_menu_model->GetNumberOfItems(); ++i) { | 571 for (size_t i = 0; i < avatar_menu_model->GetNumberOfItems(); ++i) { |
532 const AvatarMenuModel::Item& item = avatar_menu_model->GetItemAt(i); | 572 const AvatarMenuModel::Item& item = avatar_menu_model->GetItemAt(i); |
(...skipping 13 matching lines...) Expand all Loading... |
546 add_profile_link_->set_listener(this); | 586 add_profile_link_->set_listener(this); |
547 add_profile_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); | 587 add_profile_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
548 add_profile_link_->SetBackgroundColor(color()); | 588 add_profile_link_->SetBackgroundColor(color()); |
549 AddChildView(add_profile_link_); | 589 AddChildView(add_profile_link_); |
550 | 590 |
551 // If the bubble has already been shown then resize and reposition the bubble. | 591 // If the bubble has already been shown then resize and reposition the bubble. |
552 Layout(); | 592 Layout(); |
553 if (GetBubbleFrameView()) | 593 if (GetBubbleFrameView()) |
554 SizeToContents(); | 594 SizeToContents(); |
555 } | 595 } |
OLD | NEW |