- <XmlLayout
- xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <!--
- NOTE: Now controlled by the 'Color Scheme Manager'
- <Include path="Xml/ColorSchemes/GreenYellow" />
- -->
-
- <Defaults>
- <Text color="text_Base" alignment="MiddleLeft" font="Arial" />
- <Text class="title" alignment="MiddleCenter" color="titleTextColor" fontSize="32" shadow="shadowColor" font="Arial Bold" />
- <Text class="h1" font="Arial Bold" fontSize="24" />
- <Text class="h2" font="Arial Bold" fontSize="16" color="titleTextColor" shadow="shadowColor" />
- <Text class="h3" font="Arial Bold" fontSize="12" />
-
- <TableLayout class="noCellBackground" cellBackgroundColor="clear" />
-
- <Row class="headerRow" dontUseTableRowBackground="true" image="Sprites/Layout/Title" color="titleRowColor" preferredHeight="64" />
- <Row class="sectionHeaderRow" dontUseTableRowBackground="true" image="Sprites/Layout/Button" color="sectionHeaderRowColor" preferredHeight="36" />
- <Row class="viewport" dontUseTableRowBackground="true" image="Sprites/Layout/Viewport" color="viewportColor" />
-
- <Button font="Arial Bold" image="Sprites/Layout/Button" colors="button_Base|button_Active|button_Active|button_Disabled" textColor="buttonText" textShadow="shadowColor" />
-
- <Button class="disabled" colors="button_Disabled|button_Disabled|button_Disabled|button_Disabled" textColor="buttonText_Disabled" interactable="false" />
-
- <!--<Button class="submit" colors="rgb(0.1,0.4,0)|rgb(0.1,0.4,0)|rgb(0.1,0.4,0)" textColor="rgb(0,0.5,0)" />-->
-
- <ToggleButton font="Arial Bold"
- image="Sprites/Layout/Button"
- colors="button_Base|button_Active|button_Active|button_Disabled"
- textColors="text_Faded|text_Highlighted|text_Highlighted"
- deselectedBackgroundColor="toggleButton_Deselected"
- deselectedIconColor="toggleButtonIcon_Deselected"
- selectedBackgroundColor="toggleButton_Selected"
- selectedIconColor="toggleButtonIcon_Selected"
- textShadow="shadowColor" />
-
- <VerticalScrollView class="scrollView"
- color="scrollViewBackground"
- image="Sprites/Layout/Base"
- movementType="Clamped"
- scrollSensitivity="15"
- scrollbarBackgroundColor="scrollbarBackground"
- scrollbarColors="scrollbar_Base|scrollbar_Active|scrollbar_Active|scrollbar_Disabled"
- scrollbarImage="Sprites/Layout/Scrollbar" />
-
- <HorizontalScrollView class="scrollView"
- color="scrollViewBackground"
- image="Sprites/Layout/Base"
- movementType="Clamped"
- scrollSensitivity="15"
- scrollbarBackgroundColor="scrollbarBackground"
- scrollbarColors="scrollbar_Base|scrollbar_Active|scrollbar_Active|scrollbar_Disabled"
- scrollbarImage="Sprites/Layout/Scrollbar" />
-
- <!-- Audio 'Styles' -->
- <Button onClickSound="Audio/beep-timber" audioVolume="0.25" audioMixerGroup="Audio/XmlLayoutExampleAudioMixer|Master/Interface" />
-
- <Tooltip tooltipBorderColor="tooltipBorder" tooltipTextColor="tooltipText" />
-
- <!-- Hover Styles (new in v1.21) -->
- <Slider backgroundColor="sliderBackground" fillColor="slider_Base" handleColor="slider_Base" hoverClass="hover" navigation="Vertical" />
- <Slider class="hover" fillColor="slider_Active" handleColor="slider_Active" />
-
- <Dropdown colors="dropdown_Base|dropdown_Active" textColor="dropdownText_Base" hoverClass="hover" />
- <Dropdown class="hover" textColor="dropdownText_Active" />
-
- <Toggle colors="toggle_Base|toggle_Active|toggle_Active" />
-
- <InputField colors="inputField_Base|inputField_Active|inputField_Active" textColor="inputFieldText_Base" hoverClass="hover" />
- <InputField class="hover" textColor="inputFieldText_Active" />
-
- <Button hoverClass="hover" />
- <Button class="hover" textColor="buttonText_Active" />
-
- <!-- Cursors -->
- <Button cursor="Cursors/ExampleCursor_Hover|0 0" />
- <InputField cursor="Cursors/ExampleCursor_Hover|0 0" />
- <Toggle cursor="Cursors/ExampleCursor_Hover|0 0" />
- <ToggleButton cursor="Cursors/ExampleCursor_Hover|0 0" />
- <Slider cursor="Cursors/ExampleCursor_Hover|0 0" />
- </Defaults>
- </XmlLayout>
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <Include path="Xml/Styles.xml" />
-
- <TableLayout class="noCellBackground" height="450" width="256" rectAlignment="MiddleLeft" offsetXY="32 0" useGlobalCellPadding="false" raycastTarget="1">
- <Row class="headerRow">
- <Cell>
- <Text class="title">
- Examples
- </Text>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell dontUseTableCellBackground="true">
- <VerticalLayout padding="10" spacing="5" id="menuButtons">
- <!-- This is a template which will be used by the XmlLayoutController to create the menu buttons dynamically -->
- <Button id="menuButtonTemplate" active="false"></Button>
- </VerticalLayout>
- </Cell>
- </Row>
- </TableLayout>
- </XmlLayout>
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- using UnityEngine.UI;
-
- namespace UI.Xml.Examples
- {
- [ExecuteInEditMode]
- class XmlLayout_Example_ExampleMenu : XmlLayoutController
- {
- /// <summary>
- /// Populated in the editor
- /// </summary>
- public List<XmlLayout> Examples = new List<XmlLayout>();
-
- protected XmlLayout CurrentExample = null;
-
- private XmlElement menuButtonGroup;
-
- public void SelectExample(string name = null)
- {
- if (name == null)
- {
- CurrentExample = null;
- HideAllExamples();
-
- return;
- }
-
- var newExample = Examples.FirstOrDefault(e => e.name == name);
-
- if (newExample != null)
- {
- if (CurrentExample != null && newExample != CurrentExample)
- {
- // Hide the current example, then call ShowExample(newExample) when the hide animation is complete
- CurrentExample.Hide(() => ShowExample(newExample));
- }
- else
- {
- ShowExample(newExample);
- }
- }
- else
- {
- // Special handling, this is a different scene
- switch (name)
- {
- case "Drag & Drop":
- UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("Drag & Drop Example");
- break;
- case "Localization":
- UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("Localization Example");
- break;
- case "World Space":
- UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("World Space Example");
- break;
- }
- }
- }
-
- void ShowExample(XmlLayout newExample)
- {
- // Hiding all but the current example helps prevent issues where the user rapidly selects multiple examples at once
- foreach (var example in Examples)
- {
- if (example != newExample) example.Hide();
- }
-
- newExample.Show();
-
- CurrentExample = newExample;
- }
-
- public void HideAllExamples()
- {
- foreach (var example in Examples)
- {
- if (example.gameObject.activeInHierarchy) example.Hide();
- }
- }
-
- /// <summary>
- /// LayoutRebuilt is called by XmlLayout whenever the layout is finished being built
- /// (regardless of whether the rebuild was triggered automatically or manually)
- /// </summary>
- public override void LayoutRebuilt(ParseXmlResult parseResult)
- {
- if (parseResult != ParseXmlResult.Changed) return;
-
- // get the menu button container
- menuButtonGroup = xmlLayout.GetElementById("menuButtons");
-
- // get the menu button template so that we can clone it
- var menuButtonTemplate = xmlLayout.GetElementById("menuButtonTemplate");
-
- foreach (var example in Examples)
- {
- var name = example.name;
-
- AddMenuButton(name, menuButtonGroup, menuButtonTemplate);
- }
-
- AddMenuButton("Drag & Drop", menuButtonGroup, menuButtonTemplate);
- AddMenuButton("Localization", menuButtonGroup, menuButtonTemplate);
- AddMenuButton("World Space", menuButtonGroup, menuButtonTemplate);
- }
-
- void AddMenuButton(string name, XmlElement menuButtonGroup, XmlElement menuButtonTemplate)
- {
- // Create a copy of the template
- var menuButton = GameObject.Instantiate(menuButtonTemplate);
- menuButton.name = name;
-
- // Access the XmlElement component and initialise it for this new button
- var xmlElement = menuButton.GetComponent<XmlElement>();
- xmlElement.Initialise(xmlLayout, (RectTransform)menuButton.transform, menuButtonTemplate.tagHandler);
-
- // Add the xmlElement to the menuButtonGroup
- menuButtonGroup.AddChildElement(menuButton);
-
- // Set the necessary attributes, and Apply them
- xmlElement.SetAttribute("text", name);
- xmlElement.SetAttribute("active", "true"); // the template is inactive (so as not to be visible), so we need to activate this button
- xmlElement.SetAttribute("onClick", "SelectExample(" + name + ");"); // Call the SelectExample function (in this XmlEventReceiver)
-
- xmlElement.SetAttribute("tooltip", "Show the <color=\"#00FF00\">" + name + "</color> example.");
- xmlElement.SetAttribute("tooltipPosition", "Right");
- xmlElement.SetAttribute("tooltipOffset", "15");
- xmlElement.ApplyAttributes();
- }
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd"
- cursor="Cursors/ExampleCursor_Default|0 0" cursorClick="Cursors/ExampleCursor_Click|0 0">
-
- <Include path="Xml/Styles.xml" />
-
- <TableLayout class="noCellBackground" width="100%" height="36" rectAlignment="LowerCenter" padding="5" image="Sprites/Layout/Gradient" color="titleRowColor" columnWidths="288 0 72" shadow="rgba(0,0,0,0.5)">
- <Row>
- <Cell>
- <Image image="Sprites/XmlLayout" preserveAspect="1" ignoreLayout="1" height="160" width="288" rectAlignment="MiddleCenter" offsetXY="0 2" shadow="black" outline="rgba(0.2,1,0.2,0.5)" />
- </Cell>
- <Cell><!-- Empty spacer cell --></Cell>
- <Cell>
- <Text id="versionNumber" alignment="MiddleCenter" fontStyle="Bold" color="text_Alternate" shadow="black" outline="rgba(0,0,0,0.25)" tooltip="XmlLayout V1.89" tooltipPosition="Above" tooltipTextColor="tooltipText">v1.89</Text>
- </Cell>
- </Row>
- </TableLayout>
- </XmlLayout>
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <Include path="Xml/Styles.xml" />
-
- <TableLayout class="noCellBackground" height="550" width="512" rectAlignment="MiddleRight" offsetXY="-32 0" showAnimation="Grow" hideAnimation="Shrink" raycastTarget="1" name="test">
- <Row class="headerRow">
- <Cell>
- <Text class="title">
- Options
- </Text>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell dontUseTableCellBackground="true">
- <TableLayout cellPadding="7" padding="20" cellSpacing="5" cellBackgroundImage="Sprites/Outline_Sharp" cellBackgroundColor="rgba(1,1,0,0.125)">
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Video</Text>
- </Cell>
- </Row>
-
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3">Resolution</Text>
- </Cell>
- <Cell>
- <Dropdown id="resolution" preferredHeight="32" onValueChanged="FormChanged();">
- <Option>1920x1080</Option>
- <Option selected="true">960x600</Option>
- <Option>1024x768</Option>
- <Option>800x600</Option>
- </Dropdown>
- </Cell>
- </Row>
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3">Quality</Text>
- </Cell>
- <Cell>
- <Dropdown id="quality" onValueChanged="FormChanged();">
- </Dropdown>
- </Cell>
- </Row>
-
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Audio</Text>
- </Cell>
- </Row>
-
- <Row>
- <Cell>
- <Text class="h3">Master</Text>
- </Cell>
- <Cell>
- <Slider id="masterVolume" value="0.8" onValueChanged="FormChanged();" />
- </Cell>
- </Row>
- <Row>
- <Cell>
- <Text class="h3">Music</Text>
- </Cell>
- <Cell>
- <Slider id="musicVolume" value="0.45" onValueChanged="FormChanged();" />
- </Cell>
- </Row>
- <Row>
- <Cell>
- <Text class="h3">SFX</Text>
- </Cell>
- <Cell>
- <Slider id="sfxVolume" value="0.55" onValueChanged="FormChanged();" />
- </Cell>
- </Row>
-
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Gameplay</Text>
- </Cell>
- </Row>
-
- <Row>
- <Cell>
- <Text class="h3">Enable Hints</Text>
- </Cell>
- <Cell>
- <Toggle id="enableHints" onValueChanged="FormChanged();"></Toggle>
- </Cell>
- </Row>
-
- <Row preferredHeight="44">
- <Cell>
- <Button onClick="ResetForm();">Reset</Button>
- </Cell>
- <Cell>
- <Button id="applyButton" onClick="SubmitForm();" class="disabled">Apply</Button>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- </TableLayout>
- </XmlLayout>
- using UnityEngine;
- using UnityEngine.UI;
-
- using System;
- using System.Collections.Generic;
- using System.Linq;
-
- namespace UI.Xml.Examples
- {
- [ExecuteInEditMode]
- class XmlLayout_Example_Options : XmlLayoutController
- {
- /// <summary>
- /// This is a reference to another XmlEventReceiver object, which is set up to act as a simple modal message dialog
- /// (The reference is added in the editor)
- /// </summary>
- public XmlLayout_Example_MessageDialog MessageDialog = null;
-
- public override void LayoutRebuilt(ParseXmlResult parseResult)
- {
- SetFormDefaults();
- }
-
- void SetFormDefaults()
- {
- // You can easily set form defaults using code by getting hold of the elements by their ids, and then setting their value as needed
-
- // Note: this is completely optional - Form defaults can also be set directly in the Xml itself (but this allows you to set values programmatically)
-
- // var masterVolumeSlider = xmlLayout.GetElementById<Slider>("masterVolume");
- // masterVolumeSlider.value = 0;
-
- var resolutionDropdown = xmlLayout.GetElementById<Dropdown>("resolution");
- resolutionDropdown.SetOptions("1920x1080", "960x600", "1024x768", "800x600"); // SetOptions is an extension method located in the UI.Xml namespace
- resolutionDropdown.SetSelectedValue("960x600"); // SetSelectedValue is an extension method located in the UI.Xml namespace
-
- var qualityDropdown = xmlLayout.GetElementById<Dropdown>("quality");
- qualityDropdown.SetOptions(QualitySettings.names);
- qualityDropdown.value = QualitySettings.GetQualityLevel();
-
- // SetFormDefaults changes the values of some of the elements on the page, which in turn triggers their event handlers,
- // which results in the 'Apply' button being highlighted by FormChanged()
- ClearApplyButtonHighlight();
- }
-
- void FormChanged()
- {
- // A value in the form has been changed, so we're going to highlight the 'Apply' button so that the user knows that they have to click it to save their changes
- var applyButton = xmlLayout.GetElementById("applyButton");
-
- applyButton.RemoveClass("disabled");
- }
-
- void ClearApplyButtonHighlight()
- {
- var applyButton = xmlLayout.GetElementById("applyButton");
-
- applyButton.AddClass("disabled");
- }
-
- void ResetForm()
- {
- // Rebuild the Xml Elements
- xmlLayout.RebuildLayout(true);
-
- // this will also call LayoutRebuilt()
- }
-
- void SubmitForm()
- {
- // xmlLayout.GetFormData() returns the values of all form objects in the layout with an 'id' set (as a Dictionary<string, string>)
- var formValues = xmlLayout.GetFormData();
-
- // As this is only an example, we're not going to actually use these values - instead, we'll just format them into a human-readable string and show the user
- // (with the exception of the Quality setting)
- string formattedFormValues = "<b>Form Values</b>:\n----------------------------------------\n";
-
- foreach (var formValue in formValues)
- {
- formattedFormValues += String.Format("<b>{0}</b>: <i>{1}</i>\n", FormatFieldName(formValue.Key), formValue.Value);
- }
-
- formattedFormValues += "\n\n";
- formattedFormValues += "For the purposes of this example, only the <i>Quality</i> setting will take effect.";
-
- // Show the formatted values in a message dialog (which is also an XmlLayout)
- MessageDialog.Show("Form Submitted", formattedFormValues);
-
- // Retrieve the index of the selected quality level from QualitySettings.names and set the new value
- var qualitySetting = QualitySettings.names.ToList().IndexOf(formValues["quality"]);
- QualitySettings.SetQualityLevel(qualitySetting);
-
- // The changes have now been 'applied', so we can clear the highlight
- ClearApplyButtonHighlight();
- }
-
- /// <summary>
- /// Convert a variable name from 'thisPattern' to 'This Pattern'
- /// </summary>
- /// <param name="fieldName"></param>
- /// <returns></returns>
- string FormatFieldName(string fieldName)
- {
- var s = new string(fieldName.ToCharArray().SelectMany((c, i) => i > 0 && char.IsUpper(c) ? new char[] { ' ', c } : new char[] { c }).ToArray());
-
- s = char.ToUpper(s[0]) + s.Substring(1);
-
- return s;
- }
-
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd"
- height="100%"
- width="100%"
- rectAlignment="MiddleCenter">
-
- <Include path="Xml/Styles.xml" />
-
- <Panel color="rgba(0,0,0,0.75)" name="Overlay" raycastTarget="1">
-
- <TableLayout class="noCellBackground" height="320" width="480" rectAlignment="MiddleCenter" name="Dialog" showAnimation="Grow" hideAnimation="Shrink">
- <Row class="headerRow" preferredHeight="52">
- <Cell>
- <Text id="titleText" class="title" fontSize="28">
- Dialog Title
- </Text>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell>
- <TableLayout class="noCellBackground" cellPadding="10">
- <Row>
- <Cell columnSpan="3">
- <Panel>
- <Text id="messageText" alignment="MiddleCenter" width="80%" fontSize="14" shadow="rgba(0,0,0,0.5)">Dialog Text</Text>
- </Panel>
- </Cell>
- </Row>
- <Row preferredHeight="48">
- <Cell></Cell>
- <Cell>
- <Button onClick="Hide();" preferredWidth="50">Close</Button>
- </Cell>
- <Cell></Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- </TableLayout>
-
- </Panel>
- </XmlLayout>
- using UnityEngine;
- using UnityEngine.UI;
-
- using System;
- using System.Collections.Generic;
- using System.Collections;
-
- namespace UI.Xml.Examples
- {
- public class XmlLayout_Example_MessageDialog : XmlLayoutController
- {
- XmlElementReference<Text> titleText;
- XmlElementReference<Text> messageText;
-
- void Awake()
- {
- titleText = XmlElementReference<Text>("titleText");
- messageText = XmlElementReference<Text>("messageText");
- }
-
- public void Show(string title, string text)
- {
- xmlLayout.Show();
-
- // Because this dialog may not have been active yet at this point,
- // we need to wait a frame to make sure that the XmlLayout has finished setting up,
- // and that the titleText and messageText objects have been populated by Start()
- StartCoroutine(DelayedShow(title, text));
- }
-
- protected IEnumerator DelayedShow(string title, string text)
- {
- yield return new WaitForEndOfFrame();
-
- titleText.element.text = title;
- messageText.element.text = text;
- }
-
- public void AppendText(string newText)
- {
- Show(this.titleText.element.text, messageText.element.text + "\r\n\r\n" + newText);
- }
-
- public override void LayoutRebuilt(ParseXmlResult parseResult)
- {
- // start with the root XmlElement
- Localize(xmlLayout.XmlElement);
- }
-
- private void Localize(XmlElement element)
- {
- if (element.attributes.ContainsKey("localized"))
- {
- // localize this element using the dictionary
- }
-
- if (element.childElements.Count > 0)
- {
- foreach (var child in element.childElements)
- {
- // skip ChildXmlLayouts (and consequently their children)
- if (child.tagType == "ChildXmlLayout") continue;
-
- Localize(child);
- }
- }
- }
- }
- }
- <XmlLayout
- xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <Defaults>
- <!-- Product Styles -->
- <Panel class="product" image="Sprites/Layout/Base" color="rgb(0.9,1,0.9)" padding="10" shadow="black" />
- <Panel class="productImageOutline" image="Sprites/Outline_With_Background" color="rgba(0.05,0.05,0.05,0.75)" />
- <Button class="productButton" colors="#CDAD00|#FFD700|#FFD700" textColor="#FFFF00" image="Sprites/Layout/Base" textOutline="black" />
- <Panel class="productImage" color="white" height="70%" preserveAspect="1" rectAlignment="LowerCenter" />
- <Text class="productQuantity" alignment="UpperCenter" outline="black" fontSize="16" font="Arial Bold" />
-
- <Panel class="productBestDealBack" image="Sprites/Layout/Button" color="rgb(1,0,0,0.6)" height="20" rectAlignment="LowerCenter" offsetXY="0 -4" />
- <Text class="productBestDealText" fontSize="12" alignment="MiddleCenter" color="#FFFF00" font="Arial Bold" />
- <!-- /Product Styles -->
-
- <!-- Styles for Confirm Purchase Dialog -->
- <Text class="headerText" alignment="MiddleCenter" fontSize="18" shadow="black" font="Arial Bold" />
-
- <Text class="confirmPurchaseText" alignment="MiddleCenter" font="Arial Bold" outline="black" fontSize="24" />
- <!-- /Styles for Confirm Purchase Dialog -->
-
- </Defaults>
-
- </XmlLayout>
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <Include path="Xml/Styles.xml" />
- <Include path="Xml/ShopStyles.xml" />
-
- <TableLayout class="noCellBackground" height="384" width="512" rectAlignment="MiddleRight" offsetXY="-32 0" useGlobalCellPadding="false" showAnimation="Grow" hideAnimation="FadeOut" raycastTarget="1">
- <Row class="headerRow">
- <Cell>
- <Text class="title">
- Shop
- </Text>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell padding="15">
- <VerticalScrollView class="scrollView">
- <TableLayout id="shopContent" cellSpacing="15" cellBackgroundColor="clear" autoCalculateHeight="1" padding="8 24 8 8">
- <Row preferredHeight="128">
- <Cell active="false">
-
- <!-- Product Template -->
- <Panel id="productTemplate" class="product" active="false">
- <TableLayout cellBackgroundColor="clear" cellSpacing="5">
- <Row preferredHeight="72">
- <Cell>
- <Panel class="productImageOutline">
- <Panel padding="4">
- <Text internalId="productQuantity" class="productQuantity">x1</Text>
- </Panel>
- <Panel type="Simple" internalId="productImage" class="productImage">
- <Panel internalId="productBestDeal" class="productBestDealBack" active="false">
- <Text shadow="black" class="productBestDealText">Best Deal!</Text>
- </Panel>
- </Panel>
- </Panel>
- </Cell>
- </Row>
- <Row>
- <Cell>
- <Button internalId="productBuyButton" class="productButton">$0.00</Button>
- </Cell>
- </Row>
- </TableLayout>
- </Panel>
- <!-- End of Product Template -->
-
- </Cell>
- </Row>
- </TableLayout>
- </VerticalScrollView>
- </Cell>
- </Row>
- </TableLayout>
- </XmlLayout>
- using UnityEngine;
- using UnityEngine.UI;
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.Linq;
- using UI.Tables;
-
- namespace UI.Xml.Examples
- {
- class XmlLayout_Example_Shop : XmlLayoutController
- {
- public XmlLayout_Example_Shop_ConfirmDialog ConfirmPurchaseDialog = null;
- public XmlLayout_Example_CurrencyOverlay CurrencyOverlay = null;
-
- [SerializeField]
- public List<ExampleProduct> Products = new List<ExampleProduct>();
-
- void OnEnable()
- {
- CurrencyOverlay.Show();
- }
-
- void OnDisable()
- {
- CurrencyOverlay.Hide();
- }
-
- void OnValidate()
- {
- if (!this.gameObject.activeInHierarchy) return;
-
- if (Application.isPlaying)
- {
- StartCoroutine(Rebuild());
- }
- }
-
- public IEnumerator Rebuild()
- {
- yield return new WaitForEndOfFrame();
- xmlLayout.RebuildLayout();
- }
-
- public override void LayoutRebuilt(ParseXmlResult parseResult)
- {
- if (parseResult != ParseXmlResult.Changed || Products == null || !Products.Any()) return;
-
- var shopContent = xmlLayout.GetElementById<TableLayout>("shopContent");
- var itemTemplate = xmlLayout.GetElementById("productTemplate");
-
- var columnCount = 4;
- var column = 0;
- var rows = shopContent.Rows.ToList();
- var productCount = Products.Count;
-
- var rowHeight = rows.First().preferredHeight;
-
- TableRow row;
- if (rows.Any())
- {
- row = rows.Last();
- }
- else
- {
- row = shopContent.AddRow(0);
- row.preferredHeight = rowHeight;
- }
-
- for(var x = 0; x < productCount; x++)
- {
- var product = Products[x];
-
- var item = GameObject.Instantiate(itemTemplate);
- item.Initialise(xmlLayout, (RectTransform)item.transform, itemTemplate.tagHandler);
-
- item.gameObject.SetActive(true); // the template is inactive so as not to show up, so we need to activate our new object
-
- // Add a new cell to the row (containing our new product)
- row.AddCell(item.rectTransform);
-
- HandleProduct(product, item, x);
-
- // increment column count
- column++;
-
- // move to the next row, if necessary
- if (column == columnCount && (x + 1) < productCount)
- {
- column = 0;
- row = shopContent.AddRow(0);
- row.preferredHeight = rowHeight;
- }
- }
- }
-
- void HandleProduct(ExampleProduct product, XmlElement item, int productId)
- {
- var image = item.GetElementByInternalId<Image>("productImage");
- if (product.Image != null)
- {
- image.sprite = product.Image;
- }
- image.color = Color.white;
-
- var button = item.GetElementByInternalId<Button>("productBuyButton");
- button.GetComponentInChildren<Text>().text = String.Format("${0}", product.Price);
- button.onClick.AddListener(new UnityEngine.Events.UnityAction(() => { PurchaseButtonClicked(productId); }));
-
- var productQuantity = item.GetElementByInternalId<Text>("productQuantity");
- productQuantity.text = String.Format("x{0}", product.Quantity);
-
- if (product.IsBestDeal)
- {
- var ribbon = item.GetElementByInternalId<Image>("productBestDeal");
- ribbon.gameObject.SetActive(true);
- }
- }
-
- void PurchaseButtonClicked(int productId)
- {
- var product = Products[productId];
-
- ConfirmPurchaseDialog.Show(product, PurchaseConfirmed);
- }
-
- public void PurchaseConfirmed(ExampleProduct product)
- {
- CurrencyOverlay.AddCurrency(product);
- }
- }
-
- [Serializable]
- public class ExampleProduct
- {
- public float Price = 0;
- public string Name = "";
- public int Quantity;
- public Sprite Image;
- public bool IsBestDeal = false;
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd"
- height="100%"
- width="100%"
- rectAlignment="MiddleCenter">
-
- <Include path="Xml/Styles.xml" />
- <Include path="Xml/ShopStyles.xml" />
-
- <Panel color="rgba(0,0,0,0.75)" name="Overlay">
-
- <TableLayout class="noCellBackground" height="256" width="384" rectAlignment="MiddleCenter" name="Dialog" showAnimation="Grow" hideAnimation="Shrink" raycastTarget="1">
- <Row class="headerRow" preferredHeight="52">
- <Cell>
- <Text id="titleText" class="title" fontSize="28">
- Confirm Purchase
- </Text>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell>
- <TableLayout class="noCellBackground" cellPadding="10" width="95%" ignoreLayout="1">
- <Row>
- <Cell columnSpan="2">
- <TableLayout cellPadding="10" cellBackgroundColor="rgb(0.35,0.35,0.35)">
- <Row preferredHeight="48" class="sectionHeaderRow">
- <Cell>
- <Text class="headerText">Product</Text>
- </Cell>
- <Cell>
- <Text class="headerText">Quantity</Text>
- </Cell>
- <Cell>
- <Text class="headerText">Price</Text>
- </Cell>
- </Row>
- <Row>
- <Cell>
- <Image id="productImage" image="Sprites/Shop/Coin" preserveAspect="1" />
- </Cell>
- <Cell>
- <Text id="productQuantity" class="confirmPurchaseText">x1</Text>
- </Cell>
- <Cell>
- <Text id="productPrice" class="confirmPurchaseText">$0.00</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- <Row preferredHeight="48">
- <Cell>
- <Button onClick="ConfirmPurchase();">Confirm Purchase</Button>
- </Cell>
- <Cell>
- <Button onClick="Hide();">Cancel</Button>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- </TableLayout>
-
- </Panel>
- </XmlLayout>
- using UnityEngine;
- using UnityEngine.UI;
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.Linq;
- using UI.Tables;
-
- namespace UI.Xml.Examples
- {
- class XmlLayout_Example_Shop_ConfirmDialog : XmlLayoutController
- {
- ExampleProduct product = null;
- Action<ExampleProduct> callback = null;
-
- public void Show(ExampleProduct product, Action<ExampleProduct> callback = null)
- {
- xmlLayout.Show();
-
- this.product = product;
- this.callback = callback;
-
- // Because this dialog may not have been active yet at this point,
- // we need to wait a frame to make sure that the XmlLayout has finished setting up
- StartCoroutine(DelayedShow());
- }
-
- protected IEnumerator DelayedShow()
- {
- while(!xmlLayout.IsReady) yield return null;
-
- xmlLayout.GetElementById<Image>("productImage").sprite = product.Image;
- xmlLayout.GetElementById<Text>("productQuantity").text = String.Format("x{0}", product.Quantity);
- xmlLayout.GetElementById<Text>("productPrice").text = String.Format("${0}", product.Price);
- }
-
- void ConfirmPurchase()
- {
- callback(product);
-
- Hide();
- }
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <Include path="Xml/Styles.xml" />
-
- <Defaults>
- <Text shadow="black" font="Arial Bold"></Text>
- <TableLayout class="item" columnWidths="32 0" />
- <Image preserveAspect="1" shadow="black" />
- </Defaults>
-
- <Panel height="32" rectAlignment="UpperCenter" image="Sprites/Layout/Gradient" color="titleRowColor" showAnimation="SlideIn_Top" hideAnimation="SlideOut_Top" animationDuration="0.5">
- <TableLayout class="noCellBackground" rectAlignment="MiddleRight" width="356" cellPadding="5">
- <Row preferredHeight="0">
- <Cell>
- <TableLayout class="noCellBackground item">
- <Row>
- <Cell>
- <Image image="Sprites/Shop/coin" />
- </Cell>
- <Cell>
- <Text id="0">x0</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- <Cell>
- <TableLayout class="noCellBackground item">
- <Row>
- <Cell>
- <Image image="Sprites/Shop/gemGreen" />
- </Cell>
- <Cell>
- <Text id="1">x0</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- <Cell>
- <TableLayout class="noCellBackground item">
- <Row>
- <Cell>
- <Image image="Sprites/Shop/gemBlue" />
- </Cell>
- <Cell>
- <Text id="2">x0</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- <Cell>
- <TableLayout class="noCellBackground item">
- <Row>
- <Cell>
- <Image image="Sprites/Shop/gemRed" />
- </Cell>
- <Cell>
- <Text id="3">x0</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- </TableLayout>
- </Panel>
- </XmlLayout>
- using UnityEngine;
- using UnityEngine.UI;
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.Linq;
- using UI.Tables;
-
- namespace UI.Xml.Examples
- {
- class XmlLayout_Example_CurrencyOverlay : XmlLayoutController
- {
- [SerializeField]
- public List<ExampleProduct> CurrencyQuantities = new List<ExampleProduct>()
- {
- new ExampleProduct() { Name = "Coins", Quantity = 0 },
- new ExampleProduct() { Name = "Green Gems", Quantity = 0 },
- new ExampleProduct() { Name = "Blue Gems", Quantity = 0 },
- new ExampleProduct() { Name = "Red Gems", Quantity = 0 }
- };
-
- public void AddCurrency(ExampleProduct productPurchased)
- {
- var currency = CurrencyQuantities.First(c => c.Name == productPurchased.Name);
-
- currency.Quantity += productPurchased.Quantity;
-
- UpdateDisplay();
- }
-
- public override void LayoutRebuilt(ParseXmlResult parseResult)
- {
- UpdateDisplay();
- }
-
- public void UpdateDisplay()
- {
- for (var x = 0; x < CurrencyQuantities.Count; x++)
- {
- var text = xmlLayout.GetElementById<Text>(x.ToString());
-
- text.text = String.Format("x{0}", CurrencyQuantities[x].Quantity);
- }
- }
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd" showAnimation="Grow" hideAnimation="FadeOut">
-
- <Include path="Xml/Styles.xml" />
-
- <Defaults>
- <Panel color="accentVariantC" image="Sprites/Outline_Sharp" />
- <Text class="label" alignment="MiddleCenter" color="rgb(1,1,1,0.5)" />
- <Text class="h2" alignment="MiddleCenter" />
- <Toggle textcolor="white" />
-
- <Button class="iconButton" image="Sprites/Layout/Base" iconColor="text_Highlighted" iconHoverColor="text_Highlighted" />
- <Button class="iconButtonWithText" iconWidth="48" padding="4 0 2 2" ignoreLayout="1" width="160" height="32" />
-
- <ToggleButton class="iconButton" image="Sprites/Layout/Base" />
- <ToggleButton class="iconButtonWithText" iconWidth="48" padding="4 0 2 2" ignoreLayout="1" width="160" height="32" />
- </Defaults>
-
- <TableLayout class="noCellBackground" height="512" width="512" rectAlignment="MiddleRight" offsetXY="-32 0" raycastTarget="1">
- <Row class="headerRow">
- <Cell>
- <Text class="title">
- Element List
- </Text>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell>
- <VerticalScrollView class="scrollView" color="rgba(0,0,0,0.25)">
- <TableLayout cellPadding="7" padding="20" cellSpacing="5" cellBackgroundImage="Sprites/Outline_Sharp" cellBackgroundColor="rgba(1,1,0,0.125)" autoCalculateHeight="1" columnWidths="180 0">
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Basic Elements</Text>
- </Cell>
- </Row>
-
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Text Label</Text>
- </Cell>
- <Cell>
- <Text alignment="MiddleCenter">
- This <i>is</i> some <textcolor color="green">rich</textcolor> text.
- </Text>
- </Cell>
- </Row>
-
- <Row preferredHeight="64">
- <Cell>
- <Text class="h3">Image</Text>
- </Cell>
- <Cell>
- <Image image="Sprites/Shop/gemGreen" preserveAspect="1" />
- </Cell>
- </Row>
-
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Input Elements</Text>
- </Cell>
- </Row>
-
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Input Field</Text>
- </Cell>
- <Cell>
- <InputField />
- </Cell>
- </Row>
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Toggle</Text>
- </Cell>
- <Cell>
- <Toggle />
- </Cell>
- </Row>
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Toggle Group</Text>
- </Cell>
- <Cell>
- <ToggleGroup>
- <HorizontalLayout>
- <Toggle isOn="1">A</Toggle>
- <Toggle>B</Toggle>
- <Toggle>C</Toggle>
- <Toggle>D</Toggle>
- </HorizontalLayout>
- </ToggleGroup>
- </Cell>
- </Row>
-
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Slider</Text>
- </Cell>
- <Cell>
- <Slider minValue="0" maxValue="1" value="0.5" />
- </Cell>
- </Row>
-
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3" alignment="UpperLeft">Dropdown</Text>
- </Cell>
- <Cell>
- <Dropdown>
- <Option selected="1">Option 1</Option>
- <Option>Option 2</Option>
- <Option>Option 3</Option>
- <Option>Option 4</Option>
- <Option>Option 5</Option>
- <Option>Option 6</Option>
- <Option>Option 7</Option>
- <Option>Option 8</Option>
- </Dropdown>
- </Cell>
- </Row>
-
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3">Button</Text>
- </Cell>
- <Cell>
- <Button>Button Text</Button>
- </Cell>
- </Row>
-
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3">Button with icon</Text>
- </Cell>
- <Cell>
- <GridLayout cellSize="32,32" spacing="10" childAlignment="MiddleCenter">
- <Button class="iconButton" icon="Sprites/Icons/Move" />
- <Button class="iconButton" icon="Sprites/Icons/Cog" />
- <Button class="iconButton" icon="Sprites/Icons/Cancel" />
- <Button class="iconButton" icon="Sprites/Icons/Arrow_Right" />
- </GridLayout>
- </Cell>
- </Row>
-
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3">Button with left-side icon</Text>
- </Cell>
- <Cell>
- <Button class="iconButton iconButtonWithText" icon="Sprites/Icons/Arrow_Left" textAlignment="MiddleLeft">Button Text</Button>
- </Cell>
- </Row>
-
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3">Button with right-side icon</Text>
- </Cell>
- <Cell>
- <Button class="iconButton iconButtonWithText" icon="Sprites/Icons/Arrow_Right" iconAlignment="Right" textAlignment="MiddleRight">Button Text</Button>
- </Cell>
- </Row>
-
- <Row preferredHeight="48">
- <Cell>
- <Text class="h3">Toggle Button</Text>
- </Cell>
- <Cell>
- <ToggleButton class="iconButton iconButtonWithText" icon="Sprites/Icons/Arrow_Left" textAlignment="MiddleLeft">Button Text</ToggleButton>
- </Cell>
- </Row>
-
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Toggle Button Group</Text>
- </Cell>
- <Cell>
- <ToggleGroup>
- <GridLayout cellSize="32,32" spacing="10" childAlignment="MiddleCenter">
- <ToggleButton class="iconButton" icon="Sprites/Icons/Arrow_Left" isOn="1"></ToggleButton>
- <ToggleButton class="iconButton" icon="Sprites/Icons/Arrow_Up"></ToggleButton>
- <ToggleButton class="iconButton" icon="Sprites/Icons/Arrow_Down"></ToggleButton>
- <ToggleButton class="iconButton" icon="Sprites/Icons/Arrow_Right"></ToggleButton>
- </GridLayout>
- </ToggleGroup>
- </Cell>
- </Row>
-
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Misc Elements</Text>
- </Cell>
- </Row>
-
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Progress Bar</Text>
- </Cell>
- <Cell>
- <ProgressBar id="progressBar" percentage="0" showPercentageText="1" fontStyle="Bold" textColor="text_Alternate" textShadow="shadowColor" fillImageColor="accent" image="Sprites/Layout/Gradient" fillImage="Sprites/Layout/Button" percentageTextFormat="0.00" />
- </Cell>
- </Row>
-
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Layout Elements</Text>
- </Cell>
- </Row>
-
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Panel</Text>
- </Cell>
- <Cell>
- <Panel image="Sprites/Outline_Sharp"></Panel>
- </Cell>
- </Row>
- <Row preferredHeight="44">
- <Cell>
- <Text class="h3">Horizontal Layout</Text>
- </Cell>
- <Cell>
- <HorizontalLayout spacing="5">
- <Panel>
- <Text class="label">1</Text>
- </Panel>
- <Panel>
- <Text class="label">2</Text>
- </Panel>
- <Panel>
- <Text class="label">3</Text>
- </Panel>
- <Panel>
- <Text class="label">4</Text>
- </Panel>
- </HorizontalLayout>
- </Cell>
- </Row>
- <Row preferredHeight="128">
- <Cell>
- <Text class="h3" alignment="UpperLeft">Vertical Layout</Text>
- </Cell>
- <Cell>
- <VerticalLayout spacing="2">
- <Panel>
- <Text class="label">1</Text>
- </Panel>
- <Panel>
- <Text class="label">2</Text>
- </Panel>
- <Panel>
- <Text class="label">3</Text>
- </Panel>
- <Panel>
- <Text class="label">4</Text>
- </Panel>
- </VerticalLayout>
- </Cell>
- </Row>
- <Row preferredHeight="80">
- <Cell>
- <Text class="h3" alignment="UpperLeft">Grid Layout</Text>
- </Cell>
- <Cell>
- <GridLayout spacing="4" cellSize="48,32" childAlignment="MiddleCenter">
- <Button>1</Button>
- <Button>2</Button>
- <Button>3</Button>
- <Button>4</Button>
- <Button>5</Button>
- <Button>6</Button>
- <Button>7</Button>
- <Button>8</Button>
- <Button>9</Button>
- <Button>10</Button>
- </GridLayout>
- </Cell>
- </Row>
-
- <Row preferredHeight="128">
- <Cell>
- <Text class="h3" alignment="UpperLeft">Table Layout</Text>
- </Cell>
- <Cell>
- <TableLayout cellSpacing="1">
- <Row class="sectionHeaderRow" preferredHeight="32">
- <Cell>
- <Text class="h2">C1</Text>
- </Cell>
- <Cell>
- <Text class="h2">C2</Text>
- </Cell>
- <Cell>
- <Text class="h2">C3</Text>
- </Cell>
- </Row>
- <Row>
- <Cell>
- <Text class="label">1</Text>
- </Cell>
- <Cell>
- <Text class="label">2</Text>
- </Cell>
- <Cell>
- <Text class="label">3</Text>
- </Cell>
- </Row>
- <Row>
- <Cell>
- <Text class="label">4</Text>
- </Cell>
- <Cell>
- <Text class="label">5</Text>
- </Cell>
- <Cell>
- <Text class="label">6</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
-
- <Row class="sectionHeaderRow">
- <Cell columnSpan="2" dontUseTableCellBackground="1">
- <Text class="h2" alignment="MiddleCenter">Scroll Views</Text>
- </Cell>
- </Row>
-
- <Row preferredHeight="128">
- <Cell>
- <Text class="h3" alignment="UpperLeft">Vertical Scrollview</Text>
- </Cell>
- <Cell>
- <VerticalScrollView class="scrollView">
- <VerticalLayout height="512" padding="16" spacing="16">
- <Panel>
- <Text class="label">1</Text>
- </Panel>
- <Panel>
- <Text class="label">2</Text>
- </Panel>
- <Panel>
- <Text class="label">3</Text>
- </Panel>
- <Panel>
- <Text class="label">4</Text>
- </Panel>
- <Panel>
- <Text class="label">5</Text>
- </Panel>
- <Panel>
- <Text class="label">6</Text>
- </Panel>
- <Panel>
- <Text class="label">7</Text>
- </Panel>
- <Panel>
- <Text class="label">8</Text>
- </Panel>
- </VerticalLayout>
- </VerticalScrollView>
- </Cell>
- </Row>
-
- <Row preferredHeight="128">
- <Cell>
- <Text class="h3" alignment="UpperLeft">Horizontal Scrollview</Text>
- </Cell>
- <Cell>
- <HorizontalScrollView class="scrollView">
- <HorizontalLayout width="512" padding="16" spacing="16">
- <Panel>
- <Text class="label">1</Text>
- </Panel>
- <Panel>
- <Text class="label">2</Text>
- </Panel>
- <Panel>
- <Text class="label">3</Text>
- </Panel>
- <Panel>
- <Text class="label">4</Text>
- </Panel>
- <Panel>
- <Text class="label">5</Text>
- </Panel>
- <Panel>
- <Text class="label">6</Text>
- </Panel>
- <Panel>
- <Text class="label">7</Text>
- </Panel>
- <Panel>
- <Text class="label">8</Text>
- </Panel>
- </HorizontalLayout>
- </HorizontalScrollView>
- </Cell>
- </Row>
- </TableLayout>
- </VerticalScrollView>
- </Cell>
- </Row>
- </TableLayout>
- </XmlLayout>
- using UnityEngine;
- using UnityEngine.UI;
-
- using System;
- using System.Collections.Generic;
- using System.Collections;
-
- namespace UI.Xml.Examples
- {
- class XmlLayout_Example_List : XmlLayoutController
- {
- XmlElementReference<XmlLayoutProgressBar> progressBar;
-
- void Start()
- {
- progressBar = XmlElementReference<XmlLayoutProgressBar>("progressBar");
- }
-
- void Update()
- {
- progressBar.element.percentage += Time.deltaTime * 2.5f;
-
- if (progressBar.element.percentage >= 100f) progressBar.element.percentage = 0.0f;
- }
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd" showAnimation="Grow" hideAnimation="Shrink">
-
- <Include path="Xml/Styles.xml" />
-
- <Defaults>
- <Cell class="header" dontUseTableCellBackground="1" color="titleRowColor" image="Sprites/Layout/Button" />
- <Panel class="outlined" color="rgb(0.5,0.5,0.5)" image="Sprites/Outline_Sharp" />
- <Text class="h2" alignment="MiddleCenter" />
- </Defaults>
-
- <TableLayout class="noCellBackground" height="512" width="880" rectAlignment="MiddleCenter" raycastTarget="1" id="mainPanel">
- <Row class="headerRow">
- <Cell>
- <TableLayout class="noCellBackground" columnWidths="64 0">
- <Row>
- <Cell>
- <Button image="Sprites/Icons/Arrow_Left" onClick="Hide()" ignoreLayout="1" preserveAspect="1" type="Simple" width="32" height="32" />
- </Cell>
- <Cell>
- <Text class="title">
- Test it out
- </Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell dontUseTableCellBackground="true">
- <TableLayout class="noCellBackground" padding="10" cellSpacing="2" cellPadding="10" columnWidths="480 0">
- <Row preferredHeight="48">
- <Cell class="header">
- <Text class="h2">Code</Text>
- </Cell>
- <Cell class="header">
- <Text class="h2">Output</Text>
- <Button image="Sprites/Icons/Move" onClick="ToggleViewportSize();" ignoreLayout="true" rectAlignment="MiddleRight" width="32" height="32" offsetXY="-8 0" />
- </Cell>
- </Row>
- <Row>
- <Cell>
- <TableLayout cellSpacing="10">
- <Row preferredHeight="32">
- <Cell>
- <HorizontalLayout spacing="5" padding="5">
- <Button onClick="Empty();">Empty</Button>
- <Button onClick="ExampleA();">Example A</Button>
- <Button onClick="ExampleB();">Example B</Button>
- <Button onClick="ExampleC();">Example C</Button>
- </HorizontalLayout>
- </Cell>
- </Row>
- <Row>
- <Cell dontUseTableCellBackground="1">
- <VerticalScrollView class="scrollView" color="rgb(0,0,0,0.75)" id="codeInputScrollView">
- <TableLayout columnWidths="36 0" height="1024">
- <Row>
- <Cell>
- <InputField interactable="false" lineType="MultiLineNewline" fontSize="12" font="Courier New Bold" id="lineNumbers">
- </InputField>
- </Cell>
- <Cell>
- <InputField id="codeInputField" colors="clear" textColor="white" fontStyle="Bold" fontSize="12" font="Courier New" onValueChanged="XmlChanged(value);" lineType="MultiLineNewline"></InputField>
- </Cell>
- </Row>
- </TableLayout>
- </VerticalScrollView>
- </Cell>
- </Row>
- <Row preferredHeight="32">
- <Cell>
- <Button onClick="UpdateDisplay();">Update</Button>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- <Cell>
- <Mask>
- <Panel padding="10" class="outlined" id="outputContainer">
- <Panel id="output" name="Output">
- <!-- Output goes here -->
- </Panel>
- </Panel>
- </Mask>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- </TableLayout>
-
- <TableLayout width="100%" height="100%" id="expandedOutput" active="false">
- <Row preferredHeight="48">
- <Cell class="header">
- <Text class="h2">Output</Text>
- <Button image="Sprites/Icons/Move" onClick="ToggleViewportSize();" ignoreLayout="true" rectAlignment="MiddleRight" width="32" height="32" offsetXY="-8 0" />
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell>
- <Mask>
- <HorizontalLayout id="expandedOutputPanel" childForceExpandHeight="true" childForceExpandWidth="true" />
- </Mask>
- </Cell>
- </Row>
- </TableLayout>
- </XmlLayout>
- using UnityEngine;
- using UnityEngine.UI;
- using System;
- using System.Collections.Generic;
- using System.Collections;
- using System.Linq;
- using UI.Tables;
-
- namespace UI.Xml.Examples
- {
- class XmlLayout_Example_TestItOut : XmlLayoutController
- {
- public XmlLayout_Example_MessageDialog MessageDialog = null;
- public XmlLayout_Example_ExampleMenu ExampleMenu = null;
-
- string Xml = null;
-
- bool viewPortExpanded = false;
-
- void Start()
- {
- // Select the Empty example
- Empty();
- }
-
- public override void Show()
- {
- base.Show();
-
- ScrollToTop();
- }
-
- public override void Hide(Action onCompleteCallback = null)
- {
- ExampleMenu.SelectExample(null);
- }
-
- void UpdateCodeInputField()
- {
- // populate the code input field with the Example Xml
- var codeInputField = xmlLayout.GetElementById<InputField>("codeInputField");
- codeInputField.text = Xml.Trim();
-
- ScrollToTop();
- }
-
- void ScrollToTop()
- {
- // Scroll to the top
- var codeInputScrollView = xmlLayout.GetElementById<ScrollRect>("codeInputScrollView");
- codeInputScrollView.verticalNormalizedPosition = 1;
- }
-
- // Called by the codeInputField when its text changes
- void XmlChanged(string newXml)
- {
- Xml = newXml != null ? newXml.Trim() : "";
- }
-
- void ToggleViewportSize()
- {
- var outputPanel = xmlLayout.GetElementById("output");
- var expandedOutput = xmlLayout.GetElementById("expandedOutput");
- var mainPanel = xmlLayout.GetElementById("mainPanel");
-
- if (!viewPortExpanded)
- {
- expandedOutput.gameObject.SetActive(true);
-
- var expandedOutputPanel = xmlLayout.GetElementById("expandedOutputPanel");
- outputPanel.transform.SetParent(expandedOutputPanel.transform);
-
- mainPanel.gameObject.SetActive(false);
- }
- else
- {
- var outputContainer = xmlLayout.GetElementById("outputContainer");
- outputPanel.transform.SetParent(outputContainer.transform);
-
- expandedOutput.gameObject.SetActive(false);
-
- mainPanel.gameObject.SetActive(true);
- }
-
- viewPortExpanded = !viewPortExpanded;
-
- UpdateDisplay();
- }
-
- public override void LayoutRebuilt(ParseXmlResult parseResult)
- {
- if (!Application.isPlaying) return;
-
- if (parseResult == ParseXmlResult.Changed)
- {
- UpdateDisplay();
- }
- }
-
- public void UpdateDisplay()
- {
- // Delaying until the end of the frame allows us to be certain that XmlLayout is completely set up before we execute this code
- XmlLayoutTimer.AtEndOfFrame(_UpdateDisplay, this);
- }
-
- void _UpdateDisplay()
- {
- var lineNumbers = xmlLayout.GetElementById<InputField>("lineNumbers");
- lineNumbers.text = String.Join( "\r\n", Enumerable.Range(1, 100).Select(i => i.ToString().PadLeft(2, '0')).ToArray());
-
- var outputField = xmlLayout.GetElementById("output");
- var outputFieldXmlLayout = outputField.gameObject.GetComponent<XmlLayout>() ?? outputField.gameObject.AddComponent<XmlLayout>();
-
- outputField.ApplyAttributes(GetOutputFieldAttributes());
- outputFieldXmlLayout.gameObject.SetActive(true);
-
- outputFieldXmlLayout.Hide(() =>
- {
- outputFieldXmlLayout.gameObject.SetActive(true);
-
- // borrow styles from the parent
- outputFieldXmlLayout.DefaultsFiles = this.xmlLayout.DefaultsFiles;
-
- outputFieldXmlLayout.Xml = this.Xml;
- try
- {
- // We're using a custom log handler here so that any log/error messsages can be displayed in our message dialog
- var oldHandler = Debug.unityLogger.logHandler;
- Debug.unityLogger.logHandler = new TestLogHandler(MessageDialog, oldHandler);
-
- outputFieldXmlLayout.RebuildLayout(false, true);
-
- Debug.unityLogger.logHandler = oldHandler;
- }
- catch (Exception e)
- {
- MessageDialog.Show("Xml Parse Error", e.Message);
- }
-
- outputField.ApplyAttributes(GetOutputFieldAttributes());
- outputFieldXmlLayout.Show();
- });
- }
-
- private AttributeDictionary GetOutputFieldAttributes()
- {
- // Essentially what we're doing here is overriding the default attributes
- // so as to animate out Output XmlLayout (even though the Xml code doesn't specify it)
- return new AttributeDictionary()
- {
- {"ShowAnimation", "Grow"},
- {"HideAnimation", "FadeOut"},
- {"AnimationDuration", "0.2"},
- };
- }
-
- void Empty()
- {
- Xml = @"
- <XmlLayout>
- <Include path=""Xml/Styles.xml"" />
-
-
- </XmlLayout>
- ";
-
- UpdateCodeInputField();
- UpdateDisplay();
- }
-
- void ExampleA()
- {
- Xml = @"
- <XmlLayout>
- <Defaults>
- <Text alignment=""MiddleCenter""
- fontStyle=""Bold""
- fontSize=""18""
- color=""white"" />
-
- <Text class=""header""
- color=""#00FF00""
- fontSize=""24""
- outline=""black"" />
-
- <Image preserveAspect=""true"" />
- </Defaults>
-
- <TableLayout cellPadding=""10"" cellSpacing=""5"">
- <Row preferredHeight=""48"">
- <Cell columnSpan=""3"">
- <Text class=""header"">Gems</Text>
- </Cell>
- </Row>
- <Row>
- <Cell>
- <Image image=""Sprites/Shop/gemRed"" />
- </Cell>
- <Cell>
- <Image image=""Sprites/Shop/gemBlue"" />
- </Cell>
- <Cell>
- <Image image=""Sprites/Shop/gemGreen"" />
- </Cell>
- </Row>
- <Row preferredHeight=""48"">
- <Cell><Text>Red</Text></Cell>
- <Cell><Text>Blue</Text></Cell>
- <Cell><Text>Green</Text></Cell>
- </Row>
- </TableLayout>
- </XmlLayout>
- ";
-
- UpdateCodeInputField();
- UpdateDisplay();
- }
-
- void ExampleB()
- {
- Xml = @"
- <XmlLayout>
- <Include path=""Xml/Styles.xml"" />
-
- <VerticalLayout padding=""20"" spacing=""5"">
- <Button>Button 1</Button>
- <Button>Button 2</Button>
- <Button>Button 3</Button>
- <Button>Button 4</Button>
- <Button>Button 5</Button>
- <Button>Button 6</Button>
- <Button>Button 7</Button>
- <Button>Button 8</Button>
- </VerticalLayout>
- </XmlLayout>
- ";
-
- UpdateCodeInputField();
- UpdateDisplay();
- }
-
- void ExampleC()
- {
- Xml = @"
- <XmlLayout>
- <Include path=""Xml/Styles.xml"" />
-
- <Defaults>
- <Panel class=""cornerPanel""
- width=""100""
- height=""50""
- color=""rgba(0,0.5,0,0.5)""
- image=""Sprites/Outline_With_Background""
- />
-
- <Text color=""#00FF00""
- fontStyle=""Bold""
- alignment=""MiddleCenter"" />
- </Defaults>
-
- <Panel width=""90%""
- height=""90%""
- image=""Sprites/Outline""
- color=""rgb(0.5,0.5,0.5)"">
- <Panel class=""cornerPanel""
- rectAlignment=""UpperLeft"">
- <Text>Upper Left</Text>
- </Panel>
-
- <Panel class=""cornerPanel""
- rectAlignment=""UpperRight"">
- <Text>Upper Right</Text>
- </Panel>
-
- <Image image=""Sprites/Shop/coin""
- width=""100""
- height=""100""
- rectAlignment=""MiddleCenter""
- preserveAspect=""true""
- allowDragging=""true""
- restrictDraggingToParentBounds=""false"" />
-
- <Text offsetXY=""0,-48"" raycastTarget=""false"">Try dragging the coin!</Text>
-
- <Panel class=""cornerPanel""
- rectAlignment=""LowerLeft"">
- <Text>Lower Left</Text>
- </Panel>
-
- <Panel class=""cornerPanel""
- rectAlignment=""LowerRight"">
- <Text>Lower Right</Text>
- </Panel>
- </Panel>
-
- </XmlLayout>
- ";
-
- UpdateCodeInputField();
- UpdateDisplay();
- }
- }
-
- class TestLogHandler : ILogHandler
- {
- XmlLayout_Example_MessageDialog m_MessageDialog;
- ILogHandler m_OriginalLogger;
-
- public TestLogHandler(XmlLayout_Example_MessageDialog messageDialog, ILogHandler originalLogger)
- {
- m_MessageDialog = messageDialog;
- m_OriginalLogger = originalLogger;
- }
-
- public void LogException(Exception exception, UnityEngine.Object context)
- {
- // Pass on the message to the original logger so that it can be displayed on the console
- m_OriginalLogger.LogException(exception, context);
- }
-
- public void LogFormat(LogType logType, UnityEngine.Object context, string format, params object[] args)
- {
- if (!m_MessageDialog.gameObject.activeInHierarchy)
- {
- m_MessageDialog.Show(logType.ToString(), String.Format(format, args));
- }
- else
- {
- m_MessageDialog.AppendText(String.Format(format, args));
- }
-
- // Pass on the message to the original logger so that it can be displayed on the console as well
- m_OriginalLogger.LogFormat(logType, context, format, args);
- }
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <Include path="Xml/Styles.xml" />
-
- <Defaults>
- <Panel class="borderOuter" padding="8" image="Sprites/Layout/Base" color="rgb(0.25,0.4,0.25)" ignoreLayout="true" rectAlignment="LowerCenter" />
- <Panel class="borderInner" image="Sprites/Layout/Indented" color="rgb(0,0.3,0)" />
-
- <Button class="commandButton"
- image="Sprites/HUD/CommandButton"
- iconColor="rgb(0.8,1,0.8)"
- showAnimation="Grow"
- animationDuration="0.5"
- colors="rgb(0.2,0.7,0)|rgb(0.3,1,0.3)|rgb(0.2,0.9,0)"
- padding="2" />
-
- <Button class="unitIcon"
- image="Sprites/Outline"
- icon="Sprites/HUD/UnitIcon"
- iconColor="rgb(0.4,1,0.0.4)"
- showAnimation="Grow"
- animationDuration="0.5"
- padding="2"
- color="rgb(0,1,0)" />
-
- <Button class="topLeft" width="224" height="32" rectAlignment="UpperLeft" offsetXY="16 -48" />
-
- <Text class="resourceText" fontStyle="Bold" color="rgb(0,1,0)" horizontalOverflow="Overflow" />
-
- <Tooltip tooltipPosition="Above" tooltipBorderColor="rgb(0,1,0)" tooltipBackgroundColor="rgb(0,0,0)" tooltipFollowMouse="1" />
- </Defaults>
-
- <!-- Overlay -->
- <Panel image="Sprites/HUD/Game" color="white" type="Simple" preserveAspect="1" height="125%" width="125%" showAnimation="FadeIn" hideAnimation="FadeOut" raycastTarget="1">
- </Panel>
-
- <!-- Back Button -->
- <Button class="topLeft" image="Sprites/Layout/Button" icon="Sprites/Icons/Arrow_Left" iconWidth="32" iconColor="rgb(0,1,0)" iconHoverColor="rgb(0,1,0)" padding="0 0 4 4" onClick="Hide();" showAnimation="FadeIn" hideAnimation="FadeOut">
- Back to Example List
- </Button>
-
- <!-- Top Bar -->
- <Panel height="32" rectAlignment="UpperCenter" image="Sprites/Layout/Gradient" color="rgb(0.2,0.9,0,0.5)" showAnimation="SlideIn_Top" hideAnimation="SlideOut_Top" animationDuration="0.5">
- <TableLayout class="noCellBackground" rectAlignment="MiddleRight" width="224" cellPadding="5">
- <Row preferredHeight="0">
- <Cell tooltip="Green Minerals" tooltipPosition="Below">
- <TableLayout class="noCellBackground item">
- <Row>
- <Cell>
- <Image image="Sprites/Shop/gemGreen" preserveAspect="1" width="125%" height="125%" ignoreLayout="1"/>
- </Cell>
- <Cell>
- <Text class="resourceText">500</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- <Cell tooltip="Blue Minerals" tooltipPosition="Below">
- <TableLayout class="noCellBackground item">
- <Row>
- <Cell>
- <Image image="Sprites/Shop/gemBlue" preserveAspect="1" width="125%" height="125%" ignoreLayout="1" />
- </Cell>
- <Cell>
- <Text class="resourceText">1000</Text>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- </TableLayout>
- </Panel>
-
- <!-- Bottom Bar -->
- <TableLayout columnWidths="192 0 128 256" height="192" rectAlignment="LowerCenter" class="noCellBackground" showAnimation="SlideIn_Bottom" hideAnimation="SlideOut_Bottom">
- <Row>
- <Cell>
- <!-- Minimap -->
- <Panel class="borderOuter" padding="12">
- <Panel padding="4" image="Sprites/Outline" color="rgba(0,1,0,0.75)">
- <Panel class="borderInner">
- <Image image="Sprites/HUD/Minimap" preserveAspect="1" />
- </Panel>
- </Panel>
- </Panel>
- </Cell>
-
- <Cell>
- <!-- Unit List -->
- <Panel class="borderOuter" image="Sprites/Layout/Title" height="168">
- </Panel>
-
- <Panel class="borderOuter" image="Sprites/Layout/Viewport" height="160">
- <Panel class="borderInner">
-
- <TableLayout cellBackgroundColor="rgba(1,1,1,0.05)" cellBackgroundImage="Sprites/Outline" cellSpacing="8" padding="8 8 8 16" cellPadding="2">
- <Row>
- <Cell>
- <Button class="unitIcon" tooltip="Fighter" />
- </Cell>
- <Cell>
- <Button class="unitIcon" tooltip="Fighter" />
- </Cell>
- <Cell>
- <Button class="unitIcon" tooltip="Fighter" />
- </Cell>
- <Cell>
- <Button class="unitIcon" tooltip="Fighter" />
- </Cell>
- <Cell></Cell>
- </Row>
-
- <Row>
- <Cell></Cell>
- <Cell></Cell>
- <Cell></Cell>
- <Cell></Cell>
- <Cell></Cell>
- </Row>
- </TableLayout>
-
- </Panel>
- </Panel>
- </Cell>
-
- <Cell>
- <!-- Unit Portrait -->
- <Panel class="borderOuter" height="160">
- <Panel class="borderInner" color="rgb(0.1,0.1,0.1)">
- <Panel padding="4" image="Sprites/Outline" color="rgba(0,1,0,0.75)">
- <Panel padding="8">
- <Image image="Sprites/HUD/UnitPortrait" showAnimation="FadeIn" hideAnimation="FadeOut" animationDuration="0.5" preserveAspect="1" color="rgba(1,1,1,0.5)" />
- </Panel>
- </Panel>
- </Panel>
- </Panel>
- </Cell>
-
- <Cell>
- <!-- Commands -->
-
- <Panel class="borderOuter" image="Sprites/Layout/Title" height="192">
- </Panel>
-
- <Panel class="borderOuter" image="Sprites/Layout/Viewport" height="160">
- <Panel class="borderInner">
- <TableLayout cellBackgroundColor="rgba(1,1,1,0.05)" cellBackgroundImage="Sprites/Outline" cellSpacing="8" padding="8 8 4 4" cellPadding="2">
- <Row>
- <Cell>
- <Button class="commandButton" icon="Sprites/Icons/Move" tooltip="Move" />
- </Cell>
- <Cell>
- <Button class="commandButton" icon="Sprites/Icons/Crosshair" tooltip="Attack" />
- </Cell>
- <Cell>
- <Button class="commandButton" icon="Sprites/Icons/Cancel" tooltip="Cancel" />
- </Cell>
- <Cell>
- <Button class="commandButton" icon="Sprites/Icons/Anticlockwise-Rotation" tooltip="Return" />
- </Cell>
- </Row>
-
- <Row>
- <Cell></Cell>
- <Cell></Cell>
- <Cell></Cell>
- <Cell></Cell>
- </Row>
-
- <Row>
- <Cell>
- <Button class="commandButton" icon="Sprites/Icons/Arrow_Left" tooltip="Previous Page" />
- </Cell>
- <Cell></Cell>
- <Cell>
- <Button class="commandButton" icon="Sprites/Icons/Cog" tooltip="Advanced Options" />
- </Cell>
- <Cell>
- <Button class="commandButton" icon="Sprites/Icons/Arrow_Right" tooltip="Next Page" />
- </Cell>
- </Row>
-
- </TableLayout>
- </Panel>
- </Panel>
- </Cell>
- </Row>
-
- </TableLayout>
-
- </XmlLayout>
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- using UI.Xml;
-
- namespace UI.Xml.Examples
- {
- class XmlLayout_Example_HUD : XmlLayoutController
- {
- public XmlLayout_Example_ExampleMenu ExampleMenu = null;
-
- public override void Hide(Action onCompleteCallback = null)
- {
- if (ExampleMenu != null)
- {
- ExampleMenu.SelectExample(null);
- }
- else
- {
- // This code is executed in the World Space example (which is in a different scene to the base Example Scene)
- base.Hide(() => { UnityEngine.SceneManagement.SceneManager.LoadScene("ExampleScene"); });
- }
- }
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../Configuration/XmlLayout.xsd" showAnimation="SlideIn_Right" hideAnimation="SlideOut_Right">
-
- <Include path="Xml/Styles.xml" />
-
- <Defaults>
- <!-- By default, TableCells ignore raycasts, but that needs to be changed (elements must block raycasts to be drop receivers) -->
- <Cell class="itemCell" isDropReceiver="true" raycastTarget="1" onElementDropped="ItemDropped()" />
- <Image class="item" allowDragging="true" restrictDraggingToParentBounds="false" preserveAspect="true" />
-
- <Text color="white" fontSize="32" resizeTextForBestFit="true" minHeight="32" font="Fonts/Arial Bold" />
- </Defaults>
-
- <Button rectAlignment="UpperRight"
- offsetXY="-64 -64"
- width="256"
- height="32"
- fontSize="16"
- icon="Sprites/Icons/Arrow_Left" iconWidth="64" iconColor="rgb(0,1,0)" iconHoverColor="rgb(0,1,0)" padding="0 0 4 4"
- onClick="ReturnToMainExamples()">
- Back to Example List
- </Button>
-
- <TableLayout width="800" height="384" offsetXY="0 -32" cellSpacing="32" cellBackgroundColor="clear">
- <Row preferredHeight="32">
- <Cell>
- <Text>Drag items from one cell to another</Text>
- </Cell>
- </Row>
-
- <Row>
- <Cell>
- <HorizontalLayout name="Container" flexibleHeight="1" spacing="16">
-
- <Panel name="LeftPanel" color="white" rectAlignment="MiddleLeft" image="Sprites/Layout/Base" padding="8">
- <Panel image="Sprites/Layout/Base" color="rgb(0.15,0.15,0.15)">
-
- <TableLayout name="leftTable">
- <Row>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell">
- <Image class="item" image="Sprites/Shop/Coin" name="Coin" />
- </Cell>
- <Cell class="itemCell"></Cell>
- </Row>
-
- <Row>
- <Cell class="itemCell">
- <Image class="item" image="Sprites/Shop/gemRed" name="Red Gem" />
- </Cell>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell"></Cell>
- </Row>
-
- <Row>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell">
- <Image class="item" image="Sprites/Shop/gemBlue" name="Blue Gem" />
- </Cell>
- </Row>
- </TableLayout>
-
- </Panel>
- </Panel>
-
- <Panel name="RightPanel" color="white" rectAlignment="MiddleRight" image="Sprites/Layout/Base" padding="8">
- <Panel image="Sprites/Layout/Base" color="rgb(0.15,0.15,0.15)">
-
- <TableLayout name="rightTable">
- <Row>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell"></Cell>
- </Row>
-
- <Row>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell">
- <Image class="item" image="Sprites/Shop/gemGreen" name="Green Gem" />
- </Cell>
- <Cell class="itemCell"></Cell>
- </Row>
-
- <Row>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell"></Cell>
- <Cell class="itemCell"></Cell>
- </Row>
- </TableLayout>
-
- </Panel>
- </Panel>
-
- </HorizontalLayout>
- </Cell>
- </Row>
-
- <Row preferredHeight="32">
- <Cell>
- <Text id="debugText"></Text>
- </Cell>
- </Row>
- </TableLayout>
-
- </XmlLayout>
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UI.Xml;
- using UI.Tables;
- using UnityEngine.UI;
-
- class DragAndDropExampleXmlLayoutController : XmlLayoutController
- {
- void ItemDropped(XmlElement droppedItem, XmlElement cell)
- {
- if (!cell.HasClass("itemCell") || !droppedItem.HasClass("item")) return;
-
- droppedItem.parentElement.RemoveChildElement(droppedItem);
-
- cell.AddChildElement(droppedItem);
-
- // debug text
- var tableCell = cell.GetComponent<TableCell>();
-
- var debugText = xmlLayout.GetElementById<Text>("debugText");
- debugText.text = String.Format("Item '{0}' dropped on cell '{1}' in table '{2}'", droppedItem.name, GetCellPositionString(tableCell), GetTableName(tableCell));
- }
-
- string GetCellPositionString(TableCell cell)
- {
- var row = cell.GetRow();
- var table = row.GetTable();
-
- var rowPosition = table.Rows.IndexOf(row) + 1;
- var columnPosition = row.Cells.IndexOf(cell) + 1;
-
- return String.Format("{0},{1}", rowPosition, columnPosition);
- }
-
- string GetTableName(TableCell cell)
- {
- return cell.GetRow().GetTable().name;
- }
-
- void ReturnToMainExamples()
- {
- xmlLayout.Hide(() => { UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("ExampleScene"); });
- }
-
- void Awake()
- {
- xmlLayout.Show();
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../Configuration/XmlLayout.xsd"
- showAnimation="SlideIn_Right" hideAnimation="SlideOut_Right">
-
- <Include path="Xml/Styles.xml" />
-
- <Button rectAlignment="UpperRight"
- offsetXY="-64 -64"
- width="256"
- height="32"
- fontSize="16"
- icon="Sprites/Icons/Arrow_Left" iconWidth="64" iconColor="rgb(0,1,0)" iconHoverColor="rgb(0,1,0)" padding="0 0 4 4"
- onClick="ReturnToMainExamples()">
- Back to Example List
- </Button>
-
- <ToggleGroup id="languageToggleGroup" onValueChanged="ChangeLanguage(selectedText)">
- <TableLayout class="noCellBackground" width="600" height="64" rectAlignment="UpperCenter" offsetXY="0 -120" cellPadding="8">
- <Row class="viewport">
- <Cell>
- <ToggleButton name="English">English</ToggleButton>
- </Cell>
- <Cell>
- <ToggleButton name="Spanish">Spanish</ToggleButton>
- </Cell>
- <Cell>
- <ToggleButton name="French">French</ToggleButton>
- </Cell>
- <Cell>
- <ToggleButton name="Afrikaans">Afrikaans</ToggleButton>
- </Cell>
- <Cell>
- <ToggleButton name="None">No Localization</ToggleButton>
- </Cell>
- </Row>
- </TableLayout>
- </ToggleGroup>
-
-
- <TableLayout class="noCellBackground" height="280" width="600" offsetXY="0 -48" useGlobalCellPadding="false">
- <Row class="headerRow">
- <Cell>
- <Text class="title">
- {LOCALIZATION_EXAMPLE_HEADER}
- </Text>
- </Cell>
- </Row>
- <Row class="viewport">
- <Cell dontUseTableCellBackground="true" padding="16">
- <TableLayout cellPadding="8" cellBackgroundColor="rgba(1,1,1,0.1)">
- <Row>
- <Cell>
- <Text class="h3">{LOCALIZATION_EXAMPLE_USERNAME_LABEL}</Text>
- </Cell>
- <Cell>
- <InputField id="username" placeholderText="{LOCALIZATION_EXAMPLE_USERNAME_PLACEHOLDER_TEXT}" />
- </Cell>
- </Row>
-
- <Row>
- <Cell>
- <Text class="h3">{LOCALIZATION_EXAMPLE_PASSWORD_LABEL}</Text>
- </Cell>
- <Cell>
- <InputField id="password" inputType="Password" placeholderText="{LOCALIZATION_EXAMPLE_PASSWORD_PLACEHOLDER_TEXT}" />
- </Cell>
- </Row>
-
- <Row>
- <Cell>
- <Button resizeTextForBestFit="1" resizeTextMaxSize="16">{LOCALIZATION_EXAMPLE_LOGIN_BUTTON}</Button>
- </Cell>
- <Cell>
- <Button resizeTextForBestFit="1" resizeTextMaxSize="16">{LOCALIZATION_EXAMPLE_REGISTER_BUTTON}</Button>
- </Cell>
- </Row>
- </TableLayout>
- </Cell>
- </Row>
- </TableLayout>
-
- </XmlLayout>
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UI.Xml;
-
- class XmlLayout_Localization_Example : XmlLayoutController
- {
- public string selectedLanguage = "English";
- XmlElementReference<XmlLayoutToggleGroup> toggleGroup = null;
-
- void Awake()
- {
- xmlLayout.Show();
-
- toggleGroup = XmlElementReference<XmlLayoutToggleGroup>("languageToggleGroup");
- }
-
- public override void LayoutRebuilt(ParseXmlResult parseResult)
- {
- if (toggleGroup != null)
- {
- // As the layout has just been rebuilt, the toggle group will no longer have anything selected
- // so we're just going to set it again here
- toggleGroup.element.SetSelectedValue(selectedLanguage, false);
- }
- }
-
- void ChangeLanguage(string language)
- {
- this.selectedLanguage = language;
-
- if (language == "No Localization")
- {
- xmlLayout.SetLocalizationFile(null);
- return;
- }
-
- var languageFile = XmlLayoutUtilities.LoadResource<XmlLayoutLocalization>("Localization/" + language);
-
- if (languageFile == null)
- {
- Debug.LogWarningFormat("Warning: localization file for language '{0}' not found!", language);
- return;
- }
-
- xmlLayout.SetLocalizationFile(languageFile);
- }
-
- void ReturnToMainExamples()
- {
- xmlLayout.Hide(() => { UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("ExampleScene"); });
- }
- }
- <XmlLayout xmlns="XmlLayout"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="XmlLayout ../../../Configuration/XmlLayout.xsd">
-
- <HorizontalLayout color="rgb(0.5,0.5,0.5)" padding="8" image="Sprites/Layout/Viewport">
- <Text color="white">Color Scheme:</Text>
-
- <Dropdown id="colorSchemeDropdown" preferredWidth="192" onValueChanged="ChangeColorScheme(selectedValue)">
- <Option>GreenYellow</Option>
- <Option>BlueYellow</Option>
- <Option>Grayscale</Option>
- <Option>GrayscaleAlt</Option>
- </Dropdown>
- </HorizontalLayout>
-
- </XmlLayout>
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- using System.Linq;
-
- namespace UI.Xml
- {
- [ExecuteInEditMode]
- class XmlLayout_Example_ColorSchemeManager : XmlLayoutController
- {
- // Set to the root Canvas for the scene in the inspector
- public GameObject Root = null;
-
- private string colorScheme
- {
- get { return PlayerPrefs.GetString("colorScheme"); }
- set { PlayerPrefs.SetString("colorScheme", value); }
- }
-
- private void OnEnable()
- {
- if (string.IsNullOrEmpty(colorScheme)) colorScheme = "GreenYellow";
-
- ChangeColorSchemeWithoutRebuild(colorScheme);
- }
-
- private void Start()
- {
- xmlLayout.GetElementById<Dropdown>("colorSchemeDropdown").SetSelectedValue(colorScheme);
-
- ChangeColorScheme(colorScheme);
- }
-
- public void ChangeColorSchemeWithoutRebuild(string newScheme)
- {
- colorScheme = newScheme;
-
- var colorSchemeFile = XmlLayoutUtilities.LoadResource<TextAsset>(string.Format("Xml/ColorSchemes/{0}", newScheme));
-
- if (colorSchemeFile == null)
- {
- Debug.LogErrorFormat("[XmlLayout][Example][Color Scheme Manager] Warning: unable to locate color scheme definition '{0}'", newScheme);
- return;
- }
-
- List<XmlLayout> xmlLayouts = Root.gameObject
- .GetComponentsInChildren<XmlLayout>(true)
- .ToList();
-
- foreach (var layout in xmlLayouts)
- {
- // skip this layout
- if (layout == this.xmlLayout) continue;
-
- if (layout.DefaultsFiles == null) layout.DefaultsFiles = new List<TextAsset>();
-
- layout.DefaultsFiles.Clear();
- layout.DefaultsFiles.Add(colorSchemeFile);
- }
- }
-
- public void ChangeColorScheme(string newScheme)
- {
- colorScheme = newScheme;
-
- var colorSchemeFile = XmlLayoutUtilities.LoadResource<TextAsset>(string.Format("Xml/ColorSchemes/{0}", newScheme));
-
- if (colorSchemeFile == null)
- {
- Debug.LogErrorFormat("[XmlLayout][Example][Color Scheme Manager] Warning: unable to locate color scheme definition '{0}'", newScheme);
- return;
- }
-
- List<XmlLayout> xmlLayouts = Root.gameObject
- .GetComponentsInChildren<XmlLayout>(true)
- .ToList();
-
- foreach(var layout in xmlLayouts)
- {
- // skip this layout
- if (layout == this.xmlLayout) continue;
-
- if (layout.DefaultsFiles == null) layout.DefaultsFiles = new List<TextAsset>();
-
- var inactive = !layout.gameObject.activeSelf;
-
- if (inactive)
- {
- layout.gameObject.SetActive(true);
- }
-
- layout.DefaultsFiles.Clear();
- layout.DefaultsFiles.Add(colorSchemeFile);
-
- layout.RebuildLayout(true);
-
- if (inactive)
- {
- // copy the local variable (if we use 'layout' it will reference the foreach variable which changes through each iteration)
- var layoutTemp = layout;
-
- // hide the layout again at the end of the frame
- XmlLayoutTimer.AtEndOfFrame(() =>
- {
- if (layoutTemp == null) return;
-
- //canvasGroup.alpha = alphaBefore;
- layoutTemp.gameObject.SetActive(false);
- }, layoutTemp, true);
- }
- }
- }
- }
- }