// Ajout de l'élément
        /// <summary>
        /// Alerts listeners that a rule has been used.
        /// </summary>
        /// <param name="e">An ElementAddedEventArgs that contains the event data.</param>
        public override void ElementAdded(ElementAddedEventArgs e)
        {
            #region Condition

            // Test the element
            ICustomizableElement model = e.ModelElement as ICustomizableElement;
            if (model == null)
            {
                return;
            }

            if (
                e.ModelElement.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.TopLevelTransaction.
                IsSerializing || e.ModelElement.Store.InUndoRedoOrRollback
                ||
                e.ModelElement.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.Context.ContextInfo.
                ContainsKey(StrategyManager.IgnoreStrategyWizards))
            {
                return;
            }

            #endregion

            #region Traitement

            // A ce stade, on est dans une transaction
            IStrategyWizard defaultWizard = GetDefaultWizard(e.ModelElement);
            if (!model.ExecuteWizard(e.ModelElement, defaultWizard))
            {
                // L'utilisateur a annulé
                throw new CanceledByUser();
            }

            #endregion
        }
Beispiel #2
0
        // Lors de la création d'un element, on va afficher un wizard que l'utilisateur peut annuler.
        // TIPS permet d'intercepter la création d'un enfant
        /// <summary>
        /// Execution d'un wizard lors de la création d'un élément
        /// </summary>
        /// <param name="element">The element.</param>
        /// <param name="defaultWizard">The default wizard.</param>
        /// <returns></returns>
        public bool ExecuteWizard(ModelElement element, IStrategyWizard defaultWizard)
        {
            if (!(element is ICustomizableElement))
            {
                return(true);
            }

            try
            {
                StrategyElementElementAddedEventArgs e = new StrategyElementElementAddedEventArgs(element);

                foreach (StrategyBase strategy in GetStrategies(false))
                {
                    IStrategyAddElementInterceptor sa = strategy as IStrategyAddElementInterceptor;
                    if (sa == null)
                    {
                        continue;
                    }
                    IStrategyWizard wizard = sa.GetWizard(element);
                    if (wizard != null)
                    {
                        wizard.RunWizard(this, e);
                        if (e.UserCancel)
                        {
                            return(false);
                        }

                        if (e.CancelBubble)
                        {
                            break;
                        }
                    }
                }

                if (!e.CancelBubble && defaultWizard != null)
                {
                    defaultWizard.RunWizard(this, e);
                    if (e.UserCancel)
                    {
                        return(false);
                    }
                }

                OnElementAdded(e);

                Generator.GenerateWhenElementAdded(this.Store, CandleModel.GetInstance(this.Store), element as ICustomizableElement);
                return(true);
            }
            catch (Exception ex)
            {
                IIDEHelper ide = ServiceLocator.Instance.GetService <IIDEHelper>();
                if (ide != null)
                {
                    ide.ShowMessage(ex.Message);
                }
                return(false);
            }
        }
Beispiel #3
0
 /// <summary>
 /// Execution d'un wizard lors de la création d'un élément
 /// </summary>
 /// <param name="element">The element.</param>
 /// <param name="defaultWizard">The default wizard.</param>
 /// <returns></returns>
 public bool ExecuteWizard(ModelElement element, IStrategyWizard defaultWizard)
 {
     return(true);
 }