diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index f234f1b045..98c2302fcd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -113,6 +113,18 @@ public interface MenuEntrySwapperConfig extends Config KALPHITE_CAVE, } + @ConfigItem( + position = -3, + keyName = "leftClickCustomization", + name = "Customizable left-click", + description = "Allows customization of left-clicks on items", + section = itemSection + ) + default boolean leftClickCustomization() + { + return true; + } + @ConfigItem( position = -2, keyName = "shiftClickCustomization", diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 44b4ab7460..56cb315caf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -29,6 +29,7 @@ package net.runelite.client.plugins.menuentryswapper; import com.google.common.annotations.VisibleForTesting; import static com.google.common.base.Predicates.alwaysTrue; import static com.google.common.base.Predicates.equalTo; +import com.google.common.base.Strings; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.LinkedHashMultimap; @@ -42,7 +43,6 @@ import java.util.Set; import java.util.function.Predicate; import java.util.function.Supplier; import javax.inject.Inject; -import lombok.Getter; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.ItemComposition; @@ -87,28 +87,43 @@ public class MenuEntrySwapperPlugin extends Plugin private static final String CONFIGURE = "Configure"; private static final String SAVE = "Save"; private static final String RESET = "Reset"; - private static final String MENU_TARGET = "Shift-click"; + private static final String LEFT_CLICK_MENU_TARGET = "Left-click"; + private static final String SHIFT_CLICK_MENU_TARGET = "Shift-click"; private static final String SHIFTCLICK_CONFIG_GROUP = "shiftclick"; private static final String ITEM_KEY_PREFIX = "item_"; - private static final WidgetMenuOption FIXED_INVENTORY_TAB_CONFIGURE = new WidgetMenuOption(CONFIGURE, - MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB); + // Shift click + private static final WidgetMenuOption FIXED_INVENTORY_TAB_CONFIGURE_SC = new WidgetMenuOption(CONFIGURE, + SHIFT_CLICK_MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB); + private static final WidgetMenuOption FIXED_INVENTORY_TAB_SAVE_SC = new WidgetMenuOption(SAVE, + SHIFT_CLICK_MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB); - private static final WidgetMenuOption FIXED_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE, - MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_CONFIGURE_SC = new WidgetMenuOption(CONFIGURE, + SHIFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_SAVE_SC = new WidgetMenuOption(SAVE, + SHIFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB); - private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_CONFIGURE = new WidgetMenuOption(CONFIGURE, - MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE_SC = new WidgetMenuOption(CONFIGURE, + SHIFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE_SC = new WidgetMenuOption(SAVE, + SHIFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB); - private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE, - MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB); + // Left click + private static final WidgetMenuOption FIXED_INVENTORY_TAB_CONFIGURE_LC = new WidgetMenuOption(CONFIGURE, + LEFT_CLICK_MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB); + private static final WidgetMenuOption FIXED_INVENTORY_TAB_SAVE_LC = new WidgetMenuOption(SAVE, + LEFT_CLICK_MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB); - private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE = new WidgetMenuOption(CONFIGURE, - MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_CONFIGURE_LC = new WidgetMenuOption(CONFIGURE, + LEFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_SAVE_LC = new WidgetMenuOption(SAVE, + LEFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB); - private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE, - MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE_LC = new WidgetMenuOption(CONFIGURE, + LEFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB); + private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE_LC = new WidgetMenuOption(SAVE, + LEFT_CLICK_MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB); private static final Set ITEM_MENU_TYPES = ImmutableSet.of( MenuAction.ITEM_FIRST_OPTION, @@ -161,8 +176,8 @@ public class MenuEntrySwapperPlugin extends Plugin @Inject private ItemManager itemManager; - @Getter private boolean configuringShiftClick = false; + private boolean configuringLeftClick = false; private final Multimap swaps = LinkedHashMultimap.create(); private final ArrayListMultimap optionIndexes = ArrayListMultimap.create(); @@ -176,11 +191,7 @@ public class MenuEntrySwapperPlugin extends Plugin @Override public void startUp() { - if (config.shiftClickCustomization()) - { - enableCustomization(); - } - + enableCustomization(); setupSwaps(); } @@ -440,16 +451,10 @@ public class MenuEntrySwapperPlugin extends Plugin @Subscribe public void onConfigChanged(ConfigChanged event) { - if (event.getGroup().equals(MenuEntrySwapperConfig.GROUP) && event.getKey().equals("shiftClickCustomization")) + if (event.getGroup().equals(MenuEntrySwapperConfig.GROUP) + && (event.getKey().equals("shiftClickCustomization") || event.getKey().equals("leftClickCustomization"))) { - if (config.shiftClickCustomization()) - { - enableCustomization(); - } - else - { - disableCustomization(); - } + enableCustomization(); } else if (event.getGroup().equals(SHIFTCLICK_CONFIG_GROUP) && event.getKey().startsWith(ITEM_KEY_PREFIX)) { @@ -462,10 +467,10 @@ public class MenuEntrySwapperPlugin extends Plugin client.getItemCompositionCache().reset(); } - private Integer getSwapConfig(int itemId) + private Integer getSwapConfig(boolean shift, int itemId) { itemId = ItemVariationMapping.map(itemId); - String config = configManager.getConfiguration(SHIFTCLICK_CONFIG_GROUP, ITEM_KEY_PREFIX + itemId); + String config = configManager.getConfiguration(shift ? SHIFTCLICK_CONFIG_GROUP : MenuEntrySwapperConfig.GROUP, ITEM_KEY_PREFIX + itemId); if (config == null || config.isEmpty()) { return null; @@ -474,29 +479,29 @@ public class MenuEntrySwapperPlugin extends Plugin return Integer.parseInt(config); } - private void setSwapConfig(int itemId, int index) + private void setSwapConfig(boolean shift, int itemId, int index) { itemId = ItemVariationMapping.map(itemId); - configManager.setConfiguration(SHIFTCLICK_CONFIG_GROUP, ITEM_KEY_PREFIX + itemId, index); + configManager.setConfiguration(shift ? SHIFTCLICK_CONFIG_GROUP : MenuEntrySwapperConfig.GROUP, ITEM_KEY_PREFIX + itemId, index); } - private void unsetSwapConfig(int itemId) + private void unsetSwapConfig(boolean shift, int itemId) { itemId = ItemVariationMapping.map(itemId); - configManager.unsetConfiguration(SHIFTCLICK_CONFIG_GROUP, ITEM_KEY_PREFIX + itemId); + configManager.unsetConfiguration(shift ? SHIFTCLICK_CONFIG_GROUP : MenuEntrySwapperConfig.GROUP, ITEM_KEY_PREFIX + itemId); } private void enableCustomization() { - refreshShiftClickCustomizationMenus(); + rebuildCustomizationMenus(); // set shift click action index on the item compositions clientThread.invoke(this::resetItemCompositionCache); } private void disableCustomization() { - removeShiftClickCustomizationMenus(); - configuringShiftClick = false; + removeCusomizationMenus(); + configuringShiftClick = configuringLeftClick = false; // flush item compositions to reset the shift click action index clientThread.invoke(this::resetItemCompositionCache); } @@ -508,15 +513,21 @@ public class MenuEntrySwapperPlugin extends Plugin || event.getWidget() == WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB || event.getWidget() == WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB) { - configuringShiftClick = event.getMenuOption().equals(CONFIGURE) && Text.removeTags(event.getMenuTarget()).equals(MENU_TARGET); - refreshShiftClickCustomizationMenus(); + String option = event.getMenuOption(); + String target = Text.removeTags(event.getMenuTarget()); + if ((option.equals(CONFIGURE) || option.equals(SAVE)) && (target.equals(LEFT_CLICK_MENU_TARGET) || target.equals(SHIFT_CLICK_MENU_TARGET))) + { + configuringShiftClick = option.equals(CONFIGURE) && target.equals(SHIFT_CLICK_MENU_TARGET); + configuringLeftClick = option.equals(CONFIGURE) && target.equals(LEFT_CLICK_MENU_TARGET); + rebuildCustomizationMenus(); + } } } @Subscribe public void onMenuOpened(MenuOpened event) { - if (!configuringShiftClick) + if (!configuringShiftClick && !configuringLeftClick) { return; } @@ -539,13 +550,41 @@ public class MenuEntrySwapperPlugin extends Plugin return; } - ItemComposition itemComposition = itemManager.getItemComposition(itemId); - MenuAction shiftClickAction = MenuAction.ITEM_USE; - final int shiftClickActionIndex = itemComposition.getShiftClickActionIndex(); + MenuAction activeAction = MenuAction.ITEM_USE; + final ItemComposition itemComposition = itemManager.getItemComposition(itemId); - if (shiftClickActionIndex >= 0) + if (configuringShiftClick) { - shiftClickAction = MenuAction.of(MenuAction.ITEM_FIRST_OPTION.getId() + shiftClickActionIndex); + // For shift-click read the active action off of the item composition, since it may be set by + // that even if we have no existing config for it + final int shiftClickActionIndex = itemComposition.getShiftClickActionIndex(); + + if (shiftClickActionIndex >= 0) + { + activeAction = MenuAction.of(MenuAction.ITEM_FIRST_OPTION.getId() + shiftClickActionIndex); + } + } + else + { + // The default left click on items is the highest priority action 0-2, and otherwise is use. + final String[] actions = itemComposition.getInventoryActions(); + for (int i = 0; i <= 2; ++i) + { + if (!Strings.isNullOrEmpty(actions[i])) + { + activeAction = MenuAction.of(MenuAction.ITEM_FIRST_OPTION.getId() + i); + break; + } + } + + // Apply left click action from configuration + Integer config = getSwapConfig(false, itemId); + if (config != null) + { + activeAction = config >= 0 + ? MenuAction.of(MenuAction.ITEM_FIRST_OPTION.getId() + config) + : MenuAction.ITEM_USE; + } } MenuEntry[] entries = event.getMenuEntries(); @@ -558,7 +597,7 @@ public class MenuEntrySwapperPlugin extends Plugin { entry.setType(MenuAction.RUNELITE.getId()); - if (shiftClickAction == menuAction) + if (activeAction == menuAction) { entry.setOption("* " + entry.getOption()); } @@ -567,7 +606,7 @@ public class MenuEntrySwapperPlugin extends Plugin final MenuEntry resetShiftClickEntry = new MenuEntry(); resetShiftClickEntry.setOption(RESET); - resetShiftClickEntry.setTarget(MENU_TARGET); + resetShiftClickEntry.setTarget(configuringShiftClick ? SHIFT_CLICK_MENU_TARGET : LEFT_CLICK_MENU_TARGET); resetShiftClickEntry.setIdentifier(itemId); resetShiftClickEntry.setParam1(widgetId); resetShiftClickEntry.setType(MenuAction.RUNELITE.getId()); @@ -664,9 +703,14 @@ public class MenuEntrySwapperPlugin extends Plugin String target = event.getMenuTarget(); ItemComposition itemComposition = itemManager.getItemComposition(itemId); - if (option.equals(RESET) && target.equals(MENU_TARGET)) + if (option.equals(RESET) && target.equals(SHIFT_CLICK_MENU_TARGET)) { - unsetSwapConfig(itemId); + unsetSwapConfig(true, itemId); + return; + } + if (option.equals(RESET) && target.equals(LEFT_CLICK_MENU_TARGET)) + { + unsetSwapConfig(false, itemId); return; } @@ -677,7 +721,7 @@ public class MenuEntrySwapperPlugin extends Plugin if (option.equals("Use")) //because "Use" is not in inventoryActions { - setSwapConfig(itemId, -1); + setSwapConfig(configuringShiftClick, itemId, -1); } else { @@ -687,14 +731,14 @@ public class MenuEntrySwapperPlugin extends Plugin { if (option.equals(inventoryActions[index])) { - setSwapConfig(itemId, index); + setSwapConfig(configuringShiftClick, itemId, index); break; } } } } - private void swapMenuEntry(int index, MenuEntry menuEntry) + private void swapMenuEntry(MenuEntry[] menuEntries, int index, MenuEntry menuEntry) { final int eventId = menuEntry.getIdentifier(); final MenuAction menuAction = MenuAction.of(menuEntry.getType()); @@ -702,6 +746,7 @@ public class MenuEntrySwapperPlugin extends Plugin final String target = Text.removeTags(menuEntry.getTarget()).toLowerCase(); final NPC hintArrowNpc = client.getHintArrowNpc(); + // Don't swap on hint arrow npcs, usually they need "Talk-to" for clues. if (hintArrowNpc != null && hintArrowNpc.getIndex() == eventId && NPC_MENU_TYPES.contains(menuAction)) @@ -709,22 +754,23 @@ public class MenuEntrySwapperPlugin extends Plugin return; } - if (shiftModifier() && (menuAction == MenuAction.ITEM_FIRST_OPTION + final boolean itemOp = menuAction == MenuAction.ITEM_FIRST_OPTION || menuAction == MenuAction.ITEM_SECOND_OPTION || menuAction == MenuAction.ITEM_THIRD_OPTION || menuAction == MenuAction.ITEM_FOURTH_OPTION || menuAction == MenuAction.ITEM_FIFTH_OPTION - || menuAction == MenuAction.ITEM_USE)) + || menuAction == MenuAction.ITEM_USE; + if (shiftModifier() && itemOp) { // Special case use shift click due to items not actually containing a "Use" option, making // the client unable to perform the swap itself. if (config.shiftClickCustomization() && !option.equals("use")) { - Integer customOption = getSwapConfig(eventId); + Integer customOption = getSwapConfig(true, eventId); if (customOption != null && customOption == -1) { - swap("use", target, index, true); + swap(menuEntries, "use", target, index, true); } } @@ -733,12 +779,31 @@ public class MenuEntrySwapperPlugin extends Plugin return; } + // Custom left-click item swap + if (itemOp) + { + Integer swapIndex = getSwapConfig(false, eventId); + if (swapIndex != null && index < menuEntries.length - 1) + { + MenuAction swapAction = swapIndex >= 0 + ? MenuAction.of(MenuAction.ITEM_FIRST_OPTION.getId() + swapIndex) + : MenuAction.ITEM_USE; + + if (menuAction == swapAction) + { + swap(optionIndexes, menuEntries, index, menuEntries.length - 1); + return; + } + } + } + + // Built-in swaps Collection swaps = this.swaps.get(option); for (Swap swap : swaps) { if (swap.getTargetPredicate().test(target) && swap.getEnabled().get()) { - if (swap(swap.getSwappedOption(), target, index, swap.isStrict())) + if (swap(menuEntries, swap.getSwappedOption(), target, index, swap.isStrict())) { break; } @@ -771,7 +836,7 @@ public class MenuEntrySwapperPlugin extends Plugin idx = 0; for (MenuEntry entry : menuEntries) { - swapMenuEntry(idx++, entry); + swapMenuEntry(menuEntries, idx++, entry); } } @@ -786,7 +851,7 @@ public class MenuEntrySwapperPlugin extends Plugin } ItemComposition itemComposition = event.getItemComposition(); - Integer option = getSwapConfig(itemComposition.getId()); + Integer option = getSwapConfig(true, itemComposition.getId()); if (option != null) { @@ -794,10 +859,8 @@ public class MenuEntrySwapperPlugin extends Plugin } } - private boolean swap(String option, String target, int index, boolean strict) + private boolean swap(MenuEntry[] menuEntries, String option, String target, int index, boolean strict) { - MenuEntry[] menuEntries = client.getMenuEntries(); - // find option to swap with int optionIdx = findIndex(menuEntries, index, option, target, strict); @@ -882,30 +945,55 @@ public class MenuEntrySwapperPlugin extends Plugin list.add(idx < 0 ? -idx - 1 : idx, value); } - private void removeShiftClickCustomizationMenus() + private void removeCusomizationMenus() { - menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE); - menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE); - menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE); - menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE); - menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE); - menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE); + // Shift click + menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE_SC); + menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE_SC); + menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE_SC); + menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE_SC); + menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE_SC); + menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE_SC); + // Left click + menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE_LC); + menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE_LC); + menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE_LC); + menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE_LC); + menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE_LC); + menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE_LC); } - private void refreshShiftClickCustomizationMenus() + private void rebuildCustomizationMenus() { - removeShiftClickCustomizationMenus(); - if (configuringShiftClick) + removeCusomizationMenus(); + if (configuringLeftClick) { - menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE); - menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE); - menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE); + menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE_LC); + menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE_LC); + menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE_LC); + } + else if (configuringShiftClick) + { + menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE_SC); + menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE_SC); + menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE_SC); } else { - menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE); - menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE); - menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE); + // Left click + if (config.leftClickCustomization()) + { + menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE_LC); + menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE_LC); + menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE_LC); + } + // Shift click + if (config.shiftClickCustomization()) + { + menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE_SC); + menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE_SC); + menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE_SC); + } } }