private bool addSceneDirectory() { GxTreeNode selectedNode = (GxTreeNode)tvwSceneList.SelectedNode; if (selectedNode == null) { return(false); } if (selectedNode == null) { Logger.Error("parentNode null."); return(false); } if (selectedNode.getGxNodeType() != GXNodeType.GX_NODE_TYPE_DIRECTORY && selectedNode.getGxNodeType() != GXNodeType.GX_NODE_TYPE_PROJECT) { Logger.Error("invalid node type."); return(false); } GxProject project = GlobalObj.getOpenningProject(); project.createNewDirectory(selectedNode); return(true); }
private void tvwSceneList_DragDrop(object sender, DragEventArgs e) { //根据鼠标坐标确定要移动到的目标节点 Point position = new Point(e.X, e.Y); position = tvwSceneList.PointToClient(position); //取得目标节点 GxTreeNode targetNode = (GxTreeNode)tvwSceneList.GetNodeAt(position); //获取被拖动的节点 GxTreeNode dragedNode = (GxTreeNode)e.Data.GetData(typeof(GxTreeNode).ToString()); if (dragedNode.getGxNodeType() == GXNodeType.GX_NODE_TYPE_PROJECT) { return; } if (targetNode == dragedNode) { return; } //移动节点 moveNode(dragedNode, targetNode); }
private void tvwSceneList_MouseDown(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Right) { //自动选中当前鼠标指针下的节点 TreeNode node = tvwSceneList.GetNodeAt(e.X, e.Y); if (node != null) { tvwSceneList.SelectedNode = node; //根据节点类型弹出不同的上下文菜单 GxTreeNode selectedNode = (GxTreeNode)node; if (selectedNode != null) { GXNodeType type = selectedNode.getGxNodeType(); if (type == GXNodeType.GX_NODE_TYPE_DIRECTORY) { tvwSceneList.ContextMenuStrip = ctmSceneDirectory; } else if (type == GXNodeType.GX_NODE_TYPE_SCENE) { tvwSceneList.ContextMenuStrip = ctmSceneNode; } else if (type == GXNodeType.GX_NODE_TYPE_PROJECT) { tvwSceneList.ContextMenuStrip = ctmProjectNode; } } } } }
/// <summary> /// 把当前处于剪切状态的透明图标还原为正常 /// </summary> private void restoreNodeOriginalIcon() { //如果当前有一个剪切操作的节点,则先把其透明图标还原 if (_clipboardTreeNode != null && _lastOpType == OPERATION_TYPE.OP_CUT) { if (_clipboardTreeNode.getTransImageIndex() != -1) { int index = Convert.ToInt32(getRawImageIndex(_clipboardTreeNode.getGxNodeType())); _clipboardTreeNode.ImageIndex = index; _clipboardTreeNode.SelectedImageIndex = index; } } }
/// <summary> /// 处理场景列表 /// </summary> /// <param name="sceneDirPath"></param> /// <param name="parentNode"></param> /*private void traversalSceneList(string sceneDirPath, GxTreeNode parentNode) * { * DirectoryInfo sceneDirInfo = new DirectoryInfo(sceneDirPath); * * try * { * foreach (DirectoryInfo dir in sceneDirInfo.GetDirectories()) * { * GxSceneDirectory gxSceneDir = new GxSceneDirectory(); * gxSceneDir.setPath(dir.FullName); * * GxTreeNode node = new GxTreeNode(); * node.setGxNodeType(GXNodeType.GX_NODE_TYPE_DIRECTORY); * node.Tag = gxSceneDir; * node.Text = dir.Name; * node.ImageIndex = 1; * node.SelectedImageIndex = 1; * parentNode.Nodes.Add(node); * * traversalSceneList(sceneDirInfo + "\\" + dir.ToString() + "\\", node); * } * * foreach (FileInfo file in sceneDirInfo.GetFiles("*.gxs")) //查找文件 * { * GxScene gxScene = new GxScene(file.FullName); * GxTreeNode node = new GxTreeNode(); * node.setGxNodeType(GXNodeType.GX_NODE_TYPE_SCENE); * node.Tag = gxScene; * node.Text = Path.GetFileNameWithoutExtension(file.Name); * node.ImageIndex = 2; * node.SelectedImageIndex = 2; * parentNode.Nodes.Add(node); * } * } * catch (Exception e) * { * Logger.Error(e.Message); * } * }*/ private void ctmSceneNode_Cut_Click(object sender, EventArgs e) { //设置剪切板内容 GxTreeNode selectedNode = (GxTreeNode)tvwSceneList.SelectedNode; if (selectedNode != null) { GXNodeType nodeType = selectedNode.getGxNodeType(); if (nodeType == GXNodeType.GX_NODE_TYPE_NONE || nodeType == GXNodeType.GX_NODE_TYPE_PROJECT) { Logger.Error("could not cut an invalid node."); return; } //当前节点是否已经是剪切板的节点 if (selectedNode == _clipboardTreeNode) { Logger.Error("The selected node is equals _cliboardTreeNode."); return; } //把当前处于剪切状态的透明图标还原为正常 //restoreNodeOriginalIcon(); //取得要剪切的节点的图标索引 int rawImageIndex = Convert.ToInt32(selectedNode.ImageIndex); //查找是否含有透明的图标 string tranImageKey = "TransIndex_" + Convert.ToString(rawImageIndex); int tranImageIndex = imgTreeIcons.Images.IndexOfKey(tranImageKey); //找不到rawImageIndex索引的透明版本图标则生成一个 if (tranImageIndex == -1) { //生成一个透明的图标 Bitmap bitmap = new Bitmap(imgTreeIcons.Images[rawImageIndex]); bitmap = transparentAdjust(bitmap, 180); imgTreeIcons.Images.Add(tranImageKey, bitmap); tranImageIndex = imgTreeIcons.Images.IndexOfKey(tranImageKey); } //更新图标 selectedNode.ImageIndex = tranImageIndex; selectedNode.SelectedImageIndex = tranImageIndex; selectedNode.setTransImageIndex(tranImageIndex); //设置剪切板内容 setClipboard(selectedNode, OPERATION_TYPE.OP_CUT); } }
/// <summary> /// 新建场景 /// </summary> /// <param name="parentNode"></param> /// <returns></returns> private bool addScene() { GxTreeNode selectedNode = (GxTreeNode)tvwSceneList.SelectedNode; if (selectedNode == null) { return(false); } if (selectedNode == null) { Logger.Error("parentNode null."); return(false); } if (selectedNode.getGxNodeType() != GXNodeType.GX_NODE_TYPE_DIRECTORY && selectedNode.getGxNodeType() != GXNodeType.GX_NODE_TYPE_PROJECT) { Logger.Error("invalid node type."); return(false); } //取得父节点路径 string parentPath = ""; GxNodeData nodeData = (GxNodeData)selectedNode.Tag; if (nodeData != null) { parentPath = nodeData.getPath(); } //取得路径 //frmNewSceneFile newSceneFile = new frmNewSceneFile(project.getSceneAutoIndent(), parentPath); //newSceneFile.ShowDialog(); return(true); }
private void ctmSceneNode_Copy_Click(object sender, EventArgs e) { GxTreeNode selectedNode = (GxTreeNode)tvwSceneList.SelectedNode; if (selectedNode != null) { GXNodeType nodeType = selectedNode.getGxNodeType(); if (nodeType == GXNodeType.GX_NODE_TYPE_NONE || nodeType == GXNodeType.GX_NODE_TYPE_PROJECT) { Logger.Error("could not copy an invalid node."); return; } //设置剪切板内容 setClipboard(selectedNode, OPERATION_TYPE.OP_COPY); } }
private void tvwSceneList_DragOver(object sender, DragEventArgs e) { Point position = new Point(0, 0); position.X = e.X; position.Y = e.Y; position = tvwSceneList.PointToClient(position); GxTreeNode dropNode = (GxTreeNode)tvwSceneList.GetNodeAt(position); if (dropNode == null) { return; } tvwSceneList.SelectedNode = dropNode; GXNodeType type = dropNode.getGxNodeType(); if (type == GXNodeType.GX_NODE_TYPE_DIRECTORY || type == GXNodeType.GX_NODE_TYPE_PROJECT || type == GXNodeType.GX_NODE_TYPE_SCENE) { e.Effect = DragDropEffects.Move; } }