Пример #1
0
        public void Paste()
        {
            var focused = m_PaneWindow.rootVisualElement.focusController.focusedElement as VisualElement;

            if (!BuilderEditorUtility.CopyBufferMatchesTarget(focused))
            {
                return;
            }

            var copyBuffer = BuilderEditorUtility.systemCopyBuffer;

            if (BuilderEditorUtility.IsUxml(copyBuffer))
            {
                PasteUXML(copyBuffer);
            }
            else if (BuilderEditorUtility.IsUss(copyBuffer))
            {
                PasteUSS(copyBuffer);
            }
            else // Unknown string.
            {
                return;
            }

            if (m_CutElements.Count > 0)
            {
                foreach (var elementToCut in m_CutElements)
                {
                    DeleteElement(elementToCut);
                }

                m_CutElements.Clear();
                BuilderEditorUtility.systemCopyBuffer = null;
            }

            m_PaneWindow.OnEnableAfterAllSerialization();

            // TODO: ListView bug. Does not refresh selection pseudo states after a
            // call to Refresh().
            m_PaneWindow.rootVisualElement.schedule.Execute(() =>
            {
                if (m_Selection.isEmpty)
                {
                    return;
                }
                m_Selection.ForceReselection();
            }).ExecuteLater(200);

            m_Selection.NotifyOfHierarchyChange();
        }
Пример #2
0
 static float ConvertAngle(float angle, Dimension.Unit fromUnit, Dimension.Unit toUnit)
 {
     return(BuilderEditorUtility.FixRoundOff(angle * GetFactor(fromUnit, toUnit)));
 }
        public virtual void BuildElementContextualMenu(ContextualMenuPopulateEvent evt, VisualElement target)
        {
            var documentElement = target.GetProperty(BuilderConstants.ElementLinkedDocumentVisualElementVEPropertyName) as VisualElement;

            var linkedOpenVTA = documentElement?.GetProperty(BuilderConstants.ElementLinkedVisualTreeAssetVEPropertyName) as VisualTreeAsset;

            var isValidTarget = documentElement != null && !linkedOpenVTA &&
                                (documentElement.IsPartOfActiveVisualTreeAsset(paneWindow.document) ||
                                 documentElement.GetStyleComplexSelector() != null);
            var isValidCopyTarget = documentElement != null && !linkedOpenVTA &&
                                    (documentElement.IsPartOfCurrentDocument() ||
                                     documentElement.GetStyleComplexSelector() != null);

            evt.StopImmediatePropagation();

            evt.menu.AppendAction(
                "Copy",
                a =>
            {
                ReselectIfNecessary(documentElement);
                if (isValidCopyTarget)
                {
                    m_PaneWindow.commandHandler.CopySelection();
                }
            },
                isValidCopyTarget
                ? DropdownMenuAction.Status.Normal
                : DropdownMenuAction.Status.Disabled);

            evt.menu.AppendAction(
                "Paste",
                a =>
            {
                m_PaneWindow.commandHandler.Paste();
            },
                BuilderEditorUtility.CopyBufferMatchesTarget(target)
                ? DropdownMenuAction.Status.Normal
                : DropdownMenuAction.Status.Disabled);


            evt.menu.AppendSeparator();

            evt.menu.AppendAction(
                "Rename",
                a =>
            {
                ReselectIfNecessary(documentElement);
                m_PaneWindow.commandHandler.RenameSelection();
            },
                isValidTarget
                ? DropdownMenuAction.Status.Normal
                : DropdownMenuAction.Status.Disabled);

            evt.menu.AppendAction(
                "Duplicate",
                a =>
            {
                ReselectIfNecessary(documentElement);
                m_PaneWindow.commandHandler.DuplicateSelection();
            },
                isValidTarget
                ? DropdownMenuAction.Status.Normal
                : DropdownMenuAction.Status.Disabled);

            evt.menu.AppendAction(
                "Delete",
                a =>
            {
                ReselectIfNecessary(documentElement);
                m_PaneWindow.commandHandler.DeleteSelection();
            },
                isValidTarget
                ? DropdownMenuAction.Status.Normal
                : DropdownMenuAction.Status.Disabled);

            var linkedInstancedVTA = documentElement?.GetProperty(BuilderConstants.ElementLinkedInstancedVisualTreeAssetVEPropertyName) as VisualTreeAsset;
            var linkedVEA          = documentElement?.GetVisualElementAsset();
            var linkedTemplateVEA  = linkedVEA as TemplateAsset;

            var activeOpenUXML = document.activeOpenUXMLFile;

            var isLinkedOpenVTAActiveVTA      = linkedOpenVTA == activeOpenUXML.visualTreeAsset;
            var isLinkedInstancedVTAActiveVTA = linkedInstancedVTA == activeOpenUXML.visualTreeAsset;
            var isLinkedVEADirectChild        = activeOpenUXML.visualTreeAsset.templateAssets.Contains(linkedTemplateVEA);

            var showOpenInBuilder         = linkedInstancedVTA != null;
            var showReturnToParentAction  = isLinkedOpenVTAActiveVTA && activeOpenUXML.isChildSubDocument;
            var showOpenInIsolationAction = isLinkedVEADirectChild;
            var showOpenInPlaceAction     = showOpenInIsolationAction;
            var showSiblingOpenActions    = !isLinkedOpenVTAActiveVTA && isLinkedInstancedVTAActiveVTA;
            var showUnpackAction          = isLinkedVEADirectChild;
            var showCreateTemplateAction  = activeOpenUXML.visualTreeAsset.visualElementAssets.Contains(linkedVEA);

            if (showOpenInBuilder || showReturnToParentAction || showOpenInIsolationAction || showOpenInPlaceAction || showSiblingOpenActions)
            {
                evt.menu.AppendSeparator();
            }

            if (showOpenInBuilder)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyOpenInBuilder,
                    action => { paneWindow.LoadDocument(linkedInstancedVTA); });
            }

            if (showReturnToParentAction)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyReturnToParentDocument +
                    BuilderConstants.SingleSpace + "(" + activeOpenUXML.openSubDocumentParent.visualTreeAsset.name + ")",
                    action => document.GoToSubdocument(documentElement, paneWindow, activeOpenUXML.openSubDocumentParent));
            }

            if (showOpenInIsolationAction)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyPaneOpenSubDocument,
                    action => BuilderHierarchyUtilities.OpenAsSubDocument(paneWindow, linkedInstancedVTA));
            }

            if (showOpenInPlaceAction)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyPaneOpenSubDocumentInPlace,
                    action => BuilderHierarchyUtilities.OpenAsSubDocument(paneWindow, linkedInstancedVTA, linkedTemplateVEA));
            }

            if (showSiblingOpenActions)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyPaneOpenSubDocument,
                    action =>
                {
                    document.GoToSubdocument(documentElement, paneWindow, activeOpenUXML.openSubDocumentParent);
                    BuilderHierarchyUtilities.OpenAsSubDocument(paneWindow, linkedInstancedVTA);
                });

                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyPaneOpenSubDocumentInPlace,
                    action =>
                {
                    document.GoToSubdocument(documentElement, paneWindow, activeOpenUXML.openSubDocumentParent);
                    BuilderHierarchyUtilities.OpenAsSubDocument(paneWindow, linkedInstancedVTA, linkedTemplateVEA);
                });
            }

            if (isLinkedVEADirectChild)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchySelectTemplate,
                    action =>
                {
                    Selection.activeObject = linkedInstancedVTA;
                    EditorGUIUtility.PingObject(linkedInstancedVTA.GetInstanceID());
                });
            }

            evt.menu.AppendSeparator();

            if (showUnpackAction)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyUnpackTemplate,
                    action =>
                {
                    m_PaneWindow.commandHandler.UnpackTemplateContainer(documentElement);
                });
            }
            if (showUnpackAction)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyUnpackCompletely,
                    action =>
                {
                    m_PaneWindow.commandHandler.UnpackTemplateContainer(documentElement, true);
                });
            }
            if (showCreateTemplateAction)
            {
                evt.menu.AppendAction(
                    BuilderConstants.ExplorerHierarchyCreateTemplate,
                    action =>
                {
                    m_PaneWindow.commandHandler.CreateTemplateFromHierarchy(documentElement, activeOpenUXML.visualTreeAsset);
                });
            }
        }