Esempio n. 1
0
        private static void DragDropFile(object sender, DragEventArgs e)
        {
            TreeNode targetNode = null;

            TreeView tree          = (TreeView)sender;
            TreeNode directoryNode = null;


            Point pt = new Point(e.X, e.Y);

            pt         = tree.PointToClient(pt);
            targetNode = tree.GetNodeAt(pt);

            TreeNode nodeDroppedOn = targetNode;

            while (targetNode != null && !targetNode.IsEntityNode() && !targetNode.IsScreenNode())
            {
                if (directoryNode == null && targetNode.IsDirectoryNode())
                {
                    directoryNode = targetNode;
                }

                targetNode = targetNode.Parent;
            }

            var directoryPath = directoryNode == null ? null : directoryNode.GetRelativePath();

            bool userCancelled = false;

            if (targetNode == null)
            {
                ElementViewWindow.SelectedNode = nodeDroppedOn;

                var droppedFiles = (string[])e.Data.GetData("FileDrop");

                foreach (var fileName in droppedFiles)
                {
                    string extension = FileManager.GetExtension(fileName);

                    if (extension == "entz" || extension == "scrz")
                    {
                        ElementImporter.ImportElementFromFile(fileName, true);
                    }
                    else if (extension == "plug")
                    {
                        Plugins.PluginManager.InstallPlugin(InstallationType.ForUser, fileName);
                    }
                    else
                    {
                        AddExistingFileManager.Self.AddSingleFile(fileName, ref userCancelled);
                    }
                }

                GluxCommands.Self.SaveGlux();
            }
            else if (targetNode is ScreenTreeNode || targetNode is EntityTreeNode)
            {
                bool any = false;
                foreach (var fileName in (string[])e.Data.GetData("FileDrop"))
                {
                    // First select the entity
                    ElementViewWindow.SelectedNode = targetNode;


                    var element = GlueState.Self.CurrentElement;
                    if (string.IsNullOrEmpty(directoryPath))
                    {
                        directoryPath = EditorLogic.CurrentTreeNode.GetRelativePath();
                    }


                    FlatRedBall.Glue.Managers.TaskManager.Self.AddSync(() =>
                    {
                        var newRfs = AddExistingFileManager.Self.AddSingleFile(fileName, ref userCancelled, element, directoryPath);

                        GlueCommands.Self.DoOnUiThread(() => GlueCommands.Self.SelectCommands.Select(newRfs));
                    },
                                                                       "Add file " + fileName);
                    any = true;
                }
                if (any)
                {
                    FlatRedBall.Glue.Managers.TaskManager.Self.AddSync(() =>
                    {
                        GluxCommands.Self.SaveGlux();
                    },
                                                                       "Save .glux");
                }
            }
        }
        private static void DragDropFile(object sender, DragEventArgs e)
        {
            TreeNode targetNode = null;

            TreeView tree          = (TreeView)sender;
            TreeNode directoryNode = null;


            Point pt = new Point(e.X, e.Y);

            pt         = tree.PointToClient(pt);
            targetNode = tree.GetNodeAt(pt);

            TreeNode nodeDroppedOn = targetNode;

            while (targetNode != null && !targetNode.IsEntityNode() && !targetNode.IsScreenNode())
            {
                if (directoryNode == null && targetNode.IsDirectoryNode())
                {
                    directoryNode = targetNode;
                }

                targetNode = targetNode.Parent;
            }

            var directoryPath = directoryNode == null ? null : directoryNode.GetRelativePath();

            bool userCancelled = false;

            if (targetNode == null)
            {
                ElementViewWindow.SelectedNode = nodeDroppedOn;
                foreach (var fileName in (string[])e.Data.GetData("FileDrop"))
                {
                    string creationReport;

                    string extension = FileManager.GetExtension(fileName);

                    if (extension == "entz" || extension == "scrz")
                    {
                        ElementImporter.ImportElementFromFile(fileName, true);
                    }
                    else
                    {
                        string errorMessage;

                        RightClickHelper.AddSingleFile(fileName, ref userCancelled);
                    }
                }

                GluxCommands.Self.SaveGlux();
            }
            else if (targetNode is ScreenTreeNode || targetNode is EntityTreeNode)
            {
                bool any = false;
                foreach (var fileName in (string[])e.Data.GetData("FileDrop"))
                {
                    // First select the entity
                    ElementViewWindow.SelectedNode = targetNode;


                    var    element             = GlueState.Self.CurrentElement;
                    string directoryOfTreeNode = EditorLogic.CurrentTreeNode.GetRelativePath();


                    FlatRedBall.Glue.Managers.TaskManager.Self.AddSync(() =>
                    {
                        RightClickHelper.AddSingleFile(fileName, ref userCancelled, element, directoryOfTreeNode);
                    },
                                                                       "Add file " + fileName);
                    any = true;
                }
                if (any)
                {
                    FlatRedBall.Glue.Managers.TaskManager.Self.AddSync(() =>
                    {
                        GluxCommands.Self.SaveGlux();
                    },
                                                                       "Save .glux");
                }
            }
        }