@doc hierarchy="GMLDOM">
	Implements a prototype of an object that can be operated by the layout editor (@LayoutEditor).
	Such object typically has HTML element and implements HTML painting and positioning functions.
	(c) SAP AG 2003-2006. All rights reserved.
Interface ILayoutable;
// NOTE: Remove all methods/properties that are not common to both Diagram and Widget!!!
// HTML element
virtual property elem = null;
// Parent HTML element
virtual property parentElement = null;
virtual property board = null;
virtual property doc = null;
virtual property id = null;
// Layoutable type: none | diagram | box | control | viewbar | toolbar
virtual property type = 'none';
// parentElement is optional, otherwise this.getParent().elem or board.canvas are used
abstract method paint(parentElement)
<@method name="repaint">
	Repaints the box after a specified attribute or field has changed
	The name of the attribute that has changed. Pass ~field to indicate that a single field has changed. If omitted, the box will be fully repainted.
	The id of the control that has changed, if %0 is equal to ~field.
	The name of the control property that has changed, if %0 is equal to ~field and exactly one control property was modified.
abstract method repaint(attr);
/*
<@method name="setZOrder">
	Sets the z-order
	The new z order index
abstract method setZOrder(z);
*/
<@method name="setPos">
	Sets the box position
	The new position
	Indicates whether to snap to the nearest valid position
abstract method setPos(pos, snap);
<@method name="capturePos">
	Called once before starting a move operation.
	This method can be used to capture the box position before it is moved.
abstract method capturePos();
<@method name="applyPos">
	Called once after finishing a move operation.
	This method can be used to apply custom behavior when the box is moved
abstract method applyPos();
<@method name="setSize">
	Sets the box size
	The new width
	The new height
	Indicates whether to snap to the nearest valid size
abstract method setSize(size, snap);
<@method name="setRect">
	Sets the box position and size
	The new x position
	The new y position
	The new width
	The new height
	Indicates whether to snap to the nearest valid size
abstract method setRect(rect, snap);
<@method name="captureRect">
	Called once before starting a resize operation.
	This method can be used to capture the box sized before it is resized.
abstract method captureRect();
<@method name="applyRect">
	Called once after finishing a resize operation.
	This method can be used to apply custom behavior when the box is resized
abstract method applyRect();
<@method name="resetRect">
	Resets the box position and size to cancel any pending move/resize operation
abstract method resetRect();
<@method name="setVisibility">
	Sets the box visibility
	The box opacity level, between 0 (invisible) and 1 (visible)
abstract method setVisibility(opacity);
////////////////////////////////////////////
// VC05 new stuff
abstract method applyLayout(focusWidget, operation, repaint);
abstract method getPos();
abstract method getSize();
abstract method getRect();
<@method name="setResizePolicy">
	Updates box resize policy, used by Selection Manager
abstract method setResizePolicy(policy);
<@doc scope="private">
	Handles an update of base object property
abstract method onModelUpdate(evt);
<@doc scope="private">
	Handles an insertion of a child object into base object
abstract method onModelInsert(evt);
<@doc scope="private">
	Handles a removal of a child object from the base object
abstract method onModelRemove(evt);
// DOC: derived implementations should also take care of setBaseRect
abstract method setBasePos(pos);
abstract method setBaseSize(size);
// DOC: derived implementations should also take care of setBasePos
abstract method setBaseRect(rect);
abstract method getBasePos();
abstract method getBaseSize();
abstract method getBaseRect();
abstract method getBaseZOrder();