Home | History | Annotate | Download | only in tabs
      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 "chrome/common/chrome_switches.h"
     11 #include "grit/generated_resources.h"
     12 
     13 TabMenuModel::TabMenuModel(ui::SimpleMenuModel::Delegate* delegate,
     14                            TabStripModel* tab_strip,
     15                            int index)
     16     : ui::SimpleMenuModel(delegate) {
     17   Build(tab_strip, index);
     18 }
     19 
     20 void TabMenuModel::Build(TabStripModel* tab_strip, int index) {
     21   bool affects_multiple_tabs =
     22       (tab_strip->IsTabSelected(index) &&
     23        tab_strip->selection_model().selected_indices().size() > 1);
     24   AddItemWithStringId(TabStripModel::CommandNewTab, IDS_TAB_CXMENU_NEWTAB);
     25   AddSeparator(ui::NORMAL_SEPARATOR);
     26   AddItemWithStringId(TabStripModel::CommandReload, IDS_TAB_CXMENU_RELOAD);
     27   AddItemWithStringId(TabStripModel::CommandDuplicate,
     28                       IDS_TAB_CXMENU_DUPLICATE);
     29   bool will_pin = tab_strip->WillContextMenuPin(index);
     30   if (affects_multiple_tabs) {
     31     AddItemWithStringId(
     32         TabStripModel::CommandTogglePinned,
     33         will_pin ? IDS_TAB_CXMENU_PIN_TABS : IDS_TAB_CXMENU_UNPIN_TABS);
     34   } else {
     35     AddItemWithStringId(
     36         TabStripModel::CommandTogglePinned,
     37         will_pin ? IDS_TAB_CXMENU_PIN_TAB : IDS_TAB_CXMENU_UNPIN_TAB);
     38   }
     39   AddSeparator(ui::NORMAL_SEPARATOR);
     40   if (affects_multiple_tabs) {
     41     AddItemWithStringId(TabStripModel::CommandCloseTab,
     42                         IDS_TAB_CXMENU_CLOSETABS);
     43   } else {
     44     AddItemWithStringId(TabStripModel::CommandCloseTab,
     45                         IDS_TAB_CXMENU_CLOSETAB);
     46   }
     47   AddItemWithStringId(TabStripModel::CommandCloseOtherTabs,
     48                       IDS_TAB_CXMENU_CLOSEOTHERTABS);
     49   AddItemWithStringId(TabStripModel::CommandCloseTabsToRight,
     50                       IDS_TAB_CXMENU_CLOSETABSTORIGHT);
     51   AddSeparator(ui::NORMAL_SEPARATOR);
     52   const bool is_window = tab_strip->delegate()->GetRestoreTabType() ==
     53       TabStripModelDelegate::RESTORE_WINDOW;
     54   AddItemWithStringId(TabStripModel::CommandRestoreTab,
     55                       is_window ? IDS_RESTORE_WINDOW : IDS_RESTORE_TAB);
     56   AddItemWithStringId(TabStripModel::CommandBookmarkAllTabs,
     57                       IDS_TAB_CXMENU_BOOKMARK_ALL_TABS);
     58   if (CommandLine::ForCurrentProcess()->HasSwitch(
     59           switches::kEnableTabGroupsContextMenu)) {
     60     AddSeparator(ui::NORMAL_SEPARATOR);
     61     AddItemWithStringId(TabStripModel::CommandSelectByDomain,
     62                         IDS_TAB_CXMENU_SELECT_BY_DOMAIN);
     63     AddItemWithStringId(TabStripModel::CommandSelectByOpener,
     64                         IDS_TAB_CXMENU_SELECT_BY_OPENER);
     65   }
     66 }
     67