Exemplo n.º 1
0
        private void CommandSelection_Click(object sender, EventArgs e)
        {
            while (flwCommandSelections.Controls.Count > 0)
            {
                flwCommandSelections.Controls.RemoveAt(0);
            }

            sharpRPA.UI.CustomControls.CommandGroupControl selectedControl = (sharpRPA.UI.CustomControls.CommandGroupControl)sender;

            var availableCommands = groupedCommands.Where(cmd => FindAssignedGroup(cmd) == selectedControl.GroupName).FirstOrDefault();

            foreach (var cmd in availableCommands)
            {
                //Instantiate Class
                Core.AutomationCommands.ScriptCommand newCommand = (Core.AutomationCommands.ScriptCommand)Activator.CreateInstance(cmd);

                sharpRPA.UI.CustomControls.CommandItemControl newitm = new sharpRPA.UI.CustomControls.CommandItemControl();
                if (uiImages.ContainsKey(newCommand.CommandName))
                {
                    newitm.CommandImage = uiImages[newCommand.CommandName];
                }

                newitm.CommandDisplay            = newCommand.SelectionName;
                newitm.FunctionalDescription     = FindFunctionalDescription(cmd);
                newitm.ImplementationDescription = FindImplementationDescription(cmd);
                newitm.ForeColor = Color.White;
                newitm.Click    += CommandItem_Click;
                flwCommandSelections.Controls.Add(newitm);
            }
        }
Exemplo n.º 2
0
 private void CommandItem_Click(object sender, EventArgs e)
 {
     if (!flwCommandDescription.Visible)
     {
         flwCommandDescription.Visible = true;
     }
     sharpRPA.UI.CustomControls.CommandItemControl selectedControl = (sharpRPA.UI.CustomControls.CommandItemControl)sender;
     lblCommandName.Text               = selectedControl.CommandDisplay;
     lblFunctionalDescription.Text     = selectedControl.FunctionalDescription;
     lblImplementationDescription.Text = selectedControl.ImplementationDescription;
 }
Exemplo n.º 3
0
        //handles generation of controls for the main flowlayout and tracking/assignment of input elements

        /// <summary>
        /// Generate UI elements for data-collection based on the selected command
        /// </summary>
        private void GenerateUIInputElements(Core.AutomationCommands.ScriptCommand currentCommand)
        {
            //remove all existing controls
            while (flw_InputVariables.Controls.Count > 0)
            {
                flw_InputVariables.Controls.RemoveAt(0);
            }

            //find all input variables -- all input variables start with "v_" in the associated class
            var inputVariableFields = currentCommand.GetType().GetProperties().Where(f => f.Name.StartsWith("v_")).ToList();

            //set form height
            int formHeight = 0;

            //loop through available variables
            foreach (var inputField in inputVariableFields)
            {
                //create a label for each variable name
                Label inputLabel = new Label();
                inputLabel.AutoSize  = true;
                inputLabel.Font      = new Font("Segoe UI", 10, FontStyle.Bold);
                inputLabel.ForeColor = Color.SteelBlue;
                inputLabel.Name      = "lbl_" + inputField.Name;
                formHeight          += 50;
                //apply friendly translation
                var propertyAttributesAssigned = inputField.GetCustomAttributes(typeof(Core.AutomationCommands.Attributes.PropertyAttributes.PropertyDescription), true);

                if (propertyAttributesAssigned.Length > 0)
                {
                    var attribute = (Core.AutomationCommands.Attributes.PropertyAttributes.PropertyDescription)propertyAttributesAssigned[0];
                    inputLabel.Text = attribute.propertyDescription;
                }
                else
                {
                    inputLabel.Text = inputField.Name;
                }

                var inputControl = GenerateInputControl(inputField, currentCommand);

                formHeight += inputControl.Height;

                //add label and input control to flow layout
                flw_InputVariables.Controls.Add(inputLabel);

                //find if UI helpers are applied
                var propertyAllowsVars = inputField.GetCustomAttributes(typeof(Core.AutomationCommands.Attributes.PropertyAttributes.PropertyUIHelper), true);

                if (propertyAllowsVars.Length > 0)
                {
                    foreach (Core.AutomationCommands.Attributes.PropertyAttributes.PropertyUIHelper attrib in propertyAllowsVars)
                    {
                        sharpRPA.UI.CustomControls.CommandItemControl variableInsertion = new sharpRPA.UI.CustomControls.CommandItemControl();
                        variableInsertion.Padding   = new System.Windows.Forms.Padding(10, 0, 0, 0);
                        variableInsertion.ForeColor = Color.Black;
                        variableInsertion.Tag       = inputControl;

                        switch (attrib.additionalHelper)
                        {
                        case Core.AutomationCommands.Attributes.PropertyAttributes.PropertyUIHelper.UIAdditionalHelperType.ShowVariableHelper:
                            //show variable selector
                            variableInsertion.CommandImage   = UI.Images.GetUIImage("VariableCommand");
                            variableInsertion.CommandDisplay = "Insert Variable";
                            variableInsertion.Click         += ShowVariableSelector;
                            flw_InputVariables.Controls.Add(variableInsertion);
                            break;

                        case Core.AutomationCommands.Attributes.PropertyAttributes.PropertyUIHelper.UIAdditionalHelperType.ShowFileSelectionHelper:
                            //show file selector
                            variableInsertion.CommandImage   = UI.Images.GetUIImage("ClipboardGetTextCommand");
                            variableInsertion.CommandDisplay = "Select a File";
                            variableInsertion.ForeColor      = Color.Black;
                            variableInsertion.Tag            = inputControl;
                            variableInsertion.Click         += ShowFileSelector;
                            flw_InputVariables.Controls.Add(variableInsertion);
                            break;

                        default:
                            break;
                        }
                    }

                    //var attribute = (Core.AutomationCommands.Attributes.PropertyAttributes.PropertyUIHelper)propertyAllowsVars[0];
                    //if (attribute.propertyAllowsVariables)
                    //{
                    //    //show variable selector
                    //    sharpRPA.UI.CustomControls.CommandItemControl variableInsertion = new sharpRPA.UI.CustomControls.CommandItemControl();
                    //    variableInsertion.CommandImage = UI.Images.GetUIImage("VariableCommand");
                    //    variableInsertion.CommandDisplay = "Insert Variable";
                    //    variableInsertion.ForeColor = Color.Black;
                    //    variableInsertion.Tag = inputControl;
                    //    variableInsertion.Click += ShowVariableSelector;
                    //    flw_InputVariables.Controls.Add(variableInsertion);
                    //}
                }

                //these types get a helper button to launch another form
                if (inputField.Name == "v_WebSearchTable")
                {
                    Core.AutomationCommands.IEBrowserElementCommand webCommand = (Core.AutomationCommands.IEBrowserElementCommand)currentCommand;
                    sharpRPA.UI.CustomControls.CommandItemControl   newitm     = new sharpRPA.UI.CustomControls.CommandItemControl();

                    newitm.CommandImage   = UI.Images.GetUIImage(webCommand.CommandName);
                    newitm.CommandDisplay = "Click here to Capture Web Element";
                    newitm.ForeColor      = Color.Black;
                    newitm.Click         += ShowElementCaptureForm;
                    flw_InputVariables.Controls.Add(newitm);
                }
                else if (inputField.Name == "v_XMousePosition")
                {
                    Core.AutomationCommands.SendMouseMoveCommand  mouseCommand = (Core.AutomationCommands.SendMouseMoveCommand)currentCommand;
                    sharpRPA.UI.CustomControls.CommandItemControl newitm       = new sharpRPA.UI.CustomControls.CommandItemControl();
                    newitm.CommandImage   = UI.Images.GetUIImage(mouseCommand.CommandName);
                    newitm.CommandDisplay = "Click here to Capture Mouse Position";
                    newitm.ForeColor      = Color.Black;
                    newitm.Click         += ShowMouseCaptureForm;
                    flw_InputVariables.Controls.Add(newitm);
                }

                //add to flow layout
                flw_InputVariables.Controls.Add(inputControl);

                //handle edit mode to add combobox data
                if ((creationMode == CreationMode.Edit) && (currentCommand is Core.AutomationCommands.BeginIfCommand) && (inputControl is DataGridView))
                {
                    Core.AutomationCommands.BeginIfCommand ifCmd = (Core.AutomationCommands.BeginIfCommand)currentCommand;
                    if (ifCmd.v_IfActionType == "Value")
                    {
                        DataGridViewComboBoxCell comparisonComboBox = new DataGridViewComboBoxCell();
                        comparisonComboBox.Items.Add("is equal to");
                        comparisonComboBox.Items.Add("is greater than");
                        comparisonComboBox.Items.Add("is greater than or equal to");
                        comparisonComboBox.Items.Add("is less than");
                        comparisonComboBox.Items.Add("is less than or equal to");
                        comparisonComboBox.Items.Add("is not equal to");

                        //assign cell as a combobox
                        DataGridView inputCtrl = (DataGridView)inputControl;
                        inputCtrl.Rows[1].Cells[1] = comparisonComboBox;
                    }
                }
            }

            if ((currentCommand is Core.AutomationCommands.IEBrowserElementCommand) && (creationMode == CreationMode.Edit))
            {
                Core.AutomationCommands.IEBrowserElementCommand webCommand = (Core.AutomationCommands.IEBrowserElementCommand)currentCommand;

                if (webCommand.v_WebAction == "Invoke Click")
                {
                    DataGridView webActionParameterBox    = (DataGridView)flw_InputVariables.Controls["v_WebActionParameterTable"];
                    Label        additionalParameterLabel = (Label)flw_InputVariables.Controls["lbl_v_WebActionParameterTable"];
                    additionalParameterLabel.Visible = false;
                    webActionParameterBox.Visible    = false;
                }
            }

            //add additional offset
            this.Height = formHeight + 200;
        }