예제 #1
0
        private void Project_ElementCollectionChanged(object sender, ElementCollectionChangedEventArgs e)
        {
            if (e.Action == System.ComponentModel.CollectionChangeAction.Remove)
            {
                int count = _SelectedElements.RemoveAll(x => e.RemovedElements.Contains(x));
                if (count > 0)
                {
                    SelectionChanged?.Invoke(this, EventArgs.Empty);
                }
            }
            else
            {
                InitializeElementExtensions();
            }

            ElementCollectionChanged?.Invoke(this, e);

            UndoRedoManager.ProcessProjectElementsChanged(e);

            if (IsExecutingUndoRedo || IsExecutingBatchChanges)
            {
                ElementsChangedWhilePerformingChanges = true;
            }
            else
            {
                ElementsChanged?.Invoke(this, EventArgs.Empty);
            }
        }
        protected override void MoveElementSelection(int insertIndex, int[] selectedIds)
        {
            int originalInsert = insertIndex;

            foreach (int selectedElement in selectedIds)
            {
                if (selectedElement < originalInsert)
                {
                    insertIndex -= 1;
                }
            }

            for (int i = selectedIds.Length - 1; i > -1; i--)
            {
                elements.MoveArrayElement(selectedIds[i], ElementCount - 1);
                selectedIds[i] = ElementCount - selectedIds.Length + i;
            }

            for (int i = 0; i < selectedIds.Length; i++)
            {
                elements.MoveArrayElement(selectedIds[i], insertIndex);
                selectedIds[i] = insertIndex + i;
            }

            SerializedObject.ApplyModifiedProperties();
            SerializedObject.Update();

            SetSelection(selectedIds, TreeViewSelectionOptions.RevealAndFrame | TreeViewSelectionOptions.FireSelectionChanged);
            ReloadTree();
            ElementsChanged?.Invoke();
        }
        protected override void RemoveElementSelection()
        {
            List <int> selection = new List <int> (Selection);

            // Sort elements by descending
            if (selection.Count > 1)
            {
                selection.Sort((a, b) => - 1 * a.CompareTo(b));
            }

            foreach (int id in selection)
            {
                SerializedProperty elementProperty = elements.GetArrayElementAtIndex(id);

                if (elementProperty.propertyType == SerializedPropertyType.ObjectReference)
                {
                    if (elementProperty.objectReferenceValue != null)
                    {
                        elementProperty.objectReferenceValue = null;
                    }
                }

                elements.DeleteArrayElementAtIndex(id);
            }

            SerializedObject.ApplyModifiedProperties();
            SerializedObject.Update();

            Refresh();
            SetSelection(null);
            ElementsChanged?.Invoke();
        }
예제 #4
0
 private void UndoRedoManager_EndUndoRedo(object sender, EventArgs e)
 {
     if (ElementsChangedWhilePerformingChanges)
     {
         ElementsChangedWhilePerformingChanges = false;
         ElementsChanged?.Invoke(this, EventArgs.Empty);
     }
 }
예제 #5
0
 private void OnElementElementCompleted(RssElement e)
 {
     ElementsChanged?.Invoke(e, EventArgs.Empty);
     if (Elements.Where(r => r.Completed == false).FirstOrDefault() == null)
     {
         LoadCompleted?.Invoke(this, EventArgs.Empty);
     }
 }
예제 #6
0
 public void EndBatchChanges()
 {
     UndoRedoManager.EndBatchChanges();
     if (ElementsChangedWhilePerformingChanges)
     {
         ElementsChangedWhilePerformingChanges = false;
         ElementsChanged?.Invoke(this, EventArgs.Empty);
     }
 }
예제 #7
0
        protected void AddElementAtIndex(int insertIndex, TElement value)
        {
            elements.Insert(insertIndex, value);

            ReloadTree();
            SetSelection(new List <int> {
                insertIndex
            });
            ElementsChanged?.Invoke();
        }
예제 #8
0
        protected override void MoveElementSelection(int insertIndex, int[] selectedIds)
        {
            if (insertIndex < 0)
            {
                return;
            }

            List <object> selection = new List <object> ();

            for (int i = 0; i < selectedIds.Length; i++)
            {
                selection.Add(elements[selectedIds[i]]);
            }

            foreach (TElement item in selection)
            {
                elements.Remove(item);
            }

            int itemsAboveInsertIndex = 0;

            foreach (int selectedElement in selectedIds)
            {
                if (selectedElement < insertIndex)
                {
                    itemsAboveInsertIndex++;
                }
            }

            insertIndex -= itemsAboveInsertIndex;

            selection.Reverse();
            foreach (TElement item in selection)
            {
                elements.Insert(insertIndex, item);
            }

            List <int> newSelection = new List <int> ();

            for (int i = insertIndex; i < insertIndex + selection.Count; i++)
            {
                newSelection.Add(i);
            }

            SetSelection(newSelection, TreeViewSelectionOptions.RevealAndFrame | TreeViewSelectionOptions.FireSelectionChanged);
            ReloadTree();
            ElementsChanged?.Invoke();
        }
        protected void AddElementAtIndex(int insertIndex, object value)
        {
            elements.InsertArrayElementAtIndex(insertIndex);

            SerializedObject.ApplyModifiedProperties();
            elements.GetArrayElementAtIndex(insertIndex).SetValue(value);

            SerializedObject.ApplyModifiedPropertiesWithoutUndo();
            SerializedObject.Update();

            ReloadTree();
            SetSelection(new List <int> {
                insertIndex
            });
            ElementsChanged?.Invoke();
        }
예제 #10
0
        protected override void RemoveElementSelection()
        {
            List <int> selection = new List <int> (Selection);

            // Sort elements by descending
            if (selection.Count > 1)
            {
                selection.Sort((a, b) => - 1 * a.CompareTo(b));
            }

            foreach (int id in selection)
            {
                elements.RemoveAt(id);
            }

            Refresh();
            SetSelection(null);
            ElementsChanged?.Invoke();
        }
예제 #11
0
 public void OnElementsChanged(ElementsChangedEventArgs e)
 {
     ElementsChanged?.Invoke(this, e);
 }
예제 #12
0
    public static void HandleAction(EditorAction action, bool redo)
    {
        if (redo)
        {
            switch (action.type)
            {
            case EditorAction.ActionType.EnvironmentChanged:
                // set map environment settings to new settings
                EnvironmentChanged ec = action as EnvironmentChanged;
                EditorMain.instance.LoadedMap.AmbientColor   = ec.newAmbientColor;
                EditorMain.instance.LoadedMap.BaseplateColor = ec.newBaseplateColor;
                EditorMain.instance.LoadedMap.SkyColor       = ec.newSkyColor;
                EditorMain.instance.LoadedMap.BaseplateSize  = ec.newBaseplateSize;
                EditorMain.instance.LoadedMap.SunIntensity   = ec.newSunIntensity;
                MapBuilder.instance.UpdateEnvironment(EditorMain.instance.LoadedMap);
                break;

            case EditorAction.ActionType.ElementsAdded:
                // add elements
                ElementsAdded ea = action as ElementsAdded;
                if (ea.bricksAdded != null)
                {
                    for (int i = 0; i < ea.bricksAdded.Length; i++)
                    {
                        EditorUI.instance.ImportBrick(ea.bricksAdded[i].ToBrick(false));
                    }
                }
                if (ea.groupsAdded != null)
                {
                    for (int i = 0; i < ea.groupsAdded.Length; i++)
                    {
                        EditorUI.instance.ImportGroup(ea.groupsAdded[i].ToGroup(false));
                    }
                }
                break;

            case EditorAction.ActionType.ElementsChanged:
                // set element settings to new settings
                ElementsChanged elc = action as ElementsChanged;
                for (int i = 0; i < elc.oldBricks.Length; i++)
                {
                    EditorMain.instance.SetBrickProperties(elc.newBricks[i], elc.oldBricks[i].ID);
                    EditorUI.instance.UpdateElement(elc.oldBricks[i].ID);
                }
                EditorUI.instance.UpdateInspector();
                break;

            case EditorAction.ActionType.ElementsRemoved:
                // remove elements
                ElementsRemoved er = action as ElementsRemoved;
                if (er.bricksRemoved != null)
                {
                    for (int i = 0; i < er.bricksRemoved.Length; i++)
                    {
                        EditorUI.instance.DeleteElement(er.bricksRemoved[i].ID);
                    }
                }
                if (er.groupsRemoved != null)
                {
                    for (int i = 0; i < er.groupsRemoved.Length; i++)
                    {
                        EditorUI.instance.DeleteElement(er.groupsRemoved[i].ID);
                    }
                }
                break;

            case EditorAction.ActionType.GenericMapChange:
                // load new saved map
                break;
            }
        }
        else
        {
            switch (action.type)
            {
            case EditorAction.ActionType.EnvironmentChanged:
                // revert map environment settings to old settings
                EnvironmentChanged ec = action as EnvironmentChanged;
                EditorMain.instance.LoadedMap.AmbientColor   = ec.oldAmbientColor;
                EditorMain.instance.LoadedMap.BaseplateColor = ec.oldBaseplateColor;
                EditorMain.instance.LoadedMap.SkyColor       = ec.oldSkyColor;
                EditorMain.instance.LoadedMap.BaseplateSize  = ec.oldBaseplateSize;
                EditorMain.instance.LoadedMap.SunIntensity   = ec.oldSunIntensity;
                MapBuilder.instance.UpdateEnvironment(EditorMain.instance.LoadedMap);
                break;

            case EditorAction.ActionType.ElementsAdded:
                // remove added elements
                ElementsAdded ea = action as ElementsAdded;
                if (ea.bricksAdded != null)
                {
                    for (int i = 0; i < ea.bricksAdded.Length; i++)
                    {
                        EditorUI.instance.DeleteElement(ea.bricksAdded[i].ID);
                    }
                }
                if (ea.groupsAdded != null)
                {
                    for (int i = 0; i < ea.groupsAdded.Length; i++)
                    {
                        EditorUI.instance.DeleteElement(ea.groupsAdded[i].ID);
                    }
                }
                break;

            case EditorAction.ActionType.ElementsChanged:
                // revert element settings to old settings
                ElementsChanged elc = action as ElementsChanged;
                for (int i = 0; i < elc.newBricks.Length; i++)
                {
                    EditorMain.instance.SetBrickProperties(elc.oldBricks[i], elc.newBricks[i].ID);
                    EditorUI.instance.UpdateElement(elc.newBricks[i].ID);
                }
                EditorUI.instance.UpdateInspector();
                break;

            case EditorAction.ActionType.ElementsRemoved:
                // add removed elements
                ElementsRemoved er = action as ElementsRemoved;
                if (er.bricksRemoved != null)
                {
                    for (int i = 0; i < er.bricksRemoved.Length; i++)
                    {
                        EditorUI.instance.ImportBrick(er.bricksRemoved[i].ToBrick(false));
                    }
                }
                if (er.groupsRemoved != null)
                {
                    for (int i = 0; i < er.groupsRemoved.Length; i++)
                    {
                        EditorUI.instance.ImportGroup(er.groupsRemoved[i].ToGroup(false));
                    }
                }
                break;

            case EditorAction.ActionType.GenericMapChange:
                // load old saved map
                GenericMapChange gmc = action as GenericMapChange;
                break;
            }
        }
    }
예제 #13
0
 protected void HandleElementsChangedEvent()
 {
     ElementsChanged?.Invoke(this, EventArgs.Empty);
 }
예제 #14
0
 protected void HandleElementsChangedEvent(object sender, EventArgs eventArgs)
 {
     ElementsChanged?.Invoke(this, EventArgs.Empty);
 }