Search in sources :

Example 1 with CodeStyleSettingPresentation

use of com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation 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 CodeStyleSettingPresentation

use of com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation in project intellij-community by JetBrains.

the class CodeStyleBlankLinesPanel method createOptionsGroup.

@Nullable
private OptionGroup createOptionsGroup(@NotNull String groupName, @NotNull List<CodeStyleSettingPresentation> settings) {
    OptionGroup optionGroup = new OptionGroup(groupName);
    for (CodeStyleSettingPresentation setting : settings) {
        createOption(optionGroup, setting.getUiName(), setting.getFieldName());
    }
    initCustomOptions(optionGroup, groupName);
    if (optionGroup.getComponents().length == 0)
        return null;
    return optionGroup;
}
Also used : OptionGroup(com.intellij.ui.OptionGroup) CodeStyleSettingPresentation(com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation) Nullable(org.jetbrains.annotations.Nullable)

Example 3 with CodeStyleSettingPresentation

use of com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation in project intellij-community by JetBrains.

the class WrappingAndBracesPanel method initTables.

@Override
protected void initTables() {
    for (Map.Entry<CodeStyleSettingPresentation.SettingsGroup, List<CodeStyleSettingPresentation>> entry : CodeStyleSettingPresentation.getStandardSettings(getSettingsType()).entrySet()) {
        CodeStyleSettingPresentation.SettingsGroup group = entry.getKey();
        for (CodeStyleSettingPresentation setting : entry.getValue()) {
            //TODO this is ugly, but is the fastest way to make Options UI API and settings representation API connect
            String fieldName = setting.getFieldName();
            String uiName = setting.getUiName();
            if (setting instanceof CodeStyleBoundedIntegerSettingPresentation) {
                CodeStyleBoundedIntegerSettingPresentation intSetting = (CodeStyleBoundedIntegerSettingPresentation) setting;
                int defaultValue = intSetting.getDefaultValue();
                addOption(fieldName, uiName, group.name, intSetting.getLowerBound(), intSetting.getUpperBound(), defaultValue, intSetting.getValueUiName(defaultValue));
            } else if (setting instanceof CodeStyleSelectSettingPresentation) {
                CodeStyleSelectSettingPresentation selectSetting = (CodeStyleSelectSettingPresentation) setting;
                addOption(fieldName, uiName, group.name, selectSetting.getOptions(), selectSetting.getValues());
            } else {
                addOption(fieldName, uiName, group.name);
            }
        }
    }
}
Also used : CodeStyleSettingPresentation(com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation) CodeStyleSelectSettingPresentation(com.intellij.psi.codeStyle.presentation.CodeStyleSelectSettingPresentation) List(java.util.List) Map(java.util.Map) MultiMap(com.intellij.util.containers.MultiMap) CodeStyleBoundedIntegerSettingPresentation(com.intellij.psi.codeStyle.presentation.CodeStyleBoundedIntegerSettingPresentation)

Example 4 with CodeStyleSettingPresentation

use of com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation in project intellij-community by JetBrains.

the class CodeStyleSettingsNameProvider method moveStandardOption.

@Override
public void moveStandardOption(String fieldName, String newGroup) {
    for (SettingsType settingsType : SettingsType.values()) {
        Map<SettingsGroup, List<CodeStyleSettingPresentation>> standardGroups = mySettings.get(settingsType);
        if (standardGroups == null) {
            standardGroups = ContainerUtil.newLinkedHashMap();
            mySettings.put(settingsType, standardGroups);
        }
        for (Map.Entry<SettingsGroup, List<CodeStyleSettingPresentation>> entry : standardGroups.entrySet()) {
            CodeStyleSettingPresentation moveSetting = null;
            for (CodeStyleSettingPresentation setting : entry.getValue()) {
                if (setting.getFieldName().equals(fieldName)) {
                    moveSetting = setting;
                    break;
                }
            }
            if (moveSetting != null) {
                entry.getValue().remove(moveSetting);
                addSetting(new SettingsGroup(newGroup), moveSetting, null, null);
            }
        }
    }
}
Also used : CodeStyleSettingPresentation(com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation) SettingsGroup(com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation.SettingsGroup) SettingsType(com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider.SettingsType)

Example 5 with CodeStyleSettingPresentation

use of com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation in project intellij-community by JetBrains.

the class CodeStyleSettingsNameProvider method getSettings.

public String getSettings(List<Value> values) {
    StringBuilder builder = new StringBuilder();
    for (SettingsType settingsType : LanguageCodeStyleSettingsProvider.SettingsType.values()) {
        builder.append("<br><b><u>").append(getSettingsTypeName(settingsType)).append("</u></b>");
        Map<SettingsGroup, List<CodeStyleSettingPresentation>> groups = mySettings.get(settingsType);
        if (groups != null) {
            for (Map.Entry<SettingsGroup, List<CodeStyleSettingPresentation>> entry : groups.entrySet()) {
                boolean firstSettingGroupTop = entry.getKey().isNull();
                boolean groupReported = false;
                for (final CodeStyleSettingPresentation setting : entry.getValue()) {
                    Value myValue = ContainerUtil.find(values, value -> value.state == Value.STATE.SELECTED && value.name.equals(setting.getFieldName()));
                    if (myValue == null) {
                        continue;
                    }
                    if (!groupReported) {
                        if (firstSettingGroupTop) {
                            builder.append("<b>");
                        } else {
                            builder.append("<br><b>").append(entry.getKey().name).append("</b>");
                        }
                    }
                    builder.append("<br>");
                    String postNameSign = setting.getUiName().endsWith(":") ? " " : ": ";
                    builder.append(setting.getUiName()).append(postNameSign).append(setting.getValueUiName(myValue.value));
                    if (!groupReported) {
                        if (firstSettingGroupTop) {
                            builder.append("</b>");
                        }
                    }
                    groupReported = true;
                }
            }
        }
    }
    return builder.toString();
}
Also used : CodeStyleSettingPresentation(com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation) SettingsGroup(com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation.SettingsGroup) SettingsType(com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider.SettingsType) Value(com.intellij.psi.codeStyle.extractor.values.Value)

Aggregations

CodeStyleSettingPresentation (com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation)6 SettingsGroup (com.intellij.psi.codeStyle.presentation.CodeStyleSettingPresentation.SettingsGroup)3 SettingsType (com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider.SettingsType)2 Value (com.intellij.psi.codeStyle.extractor.values.Value)2 List (java.util.List)2 CodeStyleBoundedIntegerSettingPresentation (com.intellij.psi.codeStyle.presentation.CodeStyleBoundedIntegerSettingPresentation)1 CodeStyleSelectSettingPresentation (com.intellij.psi.codeStyle.presentation.CodeStyleSelectSettingPresentation)1 OptionGroup (com.intellij.ui.OptionGroup)1 SpeedSearchComparator (com.intellij.ui.SpeedSearchComparator)1 TreeTableSpeedSearch (com.intellij.ui.TreeTableSpeedSearch)1 JBScrollPane (com.intellij.ui.components.JBScrollPane)1 MultiMap (com.intellij.util.containers.MultiMap)1 AbstractTableCellEditor (com.intellij.util.ui.AbstractTableCellEditor)1 ColumnInfo (com.intellij.util.ui.ColumnInfo)1 Map (java.util.Map)1 TableCellEditor (javax.swing.table.TableCellEditor)1 TableCellRenderer (javax.swing.table.TableCellRenderer)1 TableColumn (javax.swing.table.TableColumn)1 Nullable (org.jetbrains.annotations.Nullable)1