/// <summary>
        /// Gets the bar for the given item.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private FloatingOperationDialogBar GetBarForItem(IOperationItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            // find the bar with the given item...
            FloatingOperationDialogBar bar = null;

            foreach (FloatingOperationDialogBar scanBar in this.panelBars.Controls)
            {
                if (scanBar.Item == item)
                {
                    bar = scanBar;
                    break;
                }
            }

            // not found... create one...
            if (bar == null)
            {
                bar = this.AddBar(item);
            }

            // return...
            return(bar);
        }
        /// <summary>
        /// Updates the view.
        /// </summary>
        public void RefreshView()
        {
            if (this.InvokeRequired)
            {
                RefreshViewDelegate d = new RefreshViewDelegate(this.RefreshView);
                this.Invoke(d);
                return;
            }

            // set...
            IOperationItem item = this.CurrentItem;

            if (item != null)
            {
                // get the bar to display status information in...
                FloatingOperationDialogBar bar = this.GetBarForItem(item);
                if (bar != null)
                {
                    bar.RefreshView();
                }
            }
            else
            {
                if (this.IsDefaultBarVisible)
                {
                    this.DefaultBar.Status = this.Caption;
                }
            }
        }
        /// <summary>
        /// Adds a bar to the view.
        /// </summary>
        /// <returns></returns>
        private FloatingOperationDialogBar AddBar(IOperationItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            // invoke?
            if (this.InvokeRequired)
            {
                // flip...
                AddBarDelegate d = new AddBarDelegate(this.AddBar);
                return((FloatingOperationDialogBar)this.Invoke(d, new object[] { item }));
            }

            // layout...
            this.panelBars.SuspendLayout();
            try
            {
                // clear...
                if (this.IsDefaultBarVisible)
                {
                    this.panelBars.Controls.Clear();
                }

                // create...
                FloatingOperationDialogBar bar = new FloatingOperationDialogBar(item);
                bar.Dock = DockStyle.Top;
                this.panelBars.Controls.Add(bar);

                // listen...
                item.Finished += new EventHandler(item_Finished);

                // set...
                _currentItem = item;

                // return...
                return(bar);
            }
            finally
            {
                this.panelBars.ResumeLayout();
            }
        }
 private void timerSample_Tick(object sender, System.EventArgs e)
 {
     try
     {
         if (this.CurrentItem != null)
         {
             FloatingOperationDialogBar bar = this.GetBarForItem(this.CurrentItem);
             if (bar != null)
             {
                 bar.RefreshView();
             }
         }
     }
     catch (Exception ex)
     {
         this.timerSample.Enabled = false;
         Alert.ShowWarning(this, "Failed to update operation bar.", ex);
     }
 }
        /// <summary>
        /// Removes the bar from the view.
        /// </summary>
        /// <param name="item"></param>
        private void RemoveBar(IOperationItem item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            // invoke...
            if (this.InvokeRequired)
            {
                // flip...
                RemoveBarDelegate d = new RemoveBarDelegate(this.RemoveBar);
                this.Invoke(d, new object[] { item });
                return;
            }

            // layout...
            this.panelBars.SuspendLayout();
            try
            {
                // fins...
                FloatingOperationDialogBar bar = this.GetBarForItem(item);
                if (bar != null)
                {
                    // unsub...
                    item.Finished -= new EventHandler(item_Finished);

                    // remove...
                    this.panelBars.Controls.Remove(bar);

                    // count?
                    if (this.panelBars.Controls.Count == 0)
                    {
                        ShowDefaultBar();
                    }
                }
            }
            finally
            {
                this.panelBars.ResumeLayout();
            }
        }