private void OnTokenItemMatchingFinished(object sender, TokenMatchingFinishedArgs args)
 {
     if (TokenMatchingFinished != null)
     {
         TokenMatchingFinished(this, args);
     }
     SuspendByStep();
 }
        private void OnControllerTokenMatchingFinished(object sender,
                                                       TokenMatchingFinishedArgs _args)
        {
            Application.Invoke(sender,
                               _args,
                               delegate(object resender, EventArgs a)
            {
                TokenMatchingFinishedArgs args = (TokenMatchingFinishedArgs)a;

                string tokenType = args.ExpectedType;

                if (args.MatchedToken != null)
                {
                    int idx = SearchToken(args.MatchedToken);
                    remainingItemsStore.IterNthChild(out selectedRemainingItem,
                                                     idx);
                    TreePath selectedPath =
                        remainingItemsStore.GetPath(selectedRemainingItem);

                    remainingItemsIconView.SelectPath(selectedPath);
                    remainingItemsIconView.ScrollToPath(selectedPath, 0.5f, 0f);

                    this.MarkImage(args.MatchedToken);

                    parsingTaskLabel.Markup =
                        String.Format("<b>Se encontró un item válido del tipo <i>{0}</i>, <i>{1}</i> entre los items restantes</b>",
                                      GLib.Markup.EscapeText(tokenType),
                                      GLib.Markup.EscapeText(args.MatchedToken.Text));

                    currentNode.AddMatchedToken(args.MatchedToken);
                    currentNode.Select();

                    remainingItemsStore.Remove(ref selectedRemainingItem);

                    TreeIter first;
                    if (remainingItemsStore.GetIterFirst(out first))
                    {
                        remainingItemsIconView.ScrollToPath(remainingItemsStore.GetPath(first));
                    }
                }
                else
                {
                    parsingTaskLabel.Markup =
                        String.Format("<b>No se encotró un item válido del tipo <i>{0}</i> entre los items restantes</b>",
                                      GLib.Markup.EscapeText(tokenType));
                }

                if (controller.StepMode != ControllerStepMode.UntilEnd)
                {
                    parsingNextButtonsAlign.Sensitive = true;
                }
            });
        }