Пример #1
0
        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;
            }
        }
Пример #2
0
        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;
            }
        }