12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/ash/launcher/launcher_application_menu_item_model.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LauncherApplicationMenuItemModel::LauncherApplicationMenuItemModel( 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromeLauncherAppMenuItems item_list) 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : ash::ShelfMenuModel(this), 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) launcher_items_(item_list.Pass()) { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Build(); 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)LauncherApplicationMenuItemModel::~LauncherApplicationMenuItemModel() { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LauncherApplicationMenuItemModel::IsCommandActive(int command_id) const { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(command_id >= 0); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(static_cast<size_t>(command_id) < launcher_items_.size()); 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return launcher_items_[command_id]->IsActive(); 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LauncherApplicationMenuItemModel::IsCommandIdChecked( 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int command_id) const { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LauncherApplicationMenuItemModel::IsCommandIdEnabled( 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int command_id) const { 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(command_id < static_cast<int>(launcher_items_.size())); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return launcher_items_[command_id]->IsEnabled(); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool LauncherApplicationMenuItemModel::GetAcceleratorForCommandId( 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int command_id, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::Accelerator* accelerator) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LauncherApplicationMenuItemModel::ExecuteCommand(int command_id, 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int event_flags) { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(command_id < static_cast<int>(launcher_items_.size())); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) launcher_items_[command_id]->Execute(event_flags); 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void LauncherApplicationMenuItemModel::Build() { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddSeparator(ui::SPACING_SEPARATOR); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < launcher_items_.size(); i++) { 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromeLauncherAppMenuItem* item = launcher_items_[i]; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check for a separator requirement in front of this item. 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (item->HasLeadingSeparator()) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddSeparator(ui::SPACING_SEPARATOR); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The first item is the context menu, the others are the running apps. 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddItem(i, item->title()); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!item->icon().IsEmpty()) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetIcon(GetIndexOfCommandId(i), item->icon()); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RemoveTrailingSeparators(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adding final spacing (if the menu is not empty) to conform the menu to our 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // style. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (launcher_items_.size()) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddSeparator(ui::SPACING_SEPARATOR); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 71