/// <summary> /// 设置剪切板内容 /// </summary> /// <param name="clipNode"></param> /// <param name="opType"></param> private void setClipboard(GxTreeNode clipNode, OPERATION_TYPE opType) { clearClipboard(); _clipboardTreeNode = clipNode; _lastOpType = opType; }
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 ctmSceneNode_Paste_Click(object sender, EventArgs e) { if (_clipboardTreeNode == null) { Logger.Debug("clipboard is null."); return; } this.Cursor = Cursors.WaitCursor; tvwSceneList.BeginUpdate(); GxTreeNode selectedNode = (GxTreeNode)tvwSceneList.SelectedNode; if (selectedNode != null) { if (_lastOpType == OPERATION_TYPE.OP_CUT) { moveNode(_clipboardTreeNode, selectedNode); } else if (_lastOpType == OPERATION_TYPE.OP_COPY) { } } tvwSceneList.EndUpdate(); clearClipboard(); this.Cursor = Cursors.Default; }
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; } } } } }
private void tvwSceneList_AfterSelect(object sender, TreeViewEventArgs e) { tvwSceneList.BeginUpdate(); #if DEBUG GxTreeNode node = (GxTreeNode)e.Node; GxNodeData data = (GxNodeData)node.Tag; Logger.Info("NodeInfo = [Path = " + data.getPath() + "]"); #endif tvwSceneList.EndUpdate(); }
//================================================================ // ● 外部调用方法 //================================================================ /// <summary> /// 关闭当前工程 /// </summary> public void closeCurrentProject() { //卸载工程 GxProject project = GlobalObj.getOpenningProject(); project.unload(); Logger.Debug("Unloaded openning project."); //清除节点数据 _projectNode = null; tvwSceneList.Nodes.Clear(); Logger.Debug("Cleared all project nodes."); }
/// <summary> /// 粘贴 /// </summary> /// <param name="opType"></param> private void moveNode(GxTreeNode srcNode, GxTreeNode dstNode) { GxTreeNode movedNode = GlobalObj.getOpenningProject().moveNode(srcNode, dstNode); if (movedNode != null) { tvwSceneList.SelectedNode = movedNode; } else { //MessageBox.Show("移动节点失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
/// <summary> /// 加载工程 /// </summary> /// <param name="filename"></param> /// <returns></returns> public bool loadProject(string filename) { Logger.Debug("Loading Project, Path = " + filename); if (File.Exists(filename) == false) { Logger.Error("Failed to load project : file not found."); MessageBox.Show(string.Format("{0}\n\n工程文件不存在或文件路径错误。", filename), "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); return(false); } //关闭当前已打开的工程 GxProject project = GlobalObj.getOpenningProject(); if (project.isLoaded() == true) { closeCurrentProject(); } //取得传入文件的全路径 //filename = Path.GetFullPath(filename); //加载工程文件 if (project.load(filename) == false) { Logger.Error("load project [" + filename + "] failed."); return(false); } Logger.Debug("Project is loaded."); //加载场景树 GxTreeNode projectNode = new GxTreeNode(); projectNode.setGxNodeType(GXNodeType.GX_NODE_TYPE_PROJECT); projectNode.Text = string.Format("{0} [已加载]", GxEnvManager.getEnv(GxEnvVarType.GXENV_PROJECT_NAME)); projectNode.Tag = project; projectNode.ImageIndex = 0; projectNode.SelectedImageIndex = 0; _projectNode = projectNode; string sceneDirPath = GxEnvManager.getEnv(GxEnvVarType.GXENV_PROJECT_SCENE_DIR); //traversalSceneList(sceneDirPath, projectNode); GxTreeNode projectTreeNode = project.getProjectNode(); tvwSceneList.Nodes.Add(projectTreeNode); tvwSceneList.ExpandAll(); return(true); }
/// <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); } }
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; } }
/// <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); }
/// <summary> /// 清空剪切板 /// </summary> private void clearClipboard() { restoreNodeOriginalIcon(); _clipboardTreeNode = null; _lastOpType = OPERATION_TYPE.OP_NONE; }