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); }
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; }
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))); } }
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; }
private void ClipboardParserOnDirectionalScan(IList <IDScanItem> dScanItems) { _lastDScan = dScanItems; _lastAction = ClipboardContent.DScan; }
private void ClipboardParserOnProbeScan(IList <IProbeScanItem> probeScanItems) { _lastAction = ClipboardContent.ProbeScan; }
private void UpdateCharacters(List <IEveCharacter> characters) { _lastLocal = characters; _lastAction = ClipboardContent.Local; }