OnInitControllerState.cs 4.25 KB
Newer Older
潘栩锋's avatar
潘栩锋 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
using FLY.Thick.Base.Common;
using FLY.Thick.Base.IService;
using MultiLayout.UiModule;
using Misc;
using MultiLayout;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Unity;

namespace FLY.Thick.Base.UI.OnInit
{
    /// <summary>
    /// 根据状态换页
    /// </summary>
    public class OnInitControllerState : IOnInit
    {
        ParamDictionary paramDictionary;
        IUnityContainer container;
        FlyLayoutManager manager;

        List<Tag> tags = new List<Tag>();

        /// <summary>
        /// 
        /// </summary>
        /// <param name="container"></param>
        /// <param name="paramDictionary"></param>
        /// <param name="manager"></param>
        /// <param name="lv"></param>
        public OnInitControllerState(
            IUnityContainer container, 
            ParamDictionary paramDictionary,
            FlyLayoutManager manager, 
            int lv=1) 
        {
            Level = lv;
            this.container = container;
            this.paramDictionary = paramDictionary;
            this.manager = manager;
        }

        public int Level { get; }

        class Tag 
        {
            public string rontainerName;
            public DynArea dynArea;
        }
        public void OnInit()
        {
潘栩锋's avatar
潘栩锋 committed
55
            //找出全部 xxx.service 服务容器 且包含 ITDGageService服务
潘栩锋's avatar
潘栩锋 committed
56 57 58 59 60 61
            var rontainerNames =
                from regist in container.Registrations
                where
                (regist.RegisteredType == typeof(IUnityContainer))
                && (!string.IsNullOrEmpty(regist.Name))
                && Regex.IsMatch(regist.Name, @"\w+\.service")
潘栩锋's avatar
潘栩锋 committed
62
                && container.Resolve<IUnityContainer>(regist.Name).IsRegistered<ITDGageService>()
潘栩锋's avatar
潘栩锋 committed
63 64 65 66 67 68 69 70 71
                select regist.Name;

            if (rontainerNames.Count() == 0)
                return;//一个服务容器都没有

            //注册事件
            foreach (var rontainerName in rontainerNames)
            {
                var serviceContainer = container.Resolve<IUnityContainer>(rontainerName);
潘栩锋's avatar
潘栩锋 committed
72
                var gageService =serviceContainer.Resolve<ITDGageService>();
潘栩锋's avatar
潘栩锋 committed
73 74 75
                var tag = new Tag()
                {
                    rontainerName = rontainerName,
潘栩锋's avatar
潘栩锋 committed
76
                    dynArea = gageService.DynArea
潘栩锋's avatar
潘栩锋 committed
77 78 79
                };
                tags.Add(tag);

潘栩锋's avatar
潘栩锋 committed
80
                gageService.DynArea.PropertyChanged += (s, e) =>
潘栩锋's avatar
潘栩锋 committed
81 82 83 84
                {
                    DynArea dynarea = s as DynArea;
                    var t = tags.Find(_t => _t.dynArea == dynarea);

85
                    if (e.PropertyName == nameof(DynArea.ControllerState))
潘栩锋's avatar
潘栩锋 committed
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
                    {
                        UpdateControllerState(t);
                    }
                };

                UpdateControllerState(tag);
            }


        }

        void UpdateControllerState(Tag tag)
        {
            string rontainerName = tag.rontainerName;
            var dynArea = tag.dynArea;
            //找到状态切换条件
            var controllerStateTabItems = paramDictionary.GetValue<List<ControllerStateTabItem>>($"{rontainerName}.stateChanged");
            if (controllerStateTabItems == null)
                return;

            //找出设备页面
107 108
            if (manager.layout.GageTabItems == null)
                return;
潘栩锋's avatar
潘栩锋 committed
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
            var gageTabItems = from _gageTabItem in manager.layout.GageTabItems where _gageTabItem.ServiceContainerName == rontainerName select _gageTabItem;
            if (gageTabItems.Count() == 0)
                return;

            var gageTabItem = gageTabItems.First();


            var st = controllerStateTabItems.Find(_st => _st.ControllerState == dynArea.ControllerState.ToString());
            if (st != null)
            {
                if (st.No >= 0 && st.No < gageTabItem.TabControl.Items.Count)
                    gageTabItem.TabControl.SelectedIndex = st.No;
            }
        }
    }
    /// <summary>
    /// 状态换页条件
    /// </summary>
    public class ControllerStateTabItem
    {
        /// <summary>
        /// 状态
        /// </summary>
        public string ControllerState;
        /// <summary>
        /// 页序号
        /// </summary>
        public int No;
    }
}