package e4s.tutorial; import e4s.db.E4DBException; import e4s.html.*; import e4s.html.input.extended.CHECKBOX; import e4s.html.input.extended.E4EventHandlerInputField; import e4s.html.input.extended.E4InputFieldName; import e4s.html.input.extended.TEXTFIELD; import e4s.servlet.E4ModuleImplementation; import e4s.translate.E4LabelNone; /** * Multiple Pickup example, demonstrates how to open a window and select one or multiple values (e.g. out of a * CHECKBOX) and instantially overtake the values to the calling input field. This mechanism is useful to implement * user selections out of a variety of possibilities. * * {@tutorial Example_PickupMultiple} */ public class Example_PickupMultiple extends E4ModuleImplementation { final static long WINDOW_PARAMETERS = A.WINDOW_PARAM_RESIZE|A.WINDOW_PARAM_SCROLL; final static int WINDOW_WIDTH = 100; final static int WINDOW_HEIGHT = 250; public static E4Method start = null; public static E4MethodPickup selectMultipleColors = new E4MethodPickup(WINDOW_PARAMETERS,WINDOW_WIDTH,WINDOW_HEIGHT); public void start( HTML html ) { BODY body = html.BODY(); FORM form = body.FORM(); form.Message(E4Message.CAPTION,"Multiple Selection Pickup Example"); form.P(); // Define a TEXTFIELD and do your own pickup selection here (this field has no specified name) TEXTFIELD colorsA = form.TEXTFIELD(E4InputFieldName.ANY(),"Which colors do you love most?",60,255); colorsA.setValue("red,green"); colorsA.definePickupList(selectMultipleColors); form.BR(); // Define another TEXTFIELD with a specified name TEXTFIELD colorsB = form.TEXTFIELD(new E4InputFieldName("HATE"),"Which colors do you hate most?",60,255); colorsB.setValue("black"); colorsB.definePickupList(selectMultipleColors); form.P(); form.I().SMALL().print("Click the symbol beside the input fields, you can select more values which will be overtaken"); } /** * You can use this pickup callback on multiple fields, as the fieldname is communicated within the * parameters. */ public void selectMultipleColors( HTML html, E4CgiParams params ) throws E4DBException { final String COLORS[] = {"red","green","blue","magenta","yellow","brown","black","white","cyan"}; final E4Color RGB[] = {E4Color.RED,E4Color.GREEN,E4Color.BLUE,E4Color.MAGENTA,E4Color.YELLOW,E4Color.BROWN,E4Color.BLACK,E4Color.WHITE,E4Color.CYAN}; // this is the current default value in the underlaying field String defval = params.get(E4MethodPickup._PARAM_INIT_VALUE); // this is the current field's label String label = params.get(E4MethodPickup._PARAM_LABEL); // we use the field's label as title for our window html.setTitle(label); BODY body = html.BODY(); FORM form = body.FORM(); TABLE table = form.CENTER().TABLE(TABLE.E4S_DEFAULT_TABLE()); // create a E4JavaScript which is bound to the BODY tag E4JavaScript js = body.createScript(); js.appendln("function " + js.getName() + "(cb_name)"); js.appendln("{"); js.appendln(" var s = '';"); js.appendln(" var currentform = document.forms[0];"); for( int i = 0; i < COLORS.length; i++ ) { // create a checkbox, use any name for the input field CHECKBOX cb = new CHECKBOX(new E4InputFieldName("F" + i)); E4EventHandlerInputField evt = new E4EventHandlerInputField(E4EventHandlerInputField._EVENT_ONCLICK,js.getName()); evt.setParam(cb.getHtmlParamName(),true); cb.setEventHandler(evt); if (defval.indexOf(COLORS[i]) >= 0) cb.setValue(true); js.appendln(" if (currentform.elements['" + cb.getHtmlParamName() + "'].checked)"); js.appendln(" s += '," + COLORS[i] + "'"); // make a new table row TR tr = table.TR(); // add the checkbox to the table row tr.TD(Align.CENTER,VAlign.MIDDLE).addElement(cb); // add the name of the color to the table row tr.TD(Align.CENTER,VAlign.MIDDLE).print(COLORS[i]); // add a color field to the table row TD tdExample = tr.TD(); tdExample.print(NBSP); tdExample.setBgColor(RGB[i]); tdExample.setWidth(20); tdExample.setHeight(20); } // finalize our script js.appendln(" if (s != '')"); js.appendln(" {"); js.appendln(" s = s.substr(1);"); js.appendln(" if (s.length > 255)"); js.appendln(" alert('too many entries');"); js.appendln(" }"); // get the standard return script, but do not close the window E4JavaScript jsReturn = A_ReturnValue.createReturnScript(params,false,false); // add the return script (otherwise it would not be included in our HTML page) js.addScript(jsReturn); // call the return script with the value prepared in our script js.appendln(" " + jsReturn.getName() + "(s);"); js.appendln("}"); } }