Пример #1
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);
        }
Пример #2
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);
        }
Пример #3
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;
                        }
                    }
                }
            }
        }
Пример #4
0
 /// <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;
         }
     }
 }
Пример #5
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);
            }
        }
Пример #6
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);
        }
Пример #7
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);
            }
        }
Пример #8
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;
            }
        }