public ProgressIndicator(Action <StatusBarMessageEventArgs> action)
        {
            m_init = delegate(int min, int max, int initial)
            {
                if (min < 0 || max < 0)
                {
                    return;
                }

                Min     = 0;
                Max     = 100;
                Step    = (int)Math.Floor((decimal)100 / max);
                Initial = (int)Math.Round((decimal)initial / max * 100);

                action(new StatusBarMessageEventArgs(Initial));
            };

            m_setText = delegate(string message)
            {
                action(new StatusBarMessageEventArgs(message));
            };

            m_complete = delegate()
            {
                action(new StatusBarMessageEventArgs(string.Empty));
            };
        }
        public ProgressIndicator(ProgressIndicatorInitialize init, ProgressIndicatorComplete complete,
                                 ProgressIndicatorAppendStatusText appendText, ProgressIndicatorSetStatusText setText,
                                 ProgressIndicatorIncrement increment, ProgressIndicatorSetValue setValue)
        {
            if (init == null)
            {
                throw new ArgumentNullException("init");
            }

            m_init       = init;
            m_appendText = appendText;
            m_setText    = setText;
            m_setValue   = setValue;
            m_increment  = increment;
            m_complete   = complete;
        }