GenerateEventsForVariable() static private method

static private GenerateEventsForVariable ( ICodeBlock codeBlock, string variableName, bool isEventNew = false ) : void
codeBlock ICodeBlock
variableName string
isEventNew bool
return void
示例#1
0
        internal static void TryGenerateEventsForVariable(ICodeBlock codeBlock, CustomVariable customVariable, IElement container)
        {
            var shouldGenerate = ShouldGenerateEventsForVariable(customVariable, container);

            // Currently we don't support events on static variables
            if (shouldGenerate)
            {
                EventCodeGenerator.GenerateEventsForVariable(codeBlock, customVariable.Name);
            }
        }
        private static void GenerateEnabledVariable(ICodeBlock codeBlock, IElement element)
        {
            CustomVariable exposedEnabledVariable  = element.CustomVariables.FirstOrDefault(item => item.Name == "Enabled" && item.Type == "bool");
            bool           isEnableVariableExposed = exposedEnabledVariable != null;

            bool hasEvents = exposedEnabledVariable != null && exposedEnabledVariable.CreatesEvent && element.Events.Any(item => item.SourceVariable == exposedEnabledVariable.Name);

            if (hasEvents)
            {
                EventCodeGenerator.GenerateEventsForVariable(codeBlock, exposedEnabledVariable.Name);
            }

            string prefix;
            string propertyName;

            if (isEnableVariableExposed)
            {
                prefix       = "public bool";
                propertyName = "Enabled";
            }
            else
            {
                prefix       = "bool";
                propertyName = "FlatRedBall.Gui.IWindow.Enabled";
            }

            codeBlock.Line(Resources.Resource1.IWindowTemplate);

            var property = codeBlock.Property(prefix, propertyName);

            property.Get().Line("return mEnabled;");

            var setBlock = property.Set();

            if (hasEvents)
            {
                EventCodeGenerator.GenerateEventRaisingCode(setBlock, BeforeOrAfter.Before, exposedEnabledVariable.Name, element);
            }

            var setIf = setBlock.If("mEnabled != value");

            setIf.Line("mEnabled = value;");
            setIf.Line("EnabledChange?.Invoke(this);");
            if (hasEvents)
            {
                EventCodeGenerator.GenerateEventRaisingCode(setIf, BeforeOrAfter.After, exposedEnabledVariable.Name, element);
            }
        }
        public override ICodeBlock GenerateFields(ICodeBlock codeBlock, IElement element)
        {
            EntitySave entitySave = element as EntitySave;

            if (entitySave != null && entitySave.ImplementsIVisible)
            {
                #region Comments on the history of events
                // CustomVariable visibleCustomVariable = entitySave.GetCustomVariable("Visible");
                // September 22, 2011 (Victor Chelaru)
                // We used to only create events if the
                // user set them in Glue.  We're changing
                // the approach for events now to always have
                // them available in code, but then have them be
                // exposed in Glue.  This enables us to centralize
                // event code generation instead of spreading it out
                // through every module that may create events.
                //bool createsVisibleEvent =
                //    visibleCustomVariable != null && visibleCustomVariable.CreatesEvent;

                //if (createsVisibleEvent)
                //{
                #endregion
                bool isNew = entitySave.GetInheritsFromIVisible();

                EventCodeGenerator.GenerateEventsForVariable(codeBlock, "Visible", isNew);

                GenerateVisibleProperty(codeBlock, element, entitySave);

                GenerateIgnoresParentVisibility(codeBlock, entitySave);

                GenerateAbsoluteVisible(codeBlock, entitySave);

                GenerateIVisibleParent(codeBlock, entitySave);
            }

            return(codeBlock);
        }