src/main/java/xelfi/design/components/xawt/XImageButton.java
author Jaroslav Tulach <jaroslav.tulach@xelfi.cz>
Tue, 17 Jan 2017 21:08:47 +0100
changeset 6 947ce1156833
parent 0 189280700bc7
permissions -rw-r--r--
Renaming setName to setDesignName and setSize to setDesignSize to avoid clash with added methods of java.awt.Component that return void
jaroslav@0
     1
/**
jaroslav@0
     2
* Xelfi
jaroslav@0
     3
*/
jaroslav@0
     4
jaroslav@0
     5
package xelfi.design.components.xawt;
jaroslav@0
     6
jaroslav@0
     7
/**
jaroslav@0
     8
  *
jaroslav@0
     9
  * @version 	2.12, 03 Apr 1997
jaroslav@0
    10
  * @author 	Petr Hamernik
jaroslav@0
    11
  *
jaroslav@0
    12
  */
jaroslav@0
    13
jaroslav@0
    14
import java.awt.*;
jaroslav@0
    15
import java.io.*;
jaroslav@0
    16
import java.util.StringTokenizer;
jaroslav@0
    17
import xelfi.awt.ImageButton;
jaroslav@0
    18
import xelfi.util.XelfiPath;
jaroslav@0
    19
import xelfi.design.components.*;
jaroslav@0
    20
import xelfi.design.components.property.*;
jaroslav@0
    21
import xelfi.design.forms.XelfiDesignForm;
jaroslav@0
    22
import xelfi.design.util.*;
jaroslav@0
    23
import xelfi.util.Debug;
jaroslav@0
    24
jaroslav@0
    25
public class XImageButton extends XAWTPanel {
jaroslav@0
    26
	private ImageButton imBut;
jaroslav@0
    27
jaroslav@0
    28
	private static int propertyCount = 9;
jaroslav@0
    29
	private Object propDef[];
jaroslav@0
    30
	private boolean propDefSet = false;
jaroslav@0
    31
	private static int eventCount = 3;
jaroslav@0
    32
	private String events[] = new String[eventCount];
jaroslav@0
    33
	protected static Image icon = null;
jaroslav@0
    34
jaroslav@0
    35
	protected XFImageName iName;
jaroslav@0
    36
	
jaroslav@0
    37
	public XImageButton() { 
jaroslav@0
    38
		super(XAWTPanel.WITHOUT_DRAGBORDER);
jaroslav@0
    39
		defaultImage();
jaroslav@0
    40
		setImageButton(iName);
jaroslav@0
    41
		imBut.propagate = true;
jaroslav@0
    42
		propDef = new Object[propertyCount];
jaroslav@0
    43
		for (int i=0; i<propertyCount; i++)
jaroslav@0
    44
			propDef[i] = null;
jaroslav@0
    45
		if (icon == null)
jaroslav@0
    46
			icon = loadIcon("imagebutton.gif");
jaroslav@0
    47
		parentColor = false;
jaroslav@0
    48
	}
jaroslav@0
    49
jaroslav@0
    50
	protected void regenForm(int what) {
jaroslav@0
    51
		if (parentForm != null)
jaroslav@0
    52
			parentForm.regenerateCode(this, what);
jaroslav@0
    53
	}
jaroslav@0
    54
jaroslav@0
    55
	public String[] neededImports() {
jaroslav@0
    56
		String[] ret = new String[1];
jaroslav@0
    57
		ret[0] = "xelfi.awt.ImageButton";
jaroslav@0
    58
		return ret;
jaroslav@0
    59
	}
jaroslav@0
    60
jaroslav@0
    61
	public Image getIcon() {
jaroslav@0
    62
		return icon; 
jaroslav@0
    63
	}
jaroslav@0
    64
jaroslav@0
    65
	public boolean handleEvent(Event evt) {
jaroslav@0
    66
		evt.target = this;
jaroslav@0
    67
		if (XFDesignOptions.designMode == XFDesignConstants.DM_REAL)
jaroslav@0
    68
			imBut.propagate = false;
jaroslav@0
    69
		else
jaroslav@0
    70
			imBut.propagate = true;
jaroslav@0
    71
		return super.handleEvent(evt);
jaroslav@0
    72
	}
jaroslav@0
    73
jaroslav@0
    74
	protected boolean setImageButton(XFImageName aIName) {
jaroslav@0
    75
		boolean b = true;
jaroslav@0
    76
		iName = aIName;
jaroslav@0
    77
		if (iName.isURL())
jaroslav@0
    78
			imBut = new ImageButton(iName.getText1());
jaroslav@0
    79
		if (iName.isPath()) {
jaroslav@0
    80
			Image im = Toolkit.getDefaultToolkit().getImage(iName.getText1());
jaroslav@0
    81
			if (im == null) {
jaroslav@0
    82
				b = false;
jaroslav@0
    83
				defaultImage();
jaroslav@0
    84
				im = Toolkit.getDefaultToolkit().getImage(iName.getText1());
jaroslav@0
    85
			}
jaroslav@0
    86
			imBut = new ImageButton(im);
jaroslav@0
    87
		}
jaroslav@0
    88
		if (iName.isPackage()) {
jaroslav@0
    89
			//PENDING
jaroslav@0
    90
		}
jaroslav@0
    91
		removeAll();
jaroslav@0
    92
		add("Center", imBut);
jaroslav@0
    93
		imBut.hide();
jaroslav@0
    94
		imBut.show();
jaroslav@0
    95
		component = imBut;
jaroslav@0
    96
		if (autoSize)
jaroslav@6
    97
			setDesignSize(0,0);
jaroslav@0
    98
		else {
jaroslav@0
    99
			Dimension dd = getSize();
jaroslav@6
   100
			setDesignSize(dd.width, dd.height);
jaroslav@0
   101
		}
jaroslav@0
   102
		repaintComponent();
jaroslav@0
   103
		imBut.repaint();
jaroslav@0
   104
		regenForm(XFDesignConstants.GEN_ALL);
jaroslav@0
   105
		return b;
jaroslav@0
   106
	}
jaroslav@0
   107
jaroslav@0
   108
	protected void defaultImage() {
jaroslav@0
   109
		String sep = new String(System.getProperty("file.separator"));
jaroslav@0
   110
		String s = XelfiPath.get() + sep + "top" + sep + "toolbar" + sep + "open.gif";
jaroslav@0
   111
		iName = new XFImageName(XFImageName.IN_PATH, s);
jaroslav@0
   112
	}
jaroslav@0
   113
jaroslav@0
   114
	
jaroslav@0
   115
	private boolean propertyDefault(int i) throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   116
		if (propDefSet)
jaroslav@0
   117
			propertiesSetDefault();
jaroslav@0
   118
		if (propDef[i] == null)
jaroslav@0
   119
			return false;
jaroslav@0
   120
		switch (i) {
jaroslav@0
   121
			case 0: return (((Boolean) propDef[i]).booleanValue() == imBut.isEnabled());
jaroslav@0
   122
			case 1: return (((Boolean) propDef[i]).booleanValue() == bVisible);
jaroslav@0
   123
			case 2: return (((Boolean) propDef[i]).booleanValue() == autoSize);
jaroslav@0
   124
			case 3: return false;
jaroslav@0
   125
			case 4: return (((Boolean) propDef[i]).booleanValue() == imBut.getStretch());
jaroslav@0
   126
			case 5: if (getParent() != null)
jaroslav@0
   127
						return (getParent().getBackground().getRGB() 
jaroslav@0
   128
							== imBut.getBackground().getRGB());
jaroslav@0
   129
					else
jaroslav@0
   130
						return false;
jaroslav@0
   131
			case 6: return (ImageButton.defaultBorderWidth == imBut.getBorderWidth());
jaroslav@0
   132
			case 7: return (((Boolean) propDef[i]).booleanValue() == parentColor);
jaroslav@0
   133
			case 8: return (imBut.defaultBorderColor.equals(imBut.getBorderColor()));
jaroslav@0
   134
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   135
		}
jaroslav@0
   136
	}
jaroslav@0
   137
jaroslav@0
   138
	private void propertiesSetDefault() {
jaroslav@0
   139
		if (propDefSet)
jaroslav@0
   140
			return;
jaroslav@0
   141
		propDefSet = true;
jaroslav@0
   142
		propDef[0] = new Boolean(imBut.isEnabled());
jaroslav@0
   143
		propDef[1] = new Boolean(bVisible);
jaroslav@0
   144
		propDef[2] = new Boolean(autoSize);
jaroslav@0
   145
		propDef[3] = new XFImageName(iName);
jaroslav@0
   146
		propDef[4] = new Boolean(imBut.getStretch());
jaroslav@0
   147
		propDef[5] = new Boolean(false);
jaroslav@0
   148
		propDef[6] = new Integer(ImageButton.defaultBorderWidth);
jaroslav@0
   149
		propDef[7] = new Boolean(parentColor);
jaroslav@0
   150
		propDef[8] = imBut.defaultBorderColor;
jaroslav@0
   151
	}
jaroslav@0
   152
jaroslav@0
   153
	public int getPropertyCount() { return propertyCount; }
jaroslav@0
   154
	
jaroslav@0
   155
	public Object getProperty(int index) throws XFPropertyIndexOutOfBoundsException { 
jaroslav@0
   156
		switch (index) {
jaroslav@0
   157
			case 0: return (imBut.isEnabled()) ? Boolean.TRUE : Boolean.FALSE;
jaroslav@0
   158
			case 1: return (bVisible) ? Boolean.TRUE : Boolean.FALSE;
jaroslav@0
   159
			case 2: return (autoSize) ? Boolean.TRUE : Boolean.FALSE;
jaroslav@0
   160
			case 3: return iName;
jaroslav@0
   161
			case 4: return (imBut.getStretch()) ? Boolean.TRUE : Boolean.FALSE;
jaroslav@0
   162
			case 5: return imBut.getBackground();
jaroslav@0
   163
			case 6: return new Integer(imBut.getBorderWidth());
jaroslav@0
   164
			case 7: return (parentColor) ? Boolean.TRUE : Boolean.FALSE;
jaroslav@0
   165
			case 8: return imBut.getBorderColor();
jaroslav@0
   166
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   167
		}
jaroslav@0
   168
	}
jaroslav@0
   169
			
jaroslav@0
   170
	public String[] getPropertyNames() { 
jaroslav@0
   171
		String list[] = new String[propertyCount];
jaroslav@0
   172
		list[0] = "Enabled";
jaroslav@0
   173
		list[1] = "Visible";
jaroslav@0
   174
		list[2] = "Auto Size";
jaroslav@0
   175
		list[3] = "Image";
jaroslav@0
   176
		list[4] = "Stretch";
jaroslav@0
   177
		list[5] = "Background Color";
jaroslav@0
   178
		list[6] = "Border Width";
jaroslav@0
   179
		list[7] = "Parent Color";
jaroslav@0
   180
		list[8] = "Border Color";
jaroslav@0
   181
		return list;
jaroslav@0
   182
	}
jaroslav@0
   183
		
jaroslav@0
   184
	public String getPropertyString(int index) throws 
jaroslav@0
   185
		XFPropertyIndexOutOfBoundsException { 
jaroslav@0
   186
		switch (index) {
jaroslav@0
   187
			case 0:
jaroslav@0
   188
			case 1:
jaroslav@0
   189
			case 2: return XBooleanPropertyType.viewString(getProperty(index));
jaroslav@0
   190
			case 3: return XImageNamePropertyType.viewString(getProperty(index));
jaroslav@0
   191
			case 4: return XBooleanPropertyType.viewString(getProperty(index));
jaroslav@0
   192
			case 5: return XColorPropertyType.viewString(getProperty(index));
jaroslav@0
   193
			case 6: return XIntegerPropertyType.viewString(getProperty(index));
jaroslav@0
   194
			case 7: return XBooleanPropertyType.viewString(getProperty(index));
jaroslav@0
   195
			case 8: return XColorPropertyType.viewString(getProperty(index));
jaroslav@0
   196
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   197
		}
jaroslav@0
   198
	}
jaroslav@0
   199
jaroslav@0
   200
	public int getPropertyViewerType(int index) throws 
jaroslav@0
   201
		XFPropertyIndexOutOfBoundsException {
jaroslav@0
   202
		switch (index) {
jaroslav@0
   203
			case 0: 
jaroslav@0
   204
			case 1: 
jaroslav@0
   205
			case 2: return XFDesignConstants.PVT_CHECK;
jaroslav@0
   206
			case 3: return XFDesignConstants.PVT_SPECIAL;
jaroslav@0
   207
			case 4: return XFDesignConstants.PVT_CHECK;
jaroslav@0
   208
			case 5: return XFDesignConstants.PVT_SPECIAL;
jaroslav@0
   209
			case 6: return XFDesignConstants.PVT_INPUT_INT;
jaroslav@0
   210
			case 7: return XFDesignConstants.PVT_CHECK;
jaroslav@0
   211
			case 8: return XFDesignConstants.PVT_SPECIAL;
jaroslav@0
   212
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   213
		}
jaroslav@0
   214
	}
jaroslav@0
   215
jaroslav@0
   216
	public String[] getPropertyValueNames(int index) throws 
jaroslav@0
   217
		XFPropertyIndexOutOfBoundsException {
jaroslav@0
   218
		switch (index) {
jaroslav@0
   219
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   220
		}
jaroslav@0
   221
	}
jaroslav@0
   222
jaroslav@0
   223
	public Object[] getPropertyValueValues(int index) throws 
jaroslav@0
   224
		XFPropertyIndexOutOfBoundsException {
jaroslav@0
   225
		switch (index) {
jaroslav@0
   226
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   227
		}
jaroslav@0
   228
	}
jaroslav@0
   229
jaroslav@0
   230
	public int setProperty(int index, Object value) throws 	
jaroslav@0
   231
		XFPropertyIndexOutOfBoundsException,
jaroslav@0
   232
		XFPropertyBadValueTypeException 
jaroslav@0
   233
	{ 
jaroslav@0
   234
		int ret = XFDesignConstants.RSP_OK;
jaroslav@0
   235
		int regen = XFDesignConstants.GEN_SETPROPS;
jaroslav@0
   236
		if (!propDefSet)
jaroslav@0
   237
			propertiesSetDefault();
jaroslav@0
   238
		switch (index) { 
jaroslav@0
   239
			case 0:	if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   240
					imBut.enable(((Boolean)value).booleanValue());
jaroslav@0
   241
					break;
jaroslav@0
   242
			case 1: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   243
					bVisible = ((Boolean)value).booleanValue();
jaroslav@0
   244
					break;
jaroslav@0
   245
			case 2:	if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   246
					setAutoSize(((Boolean)value).booleanValue());
jaroslav@0
   247
					if (autoSize) {
jaroslav@6
   248
						setDesignSize(0,0);
jaroslav@0
   249
						ret = ret | XFDesignConstants.RSP_OTHER_PROP;
jaroslav@0
   250
						imBut.repaint();
jaroslav@0
   251
					}
jaroslav@0
   252
					regen = regen | XFDesignConstants.GEN_RESHAPE;
jaroslav@0
   253
					ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
jaroslav@0
   254
					break;
jaroslav@0
   255
			case 3:if (!(value instanceof XFImageName)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   256
					setImageButton((XFImageName)value);
jaroslav@0
   257
				 	ret = ret | XFDesignConstants.RSP_OTHER_PROP | XFDesignConstants.RSP_REPAINT_COMP;
jaroslav@0
   258
					break;
jaroslav@0
   259
			case 4:	if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   260
					imBut.setStretch(((Boolean)value).booleanValue());
jaroslav@0
   261
					if (autoSize)
jaroslav@6
   262
						setDesignSize(0,0);
jaroslav@0
   263
					repaintComponent();
jaroslav@0
   264
					ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
jaroslav@0
   265
					break;
jaroslav@0
   266
			case 5:if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   267
					imBut.setBackground((Color)value);
jaroslav@0
   268
				 	ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
jaroslav@0
   269
					hide();
jaroslav@0
   270
					show();
jaroslav@0
   271
					repaintComponent();
jaroslav@0
   272
					break;
jaroslav@0
   273
			case 6:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   274
					imBut.setBorderWidth(((Integer)value).intValue());
jaroslav@0
   275
				 	ret = ret | XFDesignConstants.RSP_OTHER_PROP | XFDesignConstants.RSP_REPAINT_COMP;
jaroslav@0
   276
					if (autoSize)
jaroslav@6
   277
						setDesignSize(0,0);
jaroslav@0
   278
					repaintComponent();
jaroslav@0
   279
					break;
jaroslav@0
   280
			case 7:	if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   281
					setParentColor(((Boolean)value).booleanValue());
jaroslav@0
   282
					if (parentColor)
jaroslav@0
   283
						ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
jaroslav@0
   284
					break;
jaroslav@0
   285
			case 8: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
jaroslav@0
   286
					imBut.setBorderColor((Color)value);
jaroslav@0
   287
					ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
jaroslav@0
   288
					break;
jaroslav@0
   289
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   290
		}
jaroslav@0
   291
		regenForm(regen);
jaroslav@0
   292
		
jaroslav@0
   293
		return ret;
jaroslav@0
   294
	}
jaroslav@0
   295
			
jaroslav@0
   296
	public void specialPropertyInput(Frame parent, int index) throws 	
jaroslav@0
   297
		XFPropertyIndexOutOfBoundsException, 
jaroslav@0
   298
		XFPropertyNoSpecialInputException { 
jaroslav@0
   299
		if ((index < 0) || (index >= propertyCount)) throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   300
		switch (index) { 
jaroslav@0
   301
			case 3: XImageNamePropertyType.invokeSpecialInput(parent, this, index);
jaroslav@0
   302
					break;
jaroslav@0
   303
			case 5: 
jaroslav@0
   304
			case 8: XColorPropertyType.invokeSpecialInput(parent, this, index);
jaroslav@0
   305
					break;
jaroslav@0
   306
			default: throw new XFPropertyNoSpecialInputException();
jaroslav@0
   307
		}
jaroslav@0
   308
	}
jaroslav@0
   309
jaroslav@0
   310
	public int getEventCount() {
jaroslav@0
   311
		return eventCount;
jaroslav@0
   312
	}
jaroslav@0
   313
jaroslav@0
   314
	public String[] getEventNames() {
jaroslav@0
   315
		String list[] = new String[eventCount];
jaroslav@0
   316
		list[0] = "OnClick";
jaroslav@0
   317
		list[1] = "OnGotFocus";
jaroslav@0
   318
		list[2] = "OnLostFocus";
jaroslav@0
   319
		return list;
jaroslav@0
   320
	}
jaroslav@0
   321
jaroslav@0
   322
	public String getEvent(int index) throws 
jaroslav@0
   323
		XFPropertyIndexOutOfBoundsException {
jaroslav@0
   324
		if ((index>=0) && (index<eventCount)) {
jaroslav@0
   325
			if (events[index] == null)
jaroslav@0
   326
				return null;
jaroslav@0
   327
			else
jaroslav@0
   328
				return new String(events[index]); 
jaroslav@0
   329
		}
jaroslav@0
   330
		else throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   331
	}		
jaroslav@0
   332
		
jaroslav@0
   333
	public void setEvent(int index, String value) throws 
jaroslav@0
   334
		XFPropertyIndexOutOfBoundsException {
jaroslav@0
   335
		if ((index>=0) && (index<eventCount))
jaroslav@0
   336
			events[index] = value;
jaroslav@0
   337
		else throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   338
	}		
jaroslav@0
   339
jaroslav@0
   340
	public String getClassName() {
jaroslav@0
   341
		return "ImageButton";
jaroslav@0
   342
	}
jaroslav@0
   343
	
jaroslav@0
   344
	private String conv(String source) {
jaroslav@0
   345
		String dest = "";
jaroslav@0
   346
		StringTokenizer st = new StringTokenizer(source, "\\");
jaroslav@0
   347
		dest += st.nextToken();
jaroslav@0
   348
		while (st.hasMoreTokens()) { 
jaroslav@0
   349
			dest += "\\\\" + st.nextToken();
jaroslav@0
   350
		}
jaroslav@0
   351
		return dest;
jaroslav@0
   352
	}
jaroslav@0
   353
jaroslav@0
   354
	public String generateCode(int what) {
jaroslav@0
   355
		String gen = "";
jaroslav@0
   356
		switch (what) {
jaroslav@0
   357
			case XFDesignConstants.GEN_VARIABLE: 
jaroslav@0
   358
				gen = getClassName()+" "+ name + ";\n";
jaroslav@0
   359
				break;
jaroslav@0
   360
			case XFDesignConstants.GEN_INIT:
jaroslav@0
   361
				if (iName.isURL()) {
jaroslav@0
   362
					gen = name + " = new " + getClassName() + "(\"" +
jaroslav@0
   363
						conv(iName.getText1()) + "\");\n";
jaroslav@0
   364
				}
jaroslav@0
   365
				if (iName.isPath()) {
jaroslav@0
   366
					gen = name + " = new " + getClassName() + "(Toolkit.getDefaultToolkit().getImage(\"" +
jaroslav@0
   367
						conv(iName.getText1()) + "\"));\n";
jaroslav@0
   368
				}
jaroslav@0
   369
				if (iName.isPackage()) {
jaroslav@0
   370
					//PENDING
jaroslav@0
   371
				}
jaroslav@0
   372
				break;
jaroslav@0
   373
			case XFDesignConstants.GEN_SETPROPS:
jaroslav@0
   374
				if (!propDefSet)
jaroslav@0
   375
					propertiesSetDefault();
jaroslav@0
   376
				for (int i = 0; i < propertyCount; i++) {
jaroslav@0
   377
					if (!propertyDefault(i)) {
jaroslav@0
   378
						switch(i) {
jaroslav@0
   379
							case 0: gen = gen + name + (imBut.isEnabled() ? ".enable();\n" : ".disable();\n");
jaroslav@0
   380
									break;
jaroslav@0
   381
							case 1: gen = gen + name + ((bVisible) ? ".show();\n" : ".hide();\n");
jaroslav@0
   382
									break;
jaroslav@0
   383
							case 4: gen = gen + name + ".setStretch(" +
jaroslav@0
   384
										(imBut.getStretch() ? "true" : "false") + ");\n";
jaroslav@0
   385
									break;
jaroslav@0
   386
							case 5: if (!parentColor)
jaroslav@0
   387
										gen = gen + name + ".setBackground(" +
jaroslav@0
   388
											XFDesignUtils.genColor(imBut.getBackground()) + ");\n";
jaroslav@0
   389
									break;
jaroslav@0
   390
							case 6: gen = gen + name + ".setBorderWidth(" + imBut.getBorderWidth() + ");\n";
jaroslav@0
   391
									break;
jaroslav@0
   392
							case 8: gen = gen + name + ".setBorderColor(" +
jaroslav@0
   393
										XFDesignUtils.genColor(imBut.getBorderColor()) + ");\n";
jaroslav@0
   394
									break;
jaroslav@0
   395
						}
jaroslav@0
   396
					}
jaroslav@0
   397
				}
jaroslav@0
   398
				break;			
jaroslav@0
   399
			case XFDesignConstants.GEN_RESHAPE:
jaroslav@0
   400
				if (((XelfiVisualContainer) getParent()).getDesignLayout().allowsDragging()) {
jaroslav@0
   401
					if (!autoSize) 
jaroslav@0
   402
						if (getParent() instanceof XelfiDesignForm)
jaroslav@0
   403
							gen = name + ".reshape(insets.left+"+position.x+", insets.top+"+position.y+","+size.width+","+size.height+");\n";
jaroslav@0
   404
						else 
jaroslav@0
   405
							gen = name + ".reshape("+position.x+","+position.y+","+size.width+","+size.height+");\n";
jaroslav@0
   406
					else {
jaroslav@0
   407
						gen = name + ".resize(" + name + ".preferredSize());\n";
jaroslav@0
   408
						if (getParent() instanceof XelfiDesignForm)
jaroslav@0
   409
							gen = gen + name + ".move(insets.left+"+position.x+", insets.top+"+position.y+");\n";
jaroslav@0
   410
						else
jaroslav@0
   411
							gen = gen + name + ".move("+position.x+","+position.y+");\n";
jaroslav@0
   412
					}
jaroslav@0
   413
				}
jaroslav@0
   414
				break;
jaroslav@0
   415
		}
jaroslav@0
   416
		return gen;
jaroslav@0
   417
	}
jaroslav@0
   418
jaroslav@0
   419
	public String generateEventCondition(int index) throws XFPropertyIndexOutOfBoundsException {
jaroslav@0
   420
		String evt = XFDesignOptions.eventVarName;
jaroslav@0
   421
		switch (index) { 
jaroslav@0
   422
			case 0: return evt +".id == Event.ACTION_EVENT && "+evt+".target == "+getName();
jaroslav@0
   423
			case 1: return evt +".id == Event.GOT_FOCUS && "+evt+".target == "+getName();
jaroslav@0
   424
			case 2: return evt +".id == Event.LOST_FOCUS && "+evt+".target == "+getName();
jaroslav@0
   425
			default: throw new XFPropertyIndexOutOfBoundsException();
jaroslav@0
   426
		}
jaroslav@0
   427
	}
jaroslav@0
   428
jaroslav@0
   429
	public void loadFromStream(DataInput stream) throws IOException {
jaroslav@0
   430
jaroslav@0
   431
		Debug.debug(Debug.FORMIO_LOAD, "ImgBut load - begin");
jaroslav@0
   432
		super.loadFromStream(stream);
jaroslav@0
   433
jaroslav@0
   434
		if (!propDefSet)
jaroslav@0
   435
			propertiesSetDefault();
jaroslav@0
   436
jaroslav@0
   437
		for (int i = 0; i < propertyCount; i++) {
jaroslav@0
   438
			if (stream.readBoolean())
jaroslav@0
   439
				propDef[i] = null;
jaroslav@0
   440
			else switch (i) {
jaroslav@0
   441
				case 0: imBut.enable(XBooleanPropertyType.loadBFromStream(stream)); break;
jaroslav@0
   442
				case 1: bVisible = XBooleanPropertyType.loadBFromStream(stream); break;
jaroslav@0
   443
				case 2: setAutoSize(XBooleanPropertyType.loadBFromStream(stream)); break;
jaroslav@0
   444
				case 3: setImageButton(XImageNamePropertyType.loadFromStream(stream)); break;
jaroslav@0
   445
				case 4: imBut.setStretch(XBooleanPropertyType.loadBFromStream(stream)); break;
jaroslav@0
   446
				case 5: imBut.setBackground(XColorPropertyType.loadFromStream(stream)); break;
jaroslav@0
   447
				case 6: imBut.setBorderWidth(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
jaroslav@0
   448
				case 7: setParentColor(XBooleanPropertyType.loadBFromStream(stream)); break;
jaroslav@0
   449
				case 8: imBut.setBorderColor(XColorPropertyType.loadFromStream(stream)); break;
jaroslav@0
   450
			}
jaroslav@0
   451
		}
jaroslav@0
   452
jaroslav@0
   453
		Debug.debug(Debug.FORMIO_LOAD, "ImgBut load - (2)");
jaroslav@0
   454
jaroslav@0
   455
jaroslav@0
   456
		for (int i = 0; i < eventCount; i++) {
jaroslav@0
   457
			if (stream.readBoolean())
jaroslav@0
   458
				parentForm.assignEvent(this, i, stream.readUTF());
jaroslav@0
   459
		}
jaroslav@0
   460
		Debug.debug(Debug.FORMIO_LOAD, "ImgBut load - end");
jaroslav@0
   461
	}		
jaroslav@0
   462
	
jaroslav@0
   463
	public void saveToStream(DataOutput stream) throws IOException {
jaroslav@0
   464
jaroslav@0
   465
		Debug.debug(Debug.FORMIO_SAVE, "ImgBut save - begin");
jaroslav@0
   466
		super.saveToStream(stream);
jaroslav@0
   467
jaroslav@0
   468
		for (int i = 0; i < propertyCount; i++) {
jaroslav@0
   469
			boolean b = propertyDefault(i);
jaroslav@0
   470
			stream.writeBoolean(b);
jaroslav@0
   471
			if (!b) {
jaroslav@0
   472
				switch (i) {
jaroslav@0
   473
					case 0: XBooleanPropertyType.saveToStream(imBut.isEnabled(), stream); break;
jaroslav@0
   474
					case 1: XBooleanPropertyType.saveToStream(bVisible, stream); break;
jaroslav@0
   475
					case 2: XBooleanPropertyType.saveToStream(autoSize, stream); break;
jaroslav@0
   476
					case 3: XImageNamePropertyType.saveToStream(iName, stream); break;
jaroslav@0
   477
					case 4: XBooleanPropertyType.saveToStream(imBut.getStretch(), stream); break;
jaroslav@0
   478
					case 5: XColorPropertyType.saveToStream(imBut.getBackground(), stream); break;
jaroslav@0
   479
					case 6: XIntegerPropertyType.saveToStream(new Integer(imBut.getBorderWidth()), stream); break;
jaroslav@0
   480
					case 7: XBooleanPropertyType.saveToStream(parentColor, stream); break;
jaroslav@0
   481
					case 8: XColorPropertyType.saveToStream(imBut.getBorderColor(), stream); break;
jaroslav@0
   482
				}
jaroslav@0
   483
			}
jaroslav@0
   484
		}
jaroslav@0
   485
jaroslav@0
   486
		Debug.debug(Debug.FORMIO_SAVE, "ImgBut save - (2)");
jaroslav@0
   487
		
jaroslav@0
   488
		for (int i = 0; i < eventCount; i++) {
jaroslav@0
   489
			if ((events[i] != null) && (events[i].length() > 0)) {
jaroslav@0
   490
				stream.writeBoolean(true);
jaroslav@0
   491
				stream.writeUTF(events[i]);
jaroslav@0
   492
			}
jaroslav@0
   493
			else stream.writeBoolean(false);
jaroslav@0
   494
		}
jaroslav@0
   495
		Debug.debug(Debug.FORMIO_SAVE, "ImgBut save - end");
jaroslav@0
   496
	}
jaroslav@0
   497
	
jaroslav@0
   498
}