/**
         * \brief 要素を無効にする。
         * \param elements [in] 無効化する要素
         */
        protected void ToDisableElements(RecycleElement elements)
        {
            enableElements.Remove(elements.Index);
            elements.gameObject.SetActive(false);
            elements.transform.SetParent(recycleTransform);
            elements.transform.localPosition = Vector3.zero;
            elements.Enabled = false;
            elements.Recycle = true;
            disableElements.Add(elements);

            if (onDisableElements != null)
            {
                onDisableElements(elements);
            }
        }
        /**
         * \brief 要素のトランスフォーム情報を更新します。
         * \param index [in] 項目のインデックス
         * \param elements [in] トランスフォーム情報を更新する要素
         * \param bEnabled [in] 既に有効な状態だった場合 true が渡されます。
         */
        protected override void OnUpdateElementTransform(int index, RecycleElement elements, bool bEnabled)
        {
            float x = GetColumnsPositionByIndex(index);
            float y = GetRowsPositionByIndex(index);

            var rectTransform = elements.transform as RectTransform;

            rectTransform.localPosition = new Vector3(x, y, 0.0f);
            rectTransform.sizeDelta     = new Vector2(viewportSize.x, sizes[index]);

            if (bEnabled == false)
            {
                rectTransform.localScale = Vector3.one;
                elements.Relocation      = true;
            }
        }
Example #3
0
        void OnEnableElements(RecycleElement elements, System.Action callback)
        {
            Log log;

            lock ( logs)
            {
                log = logs[elements.Index];
            }
            if (elements.GetComponentInChildren <Text>() is Text component)
            {
                string text = log.text;

                if (text.Length > 14000)
                {
                    text  = text.Substring(0, 14000);
                    text += "\n<message truncated>";
                }
                logTextSettings.ApplyComponent(component, text, log.color);
            }
            callback();
        }
        /**
         * \brief 要素を有効にする。
         * \param index [in] 有効化する項目のインデックス
         * \return 有効化した要素が返ります。
         */
        protected RecycleElement ToEnableElements(int index)
        {
            RecycleElement elements = null;

            if (index < itemCount)
            {
                if (enableElements.TryGetValue(index, out elements) != false)
                {
                    if (bUpdateTransform != false)
                    {
                        OnUpdateElementTransform(index, elements, true);
                    }
                }
                else
                {
                    /* 未使用要素からリサイクル可能なモノを検索 */
                    foreach (RecycleElement e in disableElements)
                    {
                        if (e.Recycle != false)
                        {
                            elements = e;
                            break;
                        }
                    }
                    /* リサイクル可能な要素が見つかった場合は再使用する */
                    if (elements != null)
                    {
                        elements.transform.SetParent(transform);
                        elements.gameObject.SetActive(true);
                        disableElements.Remove(elements);
                    }
                    /* リサイクル可能な要素が見つからなかった場合は新規作成する */
                    else
                    {
                        var newObject = Instantiate(elementPrefab);
                        elements = newObject.GetComponent <RecycleElement>();
                        elements.transform.SetParent(transform);
                        if (elements.transform is RectTransform rc)
                        {
                            rc.pivot = new Vector2(0.0f, 1.0f);
                        }
                    }

                                #if UNITY_EDITOR
                    elements.name = index.ToString();
                                #endif
                    elements.Index   = index;
                    elements.Recycle = false;

                    OnUpdateElementTransform(index, elements, false);
                    enableElements.Add(index, elements);

                    if (onEnableElements == null)
                    {
                        elements.Enabled = true;
                    }
                    else
                    {
                        onEnableElements(elements, () =>
                        {
                            elements.Enabled = true;
                        });
                    }
                }
            }
            return(elements);
        }
 /**
  * \brief 要素のトランスフォーム情報を更新します。
  * \param index [in] 項目のインデックス
  * \param elements [in] トランスフォーム情報を更新する要素
  * \param bEnabled [in] 既に有効な状態だった場合 true が渡されます。
  */
 protected abstract void OnUpdateElementTransform(int index, RecycleElement elements, bool bEnabled);