+++ /dev/null
-/*******************************************************************************\r
- * Copyright (c) 2007 SAS Institute.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * SAS Institute - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.utils.ui.awt;\r
-\r
-import java.awt.Component;\r
-import java.awt.Container;\r
-import java.awt.EventQueue;\r
-import java.awt.event.ContainerEvent;\r
-import java.awt.event.ContainerListener;\r
-\r
-class RecursiveContainerListener implements ContainerListener {\r
- private final ContainerListener listener;\r
- \r
- RecursiveContainerListener(ContainerListener listener) {\r
- assert listener != null;\r
- \r
- this.listener = listener;\r
- }\r
-\r
- private void handleAdd(Container source, Component c) {\r
- assert source != null;\r
- assert c != null;\r
- assert listener != null;\r
- assert EventQueue.isDispatchThread(); // On AWT event thread\r
- \r
- // System.out.println("Listening to: " + c);\r
- listener.componentAdded(new ContainerEvent(source, ContainerEvent.COMPONENT_ADDED, c));\r
- if (c instanceof Container) {\r
- ((Container)c).addContainerListener(this);\r
- }\r
- }\r
- \r
- private void handleRemove(Container source, Component c) {\r
- assert source != null;\r
- assert c != null;\r
- assert listener != null;\r
- assert EventQueue.isDispatchThread(); // On AWT event thread\r
-\r
- // System.out.println("Stopped Listening to: " + c);\r
- listener.componentRemoved(new ContainerEvent(source, ContainerEvent.COMPONENT_REMOVED, c));\r
- if (c instanceof Container) {\r
- ((Container)c).removeContainerListener(this);\r
- }\r
- }\r
- \r
- private void handleAllAdds(Container source, Component child) {\r
- assert source != null;\r
- assert child != null;\r
- assert EventQueue.isDispatchThread(); // On AWT event thread\r
-\r
- if (child instanceof Container) {\r
- Container container = (Container)child;\r
- Component[] children = container.getComponents();\r
- for (int i = 0; i < children.length; i++) {\r
- handleAllAdds(container, children[i]);\r
- }\r
- }\r
- handleAdd(source, child);\r
- }\r
- \r
- private void handleAllRemoves(Container source, Component child) {\r
- assert source != null;\r
- assert child != null;\r
- assert EventQueue.isDispatchThread(); // On AWT event thread\r
-\r
- if (child instanceof Container) {\r
- Container container = (Container)child;\r
- Component[] children = container.getComponents();\r
- for (int i = 0; i < children.length; i++) {\r
- handleAllRemoves(container, children[i]);\r
- }\r
- }\r
- handleRemove(source, child);\r
-\r
- }\r
-\r
- public void componentAdded(ContainerEvent e) {\r
- assert e != null;\r
- assert EventQueue.isDispatchThread(); // On AWT event thread\r
- \r
- Container source = (Container)e.getSource();\r
- handleAllAdds(source, e.getChild());\r
- }\r
- \r
- public void componentRemoved(ContainerEvent e) {\r
- assert e != null;\r
- assert EventQueue.isDispatchThread(); // On AWT event thread\r
- \r
- Container source = (Container)e.getSource();\r
- handleAllRemoves(source, e.getChild());\r
- }\r
-}\r
-\r