1// Copyright (c) 2012 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 "chrome/browser/ui/tabs/tab_menu_model.h"
6
7#include "base/command_line.h"
8#include "chrome/browser/ui/tabs/tab_strip_model.h"
9#include "chrome/browser/ui/tabs/tab_strip_model_delegate.h"
10#include "grit/generated_resources.h"
11
12TabMenuModel::TabMenuModel(ui::SimpleMenuModel::Delegate* delegate,
13                           TabStripModel* tab_strip,
14                           int index)
15    : ui::SimpleMenuModel(delegate) {
16  Build(tab_strip, index);
17}
18
19void TabMenuModel::Build(TabStripModel* tab_strip, int index) {
20  bool affects_multiple_tabs =
21      (tab_strip->IsTabSelected(index) &&
22       tab_strip->selection_model().selected_indices().size() > 1);
23  AddItemWithStringId(TabStripModel::CommandNewTab, IDS_TAB_CXMENU_NEWTAB);
24  AddSeparator(ui::NORMAL_SEPARATOR);
25  AddItemWithStringId(TabStripModel::CommandReload, IDS_TAB_CXMENU_RELOAD);
26  AddItemWithStringId(TabStripModel::CommandDuplicate,
27                      IDS_TAB_CXMENU_DUPLICATE);
28  bool will_pin = tab_strip->WillContextMenuPin(index);
29  if (affects_multiple_tabs) {
30    AddItemWithStringId(
31        TabStripModel::CommandTogglePinned,
32        will_pin ? IDS_TAB_CXMENU_PIN_TABS : IDS_TAB_CXMENU_UNPIN_TABS);
33  } else {
34    AddItemWithStringId(
35        TabStripModel::CommandTogglePinned,
36        will_pin ? IDS_TAB_CXMENU_PIN_TAB : IDS_TAB_CXMENU_UNPIN_TAB);
37  }
38  AddSeparator(ui::NORMAL_SEPARATOR);
39  if (affects_multiple_tabs) {
40    AddItemWithStringId(TabStripModel::CommandCloseTab,
41                        IDS_TAB_CXMENU_CLOSETABS);
42  } else {
43    AddItemWithStringId(TabStripModel::CommandCloseTab,
44                        IDS_TAB_CXMENU_CLOSETAB);
45  }
46  AddItemWithStringId(TabStripModel::CommandCloseOtherTabs,
47                      IDS_TAB_CXMENU_CLOSEOTHERTABS);
48  AddItemWithStringId(TabStripModel::CommandCloseTabsToRight,
49                      IDS_TAB_CXMENU_CLOSETABSTORIGHT);
50  AddSeparator(ui::NORMAL_SEPARATOR);
51  const bool is_window = tab_strip->delegate()->GetRestoreTabType() ==
52      TabStripModelDelegate::RESTORE_WINDOW;
53  AddItemWithStringId(TabStripModel::CommandRestoreTab,
54                      is_window ? IDS_RESTORE_WINDOW : IDS_RESTORE_TAB);
55  AddItemWithStringId(TabStripModel::CommandBookmarkAllTabs,
56                      IDS_TAB_CXMENU_BOOKMARK_ALL_TABS);
57}
58