<?xml version="1.0" encoding="UTF-8" ?>
<class name="Container" inherits="Control" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
	<brief_description>
		Base class for all GUI containers.
	</brief_description>
	<description>
		Base class for all GUI containers. A [Container] automatically arranges its child controls in a certain way. This class can be inherited to make custom container types.
	</description>
	<tutorials>
		<link title="Using Containers">$DOCS_URL/tutorials/ui/gui_containers.html</link>
	</tutorials>
	<methods>
		<method name="_get_allowed_size_flags_horizontal" qualifiers="virtual const">
			<return type="PackedInt32Array" />
			<description>
				Implement to return a list of allowed horizontal [enum Control.SizeFlags] for child nodes. This doesn't technically prevent the usages of any other size flags, if your implementation requires that. This only limits the options available to the user in the Inspector dock.
				[b]Note:[/b] Having no size flags is equal to having [constant Control.SIZE_SHRINK_BEGIN]. As such, this value is always implicitly allowed.
			</description>
		</method>
		<method name="_get_allowed_size_flags_vertical" qualifiers="virtual const">
			<return type="PackedInt32Array" />
			<description>
				Implement to return a list of allowed vertical [enum Control.SizeFlags] for child nodes. This doesn't technically prevent the usages of any other size flags, if your implementation requires that. This only limits the options available to the user in the Inspector dock.
				[b]Note:[/b] Having no size flags is equal to having [constant Control.SIZE_SHRINK_BEGIN]. As such, this value is always implicitly allowed.
			</description>
		</method>
		<method name="fit_child_in_rect">
			<return type="void" />
			<param index="0" name="child" type="Control" />
			<param index="1" name="rect" type="Rect2" />
			<description>
				Fit a child control in a given rect. This is mainly a helper for creating custom container classes.
			</description>
		</method>
		<method name="queue_sort">
			<return type="void" />
			<description>
				Queue resort of the contained children. This is called automatically anyway, but can be called upon request.
			</description>
		</method>
	</methods>
	<members>
		<member name="mouse_filter" type="int" setter="set_mouse_filter" getter="get_mouse_filter" overrides="Control" enum="Control.MouseFilter" default="1" />
	</members>
	<signals>
		<signal name="pre_sort_children">
			<description>
				Emitted when children are going to be sorted.
			</description>
		</signal>
		<signal name="sort_children">
			<description>
				Emitted when sorting the children is needed.
			</description>
		</signal>
	</signals>
	<constants>
		<constant name="NOTIFICATION_PRE_SORT_CHILDREN" value="50">
			Notification just before children are going to be sorted, in case there's something to process beforehand.
		</constant>
		<constant name="NOTIFICATION_SORT_CHILDREN" value="51">
			Notification for when sorting the children, it must be obeyed immediately.
		</constant>
	</constants>
</class>
