//
// Reanimator class template for 'JPob Code Generator'
// Generated by JPob Code Generator 1.0.4
//
// © Michel Pollet <michel@dcm.sat.fr> & Florent Pillet <fpillet@teaser.fr>
//

// Some special comments in this file are looked for by the Code Generation
// application

import java.awt.*;
import java.util.*;
import java.io.*;
import java.lang.*;

class JReanimator
{
	public static final Integer LAYOUT = new Integer(1);
	public static final Integer RESHAPE = new Integer(2);
	public static final Integer FOREGROUND = new Integer(3);
	public static final Integer BACKGROUND = new Integer(4);
	public static final Integer FONT = new Integer(5);
	public static final Integer VISIBLE = new Integer(6);
	public static final Integer ENABLED = new Integer(7);
	public static final Integer CHOICE_ITEM = new Integer(8);
	public static final Integer CHOICE_SELECTED_INDEX = new Integer(9);
	public static final Integer LIST_ITEM = new Integer(10);
	public static final Integer SCROLLBAR_LINE_INCREMENT = new Integer(11);
	public static final Integer SCROLLBAR_PAGE_INCREMENT = new Integer(12);
	public static final Integer TEXT_EDITABLE = new Integer(13);
	public static final Integer TEXT_ECHO_CHAR = new Integer(14);
	public static final Integer RESIZABLE = new Integer(15);

	JReanimator()
	{
	}

	//
	// THAT Following comment will be looked for for inserting the generated Object
	// table. Currently, it must be the only thing on the line (no trailing spaces or tabs)
	//
/*&table*/

	public Object table[][] = {
		// Resource JPob 128 ('ClockPanel')

		{
			"ClockPanel", new java.awt.Panel(),
				// Layout StaticLayout was ignored, sorry,
				LAYOUT, null,
				RESHAPE, new Rectangle(0,0,300,200),
				FOREGROUND, new Color(0,0,0),
				BACKGROUND, new Color(255,255,255),
				FONT, new Font("",0,0),
				null
		},
		{ "->" },
			{
				"title", new java.awt.Label("Spiral 2000AD Count Down Clock", 0),
					RESHAPE, new Rectangle(5,5,216,16),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"Today", new java.awt.Label("Today", 0),
					RESHAPE, new Rectangle(8,43,48,21),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"DateTime", new java.awt.Label("00:00", 0),
					RESHAPE, new Rectangle(64,44,208,20),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"b0", new java.awt.Button(""),
					RESHAPE, new Rectangle(235,121,10,10),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"b1", new java.awt.Button(""),
					RESHAPE, new Rectangle(235,107,10,10),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"b2", new java.awt.Button(""),
					RESHAPE, new Rectangle(220,105,10,10),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"b3", new java.awt.Button(""),
					RESHAPE, new Rectangle(213,119,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b3", new java.awt.Button(" "),
					RESHAPE, new Rectangle(220,128,1,1),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b4", new java.awt.Button(""),
					RESHAPE, new Rectangle(219,135,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b5", new java.awt.Button(""),
					RESHAPE, new Rectangle(234,139,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b7", new java.awt.Button(""),
					RESHAPE, new Rectangle(257,120,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b8", new java.awt.Button(""),
					RESHAPE, new Rectangle(256,106,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b9", new java.awt.Button(""),
					RESHAPE, new Rectangle(246,94,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b10", new java.awt.Button(""),
					RESHAPE, new Rectangle(231,89,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b6", new java.awt.Button(""),
					RESHAPE, new Rectangle(250,133,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b11", new java.awt.Button(""),
					RESHAPE, new Rectangle(217,90,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b12", new java.awt.Button(""),
					RESHAPE, new Rectangle(203,97,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b13", new java.awt.Button(""),
					RESHAPE, new Rectangle(197,109,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b14", new java.awt.Button(""),
					RESHAPE, new Rectangle(197,121,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b15", new java.awt.Button(""),
					RESHAPE, new Rectangle(199,134,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b16", new java.awt.Button(""),
					RESHAPE, new Rectangle(206,145,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b17", new java.awt.Button(""),
					RESHAPE, new Rectangle(220,153,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b18", new java.awt.Button(""),
					RESHAPE, new Rectangle(234,155,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b19", new java.awt.Button(""),
					RESHAPE, new Rectangle(250,152,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"CDsecs", new java.awt.Label("00000000", 0),
					RESHAPE, new Rectangle(96,88,80,16),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"CDdays", new java.awt.Label("00000000", 0),
					RESHAPE, new Rectangle(96,112,80,16),
					FONT, new Font("Geneva",1,9),
					null
			},
			{
				"b20", new java.awt.Button(""),
					RESHAPE, new Rectangle(263,145,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b21", new java.awt.Button(""),
					RESHAPE, new Rectangle(272,133,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b22", new java.awt.Button(""),
					RESHAPE, new Rectangle(275,119,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b23", new java.awt.Button(""),
					RESHAPE, new Rectangle(274,104,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b24", new java.awt.Button(""),
					RESHAPE, new Rectangle(268,89,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b25", new java.awt.Button(""),
					RESHAPE, new Rectangle(258,76,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"TimeNow", new java.awt.Button("Time Now"),
					RESHAPE, new Rectangle(17,135,60,20),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b26", new java.awt.Button(""),
					RESHAPE, new Rectangle(242,73,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b27", new java.awt.Button(""),
					RESHAPE, new Rectangle(225,73,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b28", new java.awt.Button(""),
					RESHAPE, new Rectangle(209,73,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"b29", new java.awt.Button(""),
					RESHAPE, new Rectangle(194,73,10,10),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"help", new java.awt.Label("Click on the Spiral or the Pop-Ups to change the time", 0),
					RESHAPE, new Rectangle(8,176,280,16),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"SecondsPop", new java.awt.Choice(),
					CHOICE_ITEM, "Seconds",
					CHOICE_ITEM, "10",
					CHOICE_ITEM, "100",
					CHOICE_ITEM, "1000",
					CHOICE_ITEM, "10000",
					CHOICE_ITEM, "100000",
					RESHAPE, new Rectangle(16,88,72,16),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"DaysPop", new java.awt.Choice(),
					CHOICE_ITEM, "Days",
					CHOICE_ITEM, "1",
					CHOICE_ITEM, "10",
					CHOICE_ITEM, "100",
					CHOICE_ITEM, "1000",
					CHOICE_ITEM, "10000",
					RESHAPE, new Rectangle(16,112,72,16),
					FONT, new Font("Geneva",0,9),
					null
			},
			{
				"title", new java.awt.Label("by K. Grabe.  v1.0", 0),
					RESHAPE, new Rectangle(6,22,100,16),
					FONT, new Font("Geneva",0,9),
					ENABLED, new Boolean(false),
					null
			},
		null
	};

	//
	// Easy method for locating a named object in the default description table
	//
	public Component locate(String inName)
	{
		return locate(table, null, inName);
	}
	
	//
	// Easy method for locating a named object in a specifeid container
	//
	public Component locate(String inContainer, String inName)
	{
		return locate(table, inContainer, inName);
	}
	
	//
	// Locate a names object in the table
	//
	public Component locate(Object objects[][], String inContainer, String inName)
	{
		int i = (inContainer != null) ? getTopLevel(objects, inContainer) : 0;
		
		if (i == -1)
			return null;
		if (inName == null)
			return (Component)objects[i][0];
		for (; objects[i] != null; i++) {
			String name = (String)objects[i][0];
			if (name.equals(inName))
				return (Component)objects[i][1];
			if (inContainer != null && name.equals("<->"))
				return null;
		}
		return null;
	}

	//
	// Easy method for making a named object with the default description table
	//
	public Container make(String inName)
	{
		return make(table, inName);
	}
	
	//
	// Locate a specified top level Container
	//
	private int getTopLevel(Object objects[][], String inName)
	{
		int object = 0;
		while (objects[object] != null) {
			if (((String)objects[object][0]).equals(inName)) 
				return object;
			while (objects[object] != null && !((String)objects[object][0]).equals("<->"))
				object++;
			if (objects[object] != null)
				object++;
		}
		return -1;
	}
	
	//
	// Make a container from a description table
	//
	public Container make(Object objects[][], String inName)
	{
		Stack cStack = new Stack();
		
		//
		// find the specified top level Container
		//
		int object = getTopLevel(objects, inName);
		if (object == -1)
			return null;
		Component o = null;
		while (objects[object] != null) {
			String name = (String)objects[object][0];
			
			if (name.equals("<->"))				// was the last component of that container
				break;
			if (name.equals("->") && o != null) {	// push the last object to the stack
					// It will be used as container
					// for the next components until a "<-"
				cStack.push(o);
				object++;
				continue;
			}
			if (name.equals("<-")) {				// pop the last container
				if (!cStack.empty())
					cStack.pop();
				object++;
				continue;
			}
			
			o = (Component)objects[object][1];
			if (o == null)							// If the object has not been created
				continue;

			if (!cStack.empty()) {
				// If a container exists, inherit the current objects properties to
				// the container properties (simplify the table)
				Container c = (Container)cStack.peek();
				o.setFont(c.getFont());
				o.setBackground(c.getBackground());
				o.setForeground(c.getForeground());
				/*
				 					Shall we inherit those properties too ?
				if (c.isEnabled()
					o.enable();
				else o.disable();
				if (c.isVisible())
					o.show();
				else o.hide();
				*/
			}
			for (int p = 2; objects[object][p] != null; p += 2) {
				Integer prop = (Integer)objects[object][p];
				Object value = objects[object][p+1];
				switch (prop.intValue()) {
					case 1:				// LAYOUT
						{
							Container cont = (Container)o;
							cont.setLayout((LayoutManager)value);
						}
						break;

					case 2:				// RESHAPE
						{
							Rectangle r = (Rectangle)value;
							o.reshape(r.x, r.y, r.width, r.height);
						}
						break;

					case 3:				// FOREGROUND
						o.setForeground((Color)value);
						break;

					case 4:				// BACKGROUND
						o.setBackground((Color)value);
						break;

					case 5:				// FONT
						o.setFont((Font)value);
						break;

					case 6:				// VISIBLE
						{
							Boolean b = (Boolean) value;
							if (b.booleanValue())
								o.show();
							else
								o.hide();
						}
						break;

					case 7:				// ENABLED
						{
							Boolean b = (Boolean) value;
							o.enable(b.booleanValue());
						}
						break;

					case 8:				// CHOICE_ITEM
						if (o instanceof java.awt.Choice) {
							java.awt.Choice c = (java.awt.Choice) o;
							c.addItem((String)value);
						}
						break;

					case 9:				// CHOICE_SELECTED_INDEX
						if (o instanceof java.awt.Choice) {
							java.awt.Choice c = (java.awt.Choice) o;
							Integer i = (Integer) value;
							c.select(i.intValue());
						}
						break;

					case 10:			// LIST_ITEM
						if (o instanceof java.awt.List) {
							java.awt.List l = (java.awt.List) o;
							l.addItem((String)value);
						}
						break;

					case 11:			// SCROLLBAR_LINE_INCREMENT
						if (o instanceof java.awt.Scrollbar) {
							java.awt.Scrollbar s = (java.awt.Scrollbar) o;
							Integer i = (Integer) value;
							s.setLineIncrement(i.intValue());
						}
						break;
					
					case 12:			// SCROLLBAR_PAGE_INCREMENT
						if (o instanceof java.awt.Scrollbar) {
							java.awt.Scrollbar s = (java.awt.Scrollbar) o;
							Integer i = (Integer) value;
							s.setPageIncrement(i.intValue());
						}
						break;

					case 15:			// RESIZABLE
						if (o instanceof java.awt.Frame) {
							java.awt.Frame f = (java.awt.Frame) o;
							Boolean b = (Boolean) value;
							f.setResizable(b.booleanValue());
						}
						break;

					case 13:			// TEXT_EDITABLE
						if (o instanceof java.awt.TextComponent) {
							java.awt.TextComponent t = (java.awt.TextComponent) o;
							Boolean b = (Boolean) value;
							t.setEditable(b.booleanValue());
						}
						break;

					case 14:			// TEXT_ECHO_CHAR
						if (o instanceof java.awt.TextField) {
							java.awt.TextField t = (java.awt.TextField) o;
							Integer i = (Integer) value;
							t.setEchoCharacter((char)i.intValue());
						}
						break;

					default:
						System.err.println("CReanimator: Unknown property : " + prop);
				}
			}
			if (!cStack.empty()) {
					// Add the component to the current Container
				Container c = (Container)cStack.peek();
				c.add(o);
			}
			object++;
		}
		return cStack.empty() ? null : (Container)cStack.pop();	// return the current Container
	}
} 
