private void ImportFoldersInDirectory(TreeNode node, XmlNode directoryNode, string[] folders) { if (directoryNode.Name == "Directory") { bool mustExpand = (node.Nodes.Count == 0); CurrentTreeView.SuspendLayout(); WixFiles.UndoManager.BeginNewCommandRange(); try { DirectoryImport dirImport = new DirectoryImport(WixFiles, folders, directoryNode); dirImport.Import(node); } catch (WixEditException ex) { MessageBox.Show(String.Format("Failed to complete import: {0}\r\n\r\nThe import is aborted and could be partially completed.", ex.Message), "Import Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { ErrorReportHandler r = new ErrorReportHandler(ex, this.TopLevelControl, "An exception occured during the import! Please press OK to report this error to the WixEdit website, so this error can be fixed."); r.ReportInSeparateThread(); } CurrentTreeView.ResumeLayout(); } }
/// <summary> /// 当用户在TreeView上右击鼠标时,设置当前选中的节点 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void treeView1_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { IInputElement currentElement = CurrentTreeView.InputHitTest(e.GetPosition(CurrentTreeView)); TreeViewIconsItem node = GetNodeUnderMouseCursor(currentElement as DependencyObject); if (node != null) { node.IsSelected = true; } else { e.Handled = true; } }
/// <summary> /// 用于代表当前节点移动的类型 /// </summary> // private NodeMoveType curNodeMove=NodeMoveType.NodeNotMove ; public void OnNodeMove(NodeMoveType moveType) { // curNodeMove = moveType; if (CurrentTreeView.IsInEditMode) { CurrentTreeView.SelectedItem.EndEdit(); } TreeViewIconsItem selectedNode = CurrentTreeView.SelectedItem; //还原默认节点图标 ChangeNodeIcon(CurrentTreeView.SelectedItem, CurrentTreeView.SelectedItem.NodeData.DataItem.NormalIcon); switch (moveType) { case NodeMoveType.NodeMoveUp: CurrentTreeView.MoveUp(selectedNode); break; case NodeMoveType.NodeMoveDown: CurrentTreeView.MoveDown(selectedNode); break; case NodeMoveType.NodeMoveLeft: CurrentTreeView.MoveLeft(selectedNode); break; case NodeMoveType.NodeMoveRight: CurrentTreeView.MoveRight(selectedNode); break; case NodeMoveType.NodePaste: //todo:paste! break; default: break; } SaveTreeToDB(); //更新节点图标 ChangeNodeIcon(CurrentTreeView.SelectedItem, CurrentTreeView.SelectedItem.NodeData.DataItem.SelectedIcon); //SaveTreeToFile(); }
private void treeView_DragDrop(object sender, DragEventArgs e) { TreeNode aNode = CurrentTreeView.GetNodeAt(CurrentTreeView.PointToClient(new Point(e.X, e.Y))); CurrentTreeView.SelectedNode = aNode; XmlNode aNodeElement = aNode.Tag as XmlNode; if (oldNode != null) { oldNode.BackColor = aNode.BackColor; oldNode.ForeColor = aNode.ForeColor; } string[] filesOrFolders = (string[])e.Data.GetData(DataFormats.FileDrop); if (aNodeElement.Name == "Component") { ImportFilesInComponent(aNode, aNodeElement, filesOrFolders); } else if (aNodeElement.Name == "Directory") { ImportFoldersInDirectory(aNode, aNodeElement, filesOrFolders); } }
private void ImportFilesInComponent(TreeNode node, XmlNode componentNode, string[] files) { if (componentNode.Name == "Component") { bool mustExpand = (node.Nodes.Count == 0); CurrentTreeView.SuspendLayout(); bool foundReg = false; foreach (string file in files) { if (Path.GetExtension(file).ToLower() == ".reg") { foundReg = true; break; } } bool importRegistryFiles = false; if (foundReg == true) { DialogResult result = MessageBox.Show(this, "Import Registry (*.reg) files to Registry elements?", "Import?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (result == DialogResult.Cancel) { return; } else if (result == DialogResult.Yes) { importRegistryFiles = true; } } WixFiles.UndoManager.BeginNewCommandRange(); StringBuilder errorMessageBuilder = new StringBuilder(); foreach (string file in files) { FileInfo fileInfo = new FileInfo(file); try { if (fileInfo.Extension.ToLower() == ".reg" && importRegistryFiles) { RegistryImport regImport = new RegistryImport(WixFiles, fileInfo, componentNode); regImport.Import(node); } else { FileImport fileImport = new FileImport(WixFiles, fileInfo, componentNode); fileImport.Import(node); } } catch (WixEditException ex) { errorMessageBuilder.AppendFormat("{0} ({1})\r\n", fileInfo.Name, ex.Message); } catch (Exception ex) { string message = String.Format("An exception occured during the import of \"{0}\"! Please press OK to report this error to the WixEdit website, so this error can be fixed.", fileInfo.Name); ExceptionForm form = new ExceptionForm(message, ex); if (form.ShowDialog() == DialogResult.OK) { ErrorReporter reporter = new ErrorReporter(); reporter.Report(ex); } } } if (errorMessageBuilder.Length > 0) { MessageBox.Show(this, "Import failed for the following files:\r\n\r\n" + errorMessageBuilder.ToString(), "Import failed", MessageBoxButtons.OK, MessageBoxIcon.Error); } ShowNode(componentNode); if (mustExpand) { node.Expand(); } CurrentTreeView.ResumeLayout(); } }
private void treeView_DragOver(object sender, DragEventArgs e) { TreeNode aNode = CurrentTreeView.GetNodeAt(CurrentTreeView.PointToClient(new Point(e.X, e.Y))); if (oldNode == aNode) { return; } if (e.Data.GetDataPresent(DataFormats.FileDrop)) { XmlNode aNodeElement = aNode.Tag as XmlNode; if (aNodeElement.Name == "Component") { bool filesOnly = true; string[] filesAndFolders = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string fileOrFolder in filesAndFolders) { if (File.Exists(fileOrFolder) == false) { filesOnly = false; break; } } if (filesOnly) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } else if (aNodeElement.Name == "Directory") { bool dirsOnly = true; string[] filesAndFolders = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string fileOrFolder in filesAndFolders) { if (Directory.Exists(fileOrFolder) == false) { dirsOnly = false; break; } } if (dirsOnly) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } else { e.Effect = DragDropEffects.None; } } if (oldNode != null) { oldNode.BackColor = aNode.BackColor; oldNode.ForeColor = aNode.ForeColor; } aNode.BackColor = Color.DarkBlue; aNode.ForeColor = Color.White; oldNode = aNode; }
/// <summary> /// 将树结构保存到数据库中 /// </summary> public void SaveTreeToDB() { String treeXml = CurrentTreeView.saveToXmlString(); (new NodeTreeRepository(DALConfig.getEFConnectionString(dbInfoObject.DatabaseFilePath))).SaveTree(treeXml, CurrentTreeView.TreeNodeType); }