Skip to content

Commit

Permalink
JXTree.DelegatingRenderer extends DefaultTreeRenderer
Browse files Browse the repository at this point in the history
  • Loading branch information
homebeaver committed Mar 10, 2023
1 parent bdd952d commit 3cb9d20
Showing 1 changed file with 43 additions and 25 deletions.
68 changes: 43 additions & 25 deletions swingx-core/src/main/java/org/jdesktop/swingx/JXTree.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,10 @@
import org.jdesktop.swingx.decorator.CompoundHighlighter;
import org.jdesktop.swingx.decorator.Highlighter;
import org.jdesktop.swingx.plaf.LookAndFeelAddons;
import org.jdesktop.swingx.plaf.XTreeAddon;
import org.jdesktop.swingx.plaf.UIAction;
import org.jdesktop.swingx.plaf.UIDependent;
import org.jdesktop.swingx.plaf.XTreeAddon;
import org.jdesktop.swingx.renderer.DefaultTreeRenderer;
import org.jdesktop.swingx.renderer.StringValue;
import org.jdesktop.swingx.renderer.StringValues;
import org.jdesktop.swingx.rollover.RolloverProducer;
Expand Down Expand Up @@ -957,6 +958,7 @@ public Highlighter[] getHighlighters() {
*/
public void addHighlighter(Highlighter highlighter) {
Highlighter[] old = getHighlighters();
LOG.config("# of Highlighters="+old.length + " add "+highlighter);
getCompoundHighlighter().addHighlighter(highlighter);
firePropertyChange("highlighters", old, getHighlighters());
}
Expand Down Expand Up @@ -1201,7 +1203,11 @@ protected TreeCellRenderer createDefaultCellRenderer() {
public TreeCellRenderer getCellRenderer() {
// PENDING JW: something wrong here - why exactly can't we return super?
// not even if we force the initial setting in init?
// return super.getCellRenderer();
//
// EUG: interface TreeCellRenderer has method getTreeCellRendererComponent
// DelegatingRenderer is a class which implements TreeCellRenderer
// And RolloverRenderer with methods isEnabled and doClick
// ==> we need a Class which implements both interfaces !!!
return getDelegatingRenderer();
}

Expand Down Expand Up @@ -1252,19 +1258,27 @@ public void setCellRenderer(TreeCellRenderer renderer) {
* PENDING JW: missing updateUI anyway (got lost when pasted from JXList ;-)
* PENDING JW: missing override of updateUI in xtree ...
*/
public class DelegatingRenderer implements TreeCellRenderer, RolloverRenderer {
public class DelegatingRenderer extends DefaultTreeRenderer implements TreeCellRenderer, RolloverRenderer {
// NB:
// public class DefaultTreeRenderer extends AbstractRenderer implements TreeCellRenderer
// abstract class AbstractRenderer implements RolloverRenderer, StringValue, Serializable, UIDependent
private Icon closedIcon = null;
private Icon openIcon = null;
private Icon leafIcon = null;

private TreeCellRenderer delegate;
// NB: in AbstractRenderer: protected ComponentProvider<?> componentController;

/**
* Instantiates a DelegatingRenderer with tree's default renderer as delegate.
*/
public DelegatingRenderer() {
this(null);
initIcons(new DefaultTreeCellRenderer());
this(null, null);
// initIcons(new DefaultTreeCellRenderer());
}

public DelegatingRenderer(StringValue sv) {
this(null, sv);
}

/**
Expand All @@ -1276,22 +1290,15 @@ public DelegatingRenderer() {
*
* <p> NOTE: the javax.swing.tree.DefaultTreeCellRenderer extends JLabel
*/
public DelegatingRenderer(TreeCellRenderer delegate) {
initIcons((DefaultTreeCellRenderer) (delegate instanceof DefaultTreeCellRenderer ?
delegate : new DefaultTreeCellRenderer())); // TODO DefaultXTreeCellRenderer
setDelegateRenderer(delegate);
}

/**
* initially sets the icons to the defaults as given
* by a DefaultTreeCellRenderer.
*
* @param renderer
*/
private void initIcons(DefaultTreeCellRenderer renderer) {
closedIcon = renderer.getDefaultClosedIcon();
openIcon = renderer.getDefaultOpenIcon();
leafIcon = renderer.getDefaultLeafIcon();
public DelegatingRenderer(TreeCellRenderer delegate, StringValue sv) {
super(sv);
if(delegate instanceof DefaultTreeCellRenderer javaxDTCR) {
initIcons(javaxDTCR);
} else {
// initIcons(new DefaultTreeCellRenderer());
// EUG better DefaultXTreeCellRenderer extends DefaultTreeCellRenderer ?
initIcons(new DefaultXTreeCellRenderer());
}
}

/**
Expand All @@ -1314,6 +1321,18 @@ public void setDelegateRenderer(TreeCellRenderer delegate) {
updateIcons();
}

/**
* initially sets the icons to the defaults as given
* by a DefaultTreeCellRenderer.
*
* @param renderer
*/
private void initIcons(DefaultTreeCellRenderer renderer) {
closedIcon = renderer.getDefaultClosedIcon();
openIcon = renderer.getDefaultOpenIcon();
leafIcon = renderer.getDefaultLeafIcon();
}

/**
* tries to set the renderers icons. Can succeed only if the
* delegate is a DefaultTreeCellRenderer.
Expand Down Expand Up @@ -1370,10 +1389,9 @@ public TreeCellRenderer getDelegateRenderer() {
*/
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
Component result = delegate.getTreeCellRendererComponent(tree,
value, selected, expanded, leaf, row, hasFocus);
boolean selected, boolean expanded, boolean leaf, int row,boolean hasFocus) {
Component result = super.getTreeCellRendererComponent(tree, value,
selected, expanded, leaf, row, hasFocus);

if ((compoundHighlighter != null) && (row < getRowCount()) && (row >= 0)) {
result = compoundHighlighter.highlight(result, getComponentAdapter(row));
Expand Down

0 comments on commit 3cb9d20

Please sign in to comment.