private void MarkImage(Token t)
        {
            if (t == null)
            {
                originalImageArea.Image = originalImage;
                return;
            }

            Gdk.Pixbuf originalMarked = originalImage.Copy();

            // We tint the copy in red.
            originalMarked =
                originalMarked.CompositeColorSimple(originalMarked.Width,
                                                    originalMarked.Height,
                                                    Gdk.InterpType.Bilinear,
                                                    100, 1,
                                                    0xAAAAAA, 0xAAAAAA);

            // Over the red tinted copy, we place the piece we want to be
            // normal.
            originalImage.CopyArea(t.Left,
                                   t.Top,
                                   t.Width,
                                   t.Height,
                                   originalMarked,
                                   t.Left,
                                   t.Top);


            originalImageArea.Image = originalMarked;
        }
Beispiel #2
0
        /// <summary>
        /// If sequencing, selects the next symbol of the list.
        /// </summary>
        /// <param name="sender">
        /// A <see cref="System.Object"/>
        /// </param>
        /// <param name="args">
        /// A <see cref="EventArgas"/>
        /// </param>
        private void OnControllerNodeBeingProcessed(object sender,
                                                    NodeBeingProcessedArgs _args)
        {
            Application.Invoke(sender, _args,
                               delegate(object resender, EventArgs args)
            {
                NodeBeingProcessedArgs a = args as NodeBeingProcessedArgs;

                if (!sequencingFinished)
                {
                    // We are sequencing.

                    // Selects the new first.
                    symbolsIV.SelectPath(processedPath);
                    symbolsIV.ScrollToPath(processedPath, 1, 0.5f);
                    processedPath.Next();
                }
                else
                {
                    // We are matching
                    SequenceNode node = (SequenceNode)a.Node;

                    node.Select();

                    Token t = Token.Join(node.Sequence, "");

                    sequenceNodeImage = t.Image.CreatePixbuf();

                    sequenceMatchingImageArea.Image = sequenceNodeImage.Copy();

                    sequenceNodeImage =
                        sequenceNodeImage.CompositeColorSimple(sequenceNodeImage.Width,
                                                               sequenceNodeImage.Height,
                                                               Gdk.InterpType.Nearest,
                                                               100, 1,
                                                               0xAAAAAA, 0xAAAAAA);

                    matchingResultLbl.Markup = "-";

                    tokenizingRulesTV.Selection.UnselectAll();

                    tokenizingRulesTV.ScrollToPoint(0, 0);


                    if (controller.StepMode == ControllerStepMode.StepByStep)
                    {
                        tokenizingNextButtonsAlign.Sensitive = true;
                    }
                }
            });
        }
		/// <summary>
		/// If sequencing, selects the next symbol of the list.
		/// </summary>
		/// <param name="sender">
		/// A <see cref="System.Object"/>
		/// </param>
		/// <param name="args">
		/// A <see cref="EventArgas"/>
		/// </param>
		private void OnControllerNodeBeingProcessed(object sender, 
		                                            NodeBeingProcessedArgs _args)
		{
			Application.Invoke(sender, _args, 
			                   delegate(object resender, EventArgs args)
			{
				NodeBeingProcessedArgs a =  args as NodeBeingProcessedArgs;
			
				if(!sequencingFinished)
				{
					// We are sequencing.	
					
					// Selects the new first.			
					symbolsIV.SelectPath(processedPath);
					symbolsIV.ScrollToPath(processedPath,1,0.5f);
					processedPath.Next();
					
				}
				else
				{
					// We are matching
					SequenceNode node = (SequenceNode) a.Node;
					
					node.Select();
					
					Token t = Token.Join(node.Sequence, "");
					
					sequenceNodeImage = t.Image.CreatePixbuf();
					
					sequenceMatchingImageArea.Image = sequenceNodeImage.Copy();
					
					sequenceNodeImage = 
						sequenceNodeImage.CompositeColorSimple(sequenceNodeImage.Width,
						                                    sequenceNodeImage.Height,
						                                    Gdk.InterpType.Nearest, 
						                                    100, 1,  
						                                    0xAAAAAA,0xAAAAAA);
					
					matchingResultLbl.Markup = "-";
					
					tokenizingRulesTV.Selection.UnselectAll();
					
					tokenizingRulesTV.ScrollToPoint(0,0);
					
					
					if(controller.StepMode == ControllerStepMode.StepByStep)
					{
						tokenizingNextButtonsAlign.Sensitive = true;
					}
				}
			});
		}
Beispiel #4
0
        /// <summary>
        /// Handles the start of processing of a new node.
        /// </summary>
        /// <param name="sender">
        /// A <see cref="System.Object"/>
        /// </param>
        /// <param name="args">
        /// A <see cref="EventArgs"/>
        /// </param>
        private void OnControllerTokenChecked(object sender,
                                              TokenCheckedArgs args)
        {
            Application.Invoke(sender, args,
                               delegate(object resender, EventArgs _args)
            {
                TokenCheckedArgs a = _args as TokenCheckedArgs;

                if (!sequencingFinished)
                {
                    currentToken = a.CurrentToken;


                    FloatBitmap sequenceImage;

                    if (a.LastSequence != null)
                    {
                        TokenSequence joinSeq =
                            new TokenSequence(a.LastSequence);
                        lastToken = joinSeq.Last;
                        joinSeq.Append(currentToken);
                        Token joinedToken = Token.Join(joinSeq, "");

                        sequenceImage = joinedToken.Image;
                    }
                    else
                    {
                        sequenceImage = currentToken.Image;
                        lastToken     = null;
                    }

                    // We add a border to the orginal image.

                    Gdk.Pixbuf sequencePixbuf = sequenceImage.CreatePixbuf();

                    Gdk.Pixbuf drawnImage =
                        new Gdk.Pixbuf(sequencePixbuf.Colorspace, false, 8,
                                       sequencePixbuf.Width + 10,
                                       sequencePixbuf.Height + 10);

                    drawnImage.Fill(0xFFFFFFFF);

                    sequencePixbuf.CopyArea(0, 0,
                                            sequencePixbuf.Width,
                                            sequencePixbuf.Height,
                                            drawnImage,
                                            5, 5);

                    if (lastToken != null)
                    {
                        uint color;
                        if (currentToken.CloseFollows(lastToken))
                        {
                            color = 0x00FF00;
                            sequencingStepResultLbl.Markup =
                                String.Format("<b>Sí, el símbolo «{0}» se añadirá a la secuencia actual</b>",
                                              currentToken.Text);
                        }
                        else
                        {
                            color = 0xFF0000;
                            sequencingStepResultLbl.Markup =
                                String.Format("<b>No, «{0}» no puede ser considerado parte de la secuencia ({1})</b>",
                                              currentToken.Text,
                                              a.LastSequence.ToString());
                        }


                        Gdk.Pixbuf markedImage = drawnImage.Copy();

                        // We paint the image of the color
                        markedImage =
                            markedImage.CompositeColorSimple(markedImage.Width,
                                                             markedImage.Height,
                                                             Gdk.InterpType.Nearest,
                                                             100, 1, color, color);

                        // We are going to mark the image of the to symbols being considered
                        // with their baselines.
                        int min = int.MaxValue;
                        foreach (Token t in a.LastSequence)
                        {
                            if (t.Top < min)
                            {
                                min = t.Top;
                            }
                        }

                        int offset          = Math.Min(min, currentToken.Top);
                        int lastBaseline    = lastToken.Baseline - offset;
                        int currentBaseline = currentToken.Baseline - offset;

                        markedImage.CopyArea(0, lastBaseline,
                                             markedImage.Width, 5,
                                             drawnImage,
                                             0, lastBaseline);

                        markedImage.CopyArea(0, currentBaseline,
                                             markedImage.Width, 5,
                                             drawnImage,
                                             0, currentBaseline);
                    }


                    baselineImageArea.Image = drawnImage;
                }

                if (controller.StepMode == ControllerStepMode.StepByStep)
                {
                    tokenizingNextButtonsAlign.Sensitive = true;
                }
            });
        }