private void Save() { CEditMode editMode = CEditModeProperty.GetEditNode(tbItem); if (null == editMode) { return; } if (EEditMode.em_Frozen == editMode.EditMode) { return; } switch (editMode.EditMode) { case EEditMode.em_None: tbLastError.Text = "No mode."; break; case EEditMode.em_AddCharacter: { CCBTreeViewGame currentGameNode = FindGameFromNode(editMode.Node); if ((null == currentGameNode) || (CCBItemType.itpGame != currentGameNode.ItemType)) { tbLastError.Text = "No game selected."; } else { CCBCharacter newCharacter = new CCBCharacter(tbItem.Text); CCBTreeViewCharacter characterNode = currentGameNode.Add(newCharacter); currentGameNode.Game.AddCharacter(newCharacter); characterNode.StartBulkEdit(); AddPropertiesToCharacterNode(characterNode); AddBagsToCharacterNode(characterNode); characterNode.EndBulkEdit(); characterNode.IsSelected = true; } break; } case EEditMode.em_AddGame: { CCBGame newGame = m_games.AddGame(tbItem.Text); CCBTreeViewGame gameNode = new CCBTreeViewGame(newGame); tvGames.Items.Add(gameNode); AddBagToNode(gameNode, newGame.GroupItems); AddOrMoveAdder(); gameNode.IsSelected = true; break; } case EEditMode.em_AddProperty: { CCBTreeViewCharacter characterNode = FindCharacterFromNode(editMode.Node); CCBTreeViewGame gameNode = FindGameFromNode(editMode.Node); if (null == characterNode) { tbLastError.Text = "Internal error[p]: Cannot find character node."; return; } CCBCharacterProperty newProperty = characterNode.Character.AddProperty(tbItem.Text, tbValue.Text); characterNode.Add(newProperty); if (null != gameNode) { CCBGame game = gameNode.Game; game.AddPropertyToTemplate(newProperty); } break; } case EEditMode.em_AddBag: { CCBTreeViewCharacter characterNode = FindCharacterFromNode(editMode.Node); if (null == characterNode) { tbLastError.Text = "Internal error[b]: Cannot find node."; return; } CCBBag newBag = characterNode.Character.AddBag(tbItem.Text); TreeViewItem newNode = characterNode.Add(newBag); newNode.IsSelected = true; break; } case EEditMode.em_AddBagItem: { CCBTreeViewBag bagNode = FindBagFromNode(editMode.Node); bool isCountable = true == cbCountable.IsChecked; CCBBagItem newItem; if (null == bagNode) { tbLastError.Text = "Internal error[b]: Cannot find bag node."; return; } if (true == cbCountable.IsChecked) { int count = 1; if (!Int32.TryParse(tbValue.Text, out count)) { tbLastError.Text = string.Format("Use number. Could not parse [{0}]", tbValue.Text); } newItem = bagNode.Bag.AddCountableItem(tbItem.Text, count); } else { newItem = bagNode.Bag.AddItem(tbItem.Text); } TreeViewItem newNode = bagNode.Add(newItem); newNode.IsSelected = true; break; } case EEditMode.em_ModifyCharacter: if (null == editMode.Node) { tbLastError.Text = "Internal error[mc]: No edit node."; return; } editMode.Node.Header = tbItem.Text; editMode.Node.Character.Name = tbItem.Text; break; case EEditMode.em_ModifyGame: { CCBTreeViewGame currentGameNode = FindGameFromNode(editMode.Node); currentGameNode.Game.Name = tbItem.Text; currentGameNode.Header = tbItem.Text; break; } case EEditMode.em_ModifyProperty: if (null == editMode.Node) { tbLastError.Text = "Internal error[mp]: No edit node."; return; } editMode.Node.Header = tbItem.Text; editMode.Node.Property.Name = tbItem.Text; editMode.Node.Property.Value = tbValue.Text; break; case EEditMode.em_ModifyBag: if (null == editMode.Node) { tbLastError.Text = "No bag node."; return; } editMode.Node.Header = tbItem.Text; editMode.Node.Bag.Name = tbItem.Text; break; case EEditMode.em_ModifyBagItem: if (null == editMode.Node) { tbLastError.Text = "No bag item node."; return; } editMode.Node.Header = tbItem.Text; editMode.Node.BagItem.Item = tbItem.Text; if (editMode.Node.BagItem.IsCountable) { int count; if (Int32.TryParse(tbValue.Text, out count)) { editMode.Node.BagItem.Count = count; } else { tbLastError.Text = string.Format("{0} not a number", tbValue.Text); } } break; default: tbLastError.Text = "Unknown mode."; break; } }
private void OnItemSelected(object sender, RoutedPropertyChangedEventArgs <object> e) { CCBTreeViewItem selItem = GetSelectedNode(); if (null == selItem) { btnSave.IsEnabled = false; } else { CEditMode em = new CEditMode(selItem); btnSave.IsEnabled = true; switch (selItem.ItemType) { case CCBItemType.itpCharacter: em.EditMode = ModifyCharacterView(selItem.Character); break; case CCBItemType.itpGame: em.EditMode = ModifyGameView(selItem.Game); break; case CCBItemType.itpBag: em.EditMode = ModifyBagView(selItem.Bag); break; case CCBItemType.itpBagItem: em.EditMode = ModifyBagItemView(selItem.BagItem); break; case CCBItemType.itpGameAdder: em.EditMode = AddGameView(); break; case CCBItemType.itpCharacterAdder: em.EditMode = AddCharacterView(); break; case CCBItemType.itpProperty: em.EditMode = ModifyPropertyView(selItem.Property); break; case CCBItemType.itpPropertyAdder: em.EditMode = AddPropertyView(); break; case CCBItemType.itpBagAdder: em.EditMode = AddBagView(); break; case CCBItemType.itpBagItemAdder: em.EditMode = AddBagItemView(); break; } CEditModeProperty.SetEditNode(tbItem, em); tbItem.SelectAll(); //Cannot set focus here, so post event. Dispatcher.Invoke(m_onAddingNewEntityModeD); } }