Search in sources :

Example 1 with TreeTableSpeedSearch

use of com.intellij.ui.TreeTableSpeedSearch in project intellij-community by JetBrains.

the class ExtractedSettingsDialog method buildExtractedSettingsTree.

protected JComponent buildExtractedSettingsTree() {
    Collection<Value> unusedValues = ContainerUtil.newHashSet(myValues);
    myRoot = new DefaultMutableTreeNode();
    for (Map.Entry<LanguageCodeStyleSettingsProvider.SettingsType, Map<CodeStyleSettingPresentation.SettingsGroup, List<CodeStyleSettingPresentation>>> typeEntry : myNameProvider.mySettings.entrySet()) {
        DefaultMutableTreeNode settingsNode = null;
        for (Map.Entry<CodeStyleSettingPresentation.SettingsGroup, List<CodeStyleSettingPresentation>> groupEntry : typeEntry.getValue().entrySet()) {
            CodeStyleSettingPresentation.SettingsGroup group = groupEntry.getKey();
            List<CodeStyleSettingPresentation> representations = groupEntry.getValue();
            List<CodeStyleSettingPresentation> children = ContainerUtil.emptyList();
            DefaultMutableTreeNode groupNode = null;
            if (group.name == null && !representations.isEmpty()) {
                //there is a setting with name coinciding with group name
                if (representations.size() > 1) {
                    children = representations.subList(1, representations.size());
                }
                CodeStyleSettingPresentation headRep = representations.get(0);
                Value myValue = CodeStyleSettingsNameProvider.getValue(headRep, myValues);
                if (myValue == null) {
                    //value was not found (was not selected)
                    groupNode = new SettingsTreeNode(headRep.getUiName());
                } else {
                    groupNode = new SettingsTreeNode(headRep.getUiName());
                    groupNode.add(new SettingsTreeNode(headRep.getValueUiName(myValue.value), headRep, true, myValue));
                    unusedValues.remove(myValue);
                }
            } else {
                children = representations;
            }
            for (CodeStyleSettingPresentation representation : children) {
                Value myValue = CodeStyleSettingsNameProvider.getValue(representation, myValues);
                if (myValue != null) {
                    if (groupNode == null) {
                        groupNode = new SettingsTreeNode(group.name);
                    }
                    groupNode.add(new SettingsTreeNode(representation.getValueUiName(myValue.value), representation, false, myValue));
                    unusedValues.remove(myValue);
                }
            }
            if (groupNode != null && !groupNode.isLeaf()) {
                if (settingsNode == null) {
                    settingsNode = new SettingsTreeNode(CodeStyleSettingsNameProvider.getSettingsTypeName(typeEntry.getKey()));
                }
                settingsNode.add(groupNode);
            }
        }
        if (settingsNode != null) {
            myRoot.add(settingsNode);
        }
    }
    //TODO: for now, settings without UI presentation are not displayed. Do something about it.
    //unusedValues = ContainerUtil.filter(unusedValues, new Condition<Value>(){
    //  @Override
    //  public boolean value(Value value) {
    //    return value.state == Value.STATE.SELECTED;
    //  }
    //});
    //
    //DefaultMutableTreeNode unnamedNode = null;
    //for (Value value: unusedValues) {
    //  if (unnamedNode == null) {
    //    unnamedNode = new SettingsTreeNode("Settings without UI representation");
    //  }
    //  unnamedNode.add(new SettingsTreeNode(value.value.toString(), null, false, value.name, value));
    //}
    //
    //if (unnamedNode != null) {
    //  myRoot.add(unnamedNode);
    //}
    final ColumnInfo[] COLUMNS = new ColumnInfo[] { getTitleColumnInfo(), getValueColumnInfo() };
    ListTreeTableModel model = new ListTreeTableModel(myRoot, COLUMNS);
    final TreeTable treeTable = new TreeTable(model) {

        @Override
        public TreeTableCellRenderer createTableRenderer(TreeTableModel treeTableModel) {
            TreeTableCellRenderer tableRenderer = super.createTableRenderer(treeTableModel);
            UIUtil.setLineStyleAngled(tableRenderer);
            tableRenderer.setRootVisible(false);
            tableRenderer.setShowsRootHandles(true);
            return tableRenderer;
        }

        @Override
        public TableCellRenderer getCellRenderer(int row, int column) {
            TreePath treePath = getTree().getPathForRow(row);
            if (treePath == null)
                return super.getCellRenderer(row, column);
            Object node = treePath.getLastPathComponent();
            TableCellRenderer renderer = COLUMNS[column].getRenderer(node);
            return renderer == null ? super.getCellRenderer(row, column) : renderer;
        }

        @Override
        public TableCellEditor getCellEditor(int row, int column) {
            TreePath treePath = getTree().getPathForRow(row);
            if (treePath == null)
                return super.getCellEditor(row, column);
            Object node = treePath.getLastPathComponent();
            TableCellEditor editor = COLUMNS[column].getEditor(node);
            return editor == null ? super.getCellEditor(row, column) : editor;
        }
    };
    new TreeTableSpeedSearch(treeTable).setComparator(new SpeedSearchComparator(false));
    treeTable.setRootVisible(false);
    final JTree tree = treeTable.getTree();
    tree.setCellRenderer(myTitleRenderer);
    tree.setShowsRootHandles(true);
    treeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    treeTable.setTableHeader(null);
    TreeUtil.expandAll(tree);
    treeTable.getColumnModel().getSelectionModel().setAnchorSelectionIndex(1);
    treeTable.getColumnModel().getSelectionModel().setLeadSelectionIndex(1);
    int maxWidth = tree.getPreferredScrollableViewportSize().width + 10;
    final TableColumn titleColumn = treeTable.getColumnModel().getColumn(0);
    titleColumn.setPreferredWidth(maxWidth);
    titleColumn.setMinWidth(maxWidth);
    titleColumn.setMaxWidth(maxWidth);
    titleColumn.setResizable(false);
    final Dimension valueSize = new JLabel(ApplicationBundle.message("option.table.sizing.text")).getPreferredSize();
    treeTable.setPreferredScrollableViewportSize(new Dimension(maxWidth + valueSize.width + 10, 20));
    treeTable.setBackground(UIUtil.getPanelBackground());
    treeTable.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));
    final Dimension screenSize = treeTable.getToolkit().getScreenSize();
    JBScrollPane scroller = new JBScrollPane(treeTable) {

        @Override
        public Dimension getMinimumSize() {
            return super.getPreferredSize();
        }
    };
    final Dimension preferredSize = new Dimension(Math.min(screenSize.width / 2, treeTable.getPreferredSize().width), Math.min(screenSize.height / 2, treeTable.getPreferredSize().height));
    getRootPane().setPreferredSize(preferredSize);
    return scroller;
}
Also used : TreeTableSpeedSearch(com.intellij.ui.TreeTableSpeedSearch) ColumnInfo(com.intellij.util.ui.ColumnInfo) CodeStyleSettingPresentation(com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation) List(java.util.List) AbstractTableCellEditor(com.intellij.util.ui.AbstractTableCellEditor) TableCellEditor(javax.swing.table.TableCellEditor) TableCellRenderer(javax.swing.table.TableCellRenderer) TableColumn(javax.swing.table.TableColumn) Value(com.intellij.psi.codeStyle.extractor.values.Value) SpeedSearchComparator(com.intellij.ui.SpeedSearchComparator) JBScrollPane(com.intellij.ui.components.JBScrollPane)

Example 2 with TreeTableSpeedSearch

use of com.intellij.ui.TreeTableSpeedSearch in project intellij-community by JetBrains.

the class OptionTableWithPreviewPanel method createOptionsTree.

protected TreeTable createOptionsTree(CodeStyleSettings settings) {
    DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode();
    Map<String, DefaultMutableTreeNode> groupsMap = new THashMap<>();
    List<Option> sorted = sortOptions(ContainerUtil.concat(myOptions, myCustomOptions));
    for (Option each : sorted) {
        if (!(myCustomOptions.contains(each) || myAllowedOptions.contains(each.field.getName()) || myShowAllStandardOptions))
            continue;
        String group = each.groupName;
        MyTreeNode newNode = new MyTreeNode(each, each.title, settings);
        DefaultMutableTreeNode groupNode = groupsMap.get(group);
        if (groupNode != null) {
            groupNode.add(newNode);
        } else {
            String groupName;
            if (group == null) {
                groupName = each.title;
                groupNode = newNode;
            } else {
                groupName = group;
                groupNode = new DefaultMutableTreeNode(groupName);
                groupNode.add(newNode);
            }
            groupsMap.put(groupName, groupNode);
            rootNode.add(groupNode);
        }
    }
    ListTreeTableModel model = new ListTreeTableModel(rootNode, COLUMNS);
    TreeTable treeTable = new TreeTable(model) {

        @Override
        public TreeTableCellRenderer createTableRenderer(TreeTableModel treeTableModel) {
            TreeTableCellRenderer tableRenderer = super.createTableRenderer(treeTableModel);
            UIUtil.setLineStyleAngled(tableRenderer);
            tableRenderer.setRootVisible(false);
            tableRenderer.setShowsRootHandles(true);
            return tableRenderer;
        }

        @Override
        public TableCellRenderer getCellRenderer(int row, int column) {
            TreePath treePath = getTree().getPathForRow(row);
            if (treePath == null)
                return super.getCellRenderer(row, column);
            Object node = treePath.getLastPathComponent();
            @SuppressWarnings("unchecked") TableCellRenderer renderer = COLUMNS[column].getRenderer(node);
            return renderer == null ? super.getCellRenderer(row, column) : renderer;
        }

        @Override
        public TableCellEditor getCellEditor(int row, int column) {
            TreePath treePath = getTree().getPathForRow(row);
            if (treePath == null)
                return super.getCellEditor(row, column);
            Object node = treePath.getLastPathComponent();
            @SuppressWarnings("unchecked") TableCellEditor editor = COLUMNS[column].getEditor(node);
            return editor == null ? super.getCellEditor(row, column) : editor;
        }
    };
    new TreeTableSpeedSearch(treeTable).setComparator(new SpeedSearchComparator(false));
    treeTable.setRootVisible(false);
    final JTree tree = treeTable.getTree();
    tree.setCellRenderer(myTitleRenderer);
    tree.setShowsRootHandles(true);
    //myTreeTable.setRowHeight(new JComboBox(new String[]{"Sample Text"}).getPreferredSize().height);
    treeTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    treeTable.setTableHeader(null);
    TreeUtil.expandAll(tree);
    treeTable.getColumnModel().getSelectionModel().setAnchorSelectionIndex(1);
    treeTable.getColumnModel().getSelectionModel().setLeadSelectionIndex(1);
    int maxWidth = tree.getPreferredScrollableViewportSize().width + 10;
    final TableColumn titleColumn = treeTable.getColumnModel().getColumn(0);
    titleColumn.setPreferredWidth(maxWidth);
    titleColumn.setMinWidth(maxWidth);
    titleColumn.setMaxWidth(maxWidth);
    titleColumn.setResizable(false);
    //final TableColumn levelColumn = treeTable.getColumnModel().getColumn(1);
    //TODO[max]: better preffered size...
    //TODO[kb]: Did I fixed it by making the last column floating?
    //levelColumn.setPreferredWidth(valueSize.width);
    //levelColumn.setMaxWidth(valueSize.width);
    //levelColumn.setMinWidth(valueSize.width);
    //levelColumn.setResizable(false);
    final Dimension valueSize = new JLabel(ApplicationBundle.message("option.table.sizing.text")).getPreferredSize();
    treeTable.setPreferredScrollableViewportSize(new Dimension(maxWidth + valueSize.width + 10, 20));
    return treeTable;
}
Also used : TableCellRenderer(javax.swing.table.TableCellRenderer) TreeTableCellRenderer(com.intellij.ui.treeStructure.treetable.TreeTableCellRenderer) TreeTableSpeedSearch(com.intellij.ui.TreeTableSpeedSearch) TreeTable(com.intellij.ui.treeStructure.treetable.TreeTable) ListTreeTableModel(com.intellij.ui.treeStructure.treetable.ListTreeTableModel) TreeTableModel(com.intellij.ui.treeStructure.treetable.TreeTableModel) TableColumn(javax.swing.table.TableColumn) TreeTableCellRenderer(com.intellij.ui.treeStructure.treetable.TreeTableCellRenderer) THashMap(gnu.trove.THashMap) ListTreeTableModel(com.intellij.ui.treeStructure.treetable.ListTreeTableModel) AbstractTableCellEditor(com.intellij.util.ui.AbstractTableCellEditor) TableCellEditor(javax.swing.table.TableCellEditor) SpeedSearchComparator(com.intellij.ui.SpeedSearchComparator)

Example 3 with TreeTableSpeedSearch

use of com.intellij.ui.TreeTableSpeedSearch in project intellij-plugins by JetBrains.

the class LiveObjectsView method setupUI.

private void setupUI() {
    liveObjectsTreeTable.getTree().setRootVisible(false);
    setColumnWidth(liveObjectsTreeTable.getColumnModel().getColumn(1), MS_COLUMN_WIDTH);
    setColumnWidth(liveObjectsTreeTable.getColumnModel().getColumn(2), MS_COLUMN_WIDTH);
    new TreeTableSpeedSearch(liveObjectsTreeTable).setComparator(new SpeedSearchComparator(false));
    PopupHandler.installPopupHandler(liveObjectsTreeTable, PROFILER_VIEW_GROUP_ID, ActionPlaces.UNKNOWN);
    liveObjectsTreeTable.getEmptyText().setText(ProfilerBundle.message("live.objects.loading"));
    liveObjectsTreeTable.getTree().setCellRenderer(new SizeInfoCellRenderer() {

        @Override
        public void customizeCellRenderer(Object value, boolean selected) {
            Icon icon = AllIcons.General.Information;
            if (value instanceof SizeInfoNode) {
                icon = ((SizeInfoNode) value).isMethod() ? AllIcons.Nodes.Method : AllIcons.Nodes.Class;
            }
            setPaintFocusBorder(false);
            setIcon(icon);
            super.customizeCellRenderer(value, selected);
        }
    });
    final ComboBoxModel model = filterScope.getComboBox().getModel();
    if (model instanceof DefaultComboBoxModel) {
        ((DefaultComboBoxModel) model).insertElementAt(new ScopeDescriptor(new AllSearchScope(getProject())), 0);
    }
}
Also used : TreeTableSpeedSearch(com.intellij.ui.TreeTableSpeedSearch) ScopeDescriptor(com.intellij.ide.util.scopeChooser.ScopeDescriptor) SizeInfoCellRenderer(com.jetbrains.actionscript.profiler.render.SizeInfoCellRenderer) AllSearchScope(com.jetbrains.actionscript.profiler.util.AllSearchScope) SizeInfoNode(com.jetbrains.actionscript.profiler.livetable.SizeInfoNode) SpeedSearchComparator(com.intellij.ui.SpeedSearchComparator)

Example 4 with TreeTableSpeedSearch

use of com.intellij.ui.TreeTableSpeedSearch in project intellij-plugins by JetBrains.

the class CPUSnapshotView method setupUI.

private void setupUI() {
    myHotSpotsTreeTable.setRootVisible(false);
    myTracesTreeTable.setRootVisible(false);
    setColumnWidth(myHotSpotsTreeTable.getColumnModel().getColumn(1), MS_COLUMN_WIDTH);
    setColumnWidth(myHotSpotsTreeTable.getColumnModel().getColumn(2), MS_COLUMN_WIDTH);
    setColumnWidth(myTracesTreeTable.getColumnModel().getColumn(1), MS_COLUMN_WIDTH);
    setColumnWidth(myTracesTreeTable.getColumnModel().getColumn(2), MS_COLUMN_WIDTH);
    scopeLabel.setLabelFor(filterScope.getComboBox());
    invokedFunctionsLabel.setLabelFor(myHotSpotsTreeTable);
    mergedCalleesLabel.setLabelFor(myTracesTreeTable);
    new TreeTableSpeedSearch(myHotSpotsTreeTable).setComparator(new SpeedSearchComparator(false));
    new TreeTableSpeedSearch(myTracesTreeTable).setComparator(new SpeedSearchComparator(false));
    PopupHandler.installPopupHandler(myHotSpotsTreeTable, PROFILER_VIEW_GROUP_ID, ActionPlaces.UNKNOWN);
    PopupHandler.installPopupHandler(myTracesTreeTable, PROFILER_VIEW_GROUP_ID, ActionPlaces.UNKNOWN);
    final ComboBoxModel model = filterScope.getComboBox().getModel();
    if (model instanceof DefaultComboBoxModel) {
        ((DefaultComboBoxModel) model).insertElementAt(new ScopeDescriptor(new AllSearchScope(getProject())), 0);
    }
    myHotSpotsTreeTable.getTree().setCellRenderer(new FrameInfoCellRenderer(projectScope) {

        @Override
        public void customizeCellRenderer(Object value, boolean selected) {
            setPaintFocusBorder(false);
            setScopeIcon(FlexProfilerIcons.CallerArrow);
            setNonScopeIcon(FlexProfilerIcons.CallerLeafArrow);
            super.customizeCellRenderer(value, selected);
        }
    });
    myTracesTreeTable.getTree().setCellRenderer(new FrameInfoCellRenderer(projectScope) {

        @Override
        public void customizeCellRenderer(Object value, boolean selected) {
            setPaintFocusBorder(false);
            setScopeIcon(FlexProfilerIcons.CalleeArrow);
            setNonScopeIcon(FlexProfilerIcons.CalleeLeafArrow);
            super.customizeCellRenderer(value, selected);
        }
    });
    myFilterSystemStuff.addItemListener(new ItemListener() {

        public void itemStateChanged(ItemEvent e) {
            buildPerformanceSamples(myHotSpotsTreeTable.getSortableTreeTableModel());
            TreeUtil.expand(myHotSpotsTreeTable.getTree(), 1);
        }
    });
    filterScope.getComboBox().addItemListener(new ItemListener() {

        public void itemStateChanged(ItemEvent e) {
            myAlarm.cancelAllRequests();
            myAlarm.addRequest(() -> {
                buildPerformanceSamples(myHotSpotsTreeTable.getSortableTreeTableModel());
                TreeUtil.expand(myHotSpotsTreeTable.getTree(), 1);
            }, 100);
        }
    });
}
Also used : TreeTableSpeedSearch(com.intellij.ui.TreeTableSpeedSearch) ScopeDescriptor(com.intellij.ide.util.scopeChooser.ScopeDescriptor) FrameInfoCellRenderer(com.jetbrains.actionscript.profiler.render.FrameInfoCellRenderer) ItemEvent(java.awt.event.ItemEvent) AllSearchScope(com.jetbrains.actionscript.profiler.util.AllSearchScope) ItemListener(java.awt.event.ItemListener) SpeedSearchComparator(com.intellij.ui.SpeedSearchComparator)

Aggregations

SpeedSearchComparator (com.intellij.ui.SpeedSearchComparator)4 TreeTableSpeedSearch (com.intellij.ui.TreeTableSpeedSearch)4 ScopeDescriptor (com.intellij.ide.util.scopeChooser.ScopeDescriptor)2 AbstractTableCellEditor (com.intellij.util.ui.AbstractTableCellEditor)2 AllSearchScope (com.jetbrains.actionscript.profiler.util.AllSearchScope)2 TableCellEditor (javax.swing.table.TableCellEditor)2 TableCellRenderer (javax.swing.table.TableCellRenderer)2 TableColumn (javax.swing.table.TableColumn)2 Value (com.intellij.psi.codeStyle.extractor.values.Value)1 CodeStyleSettingPresentation (com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation)1 JBScrollPane (com.intellij.ui.components.JBScrollPane)1 ListTreeTableModel (com.intellij.ui.treeStructure.treetable.ListTreeTableModel)1 TreeTable (com.intellij.ui.treeStructure.treetable.TreeTable)1 TreeTableCellRenderer (com.intellij.ui.treeStructure.treetable.TreeTableCellRenderer)1 TreeTableModel (com.intellij.ui.treeStructure.treetable.TreeTableModel)1 ColumnInfo (com.intellij.util.ui.ColumnInfo)1 SizeInfoNode (com.jetbrains.actionscript.profiler.livetable.SizeInfoNode)1 FrameInfoCellRenderer (com.jetbrains.actionscript.profiler.render.FrameInfoCellRenderer)1 SizeInfoCellRenderer (com.jetbrains.actionscript.profiler.render.SizeInfoCellRenderer)1 THashMap (gnu.trove.THashMap)1