void (JPanel panel, TreeAction action) { String text = action instanceof FileStructureFilter ? ((FileStructureFilter)action).getCheckBoxText() : action instanceof FileStructureNodeProvider ? ((FileStructureNodeProvider<?>)action).getCheckBoxText() : null; if (text == null) return; Shortcut[] shortcuts = extractShortcutFor(action); JBCheckBox checkBox = new JBCheckBox(); checkBox.setOpaque(false); UIUtil.applyStyle(UIUtil.ComponentStyle.SMALL, checkBox); boolean selected = getDefaultValue(action); checkBox.setSelected(selected); boolean isRevertedStructureFilter = action instanceof FileStructureFilter && ((FileStructureFilter)action).isReverted(); myTreeActionsOwner.setActionIncluded(action, isRevertedStructureFilter != selected); checkBox.addActionListener(actionEvent -> { logFileStructureCheckboxClick(action); boolean state = checkBox.isSelected(); if (!myAutoClicked.contains(checkBox)) { saveState(action, state); } myTreeActionsOwner.setActionIncluded(action, isRevertedStructureFilter != state); rebuild(false).onProcessed(ignore -> { if (mySpeedSearch.isPopupActive()) { mySpeedSearch.refreshSelection(); } }); }); checkBox.setFocusable(false); if (shortcuts.length > 0) { text += " (" + KeymapUtil.getShortcutText(shortcuts[0]) + ")"; DumbAwareAction.create(e -> checkBox.doClick()) .registerCustomShortcutSet(new CustomShortcutSet(shortcuts), myTree); } checkBox.setText(text); panel.add(checkBox); myCheckBoxes.put(action.getClass(), checkBox); }