1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ash/shelf/shelf_alignment_menu.h"
6
7#include "ash/metrics/user_metrics_recorder.h"
8#include "ash/shelf/shelf_layout_manager.h"
9#include "ash/shelf/shelf_types.h"
10#include "ash/shell.h"
11#include "grit/ash_strings.h"
12#include "ui/aura/window.h"
13
14namespace ash {
15
16ShelfAlignmentMenu::ShelfAlignmentMenu(aura::Window* root)
17    : ui::SimpleMenuModel(NULL),
18      root_window_(root) {
19  DCHECK(root_window_);
20  int align_group_id = 1;
21  set_delegate(this);
22  AddRadioItemWithStringId(MENU_ALIGN_LEFT,
23                           IDS_ASH_SHELF_CONTEXT_MENU_ALIGN_LEFT,
24                           align_group_id);
25  AddRadioItemWithStringId(MENU_ALIGN_BOTTOM,
26                           IDS_ASH_SHELF_CONTEXT_MENU_ALIGN_BOTTOM,
27                           align_group_id);
28  AddRadioItemWithStringId(MENU_ALIGN_RIGHT,
29                           IDS_ASH_SHELF_CONTEXT_MENU_ALIGN_RIGHT,
30                           align_group_id);
31}
32
33ShelfAlignmentMenu::~ShelfAlignmentMenu() {}
34
35bool ShelfAlignmentMenu::IsCommandIdChecked(int command_id) const {
36  return ShelfLayoutManager::ForShelf(root_window_)
37      ->SelectValueForShelfAlignment(MENU_ALIGN_BOTTOM == command_id,
38                                     MENU_ALIGN_LEFT == command_id,
39                                     MENU_ALIGN_RIGHT == command_id,
40                                     false);
41}
42
43bool ShelfAlignmentMenu::IsCommandIdEnabled(int command_id) const {
44  return true;
45}
46
47bool ShelfAlignmentMenu::GetAcceleratorForCommandId(
48    int command_id,
49    ui::Accelerator* accelerator) {
50  return false;
51}
52
53void ShelfAlignmentMenu::ExecuteCommand(int command_id, int event_flags) {
54  switch (static_cast<MenuItem>(command_id)) {
55    case MENU_ALIGN_LEFT:
56      Shell::GetInstance()->metrics()->
57          RecordUserMetricsAction(UMA_SHELF_ALIGNMENT_SET_LEFT);
58      Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT,
59                                              root_window_);
60      break;
61    case MENU_ALIGN_BOTTOM:
62      Shell::GetInstance()->metrics()->
63          RecordUserMetricsAction(UMA_SHELF_ALIGNMENT_SET_BOTTOM);
64      Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_BOTTOM,
65                                              root_window_);
66      break;
67    case MENU_ALIGN_RIGHT:
68      Shell::GetInstance()->metrics()->
69          RecordUserMetricsAction(UMA_SHELF_ALIGNMENT_SET_RIGHT);
70      Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_RIGHT,
71                                              root_window_);
72      break;
73  }
74}
75
76}  // namespace ash
77