Exemple #1
0
        /// <summary>
        /// Constructor
        /// </summary>
        static WlyViewMgr()
        {
            var        types    = typeof(WlyViewMgr).Assembly.GetTypes();
            IWlyUIView mainView = null;

            foreach (var t in types)
            {
                if (!typeof(WlyUIViewBase).IsAssignableFrom(t) || t.IsAbstract)
                {
                    continue;
                }

                var attribute = t.GetCustomAttribute <WlyViewAttribute>();
                if ((attribute == null) && !t.IsAbstract)
                {
                    throw new InvalidOperationException($"界面{t.Name}没有附加界面属性");
                }

                var view = Activator.CreateInstance(t) as IWlyUIView;
                _viewList.Add(view);

                if ((view != null) && (view.Type == WlyViewType.场景_主界面))
                {
                    view.Level = 0;
                    mainView   = view;
                }
            }

            // 界面检查
            foreach (var v in Enum.GetValues(typeof(WlyViewType)))
            {
                if (Equals(v, WlyViewType.Unknow))
                {
                    continue;
                }

                if (_viewList.FirstOrDefault(o => Equals(o.Type, v)) == null)
                {
                    throw new InvalidOperationException($"没有定义界面 {v}");
                }
            }

            if (mainView == null)
            {
                throw new InvalidOperationException("未定义主界面");
            }

            mainView.Init();
            _viewList = _viewList.OrderByDescending(o => o.Level).ToList();
        }
Exemple #2
0
        public WlyUIViewWrapper(IWlyUIView view)
        {
            m_view = view;
            var level = m_view.Level;

            if (level == WlyViewMgr.LevelMax)
            {
                m_row = 0;
            }
            else
            {
                m_row = level + 1;
            }
        }
Exemple #3
0
        /// <summary>
        /// 退出当前界面
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="timeout"></param>
        public static void ExitCurrentView(string dmGuid, TimeSpan timeout)
        {
            IWlyUIView current = null;
            var        wait    = FlowLogicHelper.RepeatRun(() =>
            {
                foreach (var v in _viewList)
                {
                    if (v.IsCurrentView(dmGuid))
                    {
                        current = v;
                        return(true);
                    }
                }

                return(false);
            }, timeout);

            if (!wait)
            {
                throw new InvalidOperationException("无法确定当前所属界面");
            }

            wait = FlowLogicHelper.RepeatRun(() =>
            {
                if (current.IsCurrentView(dmGuid))
                {
                    current.Exit(dmGuid);
                    Thread.Sleep(400);
                    return(false);
                }

                return(true);
            }, timeout);
            if (!wait)
            {
                throw new InvalidOperationException("无法从当前界面退出");
            }
        }