/// <summary>
        /// Invokes the BeforeCheckedChange event.
        /// </summary>
        /// <param name="invokingModNode">The invoking ModNode that will be passed as sender.</param>
        /// <param name="newCheckedState">The new checked state that should be applied.</param>
        /// <returns>True if continue with the change.</returns>
        internal static BeforeCheckedChangeEventArgs InvokeBeforeCheckedChange(ConflictInfoNode invokingModNode, bool newCheckedState)
        {
            var args = new BeforeCheckedChangeEventArgs(invokingModNode, newCheckedState);

            if (BeforeCheckedChange != null)
                BeforeCheckedChange(invokingModNode, args);

            return args;
        }
        /// <summary>
        /// Invokes the BeforeCheckedChange event.
        /// </summary>
        /// <param name="invokingModNode">The invoking ModNode that will be passed as sender.</param>
        /// <param name="newCheckedState">The new checked state that should be applied.</param>
        /// <returns>True if continue with the change.</returns>
        internal static BeforeCheckedChangeEventArgs InvokeBeforeCheckedChange(ModNode invokingModNode, bool newCheckedState)
        {
            var args = new BeforeCheckedChangeEventArgs(invokingModNode, newCheckedState);

            if (BeforeCheckedChange != null)
            {
                BeforeCheckedChange(invokingModNode, args);
            }

            return(args);
        }
 private void BeforeCheckedChange(object sender, BeforeCheckedChangeEventArgs e)
 {
     e.Cancel = (e.Node.Parent as ConflictInfoNode == null);
 }
        /// <summary>
        /// Callback of the ModSelectionTreeModel when a checked state of a ModNode is changing.
        /// </summary>
        /// <param name="sender">Invoker of the BeforeCheckedChange event.</param>
        /// <param name="args">The BeforeCheckedChangeEventArgs.</param>
        protected static void BeforeCheckedChange(object sender, BeforeCheckedChangeEventArgs args)
        {
            var argNode = args.Node as ModNode;
            if (argNode == null)
                return;

            if (!argNode.ZipExists)
            {
                if (!args.NewValue)
                    args.Cancel = (DialogResult.Yes != MessageBox.Show(View.ParentForm, Messages.MSG_UNCHECK_NO_ZIPARCHIVE_WARNING, Messages.MSG_TITLE_ATTENTION, MessageBoxButtons.YesNo));
                else
                {
                    if (argNode.IsInstalled)
                        return;

                    MessageBox.Show(View.ParentForm, Messages.MSG_CHECK_NO_ZIPARCHIVE_WARNING, Messages.MSG_TITLE_ATTENTION);
                    args.Cancel = true;
                }
            }
            else if (args.NewValue)
            {
                if (!argNode.HasDestination || argNode.HasChildesWithoutDestination)
                {
                    string msg = string.Format(Messages.MSG_0_HAS_CHILDES_WITHOUT_DESTINATION_WARNING, argNode.Name);
                    MessageBox.Show(View.ParentForm, msg, Messages.MSG_TITLE_ATTENTION);
                    if (argNode.IsFile || (!argNode.IsFile && !argNode.HasDestinationForChilds))
                        args.NewValue = false;
                }
            }
        }