Ejemplo n.º 1
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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
 public GxTreeNode(
     string text     = "",
     object tag      = null,
     GXNodeType type =
     GXNodeType.GX_NODE_TYPE_NONE,
     ICON_TYPE imageIndex         = ICON_TYPE.ICON_SCENE,
     ICON_TYPE selectedImageIndex = ICON_TYPE.ICON_SCENE)
 {
     base.Text = text;
     base.Tag  = tag;
     setGxNodeType(type);
     base.ImageIndex         = Convert.ToInt32(imageIndex);
     base.SelectedImageIndex = Convert.ToInt32(selectedImageIndex);
 }
Ejemplo n.º 3
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);
            }
        }
Ejemplo n.º 4
0
 public GxTreeNode(
     string text = "", 
     object tag = null, 
     GXNodeType type = 
     GXNodeType.GX_NODE_TYPE_NONE, 
     ICON_TYPE imageIndex = ICON_TYPE.ICON_SCENE,
     ICON_TYPE selectedImageIndex = ICON_TYPE.ICON_SCENE)
 {
     base.Text = text;
     base.Tag = tag;
     setGxNodeType(type);
     base.ImageIndex = Convert.ToInt32(imageIndex);
     base.SelectedImageIndex = Convert.ToInt32(selectedImageIndex);
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 根据节点类型获取原始图标
        /// </summary>
        /// <param name="nodeType"></param>
        /// <returns></returns>
        private ICON_TYPE getRawImageIndex(GXNodeType nodeType)
        {
            switch (nodeType)
            {
            case GXNodeType.GX_NODE_TYPE_PROJECT:
                return(ICON_TYPE.ICON_PROJECT);

            case GXNodeType.GX_NODE_TYPE_DIRECTORY:
                return(ICON_TYPE.ICON_SCENE_DIR);

            case GXNodeType.GX_NODE_TYPE_SCENE:
                return(ICON_TYPE.ICON_SCENE);
            }

            return(ICON_TYPE.ICON_SCENE);
        }
Ejemplo n.º 6
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);
            }
        }
Ejemplo n.º 7
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;
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 移动一个节点
        /// </summary>
        /// <param name="srcNode">要移动的节点</param>
        /// <param name="detNode">父节点</param>
        /// <returns>返回移动成功的节点</returns>
        public GxTreeNode moveNode(GxTreeNode srcNode, GxTreeNode dstNode)
        {
            if (srcNode == null || dstNode == null)
            {
                Logger.Error("srcNode == null || dstNode == null.");
                return(null);
            }

            if (srcNode == dstNode)
            {
                Logger.Error("srcNode is equals to dstNode.");
                return(null);
            }

            if (findNode(srcNode) == false || findNode(dstNode) == false)
            {
                Logger.Error("srcNode or dstNode not in NodeCollection");
                return(null);
            }

            //目标节点不能是源节点的子节点
            if (findNode(dstNode, srcNode) == true)
            {
                Logger.Error("dstNode is the childNode of srcNode");
                return(null);
            }

            //判断目标节点是否文件夹节点或工程节点
            GXNodeType dstNodeType = dstNode.getGxNodeType();

            if (dstNodeType != GXNodeType.GX_NODE_TYPE_DIRECTORY && dstNodeType != GXNodeType.GX_NODE_TYPE_PROJECT)
            {
                Logger.Error("destination node is not directory type or not project type.");
                return(null);
            }

            //取得场景目录完整路径
            string sceneDirFullPath = GxEnvManager.getEnv(GxEnvVarType.GXENV_PROJECT_SCENE_DIR);

            //如果原节点是目录
            if (srcNode.getGxNodeType() == GXNodeType.GX_NODE_TYPE_DIRECTORY)
            {
                //取得源目录完整路径
                GxNodeData srcNodeData    = (GxNodeData)srcNode.Tag;
                string     srcDirFullPath = srcNodeData.getPath();
                if (Directory.Exists(srcDirFullPath) == false)
                {
                    Logger.Error("srcNode dir path not exists.");
                    return(null);
                }

                //DirectoryInfo srcDirInfo = new DirectoryInfo(srcDirFullPath);
                string srcDirName = Path.GetFileName(srcDirFullPath);

                //取得目标目录完整路径,默认为场景根目录
                GxNodeData dstNodeData    = (GxNodeData)dstNode.Tag;
                string     dstDirFullPath = dstNodeData.getPath();

                if (Directory.Exists(dstDirFullPath) == false)
                {
                    Logger.Error("dstNode dir path not exists.");
                    return(null);
                }

                //取得移动后的目录路径
                string newDirFullPath = dstDirFullPath + "\\" + srcDirName;

                //检查目标路径是否存在了
                if (Directory.Exists(newDirFullPath) == true)
                {
                    Logger.Error("Destination dir is exists!");
                    return(null);
                }

                //检查目标路径是否与自己相等
                if (srcDirFullPath == newDirFullPath)
                {
                    Logger.Error("Two path equals.");
                    return(null);
                }

                //移动目录
                Directory.Move(srcDirFullPath, newDirFullPath);
                Logger.Debug(string.Format("Direcotry [{0}] moved to [{1}] finished!", srcDirFullPath, newDirFullPath));

                //取得节点相关XML元素
                XmlNode srcRelatedXmlNode = srcNodeData.getRelatedXmlNode();
                XmlNode dstRelatedXmlNode = dstNodeData.getRelatedXmlNode();

                //复制源xml节点的副本
                XmlNode appendNode = srcRelatedXmlNode.CloneNode(true);

                //把复制的副本插入到目标节点中
                dstRelatedXmlNode.AppendChild(appendNode);

                //把源xml节点删除
                srcRelatedXmlNode.ParentNode.RemoveChild(srcRelatedXmlNode);

                //更新源节点的关联XMLNode
                srcNodeData.setRelatedXmlNode(appendNode);

                //取得父节点的基本数据
                string newPath = IOUtil.getRelPath(newDirFullPath, sceneDirFullPath);
                srcNodeData.saveRealPathToXml(newPath, srcNode, true);
            }

            //移除原节点
            srcNode.Remove();

            //加到目标节点
            dstNode.Nodes.Add(srcNode);

            return(srcNode);
        }
Ejemplo n.º 9
0
 public void setGxNodeType(GXNodeType nodeType)
 {
     _gxNodeType = nodeType;
 }
Ejemplo n.º 10
0
        /// <summary>
        /// 根据节点类型获取原始图标
        /// </summary>
        /// <param name="nodeType"></param>
        /// <returns></returns>
        private ICON_TYPE getRawImageIndex(GXNodeType nodeType)
        {
            switch (nodeType)
            {
                case GXNodeType.GX_NODE_TYPE_PROJECT:
                    return ICON_TYPE.ICON_PROJECT;
                case GXNodeType.GX_NODE_TYPE_DIRECTORY:
                    return ICON_TYPE.ICON_SCENE_DIR;
                case GXNodeType.GX_NODE_TYPE_SCENE:
                    return ICON_TYPE.ICON_SCENE;
            }

            return ICON_TYPE.ICON_SCENE;
        }
Ejemplo n.º 11
0
 public void setGxNodeType(GXNodeType nodeType)
 {
     _gxNodeType = nodeType;
 }