コード例 #1
0
ファイル: DragDropManager.cs プロジェクト: jiailiuyan/Gum
        private static InstanceSave HandleDroppedElementInElement(ElementSave draggedAsElementSave, ElementSave target, out bool handled)
        {
            InstanceSave newInstance = null;

            handled = false;
            if (target == null)
            {
                MessageBox.Show("No Screen or Component selected");
            }
            else if (target is StandardElementSave)
            {
                MessageBox.Show("Standard types can't contain objects");
            }
            else if (draggedAsElementSave is ScreenSave)
            {
                MessageBox.Show("Screens can't be dropped into other Screens or Components");
            }
            else
            {
                bool canAdd = true;

                if (draggedAsElementSave is ComponentSave && target is ComponentSave)
                {
                    ComponentSave targetAsComponentSave = target as ComponentSave;

                    if (!targetAsComponentSave.CanContainInstanceOfType(draggedAsElementSave.Name))
                    {
                        MessageBox.Show("Can't add instance of " + draggedAsElementSave.Name + " in " + targetAsComponentSave.Name);
                        canAdd = false;
                    }
                }
                if (target.IsSourceFileMissing)
                {
                    MessageBox.Show("The source file for " + target.Name + " is missing, so it cannot be edited");
                    canAdd = false;
                }

                if (canAdd)
                {
#if DEBUG
                    if (draggedAsElementSave == null)
                    {
                        throw new Exception("DraggedAsElementSave is null and it shouldn't be.  For vic - try to put this exception earlier to see what's up.");
                    }
#endif

                    string name = GetUniqueNameForNewInstance(draggedAsElementSave, target);

                    // First we want to re-select the target so that it is highlighted in the tree view and not
                    // the object we dragged off.  This is so that plugins can properly use the SelectedElement.
                    ElementTreeViewManager.Self.Select(target);

                    newInstance = ElementTreeViewManager.Self.AddInstance(name, draggedAsElementSave.Name, target);
                    handled     = true;
                }
            }

            return(newInstance);
        }
コード例 #2
0
        private static string GetErrorMessage(ElementSave draggedAsElementSave, ElementSave target, string errorMessage)
        {
            if (target == null)
            {
                errorMessage = "No Screen or Component selected";
            }

            if (errorMessage == null && target is StandardElementSave)
            {
                // do nothing, it's annoying:
                errorMessage = "Standard types can't contain objects";
            }

            if (errorMessage == null && draggedAsElementSave is ScreenSave)
            {
                errorMessage = "Screens can't be dropped into other Screens or Components";
            }

            if (errorMessage == null)
            {
                if (draggedAsElementSave is ComponentSave && target is ComponentSave)
                {
                    ComponentSave targetAsComponentSave = target as ComponentSave;

                    if (!targetAsComponentSave.CanContainInstanceOfType(draggedAsElementSave.Name))
                    {
                        errorMessage = "Can't add instance of " + draggedAsElementSave.Name + " in " + targetAsComponentSave.Name;
                    }
                }
            }


            if (errorMessage == null && target.IsSourceFileMissing)
            {
                errorMessage = "The source file for " + target.Name + " is missing, so it cannot be edited";
            }

            return(errorMessage);
        }