package lectures.composite.visitors;
import util.annotations.WebDocuments;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.JFrame;
import lectures.animation.threads_commands.ThreadSupport;
import lectures.composite.design_pattern.CompositeSwingComponentCreator;
import bus.uigen.util.SingleStepper;
@WebDocuments({"Lectures/CompositeVisitors.pptx", "Lectures/CompositeVisitors.pdf", "Videos/CompositeVisitors.avi"})
public class SwingComponentTreeMorpher {
public static final Color COLOR = Color.CYAN;
public static final int MAGNIFICATION = 2;
public static void main(String[] args) {
JFrame aFrame2 = CompositeSwingComponentCreator.createAndDisplayCompositeUI();
Container root2 = aFrame2.getContentPane();
SingleStepper.waitForNextStep();
animatedMagnifySubtreePostOrder(aFrame2);
}
public static void magnify(Component aComponent) {
Dimension aComponentSize = aComponent.getSize();
aComponent.setSize(new Dimension(aComponentSize.width * MAGNIFICATION,
aComponentSize.height * MAGNIFICATION));
}
public static void magnifySubtree(Component aComponent) {
magnify(aComponent);
if (!(aComponent instanceof Container))
return;
Container aContainer = (Container) aComponent;
Component[] components = aContainer.getComponents();
for (int i = 0; i < components.length; i++) {
magnifySubtree(components[i]);
}
}
public static void animatedMagnify(Component aComponent) {
magnify(aComponent);
ThreadSupport.sleep(500);
}
public static void animatedMagnifySubtreePostOrder(Component aComponent) {
if (aComponent instanceof Container) {
Container aContainer = (Container) aComponent;
Component[] components = aContainer.getComponents();
for (int i = 0; i < components.length; i++) {
animatedMagnifySubtreePostOrder(components[i]);
}
}
animatedMagnify(aComponent);
}
public static void animatedMagnifySubtree(Component aComponent) {
animatedMagnify(aComponent);
if (!(aComponent instanceof Container))
return;
Container aContainer = (Container) aComponent;
Component[] components = aContainer.getComponents();
for (int i = 0; i < components.length; i++) {
animatedMagnifySubtree(components[i]);
}
}
public static void color(Component aComponent) {
aComponent.setBackground(COLOR);
}
public static void colorSubtree(Component aComponent) {
color(aComponent);
if (!(aComponent instanceof Container))
return;
Container aContainer = (Container) aComponent;
Component[] components = aContainer.getComponents();
for (int i = 0; i < components.length; i++) {
colorSubtree(components[i]);
}
}
}