/// <summary>
        ///		Añade un nodo hijo
        /// </summary>
        private TreeExplorerNodeViewModel AddNode(string text, object tag, bool isBold, bool lazyLoad, MvvmColor foreground = null)
        {
            TreeExplorerNodeViewModel node = new TreeExplorerNodeViewModel(Tree, this, text, tag, lazyLoad, isBold, foreground);

            // Añade el nodo
            Children.Add(node);
            // Devuelve el nodo enviado
            return(node);
        }
        /// <summary>
        ///		Copia un elemento en el buffer
        /// </summary>
        private void Copy(TreeExplorerNodeViewModel selectedNode, bool cut)
        {
            Controllers.GlobalEnums.NodeTypes nodeType = selectedNode?.NodeType ?? Controllers.GlobalEnums.NodeTypes.TrackManager;

            if (nodeType == Controllers.GlobalEnums.NodeTypes.Track || nodeType == Controllers.GlobalEnums.NodeTypes.Category ||
                nodeType == Controllers.GlobalEnums.NodeTypes.Entry)
            {
                BufferCopy = selectedNode.Tag as BaseModel;
                MustCut    = cut;
            }
        }
        /// <summary>
        ///		Pega un elemento del buffer
        /// </summary>
        private void Paste(TreeExplorerNodeViewModel nodeToPaste)
        {
            // Pega los datos sobre el nodo
            if (nodeToPaste != null && BufferCopy != null)
            {
                bool pasted = false;

                // Pega el nodo
                if (nodeToPaste.NodeType == Controllers.GlobalEnums.NodeTypes.TrackManager && BufferCopy is TrackModel track)
                {
                    // Pega los datos
                    PasteTrackToTrackManager(track, (TrackManagerModel)nodeToPaste.Tag);
                    // Indica que se ha pegado
                    pasted = true;
                }
                else if (BufferCopy is EntryModel entry)
                {
                    if (nodeToPaste.NodeType == Controllers.GlobalEnums.NodeTypes.Category)
                    {
                        // Pega los datos
                        PasteEntryToCategory(entry, (CategoryModel)nodeToPaste.Tag);
                        // Indica que se ha pegado
                        pasted = true;
                    }
                }
                else if (nodeToPaste.NodeType == Controllers.GlobalEnums.NodeTypes.Track && BufferCopy is CategoryModel category)
                {
                    // Pega los datos
                    PasteCategoryToTrack(category, (TrackModel)nodeToPaste.Tag);
                    // Indica que se ha pegado
                    pasted = true;
                }
                // Graba y actualiza
                if (pasted)
                {
                    UpdateTracks();
                }
            }
            // Vacía el buffer de copia
            BufferCopy = null;
        }
        /// <summary>
        ///		Muestra la ventana de detalles
        /// </summary>
        private void ShowDetails(TreeExplorerNodeViewModel selectedNode)
        {
            switch (selectedNode?.Tag)
            {
            case TrackManagerModel node:
                OpenFormTrackManager(node, false);
                break;

            case TrackModel node:
                OpenFormTrack(node, false);
                break;

            case CategoryModel node:
                OpenFormCategory(node, false);
                break;

            case EntryModel node:
                OpenFormEntry(node, false);
                break;
            }
        }