public void DeleteButton() { if (null != SelectedActionsTreeView) { if (null != SelectedActionsTreeView.Parent) { (SelectedActionsTreeView.Parent as ActionGroup).RemoveChild(SelectedActionsTreeView); } else { ActionsTreeView.Remove(SelectedActionsTreeView); } NotifyOfPropertyChange(() => ActionsTreeView); } }
public void MoveAction(string position) { // TODO: Fix movements across groups. Movements are a touch buggy still bool isChild = (null != SelectedActionsTreeView.Parent); int parentIndex; int actionIndex; int parentCount; int actionCount = ActionsTreeView.Count; IElement selectedAction = SelectedActionsTreeView; switch (position) { case "top": if (isChild) { (SelectedActionsTreeView.Parent as ActionGroup).RemoveChild(selectedAction); ActionsTreeView.Insert(0, selectedAction); } else { actionIndex = ActionsTreeView.IndexOf(selectedAction); ActionsTreeView.Move(actionIndex, 0); } break; case "bottom": if (isChild) { (SelectedActionsTreeView.Parent as ActionGroup).RemoveChild(selectedAction); ActionsTreeView.Add(selectedAction); } else { actionIndex = ActionsTreeView.IndexOf(selectedAction); ActionsTreeView.Move(actionIndex, ActionsTreeView.Count - 1); } break; case "up": if (isChild) { actionIndex = (SelectedActionsTreeView.Parent as ActionGroup).Children.IndexOf(selectedAction); if (actionIndex == 0) { // move to the grandparent if (SelectedActionsTreeView.Parent.Parent is ActionGroup) { parentIndex = (selectedAction.Parent.Parent as ActionGroup).Children.IndexOf(selectedAction.Parent); ActionGroup newParent = selectedAction.Parent.Parent as ActionGroup; newParent.Children.Insert(parentIndex, selectedAction); (selectedAction.Parent as ActionGroup).Children.Remove(selectedAction); selectedAction.Parent = newParent; } else { parentIndex = ActionsTreeView.IndexOf(selectedAction.Parent); ActionsTreeView.Insert(parentIndex, selectedAction); (selectedAction.Parent as ActionGroup).Children.Remove(selectedAction); selectedAction.Parent = null; } } else if ((SelectedActionsTreeView.Parent as ActionGroup).Children[actionIndex - 1] is ActionGroup) { // next child up is an action group... stuff it in there ActionGroup newParent = (selectedAction.Parent as ActionGroup).Children[actionIndex - 1] as ActionGroup; newParent.Children.Add(selectedAction); (selectedAction.Parent as ActionGroup).Children.Remove(selectedAction); selectedAction.Parent = newParent; } else { // we can just move the action up (SelectedActionsTreeView.Parent as ActionGroup).Children.Move(actionIndex, actionIndex - 1); } } else { actionIndex = ActionsTreeView.IndexOf(selectedAction); if (actionIndex == 0) { // we're as high as we can go... } else if (ActionsTreeView[actionIndex - 1] is ActionGroup) { // if the next child up is an action group ActionGroup newParent = (ActionsTreeView[actionIndex - 1] as ActionGroup); newParent.Children.Add(selectedAction); ActionsTreeView.Remove(selectedAction); selectedAction.Parent = newParent; } else { // we can just move the action up ActionsTreeView.Move(actionIndex, actionIndex - 1); } } break; case "down": if (isChild) { actionIndex = (SelectedActionsTreeView.Parent as ActionGroup).Children.IndexOf(selectedAction); parentCount = (SelectedActionsTreeView.Parent as ActionGroup).Children.Count; if (actionIndex == parentCount - 1) { // move to the grandparent if (SelectedActionsTreeView.Parent.Parent is ActionGroup) { parentIndex = (selectedAction.Parent.Parent as ActionGroup).Children.IndexOf(selectedAction.Parent); ActionGroup newParent = selectedAction.Parent.Parent as ActionGroup; newParent.Children.Insert(parentIndex + 1, selectedAction); (selectedAction.Parent as ActionGroup).Children.Remove(selectedAction); selectedAction.Parent = newParent; } else { parentIndex = ActionsTreeView.IndexOf(selectedAction.Parent); ActionsTreeView.Insert(parentIndex + 1, selectedAction); (selectedAction.Parent as ActionGroup).Children.Remove(selectedAction); selectedAction.Parent = null; } } else if ((SelectedActionsTreeView.Parent as ActionGroup).Children[actionIndex + 1] is ActionGroup) { // next child down is an action group... stuff it in there ActionGroup newParent = (selectedAction.Parent as ActionGroup).Children[actionIndex + 1] as ActionGroup; newParent.Children.Insert(0, selectedAction); (selectedAction.Parent as ActionGroup).Children.Remove(selectedAction); selectedAction.Parent = newParent; } else { // we can just move the action down (SelectedActionsTreeView.Parent as ActionGroup).Children.Move(actionIndex, actionIndex + 1); } } else { actionIndex = ActionsTreeView.IndexOf(selectedAction); parentCount = ActionsTreeView.Count; if (actionIndex == parentCount - 1) { // we're as low as we can go... } else if (ActionsTreeView[actionIndex + 1] is ActionGroup) { // if the next child up is an action group ActionGroup newParent = (ActionsTreeView[actionIndex + 1] as ActionGroup); newParent.Children.Insert(0, selectedAction); ActionsTreeView.Remove(selectedAction); selectedAction.Parent = newParent; } else { // we can just move the action up ActionsTreeView.Move(actionIndex, actionIndex + 1); } } break; } foreach (IElement e in GetAllActions()) { e.TVSelected = false; } selectedAction.TVSelected = true; SelectedActionsTreeView = selectedAction; foreach (IElement c in GetParentElements(SelectedActionsTreeView)) { c.TVIsExpanded = true; } }