use of com.intellij.ide.commander.ProjectListBuilder in project intellij-community by JetBrains.
the class FileStructureDialog method addCheckbox.
private void addCheckbox(final JPanel panel, final TreeAction action) {
String text = action instanceof FileStructureFilter ? ((FileStructureFilter) action).getCheckBoxText() : action instanceof FileStructureNodeProvider ? ((FileStructureNodeProvider) action).getCheckBoxText() : null;
if (text == null)
return;
Shortcut[] shortcuts = FileStructurePopup.extractShortcutFor(action);
final JCheckBox chkFilter = new JCheckBox();
chkFilter.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
ProjectListBuilder builder = (ProjectListBuilder) myCommanderPanel.getBuilder();
PsiElement currentParent = null;
if (builder != null) {
final AbstractTreeNode parentNode = builder.getParentNode();
final Object value = parentNode.getValue();
if (value instanceof StructureViewTreeElement) {
final Object elementValue = ((StructureViewTreeElement) value).getValue();
if (elementValue instanceof PsiElement) {
currentParent = (PsiElement) elementValue;
}
}
}
final boolean state = chkFilter.isSelected();
myTreeActionsOwner.setActionIncluded(action, action instanceof FileStructureFilter ? !state : state);
myTreeStructure.rebuildTree();
if (builder != null) {
if (currentParent != null) {
boolean oldNarrowDown = myShouldNarrowDown;
myShouldNarrowDown = false;
try {
builder.enterElement(currentParent, PsiUtilCore.getVirtualFile(currentParent));
} finally {
myShouldNarrowDown = oldNarrowDown;
}
}
builder.updateList(true);
}
if (SpeedSearchBase.hasActiveSpeedSearch(myCommanderPanel.getList())) {
final SpeedSearchSupply supply = SpeedSearchSupply.getSupply(myCommanderPanel.getList());
if (supply != null && supply.isPopupActive())
supply.refreshSelection();
}
}
});
chkFilter.setFocusable(false);
if (shortcuts.length > 0) {
text += " (" + KeymapUtil.getShortcutText(shortcuts[0]) + ")";
new AnAction() {
@Override
public void actionPerformed(final AnActionEvent e) {
chkFilter.doClick();
}
}.registerCustomShortcutSet(new CustomShortcutSet(shortcuts), myCommanderPanel);
}
chkFilter.setText(text);
panel.add(chkFilter);
//,new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
}
use of com.intellij.ide.commander.ProjectListBuilder in project intellij-community by JetBrains.
the class FileStructureDialog method createCenterPanel.
@Override
protected JComponent createCenterPanel() {
myCommanderPanel = new MyCommanderPanel(myProject);
myTreeStructure = new MyStructureTreeStructure();
List<FileStructureFilter> fileStructureFilters = new ArrayList<>();
List<FileStructureNodeProvider> fileStructureNodeProviders = new ArrayList<>();
if (myTreeActionsOwner != null) {
for (Filter filter : myBaseTreeModel.getFilters()) {
if (filter instanceof FileStructureFilter) {
final FileStructureFilter fsFilter = (FileStructureFilter) filter;
myTreeActionsOwner.setActionIncluded(fsFilter, true);
fileStructureFilters.add(fsFilter);
}
}
if (myBaseTreeModel instanceof ProvidingTreeModel) {
for (NodeProvider provider : ((ProvidingTreeModel) myBaseTreeModel).getNodeProviders()) {
if (provider instanceof FileStructureNodeProvider) {
fileStructureNodeProviders.add((FileStructureNodeProvider) provider);
}
}
}
}
PsiFile psiFile = getPsiFile(myProject);
boolean showRoot = isShowRoot(psiFile);
ProjectListBuilder projectListBuilder = new ProjectListBuilder(myProject, myCommanderPanel, myTreeStructure, null, showRoot) {
@Override
protected boolean shouldEnterSingleTopLevelElement(Object rootChild) {
Object element = ((StructureViewTreeElement) ((AbstractTreeNode) rootChild).getValue()).getValue();
return myBaseTreeModel.shouldEnterElement(element);
}
@Override
protected boolean nodeIsAcceptableForElement(AbstractTreeNode node, Object element) {
return Comparing.equal(((StructureViewTreeElement) node.getValue()).getValue(), element);
}
@Override
protected void refreshSelection() {
myCommanderPanel.scrollSelectionInView();
if (myShouldNarrowDown) {
myCommanderPanel.updateSpeedSearch();
}
}
@Override
protected List<AbstractTreeNode> getAllAcceptableNodes(final Object[] childElements, VirtualFile file) {
ArrayList<AbstractTreeNode> result = new ArrayList<>();
for (Object childElement : childElements) {
result.add((AbstractTreeNode) childElement);
}
return result;
}
};
myCommanderPanel.setBuilder(projectListBuilder);
myCommanderPanel.setTitlePanelVisible(false);
new AnAction() {
@Override
public void actionPerformed(AnActionEvent e) {
final boolean succeeded = myCommanderPanel.navigateSelectedElement();
if (succeeded) {
unregisterCustomShortcutSet(myCommanderPanel);
}
}
}.registerCustomShortcutSet(ActionManager.getInstance().getAction(IdeActions.ACTION_EDIT_SOURCE).getShortcutSet(), myCommanderPanel);
myCommanderPanel.setPreferredSize(JBUI.size(400, 500));
JPanel panel = new JPanel(new BorderLayout());
JPanel comboPanel = new JPanel(new GridLayout(0, 2, 0, 0));
addNarrowDownCheckbox(comboPanel);
for (FileStructureFilter filter : fileStructureFilters) {
addCheckbox(comboPanel, filter);
}
for (FileStructureNodeProvider provider : fileStructureNodeProviders) {
addCheckbox(comboPanel, provider);
}
myCommanderPanel.setBorder(IdeBorderFactory.createBorder(SideBorder.TOP));
panel.add(comboPanel, BorderLayout.NORTH);
panel.add(myCommanderPanel, BorderLayout.CENTER);
return panel;
}
use of com.intellij.ide.commander.ProjectListBuilder in project intellij-community by JetBrains.
the class FileStructureDialog method addNarrowDownCheckbox.
private void addNarrowDownCheckbox(final JPanel panel) {
final JCheckBox checkBox = new JCheckBox(IdeBundle.message("checkbox.narrow.down.the.list.on.typing"));
checkBox.setSelected(PropertiesComponent.getInstance().isTrueValue(ourPropertyKey));
checkBox.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
myShouldNarrowDown = checkBox.isSelected();
PropertiesComponent.getInstance().setValue(ourPropertyKey, myShouldNarrowDown);
ProjectListBuilder builder = (ProjectListBuilder) myCommanderPanel.getBuilder();
if (builder == null) {
return;
}
builder.addUpdateRequest();
}
});
checkBox.setFocusable(false);
panel.add(checkBox);
//,new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
}
Aggregations