示例#1
0
        /// <summary>
        /// Creates a <see cref="StrictContextMenuItem"/> which is bound to the action of validating the input of each calculation
        /// in a calculation group.
        /// </summary>
        /// <typeparam name="TCalculationGroupContext">The type of the calculation group context.</typeparam>
        /// <param name="calculationGroupContext">The calculation group context belonging to the calculation group.</param>
        /// <param name="validateAllAction">The action that validates all calculations.</param>
        /// <param name="enableMenuItemFunction">The function which determines whether the item should be enabled. If the
        /// item should not be enabled, then the reason for that should be returned by the function and will be shown as a tooltip.
        /// If the item should be enabled then the function should return a <c>null</c> or empty string.</param>
        /// <returns>The created <see cref="StrictContextMenuItem"/>.</returns>
        public static StrictContextMenuItem CreateValidateAllCalculationsInGroupItem <TCalculationGroupContext>(
            TCalculationGroupContext calculationGroupContext,
            Action <TCalculationGroupContext> validateAllAction,
            Func <TCalculationGroupContext, string> enableMenuItemFunction)
            where TCalculationGroupContext : ICalculationContext <CalculationGroup, ICalculatableFailureMechanism>
        {
            CalculationGroup calculationGroup = calculationGroupContext.WrappedData;
            var menuItem = new StrictContextMenuItem(
                Resources.Validate_All,
                Resources.CalculationGroup_Validate_All_ToolTip,
                Resources.ValidateAllIcon,
                (o, args) => validateAllAction(calculationGroupContext));

            if (!calculationGroup.GetCalculations().Any())
            {
                menuItem.Enabled     = false;
                menuItem.ToolTipText = Resources.ValidateAll_No_calculations_to_validate;
            }
            else
            {
                SetStateWithEnableFunction(calculationGroupContext, enableMenuItemFunction, menuItem);
            }

            return(menuItem);
        }
示例#2
0
        public void Constructor_WithParameters_PropertiesSet()
        {
            // Setup
            var mockRepository = new MockRepository();

            const string text    = "text";
            const string toolTip = "tooltip";
            Bitmap       image   = Resources.ImportIcon;
            var          counter = 0;

            mockRepository.ReplayAll();

            EventHandler handler = (s, e) => counter++;

            // Call
            var result = new StrictContextMenuItem(text, toolTip, image, handler);

            result.PerformClick();

            // Assert
            Assert.IsInstanceOf <StrictContextMenuItem>(result);
            Assert.AreEqual(text, result.Text);
            Assert.AreEqual(toolTip, result.ToolTipText);
            Assert.AreEqual(1, counter);
            TestHelper.AssertImagesAreEqual(image, result.Image);

            mockRepository.VerifyAll();
        }
示例#3
0
        private ContextMenuStrip HydraulicLoadsStateFailureMechanismContextMenuStrip(HydraulicLoadsStateFailureMechanismContext context,
                                                                                     object parentData,
                                                                                     TreeViewControl treeViewControl)
        {
            var builder = new RiskeerContextMenuBuilder(Gui.Get(context, treeViewControl));

            IAssessmentSection assessmentSection = context.Parent;
            var calculateAllItem = new StrictContextMenuItem(
                RiskeerCommonFormsResources.Calculate_All,
                RiskeerCommonFormsResources.Calculate_All_ToolTip,
                RiskeerCommonFormsResources.CalculateAllIcon,
                (sender, args) =>
            {
                ActivityProgressDialogRunner.Run(
                    Gui.MainWindow,
                    GrassCoverErosionOutwardsCalculationActivityFactory
                    .CreateWaveConditionsCalculationActivities(context.WrappedData.CalculationsGroup,
                                                               context.WrappedData,
                                                               assessmentSection));
            });

            SetHydraulicsMenuItemEnabledStateAndTooltip(assessmentSection,
                                                        calculateAllItem);

            return(builder.AddOpenItem()
                   .AddSeparator()
                   .AddCustomItem(calculateAllItem)
                   .AddSeparator()
                   .AddCollapseAllItem()
                   .AddExpandAllItem()
                   .AddSeparator()
                   .AddPropertiesItem()
                   .Build());
        }
        private IContextMenuBuilder AddStubItem()
        {
            ToolStripItem toolStripItem = new StrictContextMenuItem(string.Empty, string.Empty, null, (sender, args) => {});

            contextMenu.Items.Add(toolStripItem);

            return(this);
        }
示例#5
0
        private static void SetHydraulicsMenuItemEnabledStateAndTooltip(IAssessmentSection assessmentSection,
                                                                        StrictContextMenuItem menuItem)
        {
            string validationText = EnableValidateAndCalculateMenuItem(assessmentSection);

            if (!string.IsNullOrEmpty(validationText))
            {
                menuItem.Enabled     = false;
                menuItem.ToolTipText = validationText;
            }
        }
示例#6
0
        /// <summary>
        /// Creates a <see cref="StrictContextMenuItem"/> which is bound to the action of validating the input of a calculation.
        /// </summary>
        /// <typeparam name="TCalculationContext">The type of the calculation context.</typeparam>
        /// <param name="calculation">The context containing the calculation to validate.</param>
        /// <param name="validateAction">The action that performs the validation.</param>
        /// <param name="enableMenuItemFunction">The function which determines whether the item should be enabled. If the
        /// item should not be enabled, then the reason for that should be returned by the function and will be shown as a tooltip.
        /// If the item should be enabled then the function should return a <c>null</c> or empty string.</param>
        /// <returns>The created <see cref="StrictContextMenuItem"/>.</returns>
        public static StrictContextMenuItem CreateValidateCalculationItem <TCalculationContext>(
            TCalculationContext calculation,
            Action <TCalculationContext> validateAction,
            Func <TCalculationContext, string> enableMenuItemFunction)
            where TCalculationContext : ICalculationContext <ICalculation, ICalculatableFailureMechanism>
        {
            var menuItem = new StrictContextMenuItem(
                Resources.Validate,
                Resources.Validate_ToolTip,
                Resources.ValidateIcon,
                (o, args) => validateAction(calculation));

            SetStateWithEnableFunction(calculation, enableMenuItemFunction, menuItem);
            return(menuItem);
        }
示例#7
0
        /// <summary>
        /// Creates a <see cref="StrictContextMenuItem"/> which is bound to the action of clearing the output of all calculations in the calculation group.
        /// </summary>
        /// <param name="calculationGroup">The calculation group to clear the output for.</param>
        /// <returns>The created <see cref="StrictContextMenuItem"/>.</returns>
        public static StrictContextMenuItem CreateClearAllCalculationOutputInGroupItem(CalculationGroup calculationGroup)
        {
            var clearAllItem = new StrictContextMenuItem(
                Resources.Clear_all_output,
                Resources.CalculationGroup_ClearOutput_ToolTip,
                Resources.ClearIcon,
                (o, args) => ClearAllCalculationOutputInGroup(calculationGroup));

            if (!calculationGroup.HasOutput())
            {
                clearAllItem.Enabled     = false;
                clearAllItem.ToolTipText = Resources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear;
            }

            return(clearAllItem);
        }
示例#8
0
        /// <summary>
        /// Creates a <see cref="StrictContextMenuItem"/> which is bound to the action of clearing the output of all calculations in a failure mechanism.
        /// </summary>
        /// <param name="failureMechanism">The failure mechanism to clear the output for.</param>
        /// <returns>The created <see cref="StrictContextMenuItem"/>.</returns>
        public static StrictContextMenuItem CreateClearAllCalculationOutputInFailureMechanismItem(ICalculatableFailureMechanism failureMechanism)
        {
            var clearAllItem = new StrictContextMenuItem(
                Resources.Clear_all_output,
                Resources.Clear_all_output_ToolTip,
                Resources.ClearIcon,
                (o, args) => ClearAllCalculationOutputInFailureMechanism(failureMechanism));

            if (!failureMechanism.Calculations.Any(c => c.HasOutput))
            {
                clearAllItem.Enabled     = false;
                clearAllItem.ToolTipText = Resources.CalculationGroup_ClearOutput_No_calculation_with_output_to_clear;
            }

            return(clearAllItem);
        }
示例#9
0
        /// <summary>
        /// Creates a <see cref="StrictContextMenuItem"/> which is bound to the action of clearing the output of a calculation.
        /// </summary>
        /// <param name="calculation">The calculation to clear the output for.</param>
        /// <returns>The created <see cref="StrictContextMenuItem"/>.</returns>
        public static StrictContextMenuItem CreateClearCalculationOutputItem(ICalculation calculation)
        {
            var clearOutputItem = new StrictContextMenuItem(
                Resources.Clear_output,
                Resources.Clear_output_ToolTip,
                Resources.ClearIcon,
                (o, args) => ClearCalculationOutput(calculation));

            if (!calculation.HasOutput)
            {
                clearOutputItem.Enabled     = false;
                clearOutputItem.ToolTipText = Resources.ClearOutput_No_output_to_clear;
            }

            return(clearOutputItem);
        }
示例#10
0
        /// <summary>
        /// Creates a <see cref="StrictContextMenuItem"/> which is bound to the action of updating
        /// the <see cref="ForeshoreProfile"/> of a <paramref name="calculation"/>.
        /// </summary>
        /// <typeparam name="TCalculationInput">The type of calculation input that can have a foreshore profile.</typeparam>
        /// <param name="calculation">The calculation to update.</param>
        /// <param name="inquiryHelper">Object responsible for inquiring the required data.</param>
        /// <param name="updateAction">The action to perform when the foreshore profile is updated.</param>
        /// <returns>The created <see cref="StrictContextMenuItem"/>.</returns>
        public static StrictContextMenuItem CreateUpdateForeshoreProfileOfCalculationItem <TCalculationInput>(
            ICalculation <TCalculationInput> calculation,
            IInquiryHelper inquiryHelper,
            Action <ICalculation <TCalculationInput> > updateAction)
            where TCalculationInput : ICalculationInput, IHasForeshoreProfile
        {
            var               contextMenuEnabled         = true;
            string            toolTipMessage             = Resources.CreateUpdateForeshoreProfileItem_Update_calculation_with_ForeshoreProfile_ToolTip;
            TCalculationInput calculationInputParameters = calculation.InputParameters;

            if (calculationInputParameters.ForeshoreProfile == null)
            {
                contextMenuEnabled = false;
                toolTipMessage     = Resources.CreateUpdateForeshoreProfileItem_Update_calculation_no_ForeshoreProfile_ToolTip;
            }
            else if (calculationInputParameters.IsForeshoreProfileInputSynchronized)
            {
                contextMenuEnabled = false;
                toolTipMessage     = Resources.CalculationItem_No_changes_to_update_ToolTip;
            }

            var menuItem = new StrictContextMenuItem(
                Resources.CreateUpdateForeshoreProfileItem_Update_ForeshoreProfile_data,
                toolTipMessage,
                Resources.UpdateItemIcon,
                (o, args) =>
            {
                UpdateForeshoreProfileDependentDataOfCalculation(new[]
                {
                    calculation
                },
                                                                 inquiryHelper,
                                                                 Resources.VerifyUpdate_Confirm_calculation_output_cleared,
                                                                 updateAction);
            })
            {
                Enabled = contextMenuEnabled
            };

            return(menuItem);
        }
示例#11
0
        /// <summary>
        /// Creates a <see cref="StrictContextMenuItem"/> which is bound to the action of performing all calculations in a failure mechanism.
        /// </summary>
        /// <typeparam name="TFailureMechanismContext">The type of the failure mechanism.</typeparam>
        /// <param name="failureMechanism">The failure mechanism to validate the calculations of.</param>
        /// <param name="validateAllAction">The action that validates all calculations.</param>
        /// <param name="enableMenuItemFunction">The function which determines whether the item should be enabled. If the
        /// item should not be enabled, then the reason for that should be returned by the function and will be shown as a tooltip.
        /// If the item should be enabled then the function should return a <c>null</c> or empty string.</param>
        /// <returns>The created <see cref="StrictContextMenuItem"/>.</returns>
        public static StrictContextMenuItem CreateValidateAllCalculationsInFailureMechanismItem <TFailureMechanismContext>(
            TFailureMechanismContext failureMechanism,
            Action <TFailureMechanismContext> validateAllAction,
            Func <TFailureMechanismContext, string> enableMenuItemFunction)
            where TFailureMechanismContext : IFailureMechanismContext <ICalculatableFailureMechanism>
        {
            var menuItem = new StrictContextMenuItem(
                Resources.Validate_All,
                Resources.FailureMechanism_Validate_All_ToolTip,
                Resources.ValidateAllIcon,
                (o, args) => validateAllAction(failureMechanism));

            if (!failureMechanism.WrappedData.Calculations.Any())
            {
                menuItem.Enabled     = false;
                menuItem.ToolTipText = Resources.ValidateAll_No_calculations_to_validate;
            }
            else
            {
                SetStateWithEnableFunction(failureMechanism, enableMenuItemFunction, menuItem);
            }

            return(menuItem);
        }
示例#12
0
 /// <summary>
 /// Adds a custom item to the <see cref="ContextMenuStrip"/>.
 /// </summary>
 /// <param name="item">The custom <see cref="StrictContextMenuItem"/> to add to the <see cref="ContextMenuStrip"/>.</param>
 /// <returns>The <see cref="RiskeerContextMenuBuilder"/> itself.</returns>
 public RiskeerContextMenuBuilder AddCustomItem(StrictContextMenuItem item)
 {
     contextMenuBuilder.AddCustomItem(item);
     return(this);
 }
 /// <summary>
 /// Adds a dummy <see cref="ToolStripItem"/> to the <see cref="ContextMenuStrip"/>.
 /// </summary>
 /// <param name="item">The custom <see cref="StrictContextMenuItem"/> to add to the <see cref="ContextMenuStrip"/>.</param>
 /// <returns>The <see cref="CustomItemsOnlyContextMenuBuilder"/>.</returns>
 public IContextMenuBuilder AddCustomItem(StrictContextMenuItem item)
 {
     contextMenu.Items.Add(item);
     return(this);
 }
示例#14
0
        private static void SetStateWithEnableFunction <T>(T context, Func <T, string> enableFunction, StrictContextMenuItem menuItem)
        {
            string validationText = enableFunction?.Invoke(context);

            if (!string.IsNullOrEmpty(validationText))
            {
                menuItem.Enabled     = false;
                menuItem.ToolTipText = validationText;
            }
        }
示例#15
0
        private ContextMenuStrip CalculationGroupContextContextMenuStrip(WaveImpactAsphaltCoverCalculationGroupContext nodeData,
                                                                         object parentData, TreeViewControl treeViewControl)
        {
            CalculationGroup group         = nodeData.WrappedData;
            IInquiryHelper   inquiryHelper = GetInquiryHelper();

            var  builder       = new RiskeerContextMenuBuilder(Gui.Get(nodeData, treeViewControl));
            bool isNestedGroup = parentData is WaveImpactAsphaltCoverCalculationGroupContext;

            WaveImpactAsphaltCoverWaveConditionsCalculation[] calculations = group
                                                                             .GetCalculations()
                                                                             .OfType <WaveImpactAsphaltCoverWaveConditionsCalculation>().ToArray();

            StrictContextMenuItem generateCalculationsItem = CreateGenerateWaveConditionsCalculationsItem(nodeData);

            builder.AddImportItem()
            .AddExportItem()
            .AddSeparator();

            if (isNestedGroup)
            {
                builder.AddDuplicateCalculationItem(group, nodeData)
                .AddSeparator();
            }
            else
            {
                builder.AddCustomItem(generateCalculationsItem)
                .AddSeparator();
            }

            builder.AddCreateCalculationGroupItem(group)
            .AddCreateCalculationItem(nodeData, AddWaveConditionsCalculation, CalculationType.Hydraulic)
            .AddSeparator();

            if (isNestedGroup)
            {
                builder.AddRenameItem();
            }

            builder.AddUpdateForeshoreProfileOfCalculationsItem(calculations, inquiryHelper,
                                                                SynchronizeCalculationWithForeshoreProfileHelper.UpdateForeshoreProfileDerivedCalculationInput)
            .AddSeparator()
            .AddValidateAllCalculationsInGroupItem(nodeData,
                                                   ValidateAllInCalculationGroup,
                                                   EnableValidateAndCalculateMenuItemForCalculationGroup)
            .AddPerformAllCalculationsInGroupItem(nodeData,
                                                  CalculateAllInCalculationGroup,
                                                  EnableValidateAndCalculateMenuItemForCalculationGroup)
            .AddSeparator()
            .AddClearAllCalculationOutputInGroupItem(group);

            if (isNestedGroup)
            {
                builder.AddDeleteItem();
            }
            else
            {
                builder.AddRemoveAllChildrenItem();
            }

            return(builder.AddSeparator()
                   .AddCollapseAllItem()
                   .AddExpandAllItem()
                   .AddSeparator()
                   .AddPropertiesItem()
                   .Build());
        }