///<summary>Creates a new progress bar and adds it to the form.</summary>
        private ODProgressBar AddNewProgressBar(string leftLabel, string topLabel, string rightLabel, int blockValue, int blockMax, string tagString,
                                                ProgBarStyle progStyle, int marqSpeed, bool isLeftHidden, bool isTopHidden, bool isRightHidden)
        {
            if (_listProgressBars.Count > 10)
            {
                MsgBox.Show(this, "Cannot have more than 10 progress bars on window.");
                return(null);
            }
            ODProgressBar pbar = new ODProgressBar(leftLabel, topLabel, rightLabel, blockValue, blockMax, tagString, progStyle, marqSpeed, isLeftHidden, isTopHidden,
                                                   isRightHidden);
            int rowLocation = tableLayoutPanel1.RowCount;

            tableLayoutPanel1.Controls.Add(pbar, 1, rowLocation);
            pbar.Name = "pbar" + rowLocation;
            return(pbar);
        }
        public void ODEvent_Fired(ODEventArgs e)
        {
            //We don't know what thread will cause a progress status change, so invoke this method as a delegate if necessary.
            if (this.InvokeRequired)
            {
                this.Invoke((Action) delegate() { ODEvent_Fired(e); });
                return;
            }
            //Make sure that this ODEvent is for FormProgressExtended and that the Tag is not null and is a string.
            if (e.Name != _odEventName || e.Tag == null)
            {
                return;
            }
            ProgressBarHelper progHelper = new ProgressBarHelper("");
            bool   hasProgHelper         = false;
            string status = "";

            if (e.Tag.GetType() == typeof(string))
            {
                status = ((string)e.Tag);
            }
            else if (e.Tag.GetType() == typeof(ProgressBarHelper))
            {
                progHelper    = (ProgressBarHelper)e.Tag;
                status        = progHelper.LabelValue;
                hasProgHelper = true;
            }
            else              //Unsupported type passed in.
            {
                return;
            }
            //When the developer wants to close the window, they will send an ODEvent with "DEFCON 1" to signal this form to shut everything down.
            if (status.ToUpper() == "DEFCON 1")
            {
                DialogResult = DialogResult.OK;
                Close();
                return;
            }
            if (hasProgHelper)
            {
                switch (progHelper.ProgressBarEventType)
                {
                case ProgBarEventType.BringToFront:
                    this.TopMost = true;
                    this.TopMost = false;
                    break;

                case ProgBarEventType.Header:
                    this.Text = status;
                    break;

                case ProgBarEventType.ProgressLog:
                    label4.Text = status;
                    break;

                case ProgBarEventType.TextMsg:
                    status = status.Trim();                          //Get rid of leading and trailing new lines.
                    textMsg.AppendText((string.IsNullOrWhiteSpace(textMsg.Text) ? "" : "\r\n") + status.PadRight(60));
                    break;

                case ProgBarEventType.WarningOff:
                case ProgBarEventType.AllowResume:
                    labelWarning.Visible = false;
                    butPause.Enabled     = true;
                    butPause.Text        = Lan.g(this, "Resume");
                    break;

                case ProgBarEventType.Done:
                    butCancel.Visible = true;                           //can sometimes be set to invisible with HideButtons. Show if previously invisible.
                    butCancel.Text    = Lan.g(this, "Close");
                    butPause.Enabled  = false;
                    _isDone           = true;
                    break;

                case ProgBarEventType.HideButtons:                        //hide pause and cancel. Call Done when "close button" should appear.
                    butPause.Visible  = false;
                    butCancel.Visible = false;
                    break;

                case ProgBarEventType.ProgressBar:
                default:
                    if (!_listProgressBars.Exists(x => x.TagString.ToLower() == progHelper.TagString.ToLower()))                           //if not already added
                    {
                        ODProgressBar progBar = AddNewProgressBar(progHelper.LabelValue, progHelper.LabelTop, progHelper.PercentValue, progHelper.BlockValue,
                                                                  progHelper.BlockMax, progHelper.TagString, progHelper.ProgressStyle, progHelper.MarqueeSpeed, progHelper.IsValHidden, progHelper.IsTopHidden,
                                                                  progHelper.IsPercentHidden);
                        if (progBar == null)
                        {
                            break;
                        }
                        _listProgressBars.Add(progBar);
                    }
                    else
                    {
                        ODProgressBar odBar = _listProgressBars.Find(x => x.TagString.ToLower() == progHelper.TagString.ToLower());
                        UpdateProgressBar(odBar, progHelper);
                    }
                    break;
                }
            }
            Application.DoEvents();            //So that the label updates with the new status.
        }
 private void UpdateProgressBar(ODProgressBar progBar, ProgressBarHelper progHelper)
 {
     progBar.ODProgUpdate(progHelper.LabelValue, progHelper.LabelTop, progHelper.PercentValue, progHelper.BlockValue, progHelper.BlockMax,
                          progHelper.TagString, progHelper.ProgressStyle, progHelper.MarqueeSpeed, progHelper.IsValHidden, progHelper.IsTopHidden, progHelper.IsPercentHidden);
 }