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