src/main/java/xelfi/design/components/xawt/XScrollbar.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
     1 /**
     2 * Xelfi
     3 */
     4 
     5 package xelfi.design.components.xawt;
     6 
     7 /**
     8   *
     9   * @version 	2.12, 03 Apr 1997
    10   * @author 	Petr Hamernik, Ian Formanek
    11   *
    12   */
    13 
    14 import java.awt.*;
    15 import java.io.*;
    16 import xelfi.design.components.*;
    17 import xelfi.design.components.property.*;
    18 import xelfi.design.forms.XelfiDesignForm;
    19 import xelfi.design.util.XFDesignConstants;
    20 import xelfi.design.util.XFDesignOptions;
    21 import xelfi.design.util.XFDesignUtils;
    22 
    23 public abstract class XScrollbar extends XAWTPanel {
    24 	protected Scrollbar scrollbar;
    25 	private static int propertyCount = 13;
    26 	private Object propDef[];
    27 	private boolean propDefSet = false;
    28 	private static int eventCount = 7;
    29 	private String events[] = new String[eventCount];
    30 
    31 	private int orientation;
    32 	private String orientationStr;
    33 	
    34 	public XScrollbar(int aOrientation, String aOrientationStr) {
    35 		super(XAWTPanel.WITH_DRAGBORDER);
    36 		setComponent(scrollbar = new Scrollbar(aOrientation));
    37 		orientation = aOrientation;
    38 		orientationStr = aOrientationStr;
    39 		propDef = new Object[propertyCount];
    40 		for (int i=0; i<propertyCount; i++)
    41 			propDef[i] = null;
    42 	}
    43 
    44 	protected void regenForm(int what) {
    45 		if (parentForm != null)
    46 			parentForm.regenerateCode(this, what);
    47 	}
    48 
    49 	public String[] neededImports() {
    50 		String[] ret = new String[1];
    51 		ret[0] = "java.awt.Scrollbar";
    52 		return ret;
    53 	}
    54 
    55 	private boolean propertyDefault(int i) throws XFPropertyIndexOutOfBoundsException {
    56 		if (propDefSet)
    57 			propertiesSetDefault();
    58 		if (propDef[i] == null)
    59 			return false;
    60 		switch (i) {
    61 			case 0: return ((Color) propDef[i]).equals(scrollbar.getBackground());
    62 			case 1: return ((Color) propDef[i]).equals(scrollbar.getForeground());
    63 			case 2: return (((Boolean) propDef[i]).booleanValue() == scrollbar.isEnabled());
    64 			case 3: return (((Boolean) propDef[i]).booleanValue() == bVisible);
    65 			case 4: return (((Boolean) propDef[i]).booleanValue() == autoSize);
    66 			case 5: return (((Boolean) propDef[i]).booleanValue() == parentColor);
    67 			case 6: return true;
    68 			case 7: return (((Integer) propDef[i]).intValue() == scrollbar.getValue());
    69 			case 8: return (((Integer) propDef[i]).intValue() == scrollbar.getMinimum());
    70 			case 9: return (((Integer) propDef[i]).intValue() == scrollbar.getMaximum());
    71 			case 10: return (((Integer) propDef[i]).intValue() == scrollbar.getLineIncrement());
    72 			case 11: return (((Integer) propDef[i]).intValue() == scrollbar.getPageIncrement());
    73 			case 12: return (((Integer) propDef[i]).intValue() == scrollbar.getVisible());
    74 			default: throw new XFPropertyIndexOutOfBoundsException();
    75 		}
    76 	}
    77 
    78 	private void propertiesSetDefault() {
    79 		if (propDefSet)
    80 			return;
    81 		propDefSet = true;
    82 		if (scrollbar.getBackground() != null)
    83 				propDef[0] = new Color(scrollbar.getBackground().getRGB());
    84 		if (scrollbar.getForeground() != null)
    85 				propDef[1] = new Color(scrollbar.getForeground().getRGB());
    86 		propDef[2] = new Boolean(scrollbar.isEnabled());
    87 		propDef[3] = new Boolean(bVisible);
    88 		propDef[4] = new Boolean(autoSize);
    89 		propDef[5] = new Boolean(parentColor);
    90 		propDef[7] = new Integer(scrollbar.getValue());
    91 		propDef[8] = new Integer(scrollbar.getMinimum());
    92 		propDef[9] = new Integer(scrollbar.getMaximum());
    93 		propDef[10] = new Integer(scrollbar.getLineIncrement());
    94 		propDef[11] = new Integer(scrollbar.getPageIncrement());
    95 		propDef[12] = new Integer(scrollbar.getVisible());
    96 	}
    97 
    98 	public int getPropertyCount() { return propertyCount; }
    99 	
   100 	public Object getProperty(int index) throws XFPropertyIndexOutOfBoundsException { 
   101 		switch (index) {
   102 			case 0: return scrollbar.getBackground();
   103 			case 1: return scrollbar.getForeground();
   104 			case 2: return (scrollbar.isEnabled()) ? Boolean.TRUE : Boolean.FALSE;
   105 			case 3: return (bVisible) ? Boolean.TRUE : Boolean.FALSE;
   106 			case 4: return (autoSize) ? Boolean.TRUE : Boolean.FALSE;
   107 			case 5: return (parentColor) ? Boolean.TRUE : Boolean.FALSE;
   108 			case 6: return orientationStr;
   109 			case 7: return new Integer(scrollbar.getValue());
   110 			case 8: return new Integer(scrollbar.getMinimum());
   111 			case 9: return new Integer(scrollbar.getMaximum());
   112 			case 10: return new Integer(scrollbar.getLineIncrement());
   113 			case 11: return new Integer(scrollbar.getPageIncrement());
   114 			case 12: return new Integer(scrollbar.getVisible());
   115 			default: throw new XFPropertyIndexOutOfBoundsException();
   116 		}
   117 	}
   118 			
   119 	public String[] getPropertyNames() { 
   120 		String list[] = new String[propertyCount];
   121 		list[0] = "Background Color";
   122 		list[1] = "Foreground Color";
   123 		list[2] = "Enabled";
   124 		list[3] = "Visible";
   125 		list[4] = "Auto Size";
   126 		list[5] = "Parent Color";
   127 		list[6] = "Orientation";
   128 		list[7] = "Value";
   129 		list[8] = "Minimum";
   130 		list[9] = "Maximum";
   131 		list[10] = "Line Increment";
   132 		list[11] = "Page Increment";
   133 		list[12] = "Visible Amount";
   134 		return list;
   135 	}
   136 		
   137 	public String getPropertyString(int index) throws 
   138 		XFPropertyIndexOutOfBoundsException { 
   139 		switch (index) {
   140 			case 0: 
   141 			case 1: return XColorPropertyType.viewString(getProperty(index));
   142 			case 2:
   143 			case 3: return XBooleanPropertyType.viewString(getProperty(index));
   144 			case 4: 
   145 			case 5: return XBooleanPropertyType.viewString(getProperty(index));
   146 			case 6: return orientationStr;
   147 			case 7:
   148 			case 8:
   149 			case 9:
   150 			case 10:
   151 			case 11:
   152 			case 12: return XIntegerPropertyType.viewString(getProperty(index));
   153 			default: throw new XFPropertyIndexOutOfBoundsException();
   154 		}
   155 	}
   156 
   157 	public int getPropertyViewerType(int index) throws 
   158 		XFPropertyIndexOutOfBoundsException {
   159 		switch (index) {
   160 			case 0: 
   161 			case 1: return XFDesignConstants.PVT_SPECIAL;
   162 			case 2:
   163 			case 3:
   164 			case 4: 
   165 			case 5: return XFDesignConstants.PVT_CHECK;
   166 			case 6: return XFDesignConstants.PVT_READONLY;
   167 			case 7:
   168 			case 8:
   169 			case 9:
   170 			case 10:
   171 			case 11:
   172 			case 12: return XFDesignConstants.PVT_INPUT_INT;
   173 			default: throw new XFPropertyIndexOutOfBoundsException();
   174 		}
   175 	}
   176 
   177 	public String[] getPropertyValueNames(int index) throws 
   178 		XFPropertyIndexOutOfBoundsException {
   179 		switch (index) {
   180 			default: throw new XFPropertyIndexOutOfBoundsException();
   181 		}
   182 	}
   183 
   184 	public Object[] getPropertyValueValues(int index) throws 
   185 		XFPropertyIndexOutOfBoundsException {
   186 		switch (index) {
   187 			default: throw new XFPropertyIndexOutOfBoundsException();
   188 		}
   189 	}
   190 
   191 	public int setProperty(int index, Object value) throws 	
   192 		XFPropertyIndexOutOfBoundsException,
   193 		XFPropertyBadValueTypeException 
   194 	{ 
   195 		int ret = XFDesignConstants.RSP_OK;
   196 		int regen = XFDesignConstants.GEN_SETPROPS;
   197 		if (!propDefSet)
   198 			propertiesSetDefault();
   199 		switch (index) { 
   200 			case 0: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
   201 					scrollbar.setBackground((Color)value);
   202 					ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
   203 					scrollbar.hide();
   204 					scrollbar.show();
   205 					if (parentColor) {
   206 						parentColor = false;
   207 						ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   208 					}
   209 					break;
   210 			case 1: if (!(value instanceof Color)) throw new XFPropertyBadValueTypeException();
   211 					scrollbar.setForeground((Color)value);
   212 					ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
   213 					scrollbar.hide();
   214 					scrollbar.show();
   215 					if (parentColor) {
   216 						parentColor = false;
   217 						ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   218 					}
   219 					break;
   220 			case 2: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
   221 					scrollbar.enable(((Boolean)value).booleanValue());
   222 					break;
   223 			case 3: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
   224 					bVisible = ((Boolean)value).booleanValue();
   225 					break;
   226 			case 4: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
   227 					setAutoSize(((Boolean)value).booleanValue());
   228 					if (autoSize) {
   229 						repaintComponent();
   230 						setDesignSize(0,0);
   231 						ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   232 					}
   233 					regen = regen | XFDesignConstants.GEN_RESHAPE;
   234 					ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
   235 					break;
   236 			case 5: if (!(value instanceof Boolean)) throw new XFPropertyBadValueTypeException();
   237 					setParentColor(((Boolean)value).booleanValue());
   238 					if (parentColor)
   239 						ret = ret | XFDesignConstants.RSP_REPAINT_COMP;
   240 					break;
   241 			case 7:	if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
   242 					scrollbar.setValue(((Integer)value).intValue());
   243 					ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   244 					break;
   245 			case 8:	if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
   246 					scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
   247 						((Integer)value).intValue(), scrollbar.getMaximum());
   248 					ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   249 					break;
   250 			case 9:	if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
   251 					scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
   252 						scrollbar.getMinimum(), ((Integer)value).intValue());
   253 					ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   254 					break;
   255 			case 10:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
   256 					scrollbar.setLineIncrement(((Integer)value).intValue());
   257 					ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   258 					break;
   259 			case 11:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
   260 					scrollbar.setPageIncrement(((Integer)value).intValue());
   261 					ret = ret | XFDesignConstants.RSP_OTHER_PROP;
   262 					break;
   263 			case 12:if (!(value instanceof Integer)) throw new XFPropertyBadValueTypeException();
   264 					scrollbar.setValues(scrollbar.getValue(),((Integer)value).intValue(), 
   265 						scrollbar.getMinimum(), scrollbar.getMaximum());
   266 					break;
   267 
   268 			default: throw new XFPropertyIndexOutOfBoundsException();
   269 		}
   270 		if (parentForm != null)
   271 			parentForm.regenerateCode(this, regen);
   272 		
   273 		return ret;
   274 	}
   275 			
   276 	public void specialPropertyInput(Frame parent, int index) throws 	
   277 		XFPropertyIndexOutOfBoundsException, 
   278 		XFPropertyNoSpecialInputException { 
   279 		if ((index < 0) || (index >= propertyCount)) throw new XFPropertyIndexOutOfBoundsException();
   280 		switch (index) { 
   281 			case 0:
   282 			case 1: XColorPropertyType.invokeSpecialInput(parent, this, index);
   283 						break;
   284 			default: throw new XFPropertyNoSpecialInputException();
   285 		}
   286 	}
   287 
   288 	public int getEventCount() {
   289 		return eventCount;
   290 	}
   291 
   292 	public String[] getEventNames() {
   293 		String list[] = new String[eventCount];
   294 		list[0] = "OnGotFocus";
   295 		list[1] = "OnLostFocus";
   296 		list[2] = "OnScrollAbolute";
   297 		list[3] = "OnScrollLineDown";
   298 		list[4] = "OnScrollLineUp";
   299 		list[5] = "OnScrollPageDown";
   300 		list[6] = "OnScrollPageUp";
   301 		return list;
   302 	}
   303 
   304 	public String getEvent(int index) throws 
   305 		XFPropertyIndexOutOfBoundsException {
   306 		if ((index>=0) && (index<eventCount)) {
   307 			if (events[index] == null)
   308 				return null;
   309 			else
   310 				return new String(events[index]); 
   311 		}
   312 		else throw new XFPropertyIndexOutOfBoundsException();
   313 	}		
   314 		
   315 	public void setEvent(int index, String value) throws 
   316 		XFPropertyIndexOutOfBoundsException {
   317 		if ((index>=0) && (index<eventCount))
   318 			events[index] = value;
   319 		else throw new XFPropertyIndexOutOfBoundsException();
   320 	}		
   321 
   322 	public String getClassName() {
   323 		return "Scrollbar";
   324 	}
   325 	
   326 	public String generateCode(int what) {
   327 		String gen = "";
   328 		switch (what) {
   329 			case XFDesignConstants.GEN_VARIABLE: 
   330 				gen = getClassName()+" "+ name + ";\n";
   331 				break;
   332 			case XFDesignConstants.GEN_INIT: 
   333 				gen = name + " = new " + getClassName() + "(Scrollbar." + orientationStr + ");\n";
   334 				break;
   335 			case XFDesignConstants.GEN_SETPROPS:
   336 				if (!propDefSet)
   337 					propertiesSetDefault();
   338 				for (int i = 0; i < propertyCount; i++) {
   339 					if (!propertyDefault(i)) {
   340 						switch(i) {
   341 							case 0: if (!parentColor)
   342 										gen = gen + name + ".setBackground(" +
   343 											XFDesignUtils.genColor(scrollbar.getBackground()) + ");\n";
   344 									break;
   345 							case 1: if (!parentColor)
   346 										gen = gen + name + ".setForeground(" +
   347 											XFDesignUtils.genColor(scrollbar.getForeground()) + ");\n";
   348 									break;
   349 							case 2: gen = gen + name + (scrollbar.isEnabled() ? ".enable();\n" : ".disable();\n");
   350 									break;
   351 							case 3: gen = gen + name + ((bVisible) ? ".show();\n" : ".hide();\n");
   352 									break;
   353 							case 7: //generate properties 7,8,9,12
   354 									if ((!propertyDefault(8))||(!propertyDefault(9))||(!propertyDefault(12))) {
   355 										gen = gen + name + ".setValues(" + scrollbar.getValue() + "," +
   356 											scrollbar.getVisible() + "," + scrollbar.getMinimum() + "," +
   357 											scrollbar.getMaximum() + ");\n";
   358 									}
   359 									else {
   360 										if (!propertyDefault(8))
   361 											gen = gen + name + ".setMinimum(" + scrollbar.getMinimum() + ");\n";
   362 										if (!propertyDefault(9))
   363 											gen = gen + name + ".setMaximum(" + scrollbar.getMaximum() + ");\n";
   364 										if (!propertyDefault(12))
   365 											gen = gen + name + ".setVisible(" + scrollbar.getVisible() + ");\n";
   366 											
   367 									}
   368 									break;
   369 							case 8:
   370 							case 9: break;
   371 							case 10: gen = gen + name + ".setLineIncrement(" + scrollbar.getLineIncrement() + ");\n";
   372 							case 11: gen = gen + name + ".setPageIncrement(" + scrollbar.getPageIncrement() + ");\n";
   373 							case 12: break;
   374 							
   375 						}
   376 					}
   377 				}
   378 				break;			
   379 			case XFDesignConstants.GEN_RESHAPE:
   380 				if (((XelfiVisualContainer) getParent()).getDesignLayout().allowsDragging()) {
   381 					if (!autoSize) 
   382 						if (getParent() instanceof XelfiDesignForm)
   383 							gen = name + ".reshape(insets.left+"+position.x+", insets.top+"+position.y+","+size.width+","+size.height+");\n";
   384 						else 
   385 							gen = name + ".reshape("+position.x+","+position.y+","+size.width+","+size.height+");\n";
   386 					else {
   387 						gen = name + ".resize(" + name + ".preferredSize());\n";
   388 						if (getParent() instanceof XelfiDesignForm)
   389 							gen = gen + name + ".move(insets.left+"+position.x+", insets.top+"+position.y+");\n";
   390 						else
   391 							gen = gen + name + ".move("+position.x+","+position.y+");\n";
   392 					}
   393 				}
   394 				break;
   395 		}
   396 		return gen;
   397 	}
   398 
   399 	public String generateEventCondition(int index) throws XFPropertyIndexOutOfBoundsException {
   400 		String evt = XFDesignOptions.eventVarName;
   401 		switch (index) { 
   402 			case 0: return evt +".id == Event.GOT_FOCUS && "+evt+".target == "+getName();
   403 			case 1: return evt +".id == Event.LOST_FOCUS && "+evt+".target == "+getName();
   404 			case 2: return evt +".id == Event.SCROLL_ABSOLUTE && "+evt+".target == "+getName();
   405 			case 3: return evt +".id == Event.SCROLL_LINE_DOWN && "+evt+".target == "+getName();
   406 			case 4: return evt +".id == Event.SCROLL_LINE_UP && "+evt+".target == "+getName();
   407 			case 5: return evt +".id == Event.SCROLL_PAGE_DOWN && "+evt+".target == "+getName();
   408 			case 6: return evt +".id == Event.SCROLL_PAGE_UP && "+evt+".target == "+getName();
   409 			default: throw new XFPropertyIndexOutOfBoundsException();
   410 		}
   411 	}
   412 	
   413 	public void loadFromStream(DataInput stream) throws IOException {
   414 
   415 		super.loadFromStream(stream);
   416 
   417 		if (!propDefSet)
   418 			propertiesSetDefault();
   419 
   420 		for (int i = 0; i < propertyCount; i++) {
   421 			if (stream.readBoolean()) {
   422 				propDef[i] = null;
   423 			}
   424 			else switch (i) {
   425 				case 0: scrollbar.setBackground(XColorPropertyType.loadFromStream(stream)); break;
   426 				case 1: scrollbar.setForeground(XColorPropertyType.loadFromStream(stream)); break;
   427 				case 2: scrollbar.enable(XBooleanPropertyType.loadBFromStream(stream)); break;
   428 				case 3: bVisible = XBooleanPropertyType.loadBFromStream(stream); break;
   429 				case 4: setAutoSize(XBooleanPropertyType.loadBFromStream(stream)); break;
   430 				case 5: setParentColor(XBooleanPropertyType.loadBFromStream(stream)); break;
   431 				case 6: scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
   432 						XIntegerPropertyType.loadFromStream(stream).intValue(),scrollbar.getMaximum()); break;
   433 				case 7: scrollbar.setValues(scrollbar.getValue(),scrollbar.getVisible(),
   434 						scrollbar.getMinimum(),XIntegerPropertyType.loadFromStream(stream).intValue()); break;
   435 				case 8: scrollbar.setValue(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
   436 				case 9: scrollbar.setLineIncrement(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
   437 				case 10: scrollbar.setPageIncrement(XIntegerPropertyType.loadFromStream(stream).intValue()); break;
   438 				case 11: scrollbar.setValues(scrollbar.getValue(),XIntegerPropertyType.loadFromStream(stream).intValue(),
   439 						scrollbar.getMinimum(),scrollbar.getMaximum()); break;
   440 			}
   441 		}
   442 
   443 		for (int i = 0; i < eventCount; i++)
   444 			if (stream.readBoolean())
   445 				parentForm.assignEvent(this, i, stream.readUTF());
   446 	}		
   447 	
   448 	public void saveToStream(DataOutput stream) throws IOException {
   449 
   450 		super.saveToStream(stream);
   451 
   452 		for (int i = 0; i < propertyCount; i++) {
   453 			boolean b = propertyDefault(i);
   454 			stream.writeBoolean(b);
   455 			if (!b) {
   456 				switch (i) {
   457 					case 0: XColorPropertyType.saveToStream(scrollbar.getBackground(), stream); break;
   458 					case 1: XColorPropertyType.saveToStream(scrollbar.getForeground(), stream); break;
   459 					case 2: XBooleanPropertyType.saveToStream(scrollbar.isEnabled(), stream); break;
   460 					case 3: XBooleanPropertyType.saveToStream(bVisible, stream); break;
   461 					case 4: XBooleanPropertyType.saveToStream(autoSize, stream); break;
   462 					case 5: XBooleanPropertyType.saveToStream(parentColor, stream); break;
   463 					case 6: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getMinimum()), stream); break;
   464 					case 7: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getMaximum()), stream); break;
   465 					case 8: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getValue()), stream); break;
   466 					case 9: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getLineIncrement()), stream); break;
   467 					case 10: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getPageIncrement()), stream); break;
   468 					case 11: XIntegerPropertyType.saveToStream(new Integer(scrollbar.getVisible()), stream); break;
   469 				}
   470 			}
   471 		}
   472 
   473 		for (int i = 0; i < eventCount; i++) {
   474 			if ((events[i] != null) && (events[i].length() > 0)) {
   475 				stream.writeBoolean(true);
   476 				stream.writeUTF(events[i]);
   477 			}
   478 			else stream.writeBoolean(false);
   479 		}
   480 	}
   481 	
   482 }