예제 #1
0
파일: MainForm.cs 프로젝트: Ploaj/HSDLib
        public MainForm()
        {
            InitializeComponent();

            IsMdiContainer = true;

            _nodePropertyViewer      = new PropertyView();
            _nodePropertyViewer.Dock = DockStyle.Fill;
            _nodePropertyViewer.Show(dockPanel);

            //dockPanel.ShowDocumentIcon = true;
            dockPanel.ActiveContentChanged += (sender, args) =>
            {
                if (dockPanel.ActiveContent != null)
                {
                    LastActiveContent = dockPanel.ActiveContent;
                }
            };

            Viewport      = new CommonViewport();
            Viewport.Dock = DockStyle.Fill;
            Viewport.Show(dockPanel);

            //_ScriptEditor = new SubactionEditor();
            //_ScriptEditor.Dock = DockStyle.Fill;

            ImageList myImageList = new ImageList();

            myImageList.ImageSize = new System.Drawing.Size(24, 24);
            myImageList.Images.Add("unknown", Properties.Resources.ico_unknown);
            myImageList.Images.Add("known", Properties.Resources.ico_known);
            myImageList.Images.Add("folder", Properties.Resources.ico_folder);
            myImageList.Images.Add("group", Properties.Resources.ico_group);
            myImageList.Images.Add("table", Properties.Resources.ico_table);
            myImageList.Images.Add("jobj", Properties.Resources.ico_jobj);
            myImageList.Images.Add("dobj", Properties.Resources.ico_dobj);
            myImageList.Images.Add("pobj", Properties.Resources.ico_pobj);
            myImageList.Images.Add("mobj", Properties.Resources.ico_mobj);
            myImageList.Images.Add("tobj", Properties.Resources.ico_tobj);
            myImageList.Images.Add("aobj", Properties.Resources.ico_aobj);
            myImageList.Images.Add("cobj", Properties.Resources.ico_cobj);
            myImageList.Images.Add("fobj", Properties.Resources.ico_fobj);
            myImageList.Images.Add("iobj", Properties.Resources.ico_iobj);
            myImageList.Images.Add("lobj", Properties.Resources.ico_lobj);
            myImageList.Images.Add("sobj", Properties.Resources.ico_sobj);
            myImageList.Images.Add("coll", Properties.Resources.ico_coll);
            myImageList.Images.Add("anim_texture", Properties.Resources.ico_anim_texture);
            myImageList.Images.Add("anim_material", Properties.Resources.ico_anim_material);
            myImageList.Images.Add("anim_joint", Properties.Resources.ico_anim_joint);
            myImageList.Images.Add("anim_shape", Properties.Resources.ico_anim_shape);
            myImageList.Images.Add("kabii", Properties.Resources.ico_kabii);
            myImageList.Images.Add("fuma", Properties.Resources.ico_fuma);

            treeView1.ImageList = myImageList;

            bool dc = false;

            treeView1.MouseDown += (sender, args) =>
            {
                dc = args.Clicks > 1;
            };

            treeView1.BeforeExpand += (sender, args) =>
            {
                args.Cancel = dc;

                if (args.Node is DataNode node && Instance.IsOpened(node) && !dc)
                {
                    MessageBox.Show("Error: This node is currently open in an editor\nPlease close it first to expand");
                    args.Cancel = true;
                }

                dc = false;
            };

            treeView1.AfterExpand += (sender, args) =>
            {
                args.Node.Nodes.Clear();
                treeView1.BeginUpdate();
                if (args.Node is DataNode node)
                {
                    node.ExpandData();
                }
                treeView1.EndUpdate();
            };

            treeView1.AfterCollapse += (sender, args) =>
            {
                treeView1.BeginUpdate();
                args.Node.Nodes.Clear();
                args.Node.Nodes.Add(new TreeNode());
                treeView1.EndUpdate();
            };

            treeView1.AfterSelect += (sender, args) =>
            {
                SelectNode <HSDAccessor>();
            };

            treeView1.NodeMouseClick += (sender, args) =>
            {
                treeView1.SelectedNode = treeView1.GetNodeAt(args.Location);
                if (args.Button == MouseButtons.Right && args.Node != null && args.Node is DataNode node)
                {
                    PluginManager.GetContextMenuFromType(node.Accessor.GetType()).Show(this, args.Location);
                }
                try
                {
                    var kb = OpenTK.Input.Keyboard.GetState();
                    if (kb.IsKeyDown(OpenTK.Input.Key.ShiftLeft) || kb.IsKeyDown(OpenTK.Input.Key.ShiftRight))
                    {
                        treeView1.BeginUpdate();
                        treeView1.SelectedNode.ExpandAll();
                        treeView1.EndUpdate();
                    }
                }
                catch (Exception)
                {
                }
            };
        }
예제 #2
0
파일: MainForm.cs 프로젝트: Ploaj/HSDLib
        /// <summary>
        /// Opens editor for currently selected node if editor exists
        /// </summary>
        public void OpenEditor()
        {
            if (SelectedDataNode == null)
            {
                return;
            }

            var edit = PluginManager.GetEditorFromType(SelectedDataNode.Accessor.GetType());

            // Special animation override
            if (SelectedDataNode.Accessor is HSD_AnimJoint ||
                SelectedDataNode.Accessor is HSD_FigaTree ||
                SelectedDataNode.Accessor is HSD_MatAnimJoint ||
                SelectedDataNode.Accessor is HSD_ShapeAnimJoint ||
                SelectedDataNode.Accessor is HSD_FogDesc ||
                SelectedDataNode.Accessor is HSD_Camera ||
                SelectedDataNode.Accessor is SBM_ModelPart)
            {
                //foreach (var v in dockPanel.Contents)
                {
                    if (LastActiveContent is JobjEditorDock jedit && jedit.Visible)
                    {
                        if (SelectedDataNode.Accessor is HSD_MatAnimJoint matjoint)
                        {
                            jedit.LoadAnimation(matjoint);
                        }

                        if (SelectedDataNode.Accessor is HSD_ShapeAnimJoint shapeJoint)
                        {
                            jedit.LoadAnimation(shapeJoint);
                        }

                        if (SelectedDataNode.Accessor is HSD_AnimJoint joint)
                        {
                            jedit.LoadAnimation(new JointAnimManager(joint));
                        }

                        if (SelectedDataNode.Accessor is HSD_FigaTree tree)
                        {
                            jedit.LoadAnimation(new JointAnimManager(tree));
                        }

                        if (SelectedDataNode.Accessor is HSD_FogDesc fog)
                        {
                            jedit.Editor.SetFog(fog);
                        }

                        if (SelectedDataNode.Accessor is HSD_Camera camera)
                        {
                            jedit.Editor.SetCamera(camera);
                        }

                        if (SelectedDataNode.Accessor is SBM_ModelPart modelPart && modelPart.Anims.Length > 0)
                        {
                            if (prev_selected_part == modelPart)
                            {
                                part_select_index++;
                            }
                            else
                            {
                                part_select_index = 0;
                            }

                            prev_selected_part = modelPart;

                            if (part_select_index > modelPart.Anims.Length)
                            {
                                part_select_index = 0;
                            }

                            JointAnimManager manager = new JointAnimManager();
                            for (int i = 0; i < modelPart.StartingBone; i++)
                            {
                                manager.Nodes.Add(new AnimNode());
                            }
                            manager.Nodes.AddRange(new JointAnimManager(modelPart.Anims[part_select_index]).Nodes);
                            jedit.LoadAnimation(manager);
                        }
                    }
                }
            }

            if (IsOpened(SelectedDataNode))
            {
                var editor = GetEditors(SelectedDataNode);
                editor[0].BringToFront();
            }
            else
            if (!IsChildOpened(SelectedDataNode.Accessor._s) &&
                edit != null &&
                edit is DockContent dc)
            {
                //Editors.Add(edit);
                SelectedDataNode.Collapse();
                edit.Node = SelectedDataNode;

                dc.Show(dockPanel);

                dc.Text    = SelectedDataNode.Text;
                dc.TabText = SelectedDataNode.Text;
                //if (dc is EditorBase b)
                //    dc.DockState = b.DefaultDockState;
            }
        }