internal void ReactToScreenChangedValue(string changedMember, object oldValue)
        {
            ScreenSave screenSave = EditorLogic.CurrentScreenSave;

            #region Name

            if (changedMember == "ClassName")
            {
                ReactToChangedClassName(oldValue, screenSave);
            }

            #endregion

            #region BaseScreen

            else if (changedMember == "BaseScreen")
            {
                if (ProjectManager.VerifyInheritanceGraph(screenSave) == ProjectManager.CheckResult.Failed)
                {
                    screenSave.BaseScreen = (string)oldValue;
                }
                else
                {
                    screenSave.UpdateFromBaseType();
                }
            }

            #endregion


            EventResponseSave eventSave = screenSave.GetEvent(changedMember);

            if (eventSave != null)
            {
                //if (!string.IsNullOrEmpty(eventSave.InstanceMethod) && EditorLogic.CurrentElement != null)
                //{
                //    InsertMethodCallInElementIfNecessary(EditorLogic.CurrentScreenSave, eventSave.InstanceMethod);
                //}
            }
        }
예제 #2
0
        public static void UpdateAllDerivedElementFromBaseValues(bool regenerateCode)
        {
            if (EditorLogic.CurrentEntitySave != null)
            {
                List <EntitySave> derivedEntities = ObjectFinder.Self.GetAllEntitiesThatInheritFrom(EditorLogic.CurrentEntitySave.Name);

                List <NamedObjectSave> nosList = ObjectFinder.Self.GetAllNamedObjectsThatUseEntity(EditorLogic.CurrentEntitySave.Name);

                for (int i = 0; i < derivedEntities.Count; i++)
                {
                    EntitySave entitySave = derivedEntities[i];

                    nosList.AddRange(ObjectFinder.Self.GetAllNamedObjectsThatUseEntity(entitySave.Name));


                    entitySave.UpdateFromBaseType();
                    // Update the tree nodes
                    EntityTreeNode treeNode = GlueState.Self.Find.EntityTreeNode(entitySave);
                    treeNode.UpdateReferencedTreeNodes();

                    if (regenerateCode)
                    {
                        CodeWriter.GenerateCode(entitySave);
                    }
                }

                foreach (NamedObjectSave nos in nosList)
                {
                    nos.UpdateCustomProperties();

                    IElement element = nos.GetContainer();

                    if (element != null)
                    {
                        CodeWriter.GenerateCode(element);
                    }
                }
            }
            else if (EditorLogic.CurrentScreenSave != null)
            {
                List <ScreenSave> derivedScreens = ObjectFinder.Self.GetAllScreensThatInheritFrom(EditorLogic.CurrentScreenSave.Name);

                for (int i = 0; i < derivedScreens.Count; i++)
                {
                    ScreenSave screenSave = derivedScreens[i];
                    screenSave.UpdateFromBaseType();

                    ScreenTreeNode treeNode = GlueState.Self.Find.ScreenTreeNode(screenSave);
                    treeNode.UpdateReferencedTreeNodes();

                    if (regenerateCode)
                    {
                        CodeWriter.GenerateCode(screenSave);
                    }
                }
            }
            else
            {
                if (EditorLogic.CurrentNamedObject == null)
                {
                    // This means the value is being set on the Screen itself
                    throw new NotImplementedException();
                }
            }
        }