private void KerbalsList_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Store currently selected attribute, in case we just unselect + select the current item to refresh if (KerbalsList.SelectedItem == null) { // We're unselcting, this is the old data we want to restore in future call of this event GuiTreeAttrib attrib = (KerbalsDetails.SelectedItem as GuiTreeAttrib); if (attrib == null) { _oldSelectedAttrib = null; _alternativeSelectedAttrib = null; } else { _oldSelectedAttrib = attrib.DataAttrib; int i = KerbalsDetails.SelectedIndex; if (i < KerbalsDetails.Items.Count - 1) { _alternativeSelectedAttrib = (KerbalsDetails.Items[i + 1] as GuiTreeAttrib).DataAttrib; } else if (i > 0) { _alternativeSelectedAttrib = (KerbalsDetails.Items[i - 1] as GuiTreeAttrib).DataAttrib; } else { _alternativeSelectedAttrib = null; } } } KerbalsDetails.Items.Clear(); if (KerbalsList.SelectedItem != null) { GuiKerbalsNode Node = (GuiKerbalsNode)KerbalsList.SelectedItem; KerbalsDetails.ContextMenu = Node.ContextMenu; foreach (KmlAttrib attrib in Node.DataKerbal.Attribs) { KerbalsDetails.Items.Add(new GuiTreeAttrib(attrib)); } _oldSelectedKerbal = Node.DataKerbal; // Restore attrib selection if (Node.DataKerbal == _oldSelectedKerbal && _oldSelectedAttrib != null) { if (!Select(_oldSelectedAttrib)) { Select(_alternativeSelectedAttrib); } if (KerbalsDetails.SelectedItem != null) { (KerbalsDetails.SelectedItem as ListViewItem).Focus(); } } } else { KerbalsDetails.ContextMenu = null; } }
private void Tree_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e) { // Store currently selected attribute, in case we just unselect + select the current item to refresh if (Tree.SelectedItem == null) { // We're unselcting, this is the old data we want to restore in future call of this event GuiTreeAttrib attrib = (TreeDetails.SelectedItem as GuiTreeAttrib); if (attrib == null) { _oldSelectedAttrib = null; _alternativeSelectedAttrib = null; } else { _oldSelectedAttrib = attrib.DataAttrib; int i = TreeDetails.SelectedIndex; if (i < TreeDetails.Items.Count - 1) { _alternativeSelectedAttrib = (TreeDetails.Items[i + 1] as GuiTreeAttrib).DataAttrib; } else if (i > 0) { _alternativeSelectedAttrib = (TreeDetails.Items[i - 1] as GuiTreeAttrib).DataAttrib; } else { _alternativeSelectedAttrib = null; } } } TreeDetails.Items.Clear(); if (Tree.SelectedItem != null) { GuiTreeNode Node = (GuiTreeNode)Tree.SelectedItem; TreeDetails.ContextMenu = Node.ContextMenu; foreach (KmlAttrib attrib in Node.DataNode.Attribs) { TreeDetails.Items.Add(new GuiTreeAttrib(attrib)); } _oldSelectedNode = Node.DataNode; // Restore attrib selection if (Node.DataNode == _oldSelectedNode && _oldSelectedAttrib != null) { if (!Select(_oldSelectedAttrib)) { Select(_alternativeSelectedAttrib); } if (TreeDetails.SelectedItem != null) { (TreeDetails.SelectedItem as ListViewItem).Focus(); } } } else { TreeDetails.ContextMenu = null; } }