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#include "ui/base/l10n/l10n_util.h"
14
15namespace ash {
16
17ShelfAlignmentMenu::ShelfAlignmentMenu(aura::Window* root)
18    : ui::SimpleMenuModel(NULL),
19      root_window_(root) {
20  DCHECK(root_window_);
21  int align_group_id = 1;
22  set_delegate(this);
23  AddRadioItemWithStringId(MENU_ALIGN_LEFT,
24                           IDS_ASH_SHELF_CONTEXT_MENU_ALIGN_LEFT,
25                           align_group_id);
26  AddRadioItemWithStringId(MENU_ALIGN_BOTTOM,
27                           IDS_ASH_SHELF_CONTEXT_MENU_ALIGN_BOTTOM,
28                           align_group_id);
29  AddRadioItemWithStringId(MENU_ALIGN_RIGHT,
30                           IDS_ASH_SHELF_CONTEXT_MENU_ALIGN_RIGHT,
31                           align_group_id);
32}
33
34ShelfAlignmentMenu::~ShelfAlignmentMenu() {}
35
36bool ShelfAlignmentMenu::IsCommandIdChecked(int command_id) const {
37  return ShelfLayoutManager::ForShelf(root_window_)
38      ->SelectValueForShelfAlignment(MENU_ALIGN_BOTTOM == command_id,
39                                     MENU_ALIGN_LEFT == command_id,
40                                     MENU_ALIGN_RIGHT == command_id,
41                                     false);
42}
43
44bool ShelfAlignmentMenu::IsCommandIdEnabled(int command_id) const {
45  return true;
46}
47
48bool ShelfAlignmentMenu::GetAcceleratorForCommandId(
49    int command_id,
50    ui::Accelerator* accelerator) {
51  return false;
52}
53
54void ShelfAlignmentMenu::ExecuteCommand(int command_id, int event_flags) {
55  switch (static_cast<MenuItem>(command_id)) {
56    case MENU_ALIGN_LEFT:
57      Shell::GetInstance()->metrics()->
58          RecordUserMetricsAction(UMA_SHELF_ALIGNMENT_SET_LEFT);
59      Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_LEFT,
60                                              root_window_);
61      break;
62    case MENU_ALIGN_BOTTOM:
63      Shell::GetInstance()->metrics()->
64          RecordUserMetricsAction(UMA_SHELF_ALIGNMENT_SET_BOTTOM);
65      Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_BOTTOM,
66                                              root_window_);
67      break;
68    case MENU_ALIGN_RIGHT:
69      Shell::GetInstance()->metrics()->
70          RecordUserMetricsAction(UMA_SHELF_ALIGNMENT_SET_RIGHT);
71      Shell::GetInstance()->SetShelfAlignment(SHELF_ALIGNMENT_RIGHT,
72                                              root_window_);
73      break;
74  }
75}
76
77}  // namespace ash
78