1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/overview/overview_button_tray.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/shelf/shelf_types.h" 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/shell.h" 9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "ash/system/tray/system_tray_delegate.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/system/tray/tray_utils.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ash/wm/maximize_mode/maximize_mode_controller.h" 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/wm/overview/window_selector_controller.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "grit/ash_resources.h" 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "grit/ash_strings.h" 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/border.h" 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/views/controls/image_view.h" 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace { 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Predefined padding for the icon used in this tray. These are to be set to the 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// border of the icon, depending on the current shelf_alignment() 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kHorizontalShelfHorizontalPadding = 8; 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kHorizontalShelfVerticalPadding = 4; 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kVerticalShelfHorizontalPadding = 2; 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kVerticalShelfVerticalPadding = 5; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace ash { 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochOverviewButtonTray::OverviewButtonTray(StatusAreaWidget* status_area_widget) 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : TrayBackgroundView(status_area_widget), icon_(NULL) { 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetContentsBackground(); 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) icon_ = new views::ImageView(); 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) icon_->SetImage( 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bundle.GetImageNamed(IDR_AURA_UBER_TRAY_OVERVIEW_MODE).ToImageSkia()); 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetIconBorderForShelfAlignment(); 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) tray_container()->AddChildView(icon_); 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Shell::GetInstance()->AddShellObserver(this); 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)OverviewButtonTray::~OverviewButtonTray() { 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Shell::GetInstance()->RemoveShellObserver(this); 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 51e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochvoid OverviewButtonTray::UpdateAfterLoginStatusChange( 52e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch user::LoginStatus status) { 53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UpdateIconVisibility(); 54e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 55e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool OverviewButtonTray::PerformAction(const ui::Event& event) { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WindowSelectorController* controller = 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell::GetInstance()->window_selector_controller(); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci controller->ToggleOverview(); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetDrawBackgroundAsActive(controller->IsSelecting()); 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return true; 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void OverviewButtonTray::OnMaximizeModeStarted() { 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UpdateIconVisibility(); 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void OverviewButtonTray::OnMaximizeModeEnded() { 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) UpdateIconVisibility(); 70a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool OverviewButtonTray::ClickedOutsideBubble() { 73a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // This class has no bubbles dismiss, but acknowledge that the message was 74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // handled. 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return true; 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)base::string16 OverviewButtonTray::GetAccessibleNameForTray() { 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return l10n_util::GetStringUTF16(IDS_ASH_OVERVIEW_BUTTON_ACCESSIBLE_NAME); 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void OverviewButtonTray::HideBubbleWithView( 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const views::TrayBubbleView* bubble_view) { 84a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // This class has no bubbles to hide. 85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void OverviewButtonTray::SetShelfAlignment(ShelfAlignment alignment) { 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (alignment == shelf_alignment()) 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return; 90a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 91a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TrayBackgroundView::SetShelfAlignment(alignment); 92a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SetIconBorderForShelfAlignment(); 93a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 94a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void OverviewButtonTray::SetIconBorderForShelfAlignment() { 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM || 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) shelf_alignment() == SHELF_ALIGNMENT_TOP) { 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) icon_->SetBorder(views::Border::CreateEmptyBorder( 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kHorizontalShelfVerticalPadding, 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kHorizontalShelfHorizontalPadding, 101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kHorizontalShelfVerticalPadding, 102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kHorizontalShelfHorizontalPadding)); 103a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } else { 104a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) icon_->SetBorder(views::Border::CreateEmptyBorder( 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kVerticalShelfVerticalPadding, 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kVerticalShelfHorizontalPadding, 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kVerticalShelfVerticalPadding, 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kVerticalShelfHorizontalPadding)); 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 110a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 111a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void OverviewButtonTray::UpdateIconVisibility() { 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SetVisible(Shell::GetInstance()->maximize_mode_controller()-> 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) IsMaximizeModeWindowManagerEnabled() && 115e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Shell::GetInstance()->window_selector_controller()->CanSelect()); 116e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch} 117e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace ash 119