Home | History | Annotate | Download | only in tabs
      1 // Copyright (c) 2011 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/tabs/tab_strip_model.h"
      9 #include "chrome/common/chrome_switches.h"
     10 #include "grit/generated_resources.h"
     11 
     12 TabMenuModel::TabMenuModel(ui::SimpleMenuModel::Delegate* delegate,
     13                            bool is_pinned)
     14     : ui::SimpleMenuModel(delegate) {
     15   Build(is_pinned);
     16 }
     17 
     18 TabMenuModel::TabMenuModel(ui::SimpleMenuModel::Delegate* delegate,
     19                            TabStripModel* tab_strip,
     20                            int index)
     21     : ui::SimpleMenuModel(delegate) {
     22   Build(tab_strip, index);
     23 }
     24 
     25 // static
     26 bool TabMenuModel::AreVerticalTabsEnabled() {
     27 #if defined(TOOLKIT_VIEWS) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
     28   return CommandLine::ForCurrentProcess()->HasSwitch(
     29       switches::kEnableVerticalTabs);
     30 #else
     31   return false;
     32 #endif
     33 }
     34 
     35 void TabMenuModel::Build(bool is_pinned) {
     36   AddItemWithStringId(TabStripModel::CommandNewTab, IDS_TAB_CXMENU_NEWTAB);
     37   AddSeparator();
     38   AddItemWithStringId(TabStripModel::CommandReload, IDS_TAB_CXMENU_RELOAD);
     39   AddItemWithStringId(TabStripModel::CommandDuplicate,
     40                       IDS_TAB_CXMENU_DUPLICATE);
     41   AddItemWithStringId(
     42       TabStripModel::CommandTogglePinned,
     43       is_pinned ? IDS_TAB_CXMENU_UNPIN_TAB : IDS_TAB_CXMENU_PIN_TAB);
     44   AddSeparator();
     45   AddItemWithStringId(TabStripModel::CommandCloseTab,
     46                       IDS_TAB_CXMENU_CLOSETAB);
     47   AddItemWithStringId(TabStripModel::CommandCloseOtherTabs,
     48                       IDS_TAB_CXMENU_CLOSEOTHERTABS);
     49   AddItemWithStringId(TabStripModel::CommandCloseTabsToRight,
     50                       IDS_TAB_CXMENU_CLOSETABSTORIGHT);
     51   AddSeparator();
     52   AddItemWithStringId(TabStripModel::CommandRestoreTab, IDS_RESTORE_TAB);
     53   AddItemWithStringId(TabStripModel::CommandBookmarkAllTabs,
     54                       IDS_TAB_CXMENU_BOOKMARK_ALL_TABS);
     55   if (AreVerticalTabsEnabled()) {
     56     AddSeparator();
     57     AddCheckItemWithStringId(TabStripModel::CommandUseVerticalTabs,
     58                              IDS_TAB_CXMENU_USE_VERTICAL_TABS);
     59   }
     60 }
     61 
     62 void TabMenuModel::Build(TabStripModel* tab_strip, int index) {
     63   bool effects_multiple_tabs =
     64       (tab_strip->IsTabSelected(index) &&
     65        tab_strip->selection_model().selected_indices().size() > 1);
     66   AddItemWithStringId(TabStripModel::CommandNewTab, IDS_TAB_CXMENU_NEWTAB);
     67   AddSeparator();
     68   AddItemWithStringId(TabStripModel::CommandReload, IDS_TAB_CXMENU_RELOAD);
     69   AddItemWithStringId(TabStripModel::CommandDuplicate,
     70                       IDS_TAB_CXMENU_DUPLICATE);
     71   bool will_pin = tab_strip->WillContextMenuPin(index);
     72   if (effects_multiple_tabs) {
     73     AddItemWithStringId(
     74         TabStripModel::CommandTogglePinned,
     75         will_pin ? IDS_TAB_CXMENU_PIN_TABS : IDS_TAB_CXMENU_UNPIN_TABS);
     76   } else {
     77     AddItemWithStringId(
     78         TabStripModel::CommandTogglePinned,
     79         will_pin ? IDS_TAB_CXMENU_PIN_TAB : IDS_TAB_CXMENU_UNPIN_TAB);
     80   }
     81   AddSeparator();
     82   if (effects_multiple_tabs) {
     83     AddItemWithStringId(TabStripModel::CommandCloseTab,
     84                         IDS_TAB_CXMENU_CLOSETABS);
     85   } else {
     86     AddItemWithStringId(TabStripModel::CommandCloseTab,
     87                         IDS_TAB_CXMENU_CLOSETAB);
     88   }
     89   AddItemWithStringId(TabStripModel::CommandCloseOtherTabs,
     90                       IDS_TAB_CXMENU_CLOSEOTHERTABS);
     91   AddItemWithStringId(TabStripModel::CommandCloseTabsToRight,
     92                       IDS_TAB_CXMENU_CLOSETABSTORIGHT);
     93   AddSeparator();
     94   AddItemWithStringId(TabStripModel::CommandRestoreTab, IDS_RESTORE_TAB);
     95   AddItemWithStringId(TabStripModel::CommandBookmarkAllTabs,
     96                       IDS_TAB_CXMENU_BOOKMARK_ALL_TABS);
     97   if (AreVerticalTabsEnabled()) {
     98     AddSeparator();
     99     AddCheckItemWithStringId(TabStripModel::CommandUseVerticalTabs,
    100                              IDS_TAB_CXMENU_USE_VERTICAL_TABS);
    101   }
    102   if (CommandLine::ForCurrentProcess()->HasSwitch(
    103           switches::kEnableTabGroupsContextMenu)) {
    104     AddSeparator();
    105     AddItemWithStringId(TabStripModel::CommandSelectByDomain,
    106                         IDS_TAB_CXMENU_SELECT_BY_DOMAIN);
    107     AddItemWithStringId(TabStripModel::CommandSelectByOpener,
    108                         IDS_TAB_CXMENU_SELECT_BY_OPENER);
    109   }
    110 }
    111