using System;
using FairyGUI.Utils;
namespace FairyGUI
{
    /// 
    /// Gear is a connection between object and controller.
    /// 
    public class GearDisplay : GearBase
    {
        /// 
        /// Pages involed in this gear.
        /// 
        public string[] pages { get; set; }
        int _visible;
        uint _displayLockToken;
        public GearDisplay(GObject owner)
            : base(owner)
        {
            _displayLockToken = 1;
        }
        override protected void AddStatus(string pageId, ByteBuffer buffer)
        {
        }
        override protected void Init()
        {
            pages = null;
        }
        override public void Apply()
        {
            _displayLockToken++;
            if (_displayLockToken == 0)
                _displayLockToken = 1;
            if (pages == null || pages.Length == 0
                || Array.IndexOf(pages, _controller.selectedPageId) != -1)
                _visible = 1;
            else
                _visible = 0;
        }
        override public void UpdateState()
        {
        }
        public uint AddLock()
        {
            _visible++;
            return _displayLockToken;
        }
        public void ReleaseLock(uint token)
        {
            if (token == _displayLockToken)
                _visible--;
        }
        public bool connected
        {
            get { return _controller == null || _visible > 0; }
        }
    }
}