class
	EV_MODEL_GROUP

General
	cluster: interface
	description: 
		"A EV_FIGURE_GROUP is an ARRAYED_LIST of EV_FIGURE.
		Since EV_FIGURE_GROUP is also an EV_FIGURE (composite pattern) you
		can rotate, scale and change the position of an EV_FIGURE_GROUP.
		All elements in the group are rotated around the center
		of the EV_FIGURE_GROUP. A EV_FIGURE can only be grouped
		in one group at the same time.
		"
	create: make_filled, make_with_point, make_with_position, default_create

Ancestors
	ARRAYED_LIST [G]
	EV_MODEL*
	EV_MODEL_SINGLE_POINTED*

Action sequences
	conforming_pick_actions: EV_NOTIFY_ACTION_SEQUENCE
	drop_actions: EV_PND_ACTION_SEQUENCE
	pick_actions: EV_PND_START_ACTION_SEQUENCE
	pointer_button_press_actions: EV_POINTER_BUTTON_ACTION_SEQUENCE
	pointer_button_release_actions: EV_POINTER_BUTTON_ACTION_SEQUENCE
	pointer_double_press_actions: EV_POINTER_BUTTON_ACTION_SEQUENCE
	pointer_enter_actions: EV_NOTIFY_ACTION_SEQUENCE
	pointer_leave_actions: EV_NOTIFY_ACTION_SEQUENCE
	pointer_motion_actions: EV_POINTER_MOTION_ACTION_SEQUENCE

Queries
	accept_cursor: EV_POINTER_STYLE
	after: BOOLEAN
	angle: REAL_64
	are_events_sended_to_group: BOOLEAN
	before: BOOLEAN
	bounding_box: EV_RECTANGLE
	capacity: INTEGER_32
	changeable_comparison_criterion: BOOLEAN
	count: INTEGER_32
	cursor: ARRAYED_LIST_CURSOR
	deep_elements: LIST [EV_MODEL]
	deny_cursor: EV_POINTER_STYLE
	duplicate (n: INTEGER_32): [like Current] EV_MODEL_GROUP
	exhausted: BOOLEAN
	Extendible: BOOLEAN
	first: [like item] EV_MODEL
	for_all (test: FUNCTION [ANY, TUPLE [EV_MODEL], BOOLEAN]): BOOLEAN
	full: BOOLEAN
	group: EV_MODEL_GROUP
	has (v: [like item] EV_MODEL): BOOLEAN
	has_capture: BOOLEAN
	has_deep (figure: EV_MODEL): BOOLEAN
	i_th alias "[]" (i: INTEGER_32): [like item] EV_MODEL
	id: INTEGER_32
	id_object (an_id: INTEGER_32): IDENTIFIED
	index: INTEGER_32
	index_of (v: [like item] EV_MODEL; i: INTEGER_32): INTEGER_32
	index_set: INTEGER_INTERVAL
	infix "@" (i: INTEGER_32): [like item] EV_MODEL
	invalid_rectangle: EV_RECTANGLE
	is_center_valid: BOOLEAN
	is_empty: BOOLEAN
	is_grouped: BOOLEAN
	is_hashable: BOOLEAN
	is_in_group: BOOLEAN
	is_in_world: BOOLEAN
	is_inserted (v: EV_MODEL): BOOLEAN
	is_rotatable: BOOLEAN
	is_scalable: BOOLEAN
	is_sensitive: BOOLEAN
	is_show_requested: BOOLEAN
	is_transformable: BOOLEAN
	isfirst: BOOLEAN
	islast: BOOLEAN
	item: EV_MODEL
	last: [like first] EV_MODEL
	linear_representation: LINEAR [EV_MODEL]
	object_comparison: BOOLEAN
	object_id: INTEGER_32
	occurrences (v: [like item] EV_MODEL): INTEGER_32
	off: BOOLEAN
	pebble: ANY
	pebble_function: FUNCTION [ANY, TUPLE, ANY]
	point: EV_COORDINATE
	point_count: INTEGER_32
	point_relative: EV_COORDINATE
	point_x: INTEGER_32
	point_x_relative: INTEGER_32
	point_y: INTEGER_32
	point_y_relative: INTEGER_32
	pointer_style: EV_POINTER_STYLE
	position_on_figure (a_x, a_y: INTEGER_32): BOOLEAN
	prunable: BOOLEAN
	readable: BOOLEAN
	sequential_occurrences (v: [like item] EV_MODEL): INTEGER_32
	target_name: STRING_GENERAL
	there_exists (test: FUNCTION [ANY, TUPLE [EV_MODEL], BOOLEAN]): BOOLEAN
	update_rectangle: EV_RECTANGLE
	valid_cursor (p: CURSOR): BOOLEAN
	valid_cursor_index (i: INTEGER_32): BOOLEAN
	valid_index (i: INTEGER_32): BOOLEAN
	world: EV_MODEL_WORLD
	writable: BOOLEAN
	x: INTEGER_32
	y: INTEGER_32

Commands
	append (s: SEQUENCE [EV_MODEL])
	back
	bring_forward (a_figure: EV_MODEL)
	bring_to_front (a_figure: EV_MODEL)
	center_invalidate
	compare_objects
	compare_references
	disable_capture
	disable_events_sended_to_group
	disable_sensitive
	do_all (action: PROCEDURE [ANY, TUPLE [EV_MODEL]])
	do_if (action: PROCEDURE [ANY, TUPLE [EV_MODEL]]; test: FUNCTION [ANY, TUPLE [EV_MODEL], BOOLEAN])
	enable_capture
	enable_events_sended_to_group
	enable_sensitive
	extend (v: [like item] EV_MODEL)
	fill (other: CONTAINER [EV_MODEL])
	finish
	force (v: [like item] EV_MODEL)
	force_i_th (fig: [like item] EV_MODEL; i: INTEGER_32)
	forth
	go_i_th (i: INTEGER_32)
	go_to (p: CURSOR)
	hide
	insert (fig: [like item] EV_MODEL; i: INTEGER_32)
	invalidate
	list_make (n: INTEGER_32)
	make_filled (n: INTEGER_32)
	make_from_array (a: ARRAY [EV_MODEL])
	merge_left (other: [like Current] EV_MODEL_GROUP)
	merge_right (other: [like Current] EV_MODEL_GROUP)
	move (i: INTEGER_32)
	prune (v: [like item] EV_MODEL)
	prune_all (fig: [like item] EV_MODEL)
	put (v: [like item] EV_MODEL)
	put_front (v: [like item] EV_MODEL)
	put_left (v: [like item] EV_MODEL)
	put_right (v: [like item] EV_MODEL)
	regroup
	remove
	remove_left
	remove_pebble
	remove_right
	replace (fig: [like item] EV_MODEL)
	resize (new_capacity: INTEGER_32)
	rotate (an_angle: REAL_64)
	rotate_around (an_angle: REAL_64; ax, ay: INTEGER_32)
	scale (a_scale: REAL_64)
	scale_abs (a_scale: REAL_64)
	scale_x (a_scale_x: REAL_64)
	scale_x_abs (a_scale_x: REAL_64)
	scale_y (a_scale_y: REAL_64)
	scale_y_abs (a_scale_y: REAL_64)
	search (v: [like item] EV_MODEL)
	send_backward (a_figure: EV_MODEL)
	send_to_back (a_figure: EV_MODEL)
	set_accept_cursor (a_cursor: EV_POINTER_STYLE)
	set_deny_cursor (a_cursor: EV_POINTER_STYLE)
	set_pebble (a_pebble: [like pebble] ANY)
	set_pebble_function (a_function: FUNCTION [ANY, TUPLE, ANY])
	set_point_position (a_x, a_y: INTEGER_32)
	set_point_position_relative (ax, ay: INTEGER_32)
	set_pointer_style (a_cursor: [like pointer_style] EV_POINTER_STYLE)
	set_target_name (a_name: STRING_GENERAL)
	set_x (a_x: INTEGER_32)
	set_x_y (a_x, a_y: INTEGER_32)
	set_y (a_y: INTEGER_32)
	show
	start
	swap (i: INTEGER_32)
	transform (a_transformation: EV_MODEL_TRANSFORMATION)
	ungroup
	validate
	wipe_out

Constraints
	is grouped implies all grouped
	angle equal current angle
	not is grouped implies angel equals zero