@Override public <T extends PreferenceTreeNode<?>> T addChild(PreferenceTreeNode<?> parent, T node) { super.addChild(parent, node); fFocusManager.add(node); if (node instanceof Preference<?>) { Predicate<String> validator = v -> { doValidate(); return true; }; ((Preference<?>) node).init(fWorkingValues, validator , () -> valuesModified()); } if (!(node instanceof Section)) { Label margin= new Label(node.getControl().getParent(), SWT.NONE); margin.setLayoutData(new GridData(fRightMargin, SWT.DEFAULT)); node.addChild(new PreferenceTreeNode<>("", margin, true)); //$NON-NLS-1$ } return node; }
public void doFilter(String filterText) { fRefreshJob.cancel(); fRefreshJob.schedule(getRefreshJobDelay()); filterText= filterText.trim(); int index= filterText.indexOf("~"); //$NON-NLS-1$ StringMatcher labelMatcher= null; StringMatcher valueMatcher= null; if (index == -1) { labelMatcher= createStringMatcher(filterText); } else { if (index == 0 && !fExpectMultiWordValueMatch) { int i= 0; for (; i < filterText.length(); i++) { char ch= filterText.charAt(i); if (ch == ' ' || ch == '\t') { break; } } valueMatcher= createStringMatcher(filterText.substring(1, i)); labelMatcher= createStringMatcher(filterText.substring(i)); } else { labelMatcher= createStringMatcher(filterText.substring(0, index)); if (index < filterText.length()) valueMatcher= createStringMatcher(filterText.substring(index + 1)); } } fMatchFound= fRoot.filter(labelMatcher, fConcatAncestorLabels ? "" : null, valueMatcher); //$NON-NLS-1$ }
List<PreferenceTreeNode<?>> currentLevel= new ArrayList<>(currentNode.getChildren()); List<PreferenceTreeNode<?>> nextLevel= new ArrayList<>(); while (!currentLevel.isEmpty()) { if (previewCode != null && sb.indexOf(previewCode) == -1) sb.append("\n\n").append(previewCode); //$NON-NLS-1$ nextLevel.addAll(node.getChildren()); PreferenceTreeNode<?> node= currentNode.getParent(); while (node != null) { previewCode= doGetPreviewCode(node); if (previewCode != null) return previewCode; node= node.getParent();
protected boolean filter(StringMatcher labelMatcher, String ancestorsLabel, StringMatcher valueMatcher) { String currentLabel= fLabel; if (ancestorsLabel != null) { ancestorsLabel+= ' ' + currentLabel; currentLabel= ancestorsLabel; } //check this node boolean valueMatched= valueMatcher == null || (fValueMatcher != null && fValueMatcher.valueMatches(this, valueMatcher)); boolean matched= valueMatched && (labelMatcher == null || labelMatcher.match(currentLabel)); if (matched) { if (!valueMatched) { // label matched, now filter only by value labelMatcher= null; matched= false; } else { setVisible(true, true); return true; } } //check children if (fChildren != null) { for (PreferenceTreeNode<?> child : fChildren) matched|= child.filter(labelMatcher, ancestorsLabel, valueMatcher); } setVisible(matched, fShowAllChildren); return matched; }
public void unifySectionTitlesHeights(Section section) { List<PreferenceTreeNode<?>> children= section == null ? fRoot.getChildren() : section.getChildren(); int maxHeightDiff= 0; for (PreferenceTreeNode<?> child : children) { if (child instanceof Section) maxHeightDiff= Math.max(maxHeightDiff, ((Section) child).getControl().getTextClientHeightDifference()); } int nextChildIndent= 0; for (PreferenceTreeNode<?> child : children) { int indent= nextChildIndent; nextChildIndent= 0; if (child instanceof Section) { Section sectionChild= (Section) child; int diff= maxHeightDiff - sectionChild.getControl().getTextClientHeightDifference(); nextChildIndent= diff / 2; indent+= diff - diff / 2; unifySectionTitlesHeights(sectionChild); } GridData gd= (GridData) child.getControl().getLayoutData(); gd.verticalIndent+= indent; } } }
protected void setAllExpanded(PreferenceTreeNode<?> start, boolean expanded) { fScrolledPageContent.setRedraw(false); fScrolledPageContent.setReflow(false); ArrayList<PreferenceTreeNode<?>> bfsNodes= new ArrayList<>(); if (start != null) { bfsNodes.add(start); } else { bfsNodes.addAll(fRoot.getChildren()); } for (int i= 0; i < bfsNodes.size(); i++) { PreferenceTreeNode<?> node= bfsNodes.get(i); bfsNodes.addAll(bfsNodes.get(i).getChildren()); if (node.getControl() instanceof ExpandableComposite) ((ExpandableComposite) node.getControl()).setExpanded(expanded); } fScrolledPageContent.setReflow(true); Display.getCurrent().asyncExec(() -> fScrolledPageContent.setRedraw(true)); }
protected void updateUI(PreferenceTreeNode<?> node) { //update node Control control= node.getControl(); if (control != null) { boolean visible= node.isVisible(); setVisible(control, visible); if (control instanceof ExpandableComposite) { ((ExpandableComposite) control).setExpanded(visible); } } //update children List<PreferenceTreeNode<?>> children= node.getChildren(); if (children != null) { for (int i= 0; i < children.size(); i++) { updateUI(children.get(i)); } } }
/** * Enables the filtered preference tree if the argument is <code>true</code>, and disables it * otherwise. * * @param enabled the new enabled state * * @since 3.16 */ public void setEnabled(boolean enabled) { if (fDescription != null) { fDescription.setEnabled(enabled); } fFilterTextControl.setEnabled(enabled); fCollapseAllItem.setEnabled(enabled); fExpandAllItem.setEnabled(enabled); fRoot.getChildren().forEach(node -> node.setEnabled(enabled)); } }
public FilteredPreferenceTree(Composite parentComposite, String label, String hint, boolean showVerticalBar) { fParentComposite= parentComposite; fRoot= new PreferenceTreeNode<>(null, null, false); createDescription(label); createFilterBox(hint); createScrolledArea(showVerticalBar); createNoMatchFoundLabel(); fRefreshJob= doCreateRefreshJob(); fRefreshJob.setSystem(true); fParentComposite.addDisposeListener(new DisposeListener() { @Override public void widgetDisposed(DisposeEvent e) { fRefreshJob.cancel(); } }); }
private void readExpansionState(PreferenceTreeNode<?> node, InputStream in) throws IOException { for (PreferenceTreeNode<?> child : node.getChildren()) { if (child instanceof Section) { int state= in.read(); ((Section) child).getControl().setExpanded(state == '1'); readExpansionState(child, in); if (state == '.' || state == -1) return; // some nodes missing in stored tree } } int c= in.read(); while (c != '.' && c != -1) { // some extra nodes in stored tree readExpansionState(new PreferenceTreeNode<>(null, null, false), in); c= in.read(); } }
protected <P extends Preference<T>> List<P> findPreferences(Class<P> prefClass) { List<P> result= new ArrayList<>(); ArrayDeque<PreferenceTreeNode<?>> queue= new ArrayDeque<>(); queue.add(fSection); while (!queue.isEmpty()) { PreferenceTreeNode<?> node= queue.removeFirst(); if (!node.isVisible()) continue; if (prefClass.isInstance(node)) result.add(prefClass.cast(node)); queue.addAll(node.getChildren()); } return result; }
public PreferenceTreeNode<Button> addCheckBox(Composite parentComposite, String label, Key key, String[] values, int indent, PreferenceTreeNode<?> parentNode) { Button checkBox= fConfigBlock.addCheckBox(parentComposite, label, key, values, indent); return addChild(parentNode, new PreferenceTreeNode<>(label, checkBox, true, CHECK_BOX_MATCHER)); }
public PreferenceTreeNode<ExpandableComposite> addExpandableComposite(Composite parentComposite, String label, int nColumns, Key key, PreferenceTreeNode<?> parentNode, boolean showAllChildren) { ExpandableComposite expandableComposite= fConfigBlock.createStyleSection(parentComposite, label, nColumns, key); return addChild(parentNode, new PreferenceTreeNode<>(label, expandableComposite, showAllChildren)); }
private void setVisible(boolean visible, boolean recursive) { fVisible= visible; if (fChildren != null && recursive) { for (PreferenceTreeNode<?> node : fChildren) node.setVisible(visible, recursive); } }
@Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); if (enabled) updateDependants(); }
public PreferenceTreeNode<Link> addLink(Composite parentComposite, String label, Key key, SelectionListener linkListener, int indent, int widthHint, PreferenceTreeNode<?> parentNode) { Link link= fConfigBlock.addLink(parentComposite, label, key, linkListener, indent, widthHint); return addChild(parentNode, new PreferenceTreeNode<>(label, link, false)); } }
public PreferenceTreeNode<Text> addTextField(Composite parentComposite, String label, Key key, int indent, int widthHint, PreferenceTreeNode<?> parentNode) { Text textField= fConfigBlock.addTextField(parentComposite, label, key, indent, widthHint); PreferenceTreeNode<Text> node= addChild(parentNode, new PreferenceTreeNode<>(label, textField, true, TEXT_VALUE_MATCHER)); addChild(node, new PreferenceTreeNode<>(label, fConfigBlock.fLabels.get(textField), true)); return node; }
public PreferenceTreeNode<Button> addCheckBoxWithLink(Composite parentComposite, String label, Key key, String[] values, int indent, PreferenceTreeNode<?> parentNode, int widthHint, SelectionListener listener) { Button checkBox= fConfigBlock.addCheckBoxWithLink(parentComposite, label, key, values, indent, widthHint, listener); PreferenceTreeNode<Button> node= addChild(parentNode, new PreferenceTreeNode<>(label, checkBox, true, CHECK_BOX_MATCHER)); addChild(node, new PreferenceTreeNode<>(label, fConfigBlock.getLink(key), true)); return node; }
protected void addLabel(String label, boolean highlight, int indent) { if (label == null) return; Label labelControl= createLabel(GRID_COLUMNS - 2, fControl.getParent(), label, indent); labelControl.moveAbove(fControl); if (highlight) fHighlight= PreferenceHighlight.addHighlight(labelControl, fControl, false); addChild(new PreferenceTreeNode<>(label, labelControl, true)); } }
private void writeExpansionState(PreferenceTreeNode<?> node, OutputStream output) throws IOException { for (PreferenceTreeNode<?> child : node.getChildren()) { if (child instanceof Section) { output.write(((Section) child).getControl().isExpanded() ? '1' : '0'); writeExpansionState(child, output); } } output.write('.'); }