Example #1
0
        private bool CanPaste(ClipboardContent clipboardContent)
        {
            if (clipboardContent == null)
            {
                return(false);
            }

            var arrayIndex         = 0;
            var arrayCount         = serializedProperties.Length;
            var serializedProperty = this.serializedProperty;
            var serializedObject   = serializedProperty.serializedObject;

            foreach (var array in serializedProperties)
            {
                var arrayObj    = (IList)array.GetObject();
                var arrayType   = arrayObj.GetType();
                var elementType =
                    (arrayType.IsArray)
                    ? arrayType.GetElementType()
                    : arrayType.GetGenericArguments()[0];

                var clipboardElement = clipboardContent.elements[arrayIndex++];
                if (clipboardElement.type != elementType.FullName)
                {
                    return(false);
                }
            }
            return(true);
        }
Example #2
0
        private void CopyElement(int elementIndex)
        {
            if (elementIndex < 0)
            {
                return;
            }

            var arrayIndex         = 0;
            var arrayCount         = serializedProperties.Length;
            var clipboardContent   = new ClipboardContent(arrayCount);
            var serializedProperty = this.serializedProperty;
            var serializedObject   = serializedProperty.serializedObject;

            foreach (var array in serializedProperties)
            {
                var arrayObj         = (IList)array.GetObject();
                var elementObj       = arrayObj[elementIndex];
                var elementType      = elementObj.GetType();
                var elementJson      = JsonUtility.ToJson(elementObj);
                var clipboardElement = new ClipboardElement();
                clipboardElement.type = elementType.FullName;
                clipboardElement.json = elementJson;
                clipboardContent.elements[arrayIndex] = clipboardElement;
                arrayIndex += 1;
            }
            EditorGUIUtility.systemCopyBuffer = clipboardContent.Serialize();
        }
        public ClipboardToolStripMenuItem(ClipboardContent content)
        {
            Content = content;

            Init();

            AutoToolTip = false;

            MouseEnter += ClipboardToolStripMenuItem_MouseEnter;
            MouseLeave += ClipboardToolStripMenuItem_MouseLeave;
        }
Example #4
0
        protected virtual void PopulateElementContextMenu(
            GenericMenu menu,
            int elementIndex)
        {
            var serializedProperty = this.serializedProperty;
            var serializedObject   = serializedProperty.serializedObject;

            menu.AddItem(CutLabel, false, () =>
                         OnNextGUIFrame(() => CutElement(elementIndex)));
            menu.AddItem(CopyLabel, false, () =>
                         CopyElement(elementIndex));
            var content  = ClipboardContent.Deserialize(EditorGUIUtility.systemCopyBuffer);
            var canPaste = CanPaste(content);

            if (canPaste)
            {
                menu.AddItem(PasteLabel, false, () =>
                             OnNextGUIFrame(() => PasteElement(elementIndex, content)));
            }
            else
            {
                menu.AddDisabledItem(PasteLabel);
            }

            if (displayAdd)
            {
                menu.AddSeparator("");
                menu.AddItem(new GUIContent($"Insert Above"), false, () =>
                             OnNextGUIFrame(() => InsertElement(elementIndex)));
                menu.AddItem(new GUIContent($"Insert Below"), false, () =>
                             OnNextGUIFrame(() => InsertElement(elementIndex + 1)));
            }
            if (displayAdd && displayRemove)
            {
                menu.AddSeparator("");
            }
            if (displayRemove)
            {
                menu.AddItem(new GUIContent($"Remove"), false, () =>
                             OnNextGUIFrame(() => DeleteElement(elementIndex)));
            }
        }
Example #5
0
        private void PasteElement(int elementIndex, ClipboardContent clipboardContent)
        {
            if (elementIndex < 0)
            {
                return;
            }

            var clipboardElements = clipboardContent.elements;

            if (clipboardElements.Length == 0)
            {
                return;
            }

            var arrayIndex         = 0;
            var arrayCount         = serializedProperties.Length;
            var serializedProperty = this.serializedProperty;
            var serializedObject   = serializedProperty.serializedObject;
            var targetObject       = serializedObject.targetObject;

            Undo.RecordObject(targetObject, $"Paste {clipboardElements[0].type}");
            foreach (var array in serializedProperties)
            {
                if (elementIndex >= array.arraySize)
                {
                    array.arraySize = elementIndex + 1;
                }

                var clipboardElement = clipboardContent.elements[arrayIndex++];
                var arrayObj         = (IList)array.GetObject();
                var elementObj       = arrayObj[elementIndex];
                var elementJson      = clipboardElement.json;
                JsonUtility.FromJsonOverwrite(elementJson, elementObj);
            }
            serializedObject.Update();
            GUI.changed = true;
        }
Example #6
0
 private void ClipboardParserOnDirectionalScan(IList <IDScanItem> dScanItems)
 {
     _lastDScan  = dScanItems;
     _lastAction = ClipboardContent.DScan;
 }
Example #7
0
 private void ClipboardParserOnProbeScan(IList <IProbeScanItem> probeScanItems)
 {
     _lastAction = ClipboardContent.ProbeScan;
 }
Example #8
0
 private void UpdateCharacters(List <IEveCharacter> characters)
 {
     _lastLocal  = characters;
     _lastAction = ClipboardContent.Local;
 }