// Path: src/arbaro/java/net/sourceforge/arbaro/params/AbstractParam.java
// public abstract class AbstractParam {
// 	public static final int GENERAL = -999; // no level - general params
// 	String name;
// 	String group;
// 	int level;
// 	int order;
// 	String shortDesc;
// 	String longDesc;
// 	boolean enabled;
// 	
// 	protected ChangeEvent changeEvent = null;
// 	protected EventListenerList listenerList = new EventListenerList();
// 	
// 	public AbstractParam(String nam, String grp, int lev, int ord, String sh, String lng) {
// 		name = nam;
// 		group = grp;
// 		level = lev;
// 		order = ord;
// 		shortDesc = sh;
// 		longDesc = lng;
// 		enabled=true;
// 	}
// 	
// 	public abstract void setValue(String val) throws ParamError;
// 	public abstract String getValue();
// 	public abstract String getDefaultValue();
// 	public abstract void clear();
// 	public abstract boolean empty();
// 	
// 	public static boolean loading=false;
// 	
// 	protected static void warn(String warning) {
// 		if (! loading) System.err.println("WARNING: "+warning);
// 	}
// 	
// 	public void setEnabled(boolean en) {
// 		enabled = en;
// 		fireStateChanged();
// 	}
// 	
// 	public boolean getEnabled() {
// 		return enabled;
// 	}
// 	
// 	public String getName() {
// 		return name;
// 	}
// 	
// 	public String getGroup() {
// 		return group;
// 	}
// 	
// 	public int getLevel() {
// 		return level;
// 	}
// 
// 	public int getOrder() {
// 		return order;
// 	}
// 	
// 	public String getShortDesc() {
// 		return shortDesc;
// 	}
// 	
// 	public String toString() { 
// 		if (! empty()) {
// 			return getValue();
// 		} else {
// 			return getDefaultValue();
// 		}
// 	}
// 	
// 	public String getLongDesc() {
// 		return longDesc;
// 	}
// 	
// 	public void addChangeListener(ChangeListener l) {
// 		listenerList.add(ChangeListener.class, l);
// 	}
// 	
// 	public void removeChangeListener(ChangeListener l) {
// 		listenerList.remove(ChangeListener.class, l);
// 	}
// 	
// 	protected void fireStateChanged() {
// 		Object [] listeners = listenerList.getListenerList();
// 		for (int i = listeners.length -2; i>=0; i-=2) {
// 			if (listeners[i] == ChangeListener.class) {
// 				if (changeEvent == null) {
// 					changeEvent = new ChangeEvent(this);
// 				}
// 				((ChangeListener)listeners[i+1]).stateChanged(changeEvent);
// 			}
// 		}
// 	}
// }


import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import net.sourceforge.arbaro.params.AbstractParam;
import java.awt.Color;
import javax.swing.JTree;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
				}
				
		);
	}
	
	public String getGroupName() throws Exception {
		DefaultMutableTreeNode node = 
			(DefaultMutableTreeNode)
			getLastSelectedPathComponent();
		if (!node.isRoot()) {
			return ((GroupNode)node).getGroupName();
		}
		// no group selected
		throw new Exception("no group selected");
	}
	
	public int getGroupLevel() throws Exception {
		// FIXME: higher nodes could return the level too
		DefaultMutableTreeNode node = 
			(DefaultMutableTreeNode)
			getLastSelectedPathComponent();
		if (!node.isRoot()) {
			return ((GroupNode)node).getGroupLevel();
		}
		// no group selected
		throw new Exception("no group selected");
	}	
	
	private void createNodes() {
		
// Path: src/arbaro/java/net/sourceforge/arbaro/params/AbstractParam.java
// public abstract class AbstractParam {
// 	public static final int GENERAL = -999; // no level - general params
// 	String name;
// 	String group;
// 	int level;
// 	int order;
// 	String shortDesc;
// 	String longDesc;
// 	boolean enabled;
// 	
// 	protected ChangeEvent changeEvent = null;
// 	protected EventListenerList listenerList = new EventListenerList();
// 	
// 	public AbstractParam(String nam, String grp, int lev, int ord, String sh, String lng) {
// 		name = nam;
// 		group = grp;
// 		level = lev;
// 		order = ord;
// 		shortDesc = sh;
// 		longDesc = lng;
// 		enabled=true;
// 	}
// 	
// 	public abstract void setValue(String val) throws ParamError;
// 	public abstract String getValue();
// 	public abstract String getDefaultValue();
// 	public abstract void clear();
// 	public abstract boolean empty();
// 	
// 	public static boolean loading=false;
// 	
// 	protected static void warn(String warning) {
// 		if (! loading) System.err.println("WARNING: "+warning);
// 	}
// 	
// 	public void setEnabled(boolean en) {
// 		enabled = en;
// 		fireStateChanged();
// 	}
// 	
// 	public boolean getEnabled() {
// 		return enabled;
// 	}
// 	
// 	public String getName() {
// 		return name;
// 	}
// 	
// 	public String getGroup() {
// 		return group;
// 	}
// 	
// 	public int getLevel() {
// 		return level;
// 	}
// 
// 	public int getOrder() {
// 		return order;
// 	}
// 	
// 	public String getShortDesc() {
// 		return shortDesc;
// 	}
// 	
// 	public String toString() { 
// 		if (! empty()) {
// 			return getValue();
// 		} else {
// 			return getDefaultValue();
// 		}
// 	}
// 	
// 	public String getLongDesc() {
// 		return longDesc;
// 	}
// 	
// 	public void addChangeListener(ChangeListener l) {
// 		listenerList.add(ChangeListener.class, l);
// 	}
// 	
// 	public void removeChangeListener(ChangeListener l) {
// 		listenerList.remove(ChangeListener.class, l);
// 	}
// 	
// 	protected void fireStateChanged() {
// 		Object [] listeners = listenerList.getListenerList();
// 		for (int i = listeners.length -2; i>=0; i-=2) {
// 			if (listeners[i] == ChangeListener.class) {
// 				if (changeEvent == null) {
// 					changeEvent = new ChangeEvent(this);
// 				}
// 				((ChangeListener)listeners[i+1]).stateChanged(changeEvent);
// 			}
// 		}
// 	}
// }


// Path: src/arbaro/java/net/sourceforge/arbaro/gui/ParamGroupsView.java
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.*;
import net.sourceforge.arbaro.params.AbstractParam;
import java.awt.Color;
import javax.swing.JTree;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

				}
				
		);
	}
	
	public String getGroupName() throws Exception {
		DefaultMutableTreeNode node = 
			(DefaultMutableTreeNode)
			getLastSelectedPathComponent();
		if (!node.isRoot()) {
			return ((GroupNode)node).getGroupName();
		}
		// no group selected
		throw new Exception("no group selected");
	}
	
	public int getGroupLevel() throws Exception {
		// FIXME: higher nodes could return the level too
		DefaultMutableTreeNode node = 
			(DefaultMutableTreeNode)
			getLastSelectedPathComponent();
		if (!node.isRoot()) {
			return ((GroupNode)node).getGroupLevel();
		}
		// no group selected
		throw new Exception("no group selected");
	}	
	
	private void createNodes() {
		
		GroupNode general = new GroupNode("","General",AbstractParam.GENERAL);