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