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); }
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]); } } }