Exemple #1
0
 void TryAddWinds(WindowStackInfo info)
 {
     if (Winds == null || info == null)
     {
         return;
     }
     if (Winds.Count > 0 && Winds[Winds.Count - 1].wndName == info.wndName && UIHelper.IsUniqueWin(info.wndName))
     {
         Winds.RemoveAt(Winds.Count - 1);
     }
     Winds.Add(info);
 }
Exemple #2
0
        public void Push(string name, params object[] param)
        {
            //Winds.Clear();
            bool is_ban_back_last_panel = UIHelper.IsBanBackLastPanelByWindowName(name);

            if (is_ban_back_last_panel)
            {
                Clear();
            }
            List <UIBaseWindow> FinalWins = new List <UIBaseWindow>();

            UIType uitype     = UIHelper.GetUITypeByWindowName(name);
            var    activeWins = UIManager.Instance.GetNeedCloseSystemWindowsByType(uitype);

            // 打开独立存在的系统界面的时候其他系统界面不关闭
            if (UIHelper.IsIndependentSysWindow(name) == false)
            {
                // 打开其他界面的时候独立存在的系统界面不关闭
                foreach (UIBaseWindow activeWin in activeWins)
                {
                    if (UIHelper.IsIndependentSysWindow(activeWin.mWndName) == false)
                    {
                        FinalWins.Add(activeWin);
                    }
                }
            }

            //对当前显示的面板归类(处理是主面板等因素)
            var hasSubWinList = new List <UIBaseWindow>();

            for (int i = 0; i < activeWins.Count; i++)
            {
                var baseWin = activeWins[i];
                if (baseWin.SubWindow.Count != 0)
                {
                    for (int j = 0; j < baseWin.SubWindow.Count; j++)
                    {
                        string subWind = baseWin.SubWindow[j];
                        var subBaseWin = FinalWins.Find(delegate(UIBaseWindow wind) { return(wind.mWndName == subWind); });
                        if (subBaseWin != null)
                        {
                            FinalWins.Remove(subBaseWin);
                        }
                    }
                }
            }

            for (int i = 0; i < FinalWins.Count; i++)
            {
                string finalName = FinalWins[i].mWndName;

                bool supportBack = UIHelper.GetSupportBack(finalName);

                if (supportBack)
                {
                    bool can_add = false;
                    if (Winds.Count > 0 && Winds[Winds.Count - 1].wndName == finalName && UIHelper.IsUniqueWin(finalName))
                    {
                        can_add = true;
                    }
                    if (this.ContainWindow(finalName) == false)
                    {
                        can_add = true;
                    }
                    if (can_add)
                    {
                        var info = new WindowStackInfo();
                        info.wndName     = finalName;
                        info.param       = FinalWins[i].ShowParam;
                        info.supportBack = supportBack;

                        foreach (var subInfo in FinalWins[i].BackupOpenSubWindows)
                        {
                            info.BackupOpenSubWindow.Add(subInfo);
                        }

                        //Winds.Add(info);
                        TryAddWinds(info);
                    }
                }

                UIManager.Instance.CloseWindow(finalName);

                //if (!Winds.Contains(finalName))
                //    Winds.Add(finalName);
            }

            if (is_ban_back_last_panel)
            {
                Clear();
            }
            var initOpenSubWin = UIHelper.GetWindowInitOpenSubWin(name);

            bool canback = UIHelper.GetSupportBack(name);

            if (canback)
            {
                var CurInfo = new WindowStackInfo();
                CurInfo.wndName     = name;
                CurInfo.param       = param;
                CurInfo.supportBack = canback;

                foreach (var subInfo in initOpenSubWin)
                {
                    //CurInfo.BackupOpenSubWindow.Add(subInfo);
                }

                //Winds.Add(CurInfo);
                TryAddWinds(CurInfo);

                //Winds.Add(name);
                if (Winds.Count > StackMaxCount)
                {
                    int count = Winds.Count - StackMaxCount;
                    for (int i = 0; i < count; i++)
                    {
                        Winds.RemoveAt(0);
                    }
                }
            }

            UIManager.Instance.ShowWindow(name, param);
            if (initOpenSubWin.Count > 0)
            {
                for (int i = 0; i < initOpenSubWin.Count; i++)
                {
                    UIManager.Instance.ShowWindow(initOpenSubWin[i]);
                }
            }
        }