private void OnControllerStepDone(object sender, 
		                                  EventArgs args)
		{
			Application.Invoke(delegate(object resender, EventArgs a)
			{
				
				if(currentNode.Parent !=null)
				{
					string currentLabel = currentNode.Matcher.Label;
					currentNode =  currentNode.Parent as SyntacticalCoverNode;	
					currentNode.Select();
					syntacticalCoverTree.CollapseRow(syntacticalCoverTree.Selection.GetSelectedRows()[0]);
					
					parsingTaskLabel.Markup=
					String.Format("<b>Volviendo al nodo padre de <i>{0}</i>, <i>{1}</i></b>",
						          GLib.Markup.EscapeText(currentLabel),
					              GLib.Markup.EscapeText(currentNode.Matcher.Label));
					
				}
				
				MarkImage(null);				
				
				
				if(controller.StepMode == ControllerStepMode.StepByStep)
				{
					parsingNextButtonsAlign.Sensitive = true;
				}
			});				
		}
		private void OnControllerMatching(object sender, 
		                                  MatchingArgs _args)
		{
			Application.Invoke(sender, 
			                   _args,
			                   delegate(object resender, EventArgs a)
			{
				MatchingArgs args = a as MatchingArgs;
				SyntacticalCoverNode newNode = 
					new SyntacticalCoverNode(args.Matcher,
					                         syntacticalCoverTree);
				
				if(currentNode == null)
				{
					syntacticalCoverModel.AddNode(newNode);
				}
				else
				{
					currentNode.Select();	
					currentNode.AddChild(newNode);
					syntacticalCoverTree.ExpandRow(syntacticalCoverTree.Selection.GetSelectedRows()[0],
					                               false);
					
				}				
				
				currentNode = newNode;			
				
				
				currentNode.Select();				
							
				
				parsingTaskLabel.Markup=
					String.Format("<b>Intentando encajar los elementos restantes con <i>{0}</i></b>",
					              GLib.Markup.EscapeText(currentNode.Matcher.Label));
				
				parsingNextButtonsAlign.Sensitive = 
					controller.StepMode == ControllerStepMode.StepByStep;
			});
		}