private void DeleteInfoCard()
 {
     // If a card is selected, display a message box asking if the user wants to delete this card.
     // If they select yes, delete the card from the collection, save the collection and repopulate
     // the tree
     if (treeView.SelectedNode != null)
     {
         int cardIndex = (int)treeView.SelectedNode.Tag;
         if (cardIndex >= 0)
         {
             IInfoCard card = _infoCards[cardIndex];
             if (MessageBox.Show("Are you sure you want to delete " + card.Name + "?", "Confirm Delete", MessageBoxButtons.YesNo) == DialogResult.Yes)
             {
                 if (_lastDisplayedCard == card)
                 {
                     // If the card is currently displayed, make sure we close it
                     _lastDisplayedCard.CloseDisplay();
                     _lastDisplayedCard = null;
                 }
                 _infoCards.RemoveAt(cardIndex);
                 _infoCards.Save(InfoCardsFile);
                 PopulateTreeView(null);
             }
         }
     }
 }
        private void CreateNewCard(string category)
        {
            IInfoCard card = _infoCardFactories[category].CreateNewInfoCard(category);

            if (card.EditData())
            {
                _infoCards.Add(card);
                _infoCards.Save(InfoCardsFile);
                PopulateTreeView(card.Name);
            }
        }
 private void DisplayCardData()
 {
     if (treeView.SelectedNode != null)
     {
         int cardIndex = (int)treeView.SelectedNode.Tag;
         if (cardIndex >= 0)
         {
             // If a card is currently displayed, close it
             if (_lastDisplayedCard != null)
             {
                 _lastDisplayedCard.CloseDisplay();
                 _lastDisplayedCard = null;
             }
             IInfoCard card = _infoCards[cardIndex];
             card.DisplayData(panelInfoCard);
             _lastDisplayedCard = card;
         }
     }
 }
        private void PopulateTreeView(string selectedKey)
        {
            Dictionary <string, TreeNode> mainNodes = new Dictionary <string, TreeNode>();
            TreeNode selectedNode = null;

            treeView.Nodes.Clear();
            TreeNode rootNode = new TreeNode("Information Cards");

            rootNode.Tag = NodeRoot;
            treeView.Nodes.Add(rootNode);
            for (int i = 0; i < _infoCards.Count; i++)
            {
                IInfoCard infoCard     = (IInfoCard)_infoCards[i];
                TreeNode  categoryNode = null;
                if (!mainNodes.ContainsKey(infoCard.Category))
                {
                    categoryNode     = new TreeNode(infoCard.Category);
                    categoryNode.Tag = NodeCategory;
                    rootNode.Nodes.Add(categoryNode);
                    mainNodes.Add(infoCard.Category, categoryNode);
                }
                else
                {
                    categoryNode = mainNodes[infoCard.Category];
                }
                TreeNode newNode = new TreeNode(infoCard.Name);
                if (infoCard.Name == selectedKey)
                {
                    selectedNode = newNode;
                }
                newNode.Tag = i;
                categoryNode.Nodes.Add(newNode);
            }
            treeView.ExpandAll();
            if (selectedNode != null)
            {
                treeView.SelectedNode = selectedNode;
            }
        }
 private void EditCardData()
 {
     if (treeView.SelectedNode != null)
     {
         int cardIndex = (int)treeView.SelectedNode.Tag;
         if (cardIndex >= 0)
         {
             if (_lastDisplayedCard != null)
             {
                 // Close any card currently displayed
                 _lastDisplayedCard.CloseDisplay();
                 _lastDisplayedCard = null;
             }
             IInfoCard card        = _infoCards[cardIndex];
             bool      cardChanged = card.EditData();
             if (cardChanged)
             {
                 _infoCards[cardIndex] = card;
                 _infoCards.Save(InfoCardsFile);
                 PopulateTreeView(card.Name);
             }
         }
     }
 }