Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Main script
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- public class MailWindow : Window
- {
- #region Data
- public GameObject infoMailMessagePrefab;
- public GameObject jobContractMailMessagePrefab;
- [HideInInspector]
- public List<MailMessage> mailMessages;
- #endregion Data
- #region Unity Stuff
- private void Start()
- {
- for (int i = 0; i < 10; i++)
- {
- JobContractMailMessage mailMessage = new JobContractMailMessage()
- {
- subjectText = "I'm little subject " + i,
- contentText = "I'm super long big awesome and nice message that occupies whole content preview and places three dots at the end and to be seen it must be expanded! " + i,
- timeStampText = i.ToString()
- };
- ReceiveMailMessage(mailMessage);
- }
- }
- #endregion Unity Stuff
- #region Public API
- public void ReceiveMailMessage(MailMessage message)
- {
- if (message is InfoMailMessage)
- {
- GameObject mail = Instantiate(infoMailMessagePrefab, transform.Find("Scroll View/Viewport/Content"));
- mail.GetComponent<InfoMailMessage>().subjectText = message.subjectText;
- mail.GetComponent<InfoMailMessage>().contentText = message.contentText;
- mail.GetComponent<InfoMailMessage>().timeStampText = message.timeStampText;
- }
- else if (message is JobContractMailMessage)
- {
- GameObject mail = Instantiate(jobContractMailMessagePrefab, transform.Find("Scroll View/Viewport/Content"));
- mail.GetComponent<JobContractMailMessage>().subjectText = message.subjectText;
- mail.GetComponent<JobContractMailMessage>().contentText = message.contentText;
- mail.GetComponent<JobContractMailMessage>().timeStampText = message.timeStampText;
- }
- }
- #endregion Public API
- }
- //Mail class
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.EventSystems;
- using UnityEngine.UI;
- public class MailMessage : MonoBehaviour, IPointerClickHandler
- {
- #region Data
- [HideInInspector]
- public string subjectText;
- [HideInInspector]
- public string contentText;
- [HideInInspector]
- public string timeStampText;
- protected Text subject;
- protected Text content;
- protected Text timeStamp;
- protected Button delete;
- protected string completeContent;
- protected bool isExpanded;
- protected TextGenerator contentTextGenerator;
- #endregion Data
- #region Unity Stuff
- private void Start()
- {
- Initialize();
- }
- #endregion Unity Stuff
- #region Protected API
- protected virtual void Initialize()
- {
- contentTextGenerator = new TextGenerator();
- subject = transform.Find("SubjectText").GetComponent<Text>();
- content = transform.Find("ContentText").GetComponent<Text>();
- timeStamp = transform.Find("TimeStampText").GetComponent<Text>();
- delete = transform.Find("DeleteButton").GetComponent<Button>();
- subject.text = subjectText;
- content.text = contentText;
- timeStamp.text = timeStampText;
- delete.gameObject.SetActive(false);
- delete.onClick.AddListener(Delete);
- completeContent = content.text;
- contentTextGenerator.Populate(content.text, content.GetGenerationSettings(content.GetComponent<RectTransform>().sizeDelta));
- if (content.text.ToCharArray().Length > contentTextGenerator.characterCountVisible)
- {
- content.text = content.text.SubstringAndReplaceWithOffset(contentTextGenerator.characterCountVisible, "...");
- }
- }
- public virtual void Expand()
- {
- contentTextGenerator.Populate(completeContent, content.GetGenerationSettings(content.GetComponent<RectTransform>().sizeDelta));
- content.text = completeContent;
- delete.gameObject.SetActive(true);
- ResizeAll(35);
- if (content.text.ToCharArray().Length > contentTextGenerator.characterCountVisible)
- {
- ResizeAll(15);
- }
- isExpanded = true;
- }
- public virtual void UnExpand()
- {
- ResizeAll(-35);
- if (content.text.ToCharArray().Length > contentTextGenerator.characterCountVisible)
- {
- ResizeAll(-15);
- }
- contentTextGenerator.Populate(content.text, content.GetGenerationSettings(content.GetComponent<RectTransform>().sizeDelta));
- content.text = content.text.SubstringAndReplaceWithOffset(contentTextGenerator.characterCountVisible, "...");
- delete.gameObject.SetActive(false);
- isExpanded = false;
- }
- protected virtual void Delete()
- {
- Destroy(gameObject);
- UnExpand();
- RefreshUI();
- }
- protected void ResizeAll(int size)
- {
- Resize(size, GetComponent<RectTransform>());
- Resize(size, transform.parent.GetComponent<RectTransform>());
- Resize(size, content.GetComponent<RectTransform>());
- RefreshUI();
- }
- protected static void Resize(int size, RectTransform rectTransform)
- {
- rectTransform.sizeDelta = new Vector2(rectTransform.sizeDelta.x, rectTransform.sizeDelta.y + size);
- }
- protected void RefreshUI()
- {
- //TODO: Is there non-hacky way to solve this
- transform.parent.GetComponent<VerticalLayoutGroup>().enabled = false;
- transform.parent.GetComponent<VerticalLayoutGroup>().enabled = true;
- }
- public void OnPointerClick(PointerEventData eventData)
- {
- if (isExpanded)
- {
- UnExpand();
- return;
- }
- Expand();
- }
- #endregion Protected API
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement