Esempio n. 1
0
	/// <summary>
	/// Inserts a list item at the specified position in the list.
	/// </summary>
	/// <param name="item">Reference to the item to be inserted into the list.</param>
	/// <param name="position">0-based index of the position in the list where the item will be placed.</param>
	/// <param name="text">Text to display in the item (requires that the item has a TextMesh associated with it, preferably in a child GameObject).</param>
	public void InsertItem(IUIListObject item, int position, string text)
	{
		IUIListObject lastItem;
		float contentDelta;

		// Make sure Awake() has already run:
		if (!m_awake)
			Awake();

		// Make sure Start() has already run:
		if (!m_started)
			Start();

		// See if the item needs to be enabled:
		if (activateWhenAdding)
		{
			if (!((Component)item).gameObject.active)
				((Component)item).gameObject.SetActiveRecursively(true);
		}

		// Now deactivate again if the list itself is deactivated:
		if(!gameObject.active)
			((Component)item).gameObject.SetActiveRecursively(false);

		// Put the item in the correct layer:
		item.gameObject.layer = gameObject.layer;

		// Add the item to our container:
		if (container != null)
			container.AddChild(item.gameObject);


		//-------------------------------------
		// Position our item:
		//-------------------------------------
		item.transform.parent = mover.transform;
#if AUTO_ORIENT_ITEMS
		item.transform.localRotation = Quaternion.identity;
#endif
#if AUTO_SCALE_ITEMS
		item.transform.localScale = Vector3.one;
#endif
		// Go ahead and get the item in the mover's plane
		// on the local Z-axis.  This must be done here
		// before anything that follows because if we are
		// using a perspective camera and these are newly
		// created items, their Start() will be called for
		// the first time when FindOuterEdges() is called
		// either by us, or by the Text property, and if
		// the item isn't already positioned relative to
		// the camera, then its size will be calculated
		// wrong.
		item.transform.localPosition = Vector3.zero;

		item.SetList(this);

		if (text != null)
			item.Text = text;

		// Compute the edges of the item:
		item.FindOuterEdges();
		item.UpdateCollider();
		

		// Clamp our position:
		position = Mathf.Clamp(position, 0, items.Count);

		// Hide the item by default:
		if(clipContents)
		{
			item.Hide(true);
			if (!item.Managed)
				item.gameObject.SetActiveRecursively(false);
		}

		// See if we can just add it to the end:
		if(position == items.Count)
		{
			float x=0, y=0;
			bool addItemSpacing = false;

			if (orientation == ORIENTATION.HORIZONTAL)
			{
				// Find the X-coordinate:
				if (items.Count > 0)
				{
					addItemSpacing = true; // We will be adding itemSpacing

					lastItem = items[items.Count - 1];

					if (direction == DIRECTION.TtoB_LtoR)
						x = lastItem.transform.localPosition.x + lastItem.BottomRightEdge.x + itemSpacing - item.TopLeftEdge.x;
					else
						x = lastItem.transform.localPosition.x - lastItem.BottomRightEdge.x - itemSpacing + item.TopLeftEdge.x;
				}
				else
				{
					if (spacingAtEnds)
						addItemSpacing = true; // We will be adding itemSpacing

					if (direction == DIRECTION.TtoB_LtoR)
						x = (viewableArea.x * -0.5f) - item.TopLeftEdge.x + ((spacingAtEnds) ? (itemSpacing) : (0));
					else
						x = (viewableArea.x * 0.5f) - item.BottomRightEdge.x - ((spacingAtEnds) ? (itemSpacing) : (0));
				}

				// Find the Y-coordinate:
				switch(alignment)
				{
					case ALIGNMENT.CENTER:
						y = 0;
						break;
					case ALIGNMENT.LEFT_TOP:
						y = (viewableArea.y * 0.5f) - item.TopLeftEdge.y;
						break;
					case ALIGNMENT.RIGHT_BOTTOM:
						y = (viewableArea.y * -0.5f) - item.BottomRightEdge.y;
						break;
				}

				contentDelta = item.BottomRightEdge.x - item.TopLeftEdge.x + ((addItemSpacing) ? (itemSpacing) : (0));
			}
			else
			{
				// Determine the Y-coordinate:
				if (items.Count > 0)
				{
					addItemSpacing = true; // We will be adding itemSpacing

					lastItem = items[items.Count - 1];

					if(direction == DIRECTION.TtoB_LtoR)
						y = lastItem.transform.localPosition.y + lastItem.BottomRightEdge.y - itemSpacing - item.TopLeftEdge.y;
					else
						y = lastItem.transform.localPosition.y - lastItem.BottomRightEdge.y + itemSpacing + item.TopLeftEdge.y;
				}
				else
				{
					if (spacingAtEnds)
						addItemSpacing = true; // We will be adding itemSpacing

					if(direction == DIRECTION.TtoB_LtoR)
						y = (viewableArea.y * 0.5f) - item.TopLeftEdge.y - ((spacingAtEnds) ? (itemSpacing) : (0));
					else
						y = (viewableArea.y * -0.5f) - item.BottomRightEdge.y + ((spacingAtEnds) ? (itemSpacing) : (0));
				}

				// Determine the X-coordinate:
				switch (alignment)
				{
					case ALIGNMENT.CENTER:
						x = 0;
						break;
					case ALIGNMENT.LEFT_TOP:
						x = (viewableArea.x * -0.5f) - item.TopLeftEdge.x;
						break;
					case ALIGNMENT.RIGHT_BOTTOM:
						x = (viewableArea.x * 0.5f) - item.BottomRightEdge.x;
						break;
				}

				contentDelta = item.TopLeftEdge.y - item.BottomRightEdge.y + ((addItemSpacing) ? (itemSpacing) : (0));
			}

			// Position the new item:
			item.transform.localPosition = new Vector3(x, y);

			item.Index = items.Count;
			items.Add(item);

			UpdateContentExtents(contentDelta);
			ClipItems();
		}
		else
		{
			// Else, insert the item in the midst of our list:
			items.Insert(position, item);

			PositionItems();
		}
	}
Esempio n. 2
0
	/// <summary>
	/// Inserts a list item at the specified position in the list.
	/// </summary>
	/// <param name="item">Reference to the item to be inserted into the list.</param>
	/// <param name="position">0-based index of the position in the list where the item will be placed.</param>
	/// <param name="text">Text to display in the item (requires that the item has a TextMesh associated with it, preferably in a child GameObject).</param>
	public void InsertItem(IUIListObject item, int position, string text)
	{
		IUIListObject lastItem;
		float contentDelta;

		// Make sure Start() has already run:
		if (!m_started)
			Start();

		// See if the item needs to be enabled:
		if(activateWhenAdding)
			if (!((Component)item).gameObject.active)
				((Component)item).gameObject.SetActiveRecursively(true);

		// Put the item in the correct layer:
		item.gameObject.layer = gameObject.layer;

		// Add the item to our container:
		if (container != null)
			container.AddChild(item.gameObject);


		//-------------------------------------
		// Position our item:
		//-------------------------------------
		item.transform.parent = mover.transform;
#if AUTO_ORIENT_ITEMS
		item.transform.localRotation = Quaternion.identity;
#endif
#if AUTO_SCALE_ITEMS
		item.transform.localScale = Vector3.one;
#endif
		// Go ahead and get the item in the mover's plane
		// on the local Z-axis.  This must be done here
		// before anything that follows because if we are
		// using a perspective camera and these are newly
		// created items, their Start() will be called for
		// the first time when FindOuterEdges() is called
		// either by us, or by the Text property, and if
		// the item isn't already positioned relative to
		// the camera, then its size will be calculated
		// wrong.
		item.transform.localPosition = Vector3.zero;


		if(text != null)
			item.Text = text;

		item.SetList(this);

		// Compute the edges of the item:
		item.FindOuterEdges();
		item.UpdateCollider();
		

		// Clamp our position:
		position = Mathf.Clamp(position, 0, items.Count);

		// Hide the item by default:
		item.Hide(true);
		if (!item.Managed)
			item.gameObject.SetActiveRecursively(false);

		// See if we can just add it to the end:
		if(position == items.Count)
		{
			if (orientation == ORIENTATION.HORIZONTAL)
			{

				if (items.Count > 0)
				{
					lastItem = items[items.Count - 1];
					item.transform.localPosition = new Vector3(lastItem.transform.localPosition.x + lastItem.BottomRightEdge.x + itemSpacing - item.TopLeftEdge.x, 0);
				}
				else
				{
					item.transform.localPosition = new Vector3((viewableArea.x * -0.5f) - item.TopLeftEdge.x + itemSpacing, 0);
				}

				contentDelta = item.BottomRightEdge.x - item.TopLeftEdge.x + itemSpacing;
			}
			else
			{
				if (items.Count > 0)
				{
					lastItem = items[items.Count - 1];
					item.transform.localPosition = new Vector3(0, lastItem.transform.localPosition.y + lastItem.BottomRightEdge.y - itemSpacing - item.TopLeftEdge.y);
				}
				else
				{
					item.transform.localPosition = new Vector3(0, (viewableArea.y * 0.5f) - item.TopLeftEdge.y - itemSpacing);
				}
				contentDelta = item.TopLeftEdge.y - item.BottomRightEdge.y + itemSpacing;
			}

			item.Index = items.Count;
			items.Add(item);

			UpdateContentExtents(contentDelta);
			ClipItems();
		}
		else
		{
			// Else, insert the item in the midst of our list:
			items.Insert(position, item);

			PositionItems();
		}
	}