protected virtual void OnProjectActionStarted(RegexProject sender, RegexActionTypes action)
 {
 }
        private void TriggerFinishCallback(RegexDocument sender, RegexActionTypes action)
        {
            if(InvokeRequired)
            {
                Invoke(new FinishDelegate(TriggerFinishCallback),new object[]{this,action});
                return ;
            }

            _currentAction= RegexActionTypes.None;
            if(RegexProcessingFinished!=null)
            {
                RegexProcessingFinished(sender,action);
            }
        }
        private void RunSplits()
        {
            Regex r;
            string[] found =null;

            _currentAction= RegexActionTypes.Split;
            PrepareToShowRegexMatches();
            PrepareToRunMatch();
            EnableRunButtonsOnDocument(false);
            if((r=MakeRegex())==null)
            {
                this.Cursor=Cursors.Default;
                TriggerFinishCallback(this,RegexActionTypes.Split);
                RegexProject.TriggerActionEnd(RegexActionTypes.Split,null);

                return;
            }

            // Store the results in the text box
            string text = txtInput.Text;
            TimeCounter timer = new TimeCounter();
            timer.Start();
            found = r.Split(text);

            timer.Stop();

            //----------------
            FillListWithSplits(found);
            ShowNumberOfCapturesInStatus(ActionType.Splits,timer.DurationSeconds);

            //DisplayPerformance(ActionType.Matches,timer.DurationSeconds);
            EnableRunButtonsOnDocument(true);
            TriggerFinishCallback(this,RegexActionTypes.Split);
            RegexProject.TriggerActionEnd(RegexActionTypes.Split,found);
        }
        /// <summary>
        /// Make the regular expression and execute a "Replace" operation
        /// </summary>
        private void RunReplace()
        {
            string replacedText =null;
            try
            {
                Regex r;

                _currentAction= RegexActionTypes.Replace;
                PrepareToRunMatch();

                if((r=MakeRegex())==null)
                {
                    this.Cursor=Cursors.Default;
                    TriggerFinishCallback(this,RegexActionTypes.Replace);
                    RegexProject.TriggerActionEnd(RegexActionTypes.Replace,null);
                    return;
                }

                PrepareToShowRegexMatches();
                TimeCounter timer = new TimeCounter();
                timer.Start();

                replacedText = r.Replace(txtInput.Text,txtReplaceWith.Text);;
                timer.Stop();
                ClearTreeNodes();
                DisplayPerformance(ActionType.Replaces,timer.DurationSeconds);
                SetResultText(replacedText);
                EnableRunButtonsOnDocument(true);
                //TODO: Trigget finished callback for replace,split and match event using control.Invoke

            }
            catch(Exception e)
            {
                SetErrorText(e.Message);

            }
            finally
            {
                EnableRunButtonsOnDocument(true);
                TriggerFinishCallback(this,RegexActionTypes.Replace);
                RegexProject.TriggerActionEnd(RegexActionTypes.Replace,replacedText);

            }
        }
        /// <summary>
        /// Look for matches for the regular expression
        /// </summary>
        private void RunMatch()
        {
            MatchCollection  found =null;
            try
            {
                Regex r;
                _currentAction= RegexActionTypes.Match;
                PrepareToShowRegexMatches();
                PrepareToRunMatch();

                if((r=MakeRegex())==null)
                {
                    this.Cursor=Cursors.Default;
                    TriggerFinishCallback(this,RegexActionTypes.Match);
                    RegexProject.TriggerActionEnd(RegexActionTypes.Match,null);
                    return;
                }

                // Store the results in the text box
                string text = txtInput.Text;
                TimeCounter timer = new TimeCounter();
                timer.Start();
                found = r.Matches(text);
                timer.Stop();

                //----------------
                ShowNumberOfCapturesInStatus(ActionType.Matches,timer.DurationSeconds);

                FillTreeWithMatches(found,r);

                DisplayPerformance(ActionType.Matches,timer.DurationSeconds);
                EnableRunButtonsOnDocument(true);

            }
            catch(Exception e)
            {
                SetErrorText(e.Message);
            }
            finally
            {
                EnableRunButtonsOnDocument(true);
                TriggerFinishCallback(this,RegexActionTypes.Match);
                RegexProject.TriggerActionEnd(RegexActionTypes.Match,found);

                ;

            }
        }
 protected virtual void OnProjectActionStarted(RegexProject sender, RegexActionTypes action)
 {
 }