InternalUtil.java

package swingtree;

import swingtree.components.JBox;

import javax.swing.*;
import java.awt.*;

final class InternalUtil
{
    private InternalUtil() {}

    static int _actualComponentCountFrom(Container container) {
        if ( container instanceof JMenu ) {
            return ((JMenu) container).getMenuComponentCount();
        }
        return container.getComponentCount();
    }

    static Component[] _actualComponentsFrom(Container container) {
        if ( container instanceof JMenu ) {
            return ((JMenu) container).getMenuComponents();
        }
        return container.getComponents();
    }

    static Component _actualGetComponentAt(int index, Container container) {
        if ( container instanceof JMenu ) {
            return ((JMenu) container).getMenuComponent(index);
        }
        return container.getComponent(index);
    }

    static void _traverseEnable(Component c, boolean isEnabled ) {
        c.setEnabled( isEnabled );
        if ( JPanel.class.isAssignableFrom( c.getClass() ) || JBox.class.isAssignableFrom( c.getClass() ) )
            for ( Component c2 : ((JComponent)c).getComponents() )
                _traverseEnable( c2, isEnabled );
        /*
            Note:
                We use getClass() here, because we want to stop at subclasses of
                JBox or JPanel because they are likely user defined components and not dumb
                wrappers for other components.
        */
    }
}