Esempio n. 1
0
        /// <summary>
        /// 设置剪切板内容
        /// </summary>
        /// <param name="clipNode"></param>
        /// <param name="opType"></param>
        private void setClipboard(GxTreeNode clipNode, OPERATION_TYPE opType)
        {
            clearClipboard();

            _clipboardTreeNode = clipNode;
            _lastOpType        = opType;
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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;
        }
Esempio n. 5
0
        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;
                        }
                    }
                }
            }
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
        //================================================================
        //  ● 外部调用方法
        //================================================================

        /// <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.");
        }
Esempio n. 8
0
        /// <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);
            }
        }
Esempio n. 9
0
        /// <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);
        }
Esempio n. 10
0
        /// <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);
            }
        }
Esempio n. 11
0
        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);
            }
        }
Esempio n. 12
0
        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;
            }
        }
Esempio n. 13
0
        /// <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);
        }
Esempio n. 14
0
 /// <summary>
 /// 清空剪切板
 /// </summary>
 private void clearClipboard()
 {
     restoreNodeOriginalIcon();
     _clipboardTreeNode = null;
     _lastOpType        = OPERATION_TYPE.OP_NONE;
 }