/// <summary> /// Agrega una lista de archivos de un usuario de la red a la ventana /// </summary> /// <param name="netUser">El usuario dueño de la lista de archivo</param> /// <param name="fileList">La lista de archivos</param> public void addFileList(NetUser netUser, FileInformationList fileList) { if (treeView.InvokeRequired) { NetUserFilesCallback d = new NetUserFilesCallback(addFileList); this.Invoke(d, new object[] { netUser, fileList }); } else { removeFileList(netUser); FileInformation[] fileListArray = fileList.toArray(); lock (thisLock) { foreach (FileInformation file in fileListArray) { TreeNode fileNode = new TreeNode(file.Name + " (" + (file.Size / 1024) + " KB) " + " [" + netUser.Name + "]"); fileNode.ImageIndex = 0; fileNode.SelectedImageIndex = 0; NetUserFile netUserFile = new NetUserFile(); netUserFile.NetUser = netUser; netUserFile.FileInformation = file; fileNode.Tag = netUserFile; assignMenuStrip(ref fileNode, netUserFile); treeView.Nodes.Add(fileNode); } } } }
/// <summary> /// Se gatilla cuando el usuario hace clic sobre un menu con opción de descarga /// </summary> /// <param name="sender">El sender</param> /// <param name="e">Los argumentos de evento</param> private void toolStripEvent(object sender, EventArgs e) { ToolStripMenuItem toolStripMenuItem = (ToolStripMenuItem)sender; NetUserFile netUserFile = (NetUserFile)toolStripMenuItem.Tag; if (netUserFile != null) { FileTransferProtocol.sendFileRequest(netUserFile.NetUser, netUserFile.FileInformation); } }
/// <summary> /// Asigna un menú con opción de descarga a un nodos del arbol de archivos /// </summary> /// <param name="treeNode">El nodo del árbol de archivos</param> /// <param name="netUserFile">El archivo asociado a un usuario de red</param> private void assignMenuStrip(ref TreeNode treeNode, NetUserFile netUserFile) { ContextMenuStrip contextMenucontextMenu = new ContextMenuStrip(); ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem(); toolStripMenuItem.Text = "Download"; toolStripMenuItem.Click += toolStripEvent; toolStripMenuItem.Tag = netUserFile; contextMenucontextMenu.Items.Add(toolStripMenuItem); treeNode.ContextMenuStrip = contextMenucontextMenu; }
/// <summary> /// Acción para el evento de clic sobre el menu de cada nodo /// </summary> /// <param name="sender">El sender</param> /// <param name="e">Los parametros del evento</param> private void menuItem_Click(object sender, EventArgs e) { TreeNode node = treeView.SelectedNode; if (node != null) { try { NetUserFile netUserFile = (NetUserFile)node.Tag; FileTransferProtocol.sendFileRequest(netUserFile.NetUser, netUserFile.FileInformation); } catch (ThreadAbortException ex) { throw ex; } catch (Exception) { } } }
/// <summary> /// Elimina la lista de archivos de un usuario de la red de la ventana /// </summary> /// <param name="netUser">El usuario de la red</param> public void removeFileList(NetUser netUser) { if (treeView.InvokeRequired) { NetUserCallback d = new NetUserCallback(removeFileList); this.Invoke(d, new object[] { netUser }); } else { lock (thisLock) { for (int i = treeView.Nodes.Count - 1; i >= 0; i--) { TreeNode node = treeView.Nodes[i]; NetUserFile netUserFile = (NetUserFile)node.Tag; if (netUserFile.NetUser.Name.Equals(netUser.Name)) { treeView.Nodes.RemoveAt(i); } } } } }