public void AddPers(IEnumerable <TPers> lsPers) { if (lsPers.Count() > 0) { List <TPers> newPers = new List <TPers>(); newPers.AddRange(PersList); List <TLevel> newLevel = new List <TLevel>(); newLevel.AddRange(LevelList); foreach (TPers p in lsPers) { newPers.Add(p); if ((from x in newLevel where x.Level == p.Level select x).Count() == 0) { TLevel lvl = new TLevel(this, p.Level); lvl.Color = ColorList[p.Level % ColorList.Length]; newLevel.Add(lvl); } } PersList = newPers.ToArray(); LevelList = newLevel.ToArray(); if (RoomList.Length == 0) { fRoomList.Add(new TRoom(this)); CurRoom = RoomList[0]; } if (CurLevel == null) { CurLevel = LevelList[0]; } IsChange = true; OnPropertyChanged(); } }
public TSetting() { PersList = new TPers[] { }; LevelList = new TLevel[] { }; ComAddRoom = new RelayCommand(DoComAddRoom); ComDelRoom = new RelayCommand(DoComDelRoom); ComSave = new RelayCommand(DoComSave); ComLoad = new RelayCommand(DoComLoad); ComNew = new RelayCommand(DoComNew); ComAddPers = new RelayCommand(DoComAddPers); ComRepMap = new RelayCommand(DoComRepMap); ComRepList = new RelayCommand(DoComRepList); ComRepRoom = new RelayCommand(DoComRepRoom); }
private void DoComNew() { if (IsChange && (MessageBox.Show("Текущая рассадка не сохранена. Продолжить?", "Вопрос", MessageBoxButton.YesNo) == MessageBoxResult.No)) { return; } PersList = new TPers[] { }; LevelList = new TLevel[] { }; fRoomList.Clear(); fRoomList.Add(new TRoom(this)); CurRoom = null; CurLevel = null; IsChange = false; OnPropertyChanged(); }
public void SetXml(XmlDocument xml) { XmlNode xRoot = xml.SelectSingleNode("/OlimpSet"); if (xRoot == null) { throw new Exception("Не найден тег «/OlimpSet»"); } XmlNode xVersion = xRoot.SelectSingleNode("Version"); if (xVersion == null) { throw new Exception("Не найден тег «/OlimpSet/Version»"); } if (Util.NormStr(xVersion.InnerText) != "1.0") { throw new Exception("Неизвестная версия"); } #region PersList XmlNode xPersList = xRoot.SelectSingleNode("PersList"); if (xPersList == null) { throw new Exception("Не найден тег «/OlimpSet/PersList»"); } List <TPers> lsPers = new List <TPers>(); foreach (XmlNode xPers in xPersList.SelectNodes("Pers")) { XmlNode xFio = xPers.SelectSingleNode("Fio"); if (xFio == null) { throw new Exception("Не найден тег «.../Pers/Fio»"); } string Fio = Util.NormStr(xFio.InnerText); XmlNode xLevel = xPers.SelectSingleNode("Level"); if (xLevel == null) { throw new Exception("Не найден тег «.../Pers/Level»"); } int Level = int.Parse(Util.NormStr(xLevel.InnerText)); XmlNode xSymbol = xPers.SelectSingleNode("Symbol"); if (xSymbol == null) { throw new Exception("Не найден тег «.../Pers/Symbol»"); } string Symbol = Util.NormStr(xSymbol.InnerText); XmlNode xRem = xPers.SelectSingleNode("Rem"); if (xRem == null) { throw new Exception("Не найден тег «.../Pers/Rem»"); } string Rem = Util.NormStr(xRem.InnerText); lsPers.Add(new TPers(this, Fio, Level, Symbol, Rem)); } PersList = lsPers.ToArray(); #endregion #region ColorList List <TLevel> lsLevel = new List <TLevel>(); XmlNode xColorList = xRoot.SelectSingleNode("ColorList"); if (xColorList == null) { throw new Exception("Не найден тег «/OlimpSet/ColorList»"); } foreach (XmlNode xColor in xColorList.SelectNodes("Color")) { XmlNode xLevel = xColor.SelectSingleNode("Level"); if (xLevel == null) { throw new Exception("Не найден тег «.../Color/Level»"); } int Level = int.Parse(Util.NormStr(xLevel.InnerText)); XmlNode xRGB = xColor.SelectSingleNode("RGB"); if (xRGB == null) { throw new Exception("Не найден тег «.../Pers/RGB»"); } Color Color = (Color)ColorConverter.ConvertFromString(Util.NormStr(xRGB.InnerText)); TLevel lvl = new TLevel(this, Level); lvl.Color = Color; lsLevel.Add(lvl); } LevelList = (from x in lsLevel orderby x.Level select x).ToArray(); #endregion #region RoomList fRoomList.Clear(); XmlNode xRoomList = xRoot.SelectSingleNode("RoomList"); if (RoomList == null) { throw new Exception("Не найден тег «/OlimpSet/RoomList»"); } foreach (XmlNode xRoom in xRoomList.SelectNodes("Room")) { XmlNode xNumRoom = xRoom.SelectSingleNode("NumRoom"); if (xNumRoom == null) { throw new Exception("Не найден тег «.../Room/NumRoom»"); } string NumRoom = Util.NormStr(xNumRoom.InnerText); XmlNode xBoss = xRoom.SelectSingleNode("Boss"); if (xBoss == null) { throw new Exception("Не найден тег «.../Room/Boss»"); } string Boss = Util.NormStr(xBoss.InnerText); TRoom room = new TRoom(this); fRoomList.Add(room); room.NumRoom = NumRoom; room.Boss = Boss; #region TableList XmlNode xTableList = xRoom.SelectSingleNode("TableList"); if (xTableList == null) { throw new Exception("Не найден тег «.../Room/TableList»"); } foreach (XmlNode xTable in xTableList.SelectNodes("Table")) { XmlNode xRow = xTable.SelectSingleNode("Row"); if (xRow == null) { throw new Exception("Не найден тег «.../Table/Row»"); } int Row = int.Parse(Util.NormStr(xRow.InnerText)); XmlNode xCol = xTable.SelectSingleNode("Col"); if (xCol == null) { throw new Exception("Не найден тег «.../Table/Col»"); } int Col = int.Parse(Util.NormStr(xCol.InnerText)); TTable tb = room.TableList[Row - 1, Col - 1]; XmlNode xLeft = xTable.SelectSingleNode("Left"); if (xLeft == null) { throw new Exception("Не найден тег «.../Table/Left»"); } int Left = int.Parse(Util.NormStr(xLeft.InnerText)); XmlNode xRight = xTable.SelectSingleNode("Right"); if (xRight == null) { throw new Exception("Не найден тег «.../Table/Right»"); } int Right = int.Parse(Util.NormStr(xRight.InnerText)); if (Left != 0) { tb.Left = PersList[Left - 1]; } if (Right != 0) { tb.Right = PersList[Right - 1]; } } #endregion } #endregion CurRoom = RoomList[0]; CurLevel = LevelList[0]; OnPropertyChanged(); }