gbrainy r263 - in branches/STABLE: . po src trunk



Author: jmas
Date: Thu Mar  6 13:22:24 2008
New Revision: 263
URL: http://svn.gnome.org/viewvc/gbrainy?rev=263&view=rev

Log:
Update to stable 0.6.0

Removed:
   branches/STABLE/trunk/
Modified:
   branches/STABLE/ChangeLog
   branches/STABLE/NEWS
   branches/STABLE/configure.in
   branches/STABLE/gbrainy.desktop.in
   branches/STABLE/po/ChangeLog
   branches/STABLE/po/POTFILES.in
   branches/STABLE/po/ar.po
   branches/STABLE/po/ca.po
   branches/STABLE/po/de.po
   branches/STABLE/po/es.po
   branches/STABLE/po/fr.po
   branches/STABLE/po/gl.po
   branches/STABLE/po/nl.po
   branches/STABLE/po/sv.po
   branches/STABLE/src/ArrayListIndicesRandom.cs
   branches/STABLE/src/ChangeLog
   branches/STABLE/src/CustomGameDialog.cs
   branches/STABLE/src/Game.cs
   branches/STABLE/src/GameDrawingArea.cs
   branches/STABLE/src/GameManager.cs
   branches/STABLE/src/GameSession.cs
   branches/STABLE/src/Makefile.am
   branches/STABLE/src/Memory.cs
   branches/STABLE/src/MemoryColouredFigures.cs
   branches/STABLE/src/MemoryColouredText.cs
   branches/STABLE/src/MemoryCountDots.cs
   branches/STABLE/src/MemoryFigures.cs
   branches/STABLE/src/MemoryIndications.cs
   branches/STABLE/src/MemoryNumbers.cs
   branches/STABLE/src/MemoryWords.cs
   branches/STABLE/src/PreferencesDialog.cs
   branches/STABLE/src/PuzzleAlphabeticSequence.cs
   branches/STABLE/src/PuzzleBalance.cs
   branches/STABLE/src/PuzzleCirclesRectangle.cs
   branches/STABLE/src/PuzzleCoverPercentage.cs
   branches/STABLE/src/PuzzleCube.cs
   branches/STABLE/src/PuzzleDivideCircle.cs
   branches/STABLE/src/PuzzleFigureLetter.cs
   branches/STABLE/src/PuzzleFigurePattern.cs
   branches/STABLE/src/PuzzleFigures.cs
   branches/STABLE/src/PuzzleLines.cs
   branches/STABLE/src/PuzzleMatrixGroups.cs
   branches/STABLE/src/PuzzleMatrixNumbers.cs
   branches/STABLE/src/PuzzleMissingPiece.cs
   branches/STABLE/src/PuzzleMissingSlice.cs
   branches/STABLE/src/PuzzleMoveFigure.cs
   branches/STABLE/src/PuzzleNextFigure.cs
   branches/STABLE/src/PuzzleNumericRelation.cs
   branches/STABLE/src/PuzzleNumericSequence.cs
   branches/STABLE/src/PuzzleOstracism.cs
   branches/STABLE/src/PuzzlePairs.cs
   branches/STABLE/src/PuzzlePencil.cs
   branches/STABLE/src/PuzzlePeopleTable.cs
   branches/STABLE/src/PuzzleSquareDots.cs
   branches/STABLE/src/PuzzleSquareSheets.cs
   branches/STABLE/src/PuzzleSquares.cs
   branches/STABLE/src/PuzzleTetris.cs
   branches/STABLE/src/PuzzleTriangles.cs
   branches/STABLE/src/gbrainy.cs
   branches/STABLE/src/gbrainy.glade

Modified: branches/STABLE/NEWS
==============================================================================
--- branches/STABLE/NEWS	(original)
+++ branches/STABLE/NEWS	Thu Mar  6 13:22:24 2008
@@ -1,4 +1,10 @@
 gbrainy NEWS
+
+Version 0.6 (in progress)
+* Implemented difficulty levels: easy, medium and master
+* Complete revision of the texts
+* 1 new math game and 3 new logic games
+* Bug fixes
  
 Version 0.5
 * Basic user preferences (memory games)

Modified: branches/STABLE/configure.in
==============================================================================
--- branches/STABLE/configure.in	(original)
+++ branches/STABLE/configure.in	Thu Mar  6 13:22:24 2008
@@ -1,4 +1,4 @@
-AC_INIT(gbrainy, 0.53)
+AC_INIT(gbrainy, 0.60)
 AC_CONFIG_SRCDIR(src/gbrainy.cs)
 
 AM_CONFIG_HEADER(config.h)

Modified: branches/STABLE/gbrainy.desktop.in
==============================================================================
--- branches/STABLE/gbrainy.desktop.in	(original)
+++ branches/STABLE/gbrainy.desktop.in	Thu Mar  6 13:22:24 2008
@@ -1,6 +1,5 @@
 [Desktop Entry]
 Version=1.0
-Encoding=UTF-8
 _Name=gbrainy
 _GenericName=Game
 _Comment=A brain teaser game for fun and keep your brain trained

Modified: branches/STABLE/po/POTFILES.in
==============================================================================
--- branches/STABLE/po/POTFILES.in	(original)
+++ branches/STABLE/po/POTFILES.in	Thu Mar  6 13:22:24 2008
@@ -17,7 +17,7 @@
 src/PuzzleNumericRelation.cs
 src/PuzzleNextFigure.cs
 src/PuzzleSquareSheets.cs
-src/MathArithmetical.cs
+src/CalculationArithmetical.cs
 src/MemoryColouredFigures.cs
 src/GameSession.cs
 src/MemoryNumbers.cs
@@ -27,14 +27,14 @@
 src/PuzzleFigureLetter.cs
 src/CustomGameDialog.cs
 src/PuzzleDivideCircle.cs
-src/MathGreaterDivisor.cs
-src/MathTwoNumbers.cs
+src/CalculationGreatestDivisor.cs
+src/CalculationTwoNumbers.cs
 src/PuzzleMatrixGroups.cs
 src/PuzzleBalance.cs
-src/MathWhichNumber.cs
+src/CalculationWhichNumber.cs
 src/PuzzlePairs.cs
 src/PuzzleOstracism.cs
-src/MathOperator.cs
+src/CalculationOperator.cs
 src/MemoryCountDots.cs
 src/PuzzleFigurePattern.cs
 src/GameDrawingArea.cs
@@ -46,4 +46,9 @@
 src/PuzzleMissingSlice.cs
 src/PuzzleTetris.cs
 src/MemoryIndications.cs
+src/PuzzleMostInCommon.cs
+src/PuzzleBuildTriangle.cs
 src/Memory.cs
+src/PuzzleClocks.cs
+
+

Modified: branches/STABLE/src/ArrayListIndicesRandom.cs
==============================================================================
--- branches/STABLE/src/ArrayListIndicesRandom.cs	(original)
+++ branches/STABLE/src/ArrayListIndicesRandom.cs	Thu Mar  6 13:22:24 2008
@@ -33,21 +33,28 @@
 	}
 
 	public void Initialize ()
-	{	
-		int index, left;
-
-		Clear ();
-
+	{
 		ArrayList random_list = new ArrayList (Capacity);
 		for (int i = 0; i < Capacity; i++) {
 			random_list.Add (i);
 		}
+		RandomizeFromArray (random_list);
+	}
+
+	public void RandomizeFromArray (ArrayList ar)
+	{		
+		int left = Capacity;
+		int index;
+		object []array = (object []) ar.ToArray (typeof (object));
+		Clear ();
 
-		left = Capacity;
+		// Generate a random number that can be as big as the maximum -1
+		// Add the random element picked up element in the list
+		// The element just randomized gets out of pending list and replaced by the maximum -1 element 
 		for (int i = 0; i < Capacity; i++, left--) {
 			index = random.Next (left);
-			Add (random_list[index]);
-			random_list[index] = random_list[left - 1];
+			Add (array[index]);
+			array[index] = array[left - 1];
 		}
 	}
 }

Modified: branches/STABLE/src/CustomGameDialog.cs
==============================================================================
--- branches/STABLE/src/CustomGameDialog.cs	(original)
+++ branches/STABLE/src/CustomGameDialog.cs	Thu Mar  6 13:22:24 2008
@@ -107,7 +107,7 @@
 		}
 
 		treeview.Model = games_store;
-
+		Dialog.IconName = "gbrainy";
 		game =  (Game) Activator.CreateInstance (games [0], true);
 		game.Initialize ();
 		drawing_area.puzzle = game;
@@ -214,13 +214,15 @@
 		{
 			if(!IsRealized)
 				return false;
-   
+
 			int w, h;
+			Cairo.Context cc = Gdk.CairoHelper.Create (args.Window);
+			CairoContextEx cr = new CairoContextEx (cc.Handle);   
 			args.Window.GetSize (out w, out h);
-			Cairo.Context cr = Gdk.CairoHelper.Create (args.Window);
 			puzzle.DrawPreview (cr, w, h);
 
-   			((IDisposable)cr).Dispose();
+			((IDisposable)cc).Dispose();
+			((IDisposable)cr).Dispose();
    			return base.OnExposeEvent(args);
 		}
 	}	

Modified: branches/STABLE/src/Game.cs
==============================================================================
--- branches/STABLE/src/Game.cs	(original)
+++ branches/STABLE/src/Game.cs	Thu Mar  6 13:22:24 2008
@@ -31,6 +31,14 @@
 		MathTrainer		= 8
 	}
 
+	public enum Difficulty
+	{
+		None			= 0,
+		Easy			= 2,
+		Medium			= 4,
+		Master			= 8,
+	}
+
 	private bool draw_answer;
 	private gbrainy application;
 	private Cairo.Color default_color;
@@ -40,6 +48,8 @@
 	private TimeSpan game_time;
 	private bool won;
 	private bool tip_used;
+	private Difficulty difficulty;
+	private bool trace_score = false; // Set to true to debug scoring
 
 	public Game ()
 	{
@@ -50,6 +60,7 @@
 		default_background = new Color (1, 1, 1);
 		won = false;
 		tip_used = false;
+		difficulty = Difficulty.Medium;
 	}
 
 	public abstract string Question {
@@ -58,7 +69,24 @@
 
 	public virtual string Answer {
 		get {
-			return String.Format (Catalog.GetString ("The right answer is {0}."), right_answer);
+			return String.Format (Catalog.GetString ("The correct answer is {0}."), right_answer);
+		}
+	}
+
+	// Stores how difficult the game is
+	public virtual Difficulty GameDifficulty {
+		get {
+			return Difficulty.Master | Difficulty.Medium | Difficulty.Easy;
+		}
+	}
+
+	// The level of difficulty selected for the current game
+	public virtual Difficulty CurrentDifficulty {
+		set {
+			difficulty = value;
+		}
+		get {
+			return difficulty;
 		}
 	}
 
@@ -133,25 +161,39 @@
 		set { won = value; }
 	}
 
-	// Avergate time in second that a player is expected to complete this game
+	// Average time in seconds that a player is expected to complete this game
 	public int AverageTime {
 		get {
+			double factor;
+
+			switch (CurrentDifficulty) {
+			case Difficulty.Easy:
+				factor = 1.3;
+				break;
+			case Difficulty.Master:
+				factor = 0.7;
+				break;		
+			case Difficulty.Medium:
+			default:
+				factor = 1.0;
+				break;		
+			}
+				
 			switch (Type) {
 			case Types.MemoryTrainer:
-				return 30;
+				return (int) (30 * factor);
 			case Types.MathTrainer:
-				return 60;				
+				return (int) (60 * factor);
 			}
-			return 120; // Default for all games (logic)
+			return (int) (120 * factor); // Default for all games (logic)
 		}
 	}
 
 	//
-	// Score algoritm return a value between 0 and 10
+	// Score algorithm return a value between 0 and 10
 	//
 	public virtual int Score {
 		get {
-
 			double score;
 			double seconds = GameTime.TotalSeconds;
 
@@ -174,16 +216,22 @@
 					score = score * 0.8;
 				}
 			}
+
+			if (trace_score) {
+				Console.WriteLine ("Score for game {0} is {1}. Used tip {2}, time used {3}, time expected {4}", 
+					this, (int) score, tip_used, seconds, AverageTime);
+			}
+
 			return (int) score;
 		}
 	}
 
 	
 	public abstract void Initialize ();
-	public abstract void Draw (Cairo.Context gr, int width, int height);
+	public abstract void Draw (CairoContextEx gr, int width, int height);
 	public virtual void Finish () {}
 
-	public virtual void DrawPreview (Cairo.Context gr, int width, int height)
+	public virtual void DrawPreview (CairoContextEx gr, int width, int height)
 	{
 		Draw (gr, width, height);
 	}
@@ -193,17 +241,17 @@
 		return (String.Compare (answer, right_answer, true) == 0);
 	}
 	
-	public void SetLargeFont (Cairo.Context gr)
+	public void SetLargeFont (CairoContextEx gr)
 	{
 		gr.SetFontSize (0.05);
 	}
 
-	public void SetNormalFont (Cairo.Context gr)
+	public void SetNormalFont (CairoContextEx gr)
 	{
 		gr.SetFontSize (0.03);
 	}
 
-	virtual public void PrepareGC (Cairo.Context gr)
+	virtual public void PrepareGC (CairoContextEx gr)
 	{
 		gr.LineWidth = LineWidth;
 		gr.Color = DefaultDrawingColor;
@@ -211,7 +259,7 @@
 		SetNormalFont (gr);
 	}
 
-	protected void DrawBackground (Cairo.Context gr)
+	protected void DrawBackground (CairoContextEx gr)
 	{
 		int columns = 40;
 		int rows = 40;

Modified: branches/STABLE/src/GameDrawingArea.cs
==============================================================================
--- branches/STABLE/src/GameDrawingArea.cs	(original)
+++ branches/STABLE/src/GameDrawingArea.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -41,7 +41,7 @@
 	public Modes mode;
 	private GameSession session;
 	private ArrayListIndicesRandom random_indices;
-	private const int tips_count = 8;
+	private const int tips_count = 10;
 	private const int tips_shown = 4;
 	private System.Timers.Timer timer;
 	private int countdown_time;
@@ -62,7 +62,7 @@
 		}
 	}
 
-	private void DrawBackground (Cairo.Context gr)
+	private void DrawBackground (CairoContextEx gr)
 	{
 		gr.Save ();
 		gr.Color = new Cairo.Color (1, 1, 1);
@@ -71,7 +71,7 @@
 		gr.Restore ();		
 	}
 
-	private void DrawBand (Cairo.Context gr, double x, double y)
+	private void DrawBand (CairoContextEx gr, double x, double y)
 	{
 		gr.Save ();
 		gr.Rectangle (x, y, 1 - 0.06, 0.06);
@@ -80,10 +80,10 @@
 		gr.Restore ();		
 	}
 
-	private void DrawWelcome (Cairo.Context gr, int area_width, int area_height)
+	private void DrawWelcome (CairoContextEx gr, int area_width, int area_height)
 	{
 		double y = 0.07;
-		double space = 0.25;
+		double space = 0.21;
 		double line_space = 0.06;
 		ImageSurface image;
 
@@ -93,13 +93,13 @@
 		gr.SetFontSize (0.035);
 
 		gr.MoveTo (0.05, y);
-		gr.ShowText (Catalog.GetString ("Welcome to gbrainy") + " " + Defines.VERSION);
+		gr.ShowText (String.Format (Catalog.GetString ("Welcome to gbrainy {0}"), Defines.VERSION));
 		gr.Stroke ();
 
 		gr.SetFontSize (0.03);
-		DrawingHelpers.DrawStringWithWrapping (gr, 0.05, y + 0.08, line_space, Catalog.GetString ("gbrainy is a brain teaser game and trainer to have fun and to keep your brain trained. It includes:"));
+		gr.DrawStringWithWrapping (0.05, y + 0.08, line_space, Catalog.GetString ("gbrainy is a brain teaser game and trainer to have fun and to keep your brain trained. It includes:"));
 
-		y = 0.3;
+		y = 0.26;
 		image = new ImageSurface (Defines.DATA_DIR + "logic-games-80.png");
 		if (image.Width > 0) {
 			gr.Save ();
@@ -109,7 +109,7 @@
 			gr.Paint ();
 			gr.Restore ();
 		}
-		DrawingHelpers.DrawStringWithWrapping (gr, 0.21, y + 0.03, line_space, Catalog.GetString ("Logic puzzles. Designed to challenge your reasoning and thinking skills."));
+		gr.DrawStringWithWrapping (0.21, y + 0.03, line_space, Catalog.GetString ("Logic puzzles. Designed to challenge your reasoning and thinking skills."));
 
 		y += space;
 		image = new ImageSurface (Defines.DATA_DIR + "math-games-80.png");
@@ -121,7 +121,7 @@
 			gr.Paint ();
 			gr.Restore ();
 		}
-		DrawingHelpers.DrawStringWithWrapping (gr, 0.21, y + 0.03, line_space, Catalog.GetString ("Mental calculation. Based on arithmetical operations that test your mental calculation abilities."));
+		gr.DrawStringWithWrapping (0.21, y + 0.03, line_space, Catalog.GetString ("Mental calculation. Based on arithmetical operations that test your mental calculation abilities."));
 
 		y += space;
 		image = new ImageSurface (Defines.DATA_DIR + "memory-games-80.png");
@@ -133,14 +133,17 @@
 			gr.Paint ();
 			gr.Restore ();
 		}
-		DrawingHelpers.DrawStringWithWrapping (gr, 0.21, y + 0.03, line_space, Catalog.GetString ("Memory trainers. To prove and enhance your short term memory."));
+		gr.DrawStringWithWrapping (0.21, y + 0.03, line_space, Catalog.GetString ("Memory trainers. To prove and enhance your short term memory."));
+		gr.Stroke ();
+
+		gr.DrawStringWithWrapping (0.05, y + 0.23, line_space, Catalog.GetString ("Use the Settings to adjust the difficulty level of the game."));
 		gr.Stroke ();
 	}
 
 	private void TimerUpdater (object source, ElapsedEventArgs e)
 	{
 		lock (this) {
-			if (countdown_time == 0) {
+			if (countdown_time == 1) {
 				timer.Enabled = false;
 				timer.Dispose ();
 				Application.Invoke ( delegate { 
@@ -165,7 +168,7 @@
 		finish = OnFinish;
 	}
 
-	private void DrawCountDown (Cairo.Context gr, int area_width, int area_height)
+	private void DrawCountDown (CairoContextEx gr, int area_width, int area_height)
 	{
 		gr.Scale (area_width, area_height);
 
@@ -175,8 +178,8 @@
 		gr.LineWidth = 0.01;
 		gr.Color = new Cairo.Color (0, 0, 0, 1);
 
-		gr.SetFontSize (0.05);
-		DrawingHelpers.DrawTextCentered (gr, 0.5, 0.1, Catalog.GetString ("Get your memory ready..."));
+		gr.SetFontSize (0.033);
+		gr.DrawTextCentered (0.5, 0.1, Catalog.GetString ("Get ready to memorize the next objects..."));
 		gr.Stroke ();
 
 		gr.SetFontSize (0.4);
@@ -191,7 +194,7 @@
 
 	}
 
-	private void DrawScores (Cairo.Context gr, int area_width, int area_height)
+	private void DrawScores (CairoContextEx gr, int area_width, int area_height)
 	{
 		double y = 0.08, x = 0.05;
 		double space_small = 0.06;
@@ -214,21 +217,33 @@
 
 		y += space_small;	
 		gr.MoveTo (x, y);
-		str = Catalog.GetString ("Logic puzzle score is {0}%");
-		if (session.LogicGamesPlayed == 0)  str += " " + Catalog.GetString ("(no games played)");
-		gr.ShowText (String.Format (str, session.LogicScore));
+
+		if (session.LogicGamesPlayed == 0)
+			str = Catalog.GetString ("No logic puzzle games played");
+		else
+			str = String.Format (Catalog.GetString ("Logic puzzle score is {0}%"), session.LogicScore);
+
+		gr.ShowText (str);
 
 		y += space_small;
 		gr.MoveTo (x, y);
-		str = Catalog.GetString ("Mental calculation score is {0}%");
-		if (session.MathGamesPlayed == 0)  str += " " + Catalog.GetString ("(no games played)");
-		gr.ShowText (String.Format (str, session.MathScore));
+
+		if (session.MathGamesPlayed == 0)
+			str = Catalog.GetString ("No mental calculation games played");
+		else
+			str = String.Format (Catalog.GetString ("Mental calculation score is {0}%"), session.MathScore);
+
+		gr.ShowText (str);
 
 		y += space_small;
 		gr.MoveTo (x, y);
-		str = Catalog.GetString ("Memory score is {0}%");
-		if (session.MemoryGamesPlayed == 0)  str += " " + Catalog.GetString ("(no games played)");
-		gr.ShowText (String.Format (str, session.MemoryScore));
+
+		if (session.MemoryGamesPlayed == 0)
+			str = Catalog.GetString ("No memory games played");
+		else
+			str = String.Format (Catalog.GetString ("Memory score is {0}%"),  session.MemoryScore);
+
+		gr.ShowText (str);
 
 		y += 0.08;
 		gr.SetFontSize (0.03);
@@ -254,7 +269,7 @@
 		y += 0.08;
 		for (int i = 0; i < tips_shown; i++)
 		{
-			y = DrawingHelpers.DrawStringWithWrapping (gr, x, y, space_small, "- " + GetTip ((int) random_indices[i]));
+			y = gr.DrawStringWithWrapping (x, y, space_small, "- " + GetTip ((int) random_indices[i]));
 			if (y > 0.85)
 				break;
 
@@ -269,7 +284,7 @@
 	{
 		switch (tip) {
 		case 0:
-			return Catalog.GetString ("Read the instructions carefully and identify the data and clues given.");
+			return Catalog.GetString ("Read the instructions carefully and identify the data and given clues.");
 		case 1:
 			return Catalog.GetString ("To score the player gbrainy uses the time and tips needed to complete each game.");
 		case 2:
@@ -277,13 +292,17 @@
 		case 3:
 			return Catalog.GetString ("Break the mental blocks and look into the boundaries of problems.");
 		case 4:
-			return Catalog.GetString ("Enjoy doing mistakes, they are part of the learning process.");
+			return Catalog.GetString ("Enjoy making mistakes, they are part of the learning process.");
 		case 5:
 			return Catalog.GetString ("Do all the problems, even the difficult ones. Improvement comes from practising.");
 		case 6:
-			return Catalog.GetString ("Play in daily basis, you will notice progress soon.");
+			return Catalog.GetString ("Play on a daily basis, you will notice progress soon.");
 		case 7:
-			return Catalog.GetString ("You can use the Custom Game Selection to choose exactly which games you want to train.");
+			return Catalog.GetString ("Use the Custom Game Selection to choose exactly which games you want to play.");
+		case 8:
+			return Catalog.GetString ("Use the Settings to adjust the difficulty level of the game.");
+		case 9:
+			return Catalog.GetString ("Association of elements is a common technique for remembering things.");
 		}
 
 		return string.Empty;
@@ -296,8 +315,9 @@
 
 		int w, h;
 		args.Window.GetSize (out w, out h);
-		Cairo.Context cr = Gdk.CairoHelper.Create (args.Window);
-		
+		Cairo.Context cc = Gdk.CairoHelper.Create (args.Window);
+		CairoContextEx cr = new CairoContextEx (cc.Handle);
+
 		switch (mode) {
 		case Modes.Welcome:
 			DrawWelcome (cr, w, h);
@@ -313,6 +333,7 @@
 			break;
 		}
 
+		((IDisposable)cc).Dispose();
 		((IDisposable)cr).Dispose();
 		return base.OnExposeEvent(args);
 	}

Modified: branches/STABLE/src/GameManager.cs
==============================================================================
--- branches/STABLE/src/GameManager.cs	(original)
+++ branches/STABLE/src/GameManager.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -51,15 +51,18 @@
 		typeof (PuzzleLines),
 		typeof (PuzzleTetris),
 		typeof (PuzzleMissingPiece),
+		typeof (PuzzleMostInCommon),
+		typeof (PuzzleBuildTriangle),
+		typeof (PuzzleClocks),
 	};
 
-	static Type[] MathTrainers = new Type[] 
+	static Type[] CalculationTrainers = new Type[] 
 	{
-		typeof (MathArithmetical),
-		typeof (MathGreaterDivisor),
-		typeof (MathTwoNumbers),
-		typeof (MathWhichNumber),
-		//typeof (MathOperator), // Currently buggy. To be fixed in the next release
+		typeof (CalculationArithmetical),
+		typeof (CalculationGreatestDivisor),
+		typeof (CalculationTwoNumbers),
+		typeof (CalculationWhichNumber),
+		typeof (CalculationOperator),
 	};
 
 	static Type[] MemoryTrainers = new Type[] 
@@ -76,18 +79,21 @@
 	private GameSession.Types game_type;
 	private ArrayListIndicesRandom list;
 	private IEnumerator enumerator;
-	private Type[] games;
+	private ArrayList games;
+	private Game.Difficulty difficulty;
 
 	static GameManager ()
 	{
 		Console.WriteLine ("Games registered: {0}: {1} logic puzzles, {2} math trainers, {3} memory trainers", 
-			LogicPuzzles.Length + MathTrainers.Length + MemoryTrainers.Length,
-			LogicPuzzles.Length, MathTrainers.Length, MemoryTrainers.Length);
+			LogicPuzzles.Length + CalculationTrainers.Length + MemoryTrainers.Length,
+			LogicPuzzles.Length, CalculationTrainers.Length, MemoryTrainers.Length);
 	}
 
 	public GameManager ()
 	{
 		game_type = GameSession.Types.None;
+		difficulty = Game.Difficulty.Medium;
+		games = new ArrayList ();
 	}
 
 	public GameSession.Types GameType {
@@ -101,49 +107,52 @@
 		}
 	}
 
+	public Game.Difficulty Difficulty {
+		set {
+			difficulty = value;
+			BuildGameList ();
+		}
+		get {
+			return difficulty;
+		}
+	}
+
+	// Used from CustomGameDialog only
 	public Type[] Games {
-		get { return games; }
-		set { 
-			games = value; 
-			list = new ArrayListIndicesRandom (games.Length);
+		get { return (Type []) games.ToArray (typeof (Type)); }
+		set {
+			games = new ArrayList (value.Length);
+			for (int i = 0; i < value.Length; i++)
+				games.Add (value[i]);
+
+			list = new ArrayListIndicesRandom (games.Count);
 			Initialize ();
 		}
 	}
 
 	private void BuildGameList ()
 	{
-		int cnt = 0, index = 0;
-
 		if (GameType == GameSession.Types.Custom)
 			return;
-
-		if ((game_type & GameSession.Types.LogicPuzzles) == GameSession.Types.LogicPuzzles)
-			cnt += LogicPuzzles.Length;
-
-		if ((game_type & GameSession.Types.MathTrainers) == GameSession.Types.MathTrainers)
-			cnt += MathTrainers.Length;
-
-		if ((game_type & GameSession.Types.MemoryTrainers) == GameSession.Types.MemoryTrainers)
-			cnt += MemoryTrainers.Length;
 		
-		games = new Type [cnt];
+		games.Clear ();
 
 		if ((game_type & GameSession.Types.LogicPuzzles) == GameSession.Types.LogicPuzzles) {
-			for (int i = 0; i < LogicPuzzles.Length; i++, index++)
-				games[index] = LogicPuzzles [i];
+			for (int i = 0; i < LogicPuzzles.Length; i++)
+					games.Add (LogicPuzzles [i]);
 		}
 
-		if ((game_type & GameSession.Types.MathTrainers) == GameSession.Types.MathTrainers) {
-			for (int i = 0; i < MathTrainers.Length; i++, index++)
-				games[index] = MathTrainers [i];
+		if ((game_type & GameSession.Types.CalculationTrainers) == GameSession.Types.CalculationTrainers) {
+			for (int i = 0; i < CalculationTrainers.Length; i++)
+				games.Add (CalculationTrainers [i]);
 		}
 
 		if ((game_type & GameSession.Types.MemoryTrainers) == GameSession.Types.MemoryTrainers) {
-			for (int i = 0; i < MemoryTrainers.Length; i++, index++)
-				games[index] = MemoryTrainers [i];
+			for (int i = 0; i < MemoryTrainers.Length; i++)
+				games.Add (MemoryTrainers [i]);
 		}
 
-		list = new ArrayListIndicesRandom (cnt);
+		list = new ArrayListIndicesRandom (games.Count);
 		Initialize ();
 	}
 
@@ -155,15 +164,28 @@
 	
 	public Game GetPuzzle (gbrainy app)
 	{
-		Game puzzle;
-		if (enumerator.MoveNext () == false) { // All the games have been played, restart again 
-			Initialize ();
-			enumerator.MoveNext ();
+		Game puzzle, first = null;
+
+		while (true) {
+			if (enumerator.MoveNext () == false) { // All the games have been played, restart again 
+				Initialize ();
+				enumerator.MoveNext ();
+			}
+
+			puzzle =  (Game) Activator.CreateInstance ((Type) games [(int) enumerator.Current], true);
+			//puzzle =  (Game) Activator.CreateInstance (LogicPuzzles [29], true);
+			if (first != null && first.GetType () == puzzle.GetType ())
+				break;
+				
+			if (first == null)
+				first = puzzle;
+
+			if ((puzzle.GameDifficulty & difficulty) == difficulty)
+				break;
 		}
 
-		puzzle =  (Game) Activator.CreateInstance (games [(int) enumerator.Current], true);
-		//puzzle =  (Game) Activator.CreateInstance (MemoryTrainers [2], true);
 		puzzle.App = app;
+		puzzle.CurrentDifficulty = Difficulty;
 		puzzle.Initialize ();
 		return puzzle;
 	}

Modified: branches/STABLE/src/GameSession.cs
==============================================================================
--- branches/STABLE/src/GameSession.cs	(original)
+++ branches/STABLE/src/GameSession.cs	Thu Mar  6 13:22:24 2008
@@ -30,10 +30,10 @@
 		None			= 0,
 		LogicPuzzles		= 2,
 		MemoryTrainers		= 4,
-		MathTrainers		= 8,
+		CalculationTrainers		= 8,
 		Custom			= 16,
-		TrainersOnly		= MemoryTrainers | MathTrainers,
-		AllGames		= MemoryTrainers | MathTrainers | LogicPuzzles
+		TrainersOnly		= MemoryTrainers | CalculationTrainers,
+		AllGames		= MemoryTrainers | CalculationTrainers | LogicPuzzles
 	}
 
 	private enum ScoresType
@@ -41,7 +41,7 @@
 		None = 0,
 		LogicPuzzles,
 		MemoryTrainers,
-		MathTrainers,
+		CalculationTrainers,
 		Last			
 	}
 
@@ -102,7 +102,8 @@
 		session.total_score = total_score;
 		session.games_played = games_played;
 		session.games_won = games_won;
-		session.game_time = game_time;		
+		session.game_time = game_time;
+		session.Difficulty = Difficulty;
 		return session;
 	}
 
@@ -110,6 +111,11 @@
 		get {return game_manager.GameType; }
 		set {game_manager.GameType = value; }
 	}
+
+	public Game.Difficulty Difficulty {
+		get {return game_manager.Difficulty; }
+		set {game_manager.Difficulty = value; }
+	}
 	
 	public TimeSpan GameTime {
 		get {return game_time; }
@@ -174,10 +180,10 @@
 
 	public int MathScore {
 		get {
-			if (games [(int) ScoresType.MathTrainers] == 0)
+			if (games [(int) ScoresType.CalculationTrainers] == 0)
 				return 0;
 			
-			return scores [(int) ScoresType.MathTrainers] * 10 / games [(int) ScoresType.MathTrainers];
+			return scores [(int) ScoresType.CalculationTrainers] * 10 / games [(int) ScoresType.CalculationTrainers];
 		}
 	}
 
@@ -190,7 +196,7 @@
 	}
 
 	public int MathGamesPlayed {
-		get { return games [(int) ScoresType.MathTrainers]; }
+		get { return games [(int) ScoresType.CalculationTrainers]; }
 	}
 
 	public string TimePlayed {
@@ -294,8 +300,8 @@
 			games [(int) ScoresType.MemoryTrainers]++;
 			break;
 		case Game.Types.MathTrainer:
-			scores [(int) ScoresType.MathTrainers] += current_game.Score;
-			games [(int) ScoresType.MathTrainers]++;
+			scores [(int) ScoresType.CalculationTrainers] += current_game.Score;
+			games [(int) ScoresType.CalculationTrainers]++;
 			break;
 		}
 		

Modified: branches/STABLE/src/Makefile.am
==============================================================================
--- branches/STABLE/src/Makefile.am	(original)
+++ branches/STABLE/src/Makefile.am	Thu Mar  6 13:22:24 2008
@@ -20,7 +20,7 @@
 	$(srcdir)/PuzzleNumericRelation.cs	\
 	$(srcdir)/PuzzleNextFigure.cs		\
 	$(srcdir)/PuzzleSquareSheets.cs		\
-	$(srcdir)/MathArithmetical.cs		\
+	$(srcdir)/CalculationArithmetical.cs	\
 	$(srcdir)/MemoryColouredFigures.cs	\
 	$(srcdir)/GameSession.cs		\
 	$(srcdir)/MemoryNumbers.cs		\
@@ -31,16 +31,15 @@
 	$(srcdir)/PuzzleFigureLetter.cs		\
 	$(srcdir)/CustomGameDialog.cs		\
 	$(srcdir)/PuzzleDivideCircle.cs		\
-	$(srcdir)/MathGreaterDivisor.cs		\
-	$(srcdir)/MathTwoNumbers.cs		\
-	$(srcdir)/MathWhichNumber.cs		\
+	$(srcdir)/CalculationGreatestDivisor.cs	\
+	$(srcdir)/CalculationTwoNumbers.cs	\
+	$(srcdir)/CalculationWhichNumber.cs	\
 	$(srcdir)/PuzzleMatrixGroups.cs		\
 	$(srcdir)/PuzzleBalance.cs		\
 	$(srcdir)/PuzzlePairs.cs		\
 	$(srcdir)/PuzzleOstracism.cs		\
 	$(srcdir)/MemoryCountDots.cs		\
-	$(srcdir)/DrawingHelpers.cs		\
-	$(srcdir)/MathOperator.cs		\
+	$(srcdir)/CalculationOperator.cs	\
 	$(srcdir)/PuzzleFigurePattern.cs	\
 	$(srcdir)/ColorPalette.cs		\
 	$(srcdir)/PuzzlePeopleTable.cs		\
@@ -52,6 +51,10 @@
 	$(srcdir)/PreferencesDialog.cs		\
 	$(srcdir)/PuzzleMissingPiece.cs		\
 	$(srcdir)/MemoryIndications.cs		\
+	$(srcdir)/PuzzleMostInCommon.cs		\
+	$(srcdir)/PuzzleBuildTriangle.cs	\
+	$(srcdir)/CairoContextEx.cs		\
+	$(srcdir)/PuzzleClocks.cs		\
 	$(srcdir)/gbrainy.cs			
 
 ASSEMBLIES = \

Modified: branches/STABLE/src/Memory.cs
==============================================================================
--- branches/STABLE/src/Memory.cs	(original)
+++ branches/STABLE/src/Memory.cs	Thu Mar  6 13:22:24 2008
@@ -47,7 +47,7 @@
 
 	public override string Question {
 		get {
-			return Catalog.GetString ("Memorize the objects below in the time given");
+			return Catalog.GetString ("Memorize the objects below in the given time");
 		}
 	}
 
@@ -113,7 +113,7 @@
 		timer.Enabled = false;
 	}		
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{	
 		gr.Scale (area_width, area_height);
 		DrawBackground (gr);
@@ -137,7 +137,7 @@
 		}		
 	}
 
-	public override void DrawPreview (Cairo.Context gr, int width, int height)
+	public override void DrawPreview (CairoContextEx gr, int width, int height)
 	{
 		gr.Scale (width, height);
 		DrawBackground (gr);
@@ -145,9 +145,9 @@
 		DrawObjectToMemorize (gr, width, height);
 	}
 
-	public virtual void DrawPossibleAnswers (Cairo.Context gr, int area_width, int area_height) {}
+	public virtual void DrawPossibleAnswers (CairoContextEx gr, int area_width, int area_height) {}
 
-	public virtual void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public virtual void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		double percentage;
 
@@ -158,7 +158,7 @@
 		DrawTimeBar (gr, 0.1, 0.2, percentage);
 	}
 
-	public void DrawTimeBar (Cairo.Context gr, double x, double y, double percentage)
+	public void DrawTimeBar (CairoContextEx gr, double x, double y, double percentage)
 	{
 		double width = 0.04, height = 0.6;
 		double w = 0.003, h = 0.003;

Modified: branches/STABLE/src/MemoryColouredFigures.cs
==============================================================================
--- branches/STABLE/src/MemoryColouredFigures.cs	(original)
+++ branches/STABLE/src/MemoryColouredFigures.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -34,26 +34,42 @@
 		Length
 	}
 
-	private const int columns = 6, rows = 6;
-	private const int squares = columns * rows;
-	private const double rect_w = 0.3 / rows;
-	private const double rect_h = 0.3 / columns;
+	private int columns, rows;
+	private int squares;
+	private double rect_w;
+	private double rect_h;
 	private SquareColor []squares_colours;
 	private ArrayListIndicesRandom answers_order;
 	private const int answers = 4;
 	private ColorPalette palette;
 	private int color_sheme;
+	private const double block_space = 0.35;
 
 	public override string Name {
-		get {return Catalog.GetString ("Colored Figures");}
+		get {return Catalog.GetString ("Colored figures");}
 	}
 
 	public override string MemoryQuestion {
-		get { return Catalog.GetString ("Which of these figures was the one previously shown?");}
+		get { return Catalog.GetString ("Which of these figures was previously shown?");}
 	}
 
 	public override void Initialize ()
 	{
+		switch (CurrentDifficulty) {
+		case Difficulty.Easy:
+			columns = rows = 5;
+			break;
+		case Difficulty.Medium:
+			columns = rows = 6;
+			break;
+		case Difficulty.Master:
+			columns = rows = 7;
+			break;
+		}
+
+		squares = columns * rows;
+		rect_w = 0.3 / rows;
+		rect_h = 0.3 / columns;
 		squares_colours = new SquareColor [squares * answers];
 		color_sheme = random.Next (2);
 		palette = new ColorPalette(ColorPalette.Id.PrimarySecundaryColors);
@@ -117,34 +133,33 @@
 		}
 	}
 
-	public override void DrawPossibleAnswers (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawPossibleAnswers (CairoContextEx gr, int area_width, int area_height)
 	{
-		double x = DrawAreaX + 0.05, y = DrawAreaY;
+		double x = DrawAreaX, y = DrawAreaY;
 	
 		palette.Alpha = alpha;
-		//gr.Color = palette.Cairo(DefaultDrawingColor);
 		
 		for (int i = 0; i < answers_order.Count; i++) {
 			if (i == 2) {
-				y += 0.4;
-				x = DrawAreaX + 0.05;
+				y += 0.45;
+				x = DrawAreaX;
 			}
 			DrawSquare (gr, x, y, squares_colours, squares * (int) answers_order[i]);
-			gr.MoveTo (x, y + 0.34);
+			gr.MoveTo (x, y + block_space + 0.02);
 			gr.ShowText (String.Format (Catalog.GetString ("Figure {0}"), (char) (65 + i)));
 			gr.Stroke ();
-			x += 0.35;
+			x += block_space + 0.08;
 		}
 	}
 
-	public override void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		base.DrawObjectToMemorize (gr, area_width, area_height);
 		palette.Alpha = alpha; 
 		DrawSquare (gr, DrawAreaX + 0.3, DrawAreaY + 0.1, squares_colours, 0);
 	}
 
-	private void DrawSquare (Cairo.Context gr, double x, double y, SquareColor []colours, int index)
+	private void DrawSquare (CairoContextEx gr, double x, double y, SquareColor []colours, int index)
 	{
 		gr.Save ();
 		for (int column = 0; column < columns; column++) {

Modified: branches/STABLE/src/MemoryColouredText.cs
==============================================================================
--- branches/STABLE/src/MemoryColouredText.cs	(original)
+++ branches/STABLE/src/MemoryColouredText.cs	Thu Mar  6 13:22:24 2008
@@ -29,6 +29,7 @@
 	private ColorPalette palette;
 	private int question;
 	private string question_colorname;
+	private int colors_shown;
 
 	public override string Name {
 		get {return Catalog.GetString ("Colored text");}
@@ -36,32 +37,44 @@
 
 	public override string MemoryQuestion {
 		get { 
-			return String.Format (Catalog.GetString ("Which was the color of the text that said '{0}'?"), question_colorname);}
+			return String.Format (Catalog.GetString ("What was the color of the text that said '{0}'?"), question_colorname);}
 	}
 
 	public override void Initialize ()
 	{
-		palette = new ColorPalette(ColorPalette.Id.PrimarySecundaryColors);
+		switch (CurrentDifficulty) {
+		case Difficulty.Easy:
+			colors_shown = 3;
+			break;
+		case Difficulty.Medium:
+			colors_shown = 4;
+			break;
+		case Difficulty.Master:
+			colors_shown = 6;
+			break;
+		}
+
+		palette = new ColorPalette (colors_shown);
 		palette.Initialize ();
 		
-		question = random.Next ( palette.Count );
-		right_answer = palette.Name( question );
-		question_colorname = palette.Name( (ColorPalette.Id) question );
+		question = random.Next (palette.Count);
+		right_answer = palette.Name (question);
+		question_colorname = palette.Name ((ColorPalette.Id) question);
 		
 		base.Initialize ();
 	}
 	
-	public override void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		base.DrawObjectToMemorize (gr, area_width, area_height);
 		DrawObject (gr, area_width, area_height);
 	}
 
-	public void DrawObject (Cairo.Context gr, int area_width, int area_height)
+	private void DrawObject (CairoContextEx gr, int area_width, int area_height)
 	{
 		palette.Alpha=alpha;
 
-		double x= DrawAreaX + 0.2, y = DrawAreaY + 0.2;
+		double x= DrawAreaX + 0.125, y = DrawAreaY + 0.2;
 
 		for (int i = 0; i < palette.Count ; i++)
 		{
@@ -72,13 +85,11 @@
 			
 			if (i == 2) {
 				y += 0.2;
-				x = DrawAreaX + 0.2;
+				x = DrawAreaX + 0.125;
 			} else {
-				x+= 0.2;
+				x+= 0.25;
 			}
 		}
 	}
-
 }
 
-

Modified: branches/STABLE/src/MemoryCountDots.cs
==============================================================================
--- branches/STABLE/src/MemoryCountDots.cs	(original)
+++ branches/STABLE/src/MemoryCountDots.cs	Thu Mar  6 13:22:24 2008
@@ -27,9 +27,9 @@
 public class MemoryCountDots : Memory
 {
         private const int NUMCOLUMNS = 7;
-	private const int MINDOTS = 3;
-	private const int MAXDOTSCOLOR = 7;
+	private const int MINDOTS = 1;
 	private const int MAXDOTS = 25;
+	private int maxdotscolor;
 
 	private ArrayListIndicesRandom location_order;
 	private ColorPalette palette;
@@ -41,12 +41,24 @@
 	}
 
 	public override string MemoryQuestion {
-		get { return String.Format(Catalog.GetString ("How many {0} dots were in the previous image?"),
-						palette.Name(0))     ; }
+		get { return String.Format(Catalog.GetString ("How many {0} dots were in the previous image? (answer using numbers)"),
+						palette.Name(0)); }
 	}
 
 	public override void Initialize ()
 	{
+		switch (CurrentDifficulty) {
+		case Difficulty.Easy:
+			maxdotscolor = 2;
+			break;
+		case Difficulty.Medium:
+			maxdotscolor = 5;
+			break;
+		case Difficulty.Master:
+			maxdotscolor = 8;
+			break;
+		}
+
 	        location_order = new ArrayListIndicesRandom (NUMCOLUMNS*NUMCOLUMNS);
 		location_order.Initialize();
 
@@ -57,7 +69,7 @@
 		// have to substract 1 to make dotsPerColor contents 0 based.
 		dotsPerColor = new int [palette.Count];
 		for (int i=0,before=-1; i< palette.Count; i++) {
-			dotsPerColor[i] = before + MINDOTS + random.Next(MAXDOTSCOLOR-MINDOTS+1) ;
+			dotsPerColor[i] = before + MINDOTS + random.Next(maxdotscolor-MINDOTS+1);
 			before = dotsPerColor[i];
 		}
 
@@ -66,13 +78,13 @@
 		base.Initialize ();
 	}
 
-	public override void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		base.DrawObjectToMemorize (gr, area_width, area_height);
 		DrawObject (gr, area_width, area_height);
 	}
 
-	private void DrawObject (Cairo.Context gr, int area_width, int area_height)
+	private void DrawObject (CairoContextEx gr, int area_width, int area_height)
 	{
 		palette.Alpha = alpha;
 		double x = DrawAreaX + 0.15, y = DrawAreaY + 0.1 ;

Modified: branches/STABLE/src/MemoryFigures.cs
==============================================================================
--- branches/STABLE/src/MemoryFigures.cs	(original)
+++ branches/STABLE/src/MemoryFigures.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -26,15 +26,15 @@
 
 public class MemoryFigures : Memory
 {
-
 	private ArrayListIndicesRandom figures;
-	private const int rows = 3;
-	private const int columns = 4;
+	private int rows;
+	private int columns;
 	private const double start_x = 0.25;
 	private const double start_y = 0.1;
 	private const double figure_size = 0.08;
 	private double rect_w, rect_h;
 	private int question_pos, question_answer;
+	private int figures_active;
 
 	public enum FigureType
 	{
@@ -44,9 +44,8 @@
 		Cercle,
 		TriangleWithLine,
 		RectangleWithLine,
-		//DiamondWithLine,
-		//CercleWithLine,
-		Length
+		DiamondWithLine,
+		CercleWithLine,
 	}
 
 	public override string Name {
@@ -61,13 +60,30 @@
 	public override void Initialize ()
 	{
 		int fig1, fig2;
+
+		switch (CurrentDifficulty) {
+		case Difficulty.Easy:
+			figures_active = 4;
+			rows = columns = 3;
+			break;
+		case Difficulty.Medium:
+			figures_active = 6;
+			rows = 3;
+			columns = 4;			
+			break;
+		case Difficulty.Master:
+			figures_active = 8;
+			columns = rows = 4;
+			break;
+		}
+
 		rect_w = 0.6 / columns;
-		rect_h = DrawAreaHeight / rows;
-		figures = new ArrayListIndicesRandom ((int) FigureType.Length * 2);
+		rect_h = 0.8 / rows;
+		figures = new ArrayListIndicesRandom ((int) figures_active * 2);
 		figures.Initialize ();
-		question_pos = (int) random.Next ((int) FigureType.Length * 2);
+		question_pos = (int) random.Next ((int) figures_active * 2);
 
-		for (int figure = 0; figure < (int) FigureType.Length * 2; figure++)
+		for (int figure = 0; figure < (int) figures_active * 2; figure++)
 		{	
 			if (figure == question_pos)
 				continue;
@@ -75,8 +91,8 @@
 			fig1 = (int) figures[figure];
 			fig2 = (int) figures[question_pos];
 
-			if (fig1 >= (int) FigureType.Length) fig1 -= (int) FigureType.Length;
-			if (fig2 >= (int) FigureType.Length) fig2 -= (int) FigureType.Length;
+			if (fig1 >= (int) figures_active) fig1 -= (int) figures_active;
+			if (fig2 >= (int) figures_active) fig2 -= (int) figures_active;
 
 			if (fig1 == fig2) {
 				question_answer = figure + 1;
@@ -87,7 +103,7 @@
 		base.Initialize ();
 	}
 
-	public override void DrawPossibleAnswers (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawPossibleAnswers (CairoContextEx gr, int area_width, int area_height)
 	{
 		int col = 1, fig;
 		double x = start_x, y = start_y;
@@ -103,13 +119,12 @@
 		for (int figure = 0; figure < figures.Count; figure++, col++)
 		{
 			fig = (int)figures[figure];
-			if (fig >= (int) FigureType.Length) fig -= (int) FigureType.Length;
+			if (fig >= figures_active) fig -= figures_active;
 
 			if (figure == question_pos)
 				DrawFigure (gr, x, y, (FigureType) fig);
 			else {
-				gr.MoveTo (x + 0.04, y + 0.1);
-				gr.ShowText ((figure + 1).ToString ());
+				gr.DrawTextCentered (x + rect_w / 2, y + rect_h / 2, (figure + 1).ToString ());
 				gr.Stroke ();
 			}
 
@@ -123,14 +138,14 @@
 		}
 	}
 
-	public override void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		base.DrawObjectToMemorize (gr, area_width, area_height);
 		DrawGrid (gr, area_width, area_height);
 		DrawAllFigures (gr, area_width, area_height);
 	}
 
-	private void DrawAllFigures (Cairo.Context gr, int area_width, int area_height)
+	private void DrawAllFigures (CairoContextEx gr, int area_width, int area_height)
 	{
 		int col = 1, fig;
 		double x = start_x, y = start_y;
@@ -138,8 +153,8 @@
 		for (int figure = 0; figure < figures.Count; figure++, col++)
 		{
 			fig = (int)figures[figure];
-			if (fig >= (int) FigureType.Length) 
-				fig -= (int) FigureType.Length;
+			if (fig >= figures_active) 
+				fig -= figures_active;
 
 			DrawFigure (gr, x, y, (FigureType) fig);
 
@@ -153,27 +168,30 @@
 		}
 	}
 
-	private void DrawFigure (Cairo.Context gr, double x, double y, FigureType fig)
+	private void DrawFigure (CairoContextEx gr, double x, double y, FigureType fig)
 	{
-		double space_x = 0.04, space_y = 0.08;
+		double space_x, space_y;
+
+		space_x = (rect_w - figure_size) / 2;
+		space_y = (rect_h - figure_size) / 2;
 
 		switch (fig) {
 		case FigureType.Triangle:
-			DrawingHelpers.DrawEquilateralTriangle (gr, x + space_x, y + space_y, figure_size);
+			gr.DrawEquilateralTriangle (x + space_x, y + space_y, figure_size);
 			break;
 		case FigureType.Rectangle:
 			gr.Rectangle (x + space_x, y + space_y, figure_size, figure_size);
 			gr.Stroke ();
 			break;
 		case FigureType.Diamond:
-			DrawingHelpers.DrawDiamond  (gr, x + space_x, y + space_y, figure_size);
+			gr.DrawDiamond (x + space_x, y + space_y, figure_size);
 			break;
 		case FigureType.Cercle:
 			gr.Arc (x + space_x + figure_size / 2, y + space_y + figure_size / 2, figure_size / 2, 0, 2 * Math.PI);	
 			gr.Stroke ();
 			break;
 		case FigureType.TriangleWithLine:
-			DrawingHelpers.DrawEquilateralTriangle (gr, x + space_x, y + space_y, figure_size);
+			gr.DrawEquilateralTriangle (x + space_x, y + space_y, figure_size);
 			gr.MoveTo (x + space_x + figure_size / 2, y + space_y);
 			gr.LineTo (x + space_x + figure_size / 2, y + space_y + figure_size);
 			gr.Stroke ();
@@ -186,8 +204,8 @@
 			gr.LineTo (x + space_x, y + space_y + figure_size);
 			gr.Stroke ();
 			break;
-		/*case FigureType.DiamondWithLine:
-			DrawingHelpers.DrawDiamond  (gr, x + space_x, y + space_y, figure_size);
+		case FigureType.DiamondWithLine:
+			gr.DrawDiamond (x + space_x, y + space_y, figure_size);
 			gr.MoveTo (x + space_x + figure_size / 2, y + space_y);
 			gr.LineTo (x + space_x + figure_size / 2, y + space_y + figure_size);
 			gr.Stroke ();
@@ -198,11 +216,11 @@
 			gr.MoveTo (x + space_x + figure_size / 2, y + space_y);
 			gr.LineTo (x + space_x + figure_size / 2, y + space_y + figure_size);
 			gr.Stroke ();
-			break;*/
+			break;
 		}
 	}
 
-	private void DrawGrid (Cairo.Context gr, int area_width, int area_height)
+	private void DrawGrid (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = start_x, y = start_y;
 		gr.Color = new Color (DefaultDrawingColor.R, DefaultDrawingColor.G, DefaultDrawingColor.B, alpha);

Modified: branches/STABLE/src/MemoryIndications.cs
==============================================================================
--- branches/STABLE/src/MemoryIndications.cs	(original)
+++ branches/STABLE/src/MemoryIndications.cs	Thu Mar  6 13:22:24 2008
@@ -52,14 +52,14 @@
 			Up
 		}
 
-		public void Draw (Cairo.Context gr, ref double x, ref double y, Indication next_prev)
+		public void Draw (CairoContextEx gr, ref double x, ref double y, Indication next_prev)
 		{
 			double line_length = 0.050;
 			double points = 0.050;
 
 			if (type == Type.Start) {
 				gr.Rectangle (x, y, points, points);
-				DrawingHelpers.DrawTextCentered (gr, x + points /2 , y + points /2, ((int)obj).ToString ());
+				gr.DrawTextCentered (x + points /2 , y + points /2, ((int)obj).ToString ());
 				switch ((TurnDirection) next_prev.obj) {
 				case TurnDirection.Right:
 					x += points;
@@ -116,7 +116,7 @@
 					break;
 				}
 				gr.Rectangle (x, y, points, points);
-				DrawingHelpers.DrawTextCentered (gr, x + points /2 , y + points /2, ((int)obj).ToString ());
+				gr.DrawTextCentered (x + points /2 , y + points /2, ((int)obj).ToString ());
 			}
 		}	
 	
@@ -124,7 +124,7 @@
 		{
 			switch (type) {
 			case Type.Start:
-				return String.Format (Catalog.GetString ("Start in point number {0}"), (int) obj);
+				return String.Format (Catalog.GetString ("Start at point number {0}"), (int) obj);
 			case Type.Turn: {
 				switch ((TurnDirection) obj) {
 				case TurnDirection.Right:
@@ -139,7 +139,7 @@
 				break;
 			}
 			case Type.End:
-				return String.Format (Catalog.GetString ("End in point {0}"), obj);
+				return String.Format (Catalog.GetString ("End at point {0}"), obj);
 			}
 			return null;
 		}
@@ -150,7 +150,6 @@
 	private Indication[] indications_wrongB;
 	private Indication[] indications_wrongC;
 	private ArrayListIndicesRandom answers;
-	const int steps = 7;
 
 	public override string Name {
 		get {return Catalog.GetString ("Memorize indications");}
@@ -158,12 +157,12 @@
 
 	public override string MemoryQuestion {
 		get { 
-			return String.Format (Catalog.GetString ("Which of the follow graphics represents the indications previously given?"));}
+			return String.Format (Catalog.GetString ("Which of the following graphics represent the indications previously given?"));}
 	}
 
 	public override void Initialize ()
-	{			
-		indications = new Indication [steps];
+	{
+		indications = new Indication [CurrentDifficulty == Difficulty.Easy ? 5 : 7];
 		Indication.TurnDirection second_turn = (Indication.TurnDirection) 2 +  random.Next (2);
 		
 		indications[0] = new Indication (Indication.Type.Start, 0);
@@ -171,13 +170,17 @@
 		indications[2] = new Indication (Indication.Type.Turn, second_turn); // up or down
 		indications[3] = new Indication (Indication.Type.Turn, random.Next (2)); // right or left
 
-		if (second_turn == Indication.TurnDirection.Up)
-			indications[4] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Up);
-		else
-			indications[4] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Down);
+		if (CurrentDifficulty==Difficulty.Easy) {
+			indications[4] = new Indication (Indication.Type.End, 1);		
+		} else {
+			if (second_turn == Indication.TurnDirection.Up)
+				indications[4] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Up);
+			else
+				indications[4] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Down);
 
-		indications[5] = new Indication (Indication.Type.Turn, random.Next (2)); // right or left
-		indications[6] = new Indication (Indication.Type.End, 1);
+			indications[5] = new Indication (Indication.Type.Turn, random.Next (2)); // right or left
+			indications[6] = new Indication (Indication.Type.End, 1);
+		}
 		
 		indications_wrongA = CopyAnswer ();
 		indications_wrongB = CopyAnswer ();
@@ -190,12 +193,22 @@
 			indications_wrongA[3] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Right);
 		}
 
-		if ((Indication.TurnDirection) indications[5].obj == Indication.TurnDirection.Right) {
-			indications_wrongB[5] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Left);
-		}
-		else {
-			indications_wrongB[5] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Right);
+		if (CurrentDifficulty == Difficulty.Easy) {
+			if ((Indication.TurnDirection) indications[2].obj == Indication.TurnDirection.Up) {
+				indications_wrongB[2] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Down);
+			}
+			else {
+				indications_wrongB[2] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Up);
+			}
+		} else {
+			if ((Indication.TurnDirection) indications[5].obj == Indication.TurnDirection.Right) {
+				indications_wrongB[5] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Left);
+			}
+			else {
+				indications_wrongB[5] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Right);
+			}
 		}
+
 		if ((Indication.TurnDirection) indications[1].obj == Indication.TurnDirection.Right) {
 			indications_wrongC[1] = new Indication (Indication.Type.Turn, Indication.TurnDirection.Left);
 		}
@@ -221,14 +234,14 @@
 
 	private Indication[] CopyAnswer ()
 	{
-		Indication[] answer = new Indication [steps];
-		for (int i = 0; i < steps; i++)
+		Indication[] answer = new Indication [indications.Length];
+		for (int i = 0; i < indications.Length; i++)
 			answer[i] = new Indication (indications[i].type, indications[i].obj);
 
 		return answer;
 	}
 
-	private void DrawPossibleAnswers (Cairo.Context gr, double x, double y, Indication[] indications)
+	private void DrawPossibleAnswers (CairoContextEx gr, double x, double y, Indication[] indications)
 	{		
 		for (int i = 0; i < indications.Length - 1; i++)
 			indications[i].Draw (gr, ref x, ref y, indications[i + 1]);
@@ -252,14 +265,13 @@
 		return null;
 	}
 
-	public override void DrawPossibleAnswers (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawPossibleAnswers (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x, y;
 
 		x = 0.22; y = 0.3;
 		DrawPossibleAnswers (gr, x, y, WhichAnswer (answers[0]));
 		gr.MoveTo (x, y + 0.2);
-		//gr.ShowText ("Figure A");
 		gr.ShowText (String.Format (Catalog.GetString ("Figure {0}"), "A"));
 
 		x = 0.7; y = 0.3;
@@ -278,7 +290,7 @@
 		gr.ShowText (String.Format (Catalog.GetString ("Figure {0}"), "D"));
 	}
 	
-	public override void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		base.DrawObjectToMemorize (gr, area_width, area_height);
 

Modified: branches/STABLE/src/MemoryNumbers.cs
==============================================================================
--- branches/STABLE/src/MemoryNumbers.cs	(original)
+++ branches/STABLE/src/MemoryNumbers.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -26,23 +26,37 @@
 public class MemoryNumbers : Memory
 {
 	private int [] numbers;
-	private const int rows = 3, columns = 3;
-	private const double rect_w = 0.3 / rows;
-	private const double rect_h = 0.3 / columns;
-	private const int squares = rows * columns;
+	private int rows, columns, squares;
+	private double rect_w, rect_h;
 	private ArrayListIndicesRandom answers_order;
 	private const int answers = 4;
+	private const double block_space = 0.35;
 
 	public override string Name {
 		get {return Catalog.GetString ("Memorize numbers");}
 	}
 
 	public override string MemoryQuestion {
-		get { return Catalog.GetString ("Which one of these squares was the one previously shown (A, B, C or D)?");}
+		get { return Catalog.GetString ("Which one of these squares was previously shown (A, B, C or D)?");}
 	}
 
 	public override void Initialize ()
 	{
+		switch (CurrentDifficulty) {
+		case Difficulty.Easy:
+			columns = rows = 2;
+			break;
+		case Difficulty.Medium:
+			columns = rows = 3;
+			break;
+		case Difficulty.Master:
+			columns = rows = 4;
+			break;
+		}
+
+		rect_w = 0.3 / rows;
+		rect_h = 0.3 / columns;
+		squares = rows * columns;
 		numbers = new int [squares * 4];
 		
 		for (int n = 0; n < rows; n++)
@@ -105,36 +119,36 @@
 	}
 	
 
-	public override void DrawPossibleAnswers (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawPossibleAnswers (CairoContextEx gr, int area_width, int area_height)
 	{
-		double x = DrawAreaX + 0.05, y = DrawAreaY;
+		double x = DrawAreaX , y = DrawAreaY;
 		gr.Color = DefaultDrawingColor;
 		for (int i = 0; i < answers_order.Count; i++) {
 			if (i == 2) {
-				y += 0.4;
-				x = DrawAreaX + 0.05;
+				y += 0.45;
+				x = DrawAreaX;
 			}
 			DrawSquare (gr, x, y, numbers, squares * (int) answers_order[i]);
-			gr.MoveTo (x, y + 0.34);
+			gr.MoveTo (x, y + block_space + 0.02);
 			gr.ShowText (String.Format (Catalog.GetString ("Figure {0}"), (char) (65 + i)));
 			gr.Stroke ();
-			x += 0.35;
+			x += block_space + 0.08;
 		}
 	}
 
-	public override void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		base.DrawObjectToMemorize (gr, area_width, area_height);
 		DrawSquare (gr, 0.3 + DrawAreaX, DrawAreaY + 0.1, numbers, 0);
 	}
 
-	private void DrawSquare (Cairo.Context gr, double x, double y, int[] nums, int index)
+	private void DrawSquare (CairoContextEx gr, double x, double y, int[] nums, int index)
 	{
 		for (int column = 0; column < columns; column++) {
 			for (int row = 0; row < rows; row++) {
 				gr.Rectangle (x + row * rect_w, y + column * rect_h, rect_w, rect_h);
-				gr.MoveTo (x + 0.04 + column * rect_w, (rect_h / 2) + y + row * rect_h);
-				gr.ShowText ((nums[index + column + (row * columns)]).ToString() );
+				gr.DrawTextCentered (x + (rect_w / 2) + column * rect_w, y + (rect_h / 2) + row * rect_h, 
+					(nums[index + column + (row * columns)]).ToString ());
 			}
 		}
 		gr.Stroke ();

Modified: branches/STABLE/src/MemoryWords.cs
==============================================================================
--- branches/STABLE/src/MemoryWords.cs	(original)
+++ branches/STABLE/src/MemoryWords.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -29,7 +29,7 @@
 	private ArrayListIndicesRandom words_order;
 	private ArrayList words;
 	private const int total_words = 35;
-	private const int showed = 9;
+	private int showed;
 	private int answer;
 
 	public override string Name {
@@ -95,6 +95,18 @@
 		words.Add (Catalog.GetString ("bear"));
 		words.Add (Catalog.GetString ("wolf"));
 
+		switch (CurrentDifficulty) {
+		case Difficulty.Easy:
+			showed = 6;
+			break;
+		case Difficulty.Medium:
+			showed = 9;
+			break;
+		case Difficulty.Master:
+			showed = 12;
+			break;
+		}
+
 		words_order = new ArrayListIndicesRandom (total_words);
 		words_order.Initialize ();
 		answer = random.Next (showed);
@@ -103,9 +115,9 @@
 		base.Initialize ();
 	}
 	
-	public override void DrawPossibleAnswers (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawPossibleAnswers (CairoContextEx gr, int area_width, int area_height)
 	{
-		double x= DrawAreaX + 0.1, y = DrawAreaY + 0.1;
+		double x= DrawAreaX + 0.125, y = DrawAreaY + 0.1;
 		int cnt = 0;
 
 		for (int i = 0; i < showed; i++)
@@ -117,37 +129,36 @@
 			gr.ShowText ((string) words[(int)words_order[i]]);
 			gr.Stroke ();
 
-			if (cnt  == 2 || cnt == 5) {
+			if ((cnt + 1) % 3 == 0) {
 				y += 0.2;
-				x = DrawAreaX + 0.1;
+				x = DrawAreaX + 0.125;
 			} else {
-				x+= 0.2;
+				x+= 0.25;
 			}
 			cnt++;
 		}
-		
 	}
 	
-	public override void DrawObjectToMemorize (Cairo.Context gr, int area_width, int area_height)
+	public override void DrawObjectToMemorize (CairoContextEx gr, int area_width, int area_height)
 	{
 		base.DrawObjectToMemorize (gr, area_width, area_height);
 		DrawObject (gr, area_width, area_height);
 	}
 	
-	public void DrawObject (Cairo.Context gr, int area_width, int area_height)
+	private void DrawObject (CairoContextEx gr, int area_width, int area_height)
 	{
-		double x= DrawAreaX + 0.2, y = DrawAreaY + 0.2;
+		double x= DrawAreaX + 0.125, y = DrawAreaY + 0.1;
 		for (int i = 0; i < showed; i++)
 		{
 			gr.MoveTo (x, y);
 			gr.ShowText ((string) words[(int)words_order[i]]);
 			gr.Stroke ();
 			
-			if (i  == 2 || i == 5) {
+			if ((i + 1) % 3 == 0) {
 				y += 0.2;
-				x = DrawAreaX + 0.2;
+				x = DrawAreaX + 0.125;
 			} else {
-				x+= 0.2;
+				x+= 0.25;
 			}
 		}
 	}

Modified: branches/STABLE/src/PreferencesDialog.cs
==============================================================================
--- branches/STABLE/src/PreferencesDialog.cs	(original)
+++ branches/STABLE/src/PreferencesDialog.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -30,12 +30,16 @@
 	private const string dialog_name = "preferences";
 	[Glade.Widget] Gtk.SpinButton prefspinbutton;
 	[Glade.Widget] Gtk.CheckButton prefcheckbutton;
+	[Glade.Widget] Gtk.RadioButton rb_easy;
+	[Glade.Widget] Gtk.RadioButton rb_medium;
+	[Glade.Widget] Gtk.RadioButton rb_master;
 
 	public PreferencesDialog ()
 	{
 		dialog = null;
 		xml = new Glade.XML (null, "gbrainy.glade", dialog_name, "gbrainy");
 		xml.Autoconnect (this);
+		Dialog.IconName = "gbrainy";
 	}
 	
 	public virtual int MemQuestionTime {
@@ -48,6 +52,31 @@
 		set { prefcheckbutton.Active = value;}
 	}
 
+	public virtual Game.Difficulty Difficulty {
+		get {
+			if (rb_easy.Active)
+				return Game.Difficulty.Easy;
+
+			if (rb_master.Active)
+				return Game.Difficulty.Master;
+
+			return Game.Difficulty.Medium;			
+		}
+		set {
+			switch (value) {
+			case Game.Difficulty.Easy:
+				rb_easy.Active = rb_easy.HasFocus = true;
+				break;		
+			case Game.Difficulty.Medium:
+				rb_medium.Active = rb_medium.HasFocus = true;
+				break;
+			case Game.Difficulty.Master:
+				rb_master.Active = rb_master.HasFocus = true;
+				break;
+			}
+		}
+	}
+
 	public Gtk.Dialog Dialog {
 		get {
 			if (dialog == null)

Modified: branches/STABLE/src/PuzzleAlphabeticSequence.cs
==============================================================================
--- branches/STABLE/src/PuzzleAlphabeticSequence.cs	(original)
+++ branches/STABLE/src/PuzzleAlphabeticSequence.cs	Thu Mar  6 13:22:24 2008
@@ -39,7 +39,7 @@
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += String.Format (Catalog.GetString ("Every letter is calculated taking the position in the alphabet of the previous character and adding {0} to it to get the position of the new letter."), step);
+			answer += String.Format (Catalog.GetString ("Every letter is calculated by taking the alphabetical position of the previous character and adding {0} to it in order to get the position of the new letter."), step);
 
 			return answer;
 		}
@@ -73,7 +73,7 @@
 		return s;
 	}
 
-	private void DrawRectangleWithText (Cairo.Context gr, double x, double y, int index)
+	private void DrawRectangleWithText (CairoContextEx gr, double x, double y, int index)
 	{
 		gr.Rectangle (x, y, figure_size, figure_size);
 
@@ -95,7 +95,7 @@
 	}
 
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.05, y = DrawAreaY + 0.1;
 

Modified: branches/STABLE/src/PuzzleBalance.cs
==============================================================================
--- branches/STABLE/src/PuzzleBalance.cs	(original)
+++ branches/STABLE/src/PuzzleBalance.cs	Thu Mar  6 13:22:24 2008
@@ -54,7 +54,7 @@
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += Catalog.GetString ("Every triangle counts as 1, each diamond as a 2 and each square as 3.");
+			answer += Catalog.GetString ("Every triangle counts as 1, each diamond as 2 and each square as 3.");
 			return answer;
 		}
 	}
@@ -70,7 +70,7 @@
 		right_answer = ans.ToString ();
 	}
 
-	public void DrawBalance (Cairo.Context gr, double x, double y, int index, bool full)
+	public void DrawBalance (CairoContextEx gr, double x, double y, int index, bool full)
 	{
 		double width = 0.5;
 		double fig_x = x + 0.1, fig_y = y - 0.11;
@@ -85,10 +85,10 @@
 		for (int i = 0; i < total; i++) {
 			switch (balances[i + index]) {
 			case 1:
-				DrawingHelpers.DrawEquilateralTriangle (gr, fig_x, fig_y, 0.05);
+				gr.DrawEquilateralTriangle (fig_x, fig_y, 0.05);
 				break;
 			case 2:
-				DrawingHelpers.DrawDiamond (gr, fig_x, fig_y, 0.05);
+				gr.DrawDiamond (fig_x, fig_y, 0.05);
 				break;
 			case 3:
 				gr.Rectangle (fig_x, fig_y + 0.005, 0.045, 0.045);
@@ -112,12 +112,12 @@
 		gr.LineTo (x , y - 0.05);
 		gr.Stroke ();
 		
-		DrawingHelpers.DrawEquilateralTriangle (gr, x + (width / 2) - 0.04, y, 0.08);
+		gr.DrawEquilateralTriangle (x + (width / 2) - 0.04, y, 0.08);
 		gr.Stroke ();
 
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{		
 		double x = 0.05, y = DrawAreaY + 0.1;
 

Modified: branches/STABLE/src/PuzzleCirclesRectangle.cs
==============================================================================
--- branches/STABLE/src/PuzzleCirclesRectangle.cs	(original)
+++ branches/STABLE/src/PuzzleCirclesRectangle.cs	Thu Mar  6 13:22:24 2008
@@ -28,7 +28,7 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("What is the maximum number of circles (as the one showed) that can be fit in the square below?");} 
+		get {return Catalog.GetString ("What is the maximum number of circles (as shown) that fit in the square below?");} 
 	}
 
 	public override string Tip {
@@ -43,12 +43,18 @@
 		}
 	}
 
+	public override Difficulty GameDifficulty {
+		get {
+			return Difficulty.Master;
+		}
+	}
+
 	public override void Initialize ()
 	{
 		right_answer = "68";
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double first_x = DrawAreaX + 0.05;
 		double first_y = DrawAreaY + 0.1;

Modified: branches/STABLE/src/PuzzleCoverPercentage.cs
==============================================================================
--- branches/STABLE/src/PuzzleCoverPercentage.cs	(original)
+++ branches/STABLE/src/PuzzleCoverPercentage.cs	Thu Mar  6 13:22:24 2008
@@ -29,11 +29,11 @@
 	private double line_width = 0.001;
 
 	public override string Name {
-		get {return Catalog.GetString ("Cover Percentage");}
+		get {return Catalog.GetString ("Cover percentage");}
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("What is the colored percentage covered in the figure?");} 
+		get {return Catalog.GetString ("What percentage of the figure is colored?");} 
 	}
 
 	public override void Initialize ()
@@ -70,7 +70,7 @@
 		right_answer = total.ToString ();
 	}
 
-	private void DrawSection (Cairo.Context gr, double x, double y)
+	private void DrawSection (CairoContextEx gr, double x, double y)
 	{
 		double w =  width / 2, h = height / 2;
 		double pos_x = x, pos_y = y;
@@ -99,7 +99,7 @@
 		gr.Restore ();
 	}
 
-	private void CoverZone (Cairo.Context gr, double x, double y)
+	private void CoverZone (CairoContextEx gr, double x, double y)
 	{
 		gr.Save ();
 		gr.Color = new Cairo.Color (0.90, 0.90, 0.90);
@@ -108,7 +108,7 @@
 		gr.Restore ();
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = 0.25, y = 0.25;
 

Modified: branches/STABLE/src/PuzzleCube.cs
==============================================================================
--- branches/STABLE/src/PuzzleCube.cs	(original)
+++ branches/STABLE/src/PuzzleCube.cs	Thu Mar  6 13:22:24 2008
@@ -49,7 +49,7 @@
 		right_answer += (char) (48 + question_answer[(pair * 2) + 1]);
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.1;
 		double y = DrawAreaY + 0.1;

Modified: branches/STABLE/src/PuzzleDivideCircle.cs
==============================================================================
--- branches/STABLE/src/PuzzleDivideCircle.cs	(original)
+++ branches/STABLE/src/PuzzleDivideCircle.cs	Thu Mar  6 13:22:24 2008
@@ -43,12 +43,15 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("In the last figure, in how many regions is the circle divided when all the dots are connected?");} 
+		get {return Catalog.GetString ("In the last figure, in how many regions is the circle divided into when all dots are connected?");} 
 	}
 
 	public override void Initialize ()
 	{
-		dots = 5 + random.Next (2);
+		if (CurrentDifficulty==Difficulty.Easy)
+			dots = 5;
+		else
+			dots = 5 + random.Next (2);
 
 		switch (dots) {
 		case 5:
@@ -60,7 +63,7 @@
 		}			
 	}
 
-	private void DrawAndConnectPoints (Cairo.Context gr, double x, double y, Cercle[] cercles, bool connect)
+	private void DrawAndConnectPoints (CairoContextEx gr, double x, double y, Cercle[] cercles, bool connect)
 	{
 		double point_size = 0.01;
 		for (int i = 0; i < cercles.Length; i++) {
@@ -85,7 +88,7 @@
 		gr.Restore ();
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.05, y = DrawAreaY;
 		double pos_x = x;

Modified: branches/STABLE/src/PuzzleFigureLetter.cs
==============================================================================
--- branches/STABLE/src/PuzzleFigureLetter.cs	(original)
+++ branches/STABLE/src/PuzzleFigureLetter.cs	Thu Mar  6 13:22:24 2008
@@ -34,15 +34,15 @@
 	}
 
 	public override string Name {
-		get {return Catalog.GetString ("Words and figures");}
+		get {return Catalog.GetString ("Figures and text");}
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("The figures and the text are related. Which text should go under the last figure?");} 
+		get {return Catalog.GetString ("The figures and the text are related. What text should go under the last figure?");} 
 	}
 
 	public override string Tip {
-		get { return Catalog.GetString ("Every character of the word represents a property of the figure.");}
+		get { return Catalog.GetString ("Every character of the text represents a property of the figure.");}
 	}
 
 	public override string Answer {
@@ -109,7 +109,7 @@
 		return false;
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.05;
 		double y = DrawAreaY + 0.1;

Modified: branches/STABLE/src/PuzzleFigurePattern.cs
==============================================================================
--- branches/STABLE/src/PuzzleFigurePattern.cs	(original)
+++ branches/STABLE/src/PuzzleFigurePattern.cs	Thu Mar  6 13:22:24 2008
@@ -38,17 +38,17 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("Which figure should replace the question mark (A, B or C)?");} 
+		get {return Catalog.GetString ("What figure should replace the question mark (A, B or C)?");} 
 	}
 
 	public override string Tip {
-		get { return Catalog.GetString ("The third figure of every row involves combining somehow the first two figures.");}
+		get { return Catalog.GetString ("The third figure of every row involves somehow combining the first two figures.");}
 	}
 
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += Catalog.GetString ("Superpose the first and second figures and remove the lines that they have in common then rotate the resulting figure 45 degrees.");
+			answer += Catalog.GetString ("Superpose the first and second figures and remove the lines that they have in common, then rotate the resulting figure 45 degrees.");
 			return answer;
 		}
 	}
@@ -67,7 +67,7 @@
 		}
 	}
 
-	private void DrawRotatedCross (Cairo.Context gr, double x, double y, double size)
+	private void DrawRotatedCross (CairoContextEx gr, double x, double y, double size)
 	{
 		gr.MoveTo (x, y);
 		gr.LineTo (x + size, y + size);
@@ -76,7 +76,7 @@
 		gr.Stroke ();
 	}
 
-	private void DrawTwoLines (Cairo.Context gr, double x, double y, double size)
+	private void DrawTwoLines (CairoContextEx gr, double x, double y, double size)
 	{
 		gr.MoveTo (x, y);
 		gr.LineTo (x + size, y);
@@ -85,7 +85,7 @@
 		gr.Stroke ();
 	}
 
-	private void DrawCross (Cairo.Context gr, double x, double y, double size)
+	private void DrawCross (CairoContextEx gr, double x, double y, double size)
 	{
 		gr.MoveTo (x + size / 2, y);
 		gr.LineTo (x + size / 2, y + size);
@@ -94,7 +94,7 @@
 		gr.Stroke ();
 	}
 	
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double org_x = DrawAreaX + 0.1;
 		double x = org_x, y = 0.08;
@@ -141,7 +141,7 @@
 		DrawRotatedCross (gr, x, y, figure_size);
 
 		x += figure_size + space_x;
-		DrawingHelpers.DrawDiamond (gr, x, y, figure_size);
+		gr.DrawDiamond (x, y, figure_size);
 
 		y += space_y;
 		x = org_x;

Modified: branches/STABLE/src/PuzzleFigures.cs
==============================================================================
--- branches/STABLE/src/PuzzleFigures.cs	(original)
+++ branches/STABLE/src/PuzzleFigures.cs	Thu Mar  6 13:22:24 2008
@@ -67,7 +67,7 @@
 		right_answer = sb.ToString ();
 	}
 
-	private void AnswerCoding (Cairo.Context gr, double x, double y)
+	private void AnswerCoding (CairoContextEx gr, double x, double y)
 	{
 		double pos_x = x;
 
@@ -78,7 +78,7 @@
 		gr.MoveTo (pos_x, y + 0.05);
 		gr.ShowText ("A ->");
 		gr.Stroke ();
-		DrawingHelpers.DrawDiamond (gr, x + 0.1, y, 0.1);
+		gr.DrawDiamond (x + 0.1, y, 0.1);
 		gr.Stroke ();
 	
 		pos_x += 0.3;
@@ -94,15 +94,15 @@
 		gr.ShowText ("C ->");
 		gr.Stroke ();
 		pos_x += 0.1;
-		DrawingHelpers.DrawEquilateralTriangle (gr, pos_x, y, 0.1);
+		gr.DrawEquilateralTriangle (pos_x, y, 0.1);
 		gr.Stroke ();
 
 		y += 0.18;
 		gr.MoveTo (x, y);		
-		gr.ShowText (Catalog.GetString ("E.g: ACB (diamond, circle, triangle)"));	
+		gr.ShowText (Catalog.GetString ("E.g: ACB (diamond, triangle, circle)"));	
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{		
 		int element;
 		double figure_width = 0.1, figure_height = 0.1, space_width = 0.05, space_height = 0.1;
@@ -121,13 +121,13 @@
 				switch ((int) figures[(n * 6) + element])
 				{
 					case 0:
-						DrawingHelpers.DrawDiamond (gr, x, y, 0.1);
+						gr.DrawDiamond (x, y, 0.1);
 						break;
 					case 1:
 						gr.Arc (x + 0.05, y + 0.05, 0.05, 0, 2 * Math.PI);	
 						break;
 					case 2:
-						DrawingHelpers.DrawEquilateralTriangle (gr, x, y, 0.1);
+						gr.DrawEquilateralTriangle (x, y, 0.1);
 						break;
 					default:
 						break;

Modified: branches/STABLE/src/PuzzleLines.cs
==============================================================================
--- branches/STABLE/src/PuzzleLines.cs	(original)
+++ branches/STABLE/src/PuzzleLines.cs	Thu Mar  6 13:22:24 2008
@@ -32,20 +32,24 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("How many lines can you count of in the figures below?");} 
+		get {return Catalog.GetString ("How many lines do you count of in the figures below?");} 
 	}
 
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += String.Format (Catalog.GetString ("There are {0} lines in the figure at the left and {1} in the figure at the right."), fig1, fig2);
+			answer += String.Format (Catalog.GetString ("There are {0} lines in the figure to the left and {1} in the figure to the right."), fig1, fig2);
 			return answer;
 		}
 	}
 
 	public override void Initialize ()
 	{
-		type = random.Next (max_types);
+		if (CurrentDifficulty==Difficulty.Easy)
+			type = 0;
+		else
+			type = random.Next (max_types);		
+
 		switch (type) {
 		case 0:
 			fig1 = 15;
@@ -64,14 +68,14 @@
 		right_answer = (fig1 + fig2).ToString ();
 	}
 
-	private void DrawLine (Cairo.Context gr, double x, double y, double w, double h)
+	private void DrawLine (CairoContextEx gr, double x, double y, double w, double h)
 	{
 		gr.MoveTo (x, y);
 		gr.LineTo (x + w, y + h);
 		gr.Stroke ();
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		gr.Scale (area_width, area_height);
 

Modified: branches/STABLE/src/PuzzleMatrixGroups.cs
==============================================================================
--- branches/STABLE/src/PuzzleMatrixGroups.cs	(original)
+++ branches/STABLE/src/PuzzleMatrixGroups.cs	Thu Mar  6 13:22:24 2008
@@ -37,7 +37,7 @@
 	}
 
 	public override string Tip {
-		get { return Catalog.GetString ("All the blue numbers share an arithmetical property.");}
+		get { return Catalog.GetString ("All blue numbers share an arithmetical property.");}
 	}
 
 	public override string Answer {
@@ -103,7 +103,7 @@
 		return unique;
 	}	
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double rect_w = DrawAreaWidth / rows;
 		double rect_h = DrawAreaHeight / columns;

Modified: branches/STABLE/src/PuzzleMatrixNumbers.cs
==============================================================================
--- branches/STABLE/src/PuzzleMatrixNumbers.cs	(original)
+++ branches/STABLE/src/PuzzleMatrixNumbers.cs	Thu Mar  6 13:22:24 2008
@@ -38,7 +38,7 @@
 	private const int rows = 4, columns = 4;
 
 	public override string Name {
-		get {return Catalog.GetString ("Matrix Numbers");}
+		get {return Catalog.GetString ("Matrix numbers");}
 	}
 
 	public override string Question {
@@ -61,23 +61,23 @@
 			switch (operation) {
 			case Operation.MultiplyAndAdd:
 				if (orientation) {
-					answer += String.Format(Catalog.GetString("The fourth row is calculated multiplying the first two rows and adding the third."));
+					answer += String.Format(Catalog.GetString("The fourth row is calculated by multiplying the first two rows and adding the third."));
 				} else {
-					answer += String.Format(Catalog.GetString("The fourth column is calculated multiplying the first two columns and adding the third."));
+					answer += String.Format(Catalog.GetString("The fourth column is calculated by multiplying the first two columns and adding the third."));
 				}
 				break;
 			case Operation.MutilplyAndSubs:
 				if (orientation) {
-					answer += String.Format(Catalog.GetString("The fourth row is calculated multiplying the first two rows and subtracting the third."));
+					answer += String.Format(Catalog.GetString("The fourth row is calculated by multiplying the first two rows and subtracting the third."));
 				} else {
-					answer += String.Format(Catalog.GetString("The fourth column is calculated multiplying the first two columns and subtracting the third."));
+					answer += String.Format(Catalog.GetString("The fourth column is calculated by multiplying the first two columns and subtracting the third."));
 				}
 				break;
 			case Operation.AddAndSubs:
 				if (orientation) {
-					answer += String.Format(Catalog.GetString("The fourth row is calculated adding the first two rows and subtracting the third."));
+					answer += String.Format(Catalog.GetString("The fourth row is calculated by adding the first two rows and subtracting the third."));
 				} else {
-					answer += String.Format(Catalog.GetString("The fourth column is calculated adding the first two columns and subtracting the third."));
+					answer += String.Format(Catalog.GetString("The fourth column is calculated by adding the first two columns and subtracting the third."));
 				}
 				break;
 			}
@@ -126,7 +126,7 @@
 		right_answer = numbers[3*coordinateA + 3*coordinateB].ToString ();
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double rect_w = DrawAreaWidth / rows;
 		double rect_h = DrawAreaHeight / columns;

Modified: branches/STABLE/src/PuzzleMissingPiece.cs
==============================================================================
--- branches/STABLE/src/PuzzleMissingPiece.cs	(original)
+++ branches/STABLE/src/PuzzleMissingPiece.cs	Thu Mar  6 13:22:24 2008
@@ -43,7 +43,7 @@
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += Catalog.GetString ("In every row the third square is made by flipping the first square and superimposing it to the second square, removing the matching lines, and then flipping the resulting image.");
+			answer += Catalog.GetString ("In every row the third square is made by flipping the first square and superimposing it on the second square, followed by removing the matching lines.");
 			return answer;
 		}
 	}
@@ -61,7 +61,7 @@
 		}
 	}
 
-	private void DrawFigureSequence (Cairo.Context gr, double x, double y, int sequence, bool last_block)
+	private void DrawFigureSequence (CairoContextEx gr, double x, double y, int sequence, bool last_block)
 	{
 		gr.Rectangle (x, y, sub_figure, sub_figure);
 		gr.Rectangle (x + sub_figure, y, sub_figure, sub_figure);
@@ -109,7 +109,7 @@
 		gr.Stroke ();
 	}
 
-	private void DrawAnswerFigures (Cairo.Context gr, double x, double y, int figure)
+	private void DrawAnswerFigures (CairoContextEx gr, double x, double y, int figure)
 	{
 		gr.Rectangle (x, y, sub_figure, sub_figure);
 
@@ -131,7 +131,7 @@
 		gr.Stroke ();
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.15, y = DrawAreaY;
 		int figure;

Modified: branches/STABLE/src/PuzzleMissingSlice.cs
==============================================================================
--- branches/STABLE/src/PuzzleMissingSlice.cs	(original)
+++ branches/STABLE/src/PuzzleMissingSlice.cs	Thu Mar  6 13:22:24 2008
@@ -69,7 +69,7 @@
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += String.Format (Catalog.GetString ("All the numbers of each slice when added to the ones of the opposite slice add always {0}."), sum_offset + 8);
+			answer += String.Format (Catalog.GetString ("All numbers of each slice, when added to the ones of the opposite slice, add always {0}."), sum_offset + 8);
 			return answer;
 		}
 	}
@@ -88,7 +88,7 @@
 		}
 	}
 
-	private void DrawSlice (Cairo.Context gr, double x, double y)
+	private void DrawSlice (CairoContextEx gr, double x, double y)
 	{
 		double degrees, x1, y1;
 		
@@ -110,7 +110,7 @@
 		gr.Stroke ();
 	}
 
-	private void DrawSliceText (Cairo.Context gr, double x, double y, int slice, string str1, string str2, string str3)
+	private void DrawSliceText (CairoContextEx gr, double x, double y, int slice, string str1, string str2, string str3)
 	{	
 		double x0, y0, degrees;
 
@@ -118,22 +118,22 @@
 		degrees = radian * (slice * ((360 / total_slices)) + (360 / 12));
 		x0 = 0.35 * radius * Math.Cos (degrees);
 		y0 = 0.35 * radius * Math.Sin (degrees);
-		DrawingHelpers.DrawTextCentered (gr, x + x0, y + y0, str1);
+		gr.DrawTextCentered (x + x0, y + y0, str1);
 	
 		// Number opposite to the center and at the top
 		degrees = radian * (slice * ((360 / total_slices)) + (360 / 24));
 		x0 = 0.8 * radius * Math.Cos (degrees);
 		y0 = 0.8 * radius * Math.Sin (degrees);
-		DrawingHelpers.DrawTextCentered (gr, x + x0, y + y0, str2);
+		gr.DrawTextCentered (x + x0, y + y0, str2);
 	
 		// Number opposite to the center and at the bottom
 		degrees = radian * (slice * ((360 / total_slices)) + (360 / 8));			
 		x0 = 0.8 * radius * Math.Cos (degrees);
 		y0 = 0.8 * radius * Math.Sin (degrees);
-		DrawingHelpers.DrawTextCentered (gr, x + x0, y + y0, str3);
+		gr.DrawTextCentered (x + x0, y + y0, str3);
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{		
 		double x = DrawAreaX + 0.2, y = DrawAreaY;
 		double x0, y0, degrees;
@@ -158,7 +158,7 @@
 				degrees = radian * (slice * ((360 / total_slices)) + (360 / 12));
 				x0 = 0.5 * radius * Math.Cos (degrees);
 				y0 = 0.5 * radius * Math.Sin (degrees);
-				DrawingHelpers.DrawTextCentered (gr, x + arc_centerx + x0, y + arc_centery + y0, "?");
+				gr.DrawTextCentered (x + arc_centerx + x0, y + arc_centery + y0, "?");
 				continue;
 			}
 			

Modified: branches/STABLE/src/PuzzleMoveFigure.cs
==============================================================================
--- branches/STABLE/src/PuzzleMoveFigure.cs	(original)
+++ branches/STABLE/src/PuzzleMoveFigure.cs	Thu Mar  6 13:22:24 2008
@@ -31,7 +31,7 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("What is the minimum number of circles that you have to move to convert the left figure into the right figure?");} 
+		get {return Catalog.GetString ("What is the minimum number of circles to be moved in order to convert the left figure into the right figure?");} 
 	}
 	
 	public override string Answer {
@@ -40,10 +40,10 @@
 
 			switch (type) {
 			case 0:
-				answer += Catalog.GetString ("Move the circle from the first line to the second and two circles from the fourth to the second and the fifth lines.");
+				answer += Catalog.GetString ("Move the circle from the first line to the second and move two circles from the fourth line to the second and the fifth lines.");
 				break;
 			case 1:
-				answer += Catalog.GetString ("Move the two first lines and the first and last circle of the last line to the third, sixth and seventh lines.");
+				answer += Catalog.GetString ("Move the first line to the seventh; move the two circles of the second line to third; and move first and last circles of the fifth line to the sixth.");
 				break;
 			}
 			return answer;
@@ -67,7 +67,7 @@
 		
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double first_x, x, y;
 		double figure_size = 0.07 + (0.01 * (5 - lines));

Modified: branches/STABLE/src/PuzzleNextFigure.cs
==============================================================================
--- branches/STABLE/src/PuzzleNextFigure.cs	(original)
+++ branches/STABLE/src/PuzzleNextFigure.cs	Thu Mar  6 13:22:24 2008
@@ -56,7 +56,7 @@
 		get { 
 			string answer = base.Answer + " ";
 
-			answer += String.Format (Catalog.GetString ("From first figure the top circle advances two positions clockwise and the left circle goes backwards one position."));
+			answer += String.Format (Catalog.GetString ("From first figure, the top circle advances by two positions clockwise, while the left circle goes backwards one position."));
 			return answer;
 		}
 	}
@@ -75,7 +75,7 @@
 		}
 	}
 
-	private void DrawDiamon (Cairo.Context gr, double x, double y, CerclePosition cercles)
+	private void DrawDiamon (CairoContextEx gr, double x, double y, CerclePosition cercles)
 	{	
 		double distance = 0.04;
 
@@ -107,7 +107,7 @@
 		}
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX;
 		double y = DrawAreaY;

Modified: branches/STABLE/src/PuzzleNumericRelation.cs
==============================================================================
--- branches/STABLE/src/PuzzleNumericRelation.cs	(original)
+++ branches/STABLE/src/PuzzleNumericRelation.cs	Thu Mar  6 13:22:24 2008
@@ -24,19 +24,19 @@
 
 public class PuzzleNumericRelation : Game
 {
-	private const int max_num = 9;
 	private const int group_size = 3;
 	private int sum_value;
 	private int question;
 	private int[] numbers;
 	private int formula;
+	private const int max_num = 9;
 
 	public override string Name {
 		get {return Catalog.GetString ("Numeric relation");}
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("Which number should replace the question mark?");} 
+		get {return Catalog.GetString ("What number should replace the question mark?");} 
 	}
 
 	public override string Tip {
@@ -52,7 +52,7 @@
 				answer += String.Format (Catalog.GetString ("Every group of {0} numbers sums exactly {1}."), group_size, sum_value);
 				break;
 			case 1:
-				answer += Catalog.GetString ("Divide the sequence in groups of three numbers. Every third number is calculated by multiplying the two previous ones.");
+				answer += Catalog.GetString ("Divide the sequence in groups of three numbers. Every third number is calculated by multiplying by the two previous ones.");
 				break;
 
 			case 2:
@@ -65,12 +65,20 @@
 
 	public override void Initialize ()
 	{
-		int group = 0;
+		int group = 0, inc = 0;
+
+		if (CurrentDifficulty == Difficulty.Easy) {
+			sum_value = 10 + random.Next (10);
+			inc = 5;
+		}
+		else {
+			sum_value = 30 + random.Next (10);
+			inc = 12;
+		}
 
 		question = 1 + random.Next (max_num - 2);
 		formula = random.Next (3);
 		numbers =  new int [max_num];
-		sum_value = 30 + random.Next (10);
 		
 		for (int i = 0; i < max_num; i++) {
 			if (group == group_size - 1) {	
@@ -88,7 +96,7 @@
 				group = 0;
 				continue;
 			}
-			numbers[i] = 1 + random.Next (12);
+			numbers[i] = 1 + random.Next (inc);
 			group++;
 		}
 
@@ -96,7 +104,7 @@
 	}
 
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		StringBuilder sequence = new StringBuilder (64);
 
@@ -115,10 +123,7 @@
 			}
 		}
 		sequence.Append (numbers[max_num - 1]);
-
-		gr.MoveTo (DrawAreaX, DrawAreaY + 0.3);
-		gr.ShowText (sequence.ToString ());
-		gr.Stroke ();
+		gr.DrawTextCentered (0.5, DrawAreaY + 0.3, sequence.ToString ());
 	}
 
 }

Modified: branches/STABLE/src/PuzzleNumericSequence.cs
==============================================================================
--- branches/STABLE/src/PuzzleNumericSequence.cs	(original)
+++ branches/STABLE/src/PuzzleNumericSequence.cs	Thu Mar  6 13:22:24 2008
@@ -33,7 +33,7 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("The next sequence follows a logic. Which number should replace the question mark?");} 
+		get {return Catalog.GetString ("The next sequence follows a logic. What number should replace the question mark?");} 
 	}
 
 	public override string Tip {
@@ -46,13 +46,13 @@
 
 			switch (formula) {
 			case 0:
-				answer += Catalog.GetString ("Every number in the sequence is the result of subtracting 1 to the previous number and multiplying it by 2.");
+				answer += Catalog.GetString ("Every number in the sequence is the result of subtracting 1 from the previous number and multiplying it by 2.");
 				break;
 			case 1:
 				answer += Catalog.GetString ("Every number in the sequence is the result of adding 1 to the previous number and multiplying it by 3.");
 				break;
 			case 2:
-				answer += Catalog.GetString ("Every number in the sequence is the result of subtracting 2 to the previous number and multiplying it by -2.");
+				answer += Catalog.GetString ("Every number in the sequence is the result of subtracting 2 from the previous number and multiplying it by -2.");
 				break;
 			}
 			return answer;
@@ -61,7 +61,7 @@
 
 	public override void Initialize ()
 	{
-		formula = random.Next (3);
+		formula = random.Next (CurrentDifficulty == Difficulty.Easy ? 2 : 3);
 		numbers =  new int [max_num];
 		numbers[0] = 3 + random.Next (3);
 		for (int i = 1; i < max_num; i++) {
@@ -82,7 +82,7 @@
 	}
 
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		StringBuilder sequence = new StringBuilder (64);
 
@@ -98,9 +98,7 @@
 		}
 		sequence.Append ("?");
 
-		gr.MoveTo (DrawAreaX + 0.05, DrawAreaY + 0.3);
-		gr.ShowText (sequence.ToString ());
-		gr.Stroke ();
+		gr.DrawTextCentered (0.5, DrawAreaY + 0.3, sequence.ToString ());
 	}
 
 }

Modified: branches/STABLE/src/PuzzleOstracism.cs
==============================================================================
--- branches/STABLE/src/PuzzleOstracism.cs	(original)
+++ branches/STABLE/src/PuzzleOstracism.cs	Thu Mar  6 13:22:24 2008
@@ -50,7 +50,7 @@
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += Catalog.GetString ("In all the equations the digits from the left side should also appear in the right side.");
+			answer += Catalog.GetString ("In all equations the digits from the left side should also appear in the right side.");
 			return answer;
 		}
 	}
@@ -70,7 +70,7 @@
 		}
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.15, y = DrawAreaY + 0.2;
 

Modified: branches/STABLE/src/PuzzlePairs.cs
==============================================================================
--- branches/STABLE/src/PuzzlePairs.cs	(original)
+++ branches/STABLE/src/PuzzlePairs.cs	Thu Mar  6 13:22:24 2008
@@ -67,7 +67,7 @@
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += String.Format (Catalog.GetString ("The result of multiply the two numbers inside every triangle is {0}."), answer_number);
+			answer += String.Format (Catalog.GetString ("The result of multiplying the two numbers inside every triangle is {0}."), answer_number);
 			return answer;
 		}
 	}
@@ -92,7 +92,7 @@
 	}
 
 
-	private void DrawTriangle (Cairo.Context gr, double x, double y, int index, bool question)
+	private void DrawTriangle (CairoContextEx gr, double x, double y, int index, bool question)
 	{
 		gr.MoveTo (x + figure_size / 2, y);
 		gr.LineTo (x, y + figure_size);
@@ -111,7 +111,7 @@
 			gr.ShowText (numbers [(elements_group * group) + (index * 2) + 1].ToString ());	
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX, y = DrawAreaY + 0.1;
 

Modified: branches/STABLE/src/PuzzlePencil.cs
==============================================================================
--- branches/STABLE/src/PuzzlePencil.cs	(original)
+++ branches/STABLE/src/PuzzlePencil.cs	Thu Mar  6 13:22:24 2008
@@ -34,7 +34,7 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("Which of the following figures cannot be drawn without crossing any previous lines and lifting the pencil?");} 
+		get {return Catalog.GetString ("Which of the following figures cannot be drawn without crossing any previous lines nor lifting the pencil?");} 
 	}
 
 	public override void Initialize ()
@@ -52,7 +52,7 @@
 		}	
 	}
 
-	private void DrawTriangle (Cairo.Context gr, double x, double y)
+	private void DrawTriangle (CairoContextEx gr, double x, double y)
 	{
 		gr.MoveTo (x + (figure_size / 2), y);
 		gr.LineTo (x, y + figure_size);
@@ -62,7 +62,7 @@
 		gr.Stroke ();	
 	}
 
-	private void DrawDiamon (Cairo.Context gr, double x, double y)
+	private void DrawDiamon (CairoContextEx gr, double x, double y)
 	{
 		gr.MoveTo (x, y);
 		gr.LineTo (x - (figure_size / 2), y + (figure_size / 2));
@@ -73,7 +73,7 @@
 		gr.Stroke ();
 	}
 
-	private void DrawRectangleWithTriangles (Cairo.Context gr, double x, double y)
+	private void DrawRectangleWithTriangles (CairoContextEx gr, double x, double y)
 	{
 		gr.Rectangle (x, y, figure_size, figure_size);
 		gr.Stroke ();	
@@ -91,7 +91,7 @@
 		gr.Stroke ();
 	}
 
-	private void DrawThreeTriangles (Cairo.Context gr, double x, double y)
+	private void DrawThreeTriangles (CairoContextEx gr, double x, double y)
 	{
 		gr.MoveTo (x, y);
 		gr.LineTo (x, y + figure_size);
@@ -104,7 +104,7 @@
 		
 	}
 
-	private void DrawHouse (Cairo.Context gr, double x, double y)
+	private void DrawHouse (CairoContextEx gr, double x, double y)
 	{
 		gr.MoveTo (x, y + figure_size);
 		gr.LineTo (x, y + figure_size / 2);
@@ -119,7 +119,7 @@
 		
 	}
 
-	private void DrawRectangleWithCross (Cairo.Context gr, double x, double y)
+	private void DrawRectangleWithCross (CairoContextEx gr, double x, double y)
 	{
 		gr.Rectangle (x, y, figure_size, figure_size);
 
@@ -132,7 +132,7 @@
 		gr.Stroke ();
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX, y = DrawAreaY;
 

Modified: branches/STABLE/src/PuzzlePeopleTable.cs
==============================================================================
--- branches/STABLE/src/PuzzlePeopleTable.cs	(original)
+++ branches/STABLE/src/PuzzlePeopleTable.cs	Thu Mar  6 13:22:24 2008
@@ -39,17 +39,17 @@
 	}
 
 	public override string Name {
-		get {return Catalog.GetString ("People in a table");}
+		get {return Catalog.GetString ("People at a table");}
 	}
 
 	public override string Question {
-		get {return String.Format (Catalog.GetString ("A group of people evenly separated is sat in a round table. How many people are if the {0} person is in front of the {1}?"), ques1, ques2);} 
+		get {return String.Format (Catalog.GetString ("A group of people are sitting at round table, evenly spaced out. How many people are there if the {0} person is across from the {1}?"), ques1, ques2);} 
 	}
 
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += Catalog.GetString ("Substracting the two positions you get how many people is sat in half of the table then the double is the total amount of people.");
+			answer += Catalog.GetString ("Subtracting the two positions you find out how many people are seated half way around the table. Doubling this number leaves you with the total amount of people.");
 			return answer;
 		}
 	}
@@ -75,7 +75,7 @@
 		}			
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.22, y = DrawAreaY + 0.2;
 		double pos_x = x;

Modified: branches/STABLE/src/PuzzleSquareDots.cs
==============================================================================
--- branches/STABLE/src/PuzzleSquareDots.cs	(original)
+++ branches/STABLE/src/PuzzleSquareDots.cs	Thu Mar  6 13:22:24 2008
@@ -104,7 +104,7 @@
 		}
 	}
 
-	public void DrawFigure (Cairo.Context gr, double x, double y, bool [] puzzle, int index)
+	public void DrawFigure (CairoContextEx gr, double x, double y, bool [] puzzle, int index)
 	{
 		double pos_x = x, pos_y = y;
 		double square_size = figure_size / lines;
@@ -148,7 +148,7 @@
 		}
 	}
 
-	public void DrawPossibleAnswer (Cairo.Context gr, double x, double y, int figure)
+	public void DrawPossibleAnswer (CairoContextEx gr, double x, double y, int figure)
 	{
 		switch (figure) {
 		case 0: // Good answer
@@ -163,7 +163,7 @@
 		}
 	}
 	
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX, y = DrawAreaY;
 

Modified: branches/STABLE/src/PuzzleSquareSheets.cs
==============================================================================
--- branches/STABLE/src/PuzzleSquareSheets.cs	(original)
+++ branches/STABLE/src/PuzzleSquareSheets.cs	Thu Mar  6 13:22:24 2008
@@ -25,11 +25,11 @@
 {
 
 	public override string Name {
-		get {return Catalog.GetString ("Squares Sheets");}
+		get {return Catalog.GetString ("Squares sheets");}
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("What is the minimum number of square sheets of paper of any size needed to create the figure? (lines indicate frontiers between different sheets)");} 
+		get {return Catalog.GetString ("What is the minimum number of square sheets of paper of any size required to create the figure? (lines indicate frontiers between different sheets)");} 
 	}
 
 	public override string Tip {
@@ -49,7 +49,7 @@
 		right_answer = "5";
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.2, y = DrawAreaY + 0.2, width = 0.4, height = 0.4;
 

Modified: branches/STABLE/src/PuzzleSquares.cs
==============================================================================
--- branches/STABLE/src/PuzzleSquares.cs	(original)
+++ branches/STABLE/src/PuzzleSquares.cs	Thu Mar  6 13:22:24 2008
@@ -30,11 +30,11 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("How many squares of any size can you count of in the figure below?");} 
+		get {return Catalog.GetString ("How many squares of any size do you count of in the figure below?");} 
 	}
 
 	public override string Tip {
-		get { return Catalog.GetString ("A square is a rectangle having all four sides of equal length. A square can be also built from other squares.");}
+		get { return Catalog.GetString ("A square is a rectangle with sides of equal length. A square can also be built from other squares.");}
 	}
 
 	public override string Answer {
@@ -55,7 +55,11 @@
 
 	public override void Initialize ()
 	{
-		type = random.Next (2);
+		if (CurrentDifficulty==Difficulty.Easy)
+			type = 0;
+		else
+			type = random.Next (2);
+
 		rows = 3;
 		columns = 3;		
 
@@ -68,7 +72,7 @@
 		}
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double rect_w = DrawAreaWidth / rows;
 		double rect_h = DrawAreaHeight / columns;

Modified: branches/STABLE/src/PuzzleTetris.cs
==============================================================================
--- branches/STABLE/src/PuzzleTetris.cs	(original)
+++ branches/STABLE/src/PuzzleTetris.cs	Thu Mar  6 13:22:24 2008
@@ -32,13 +32,13 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("Which is the figure that completes the sequence below (A, B or C)?");} 
+		get {return Catalog.GetString ("What figure completes the sequence below (A, B or C)?");} 
 	}
 
 	public override string Answer {
 		get { 
 			string answer = base.Answer + " ";
-			answer += Catalog.GetString ("It is the figure that completes all the possible combinations with four blocks without taking into account rotations.");
+			answer += Catalog.GetString ("It is the figure that completes all possible combinations with four blocks without taking into account rotations.");
 			return answer;
 		}
 	}
@@ -59,7 +59,7 @@
 		}
 	}
 
-	private void DrawQuestionFigures (Cairo.Context gr, double x, double y, int figure)
+	private void DrawQuestionFigures (CairoContextEx gr, double x, double y, int figure)
 	{
 		switch (figure) {
 		case 0:
@@ -99,7 +99,7 @@
 		}
 	}
 
-	private void DrawAnswerFigures (Cairo.Context gr, double x, double y, int figure)
+	private void DrawAnswerFigures (CairoContextEx gr, double x, double y, int figure)
 	{
 		switch (figure) {
 		case 0:
@@ -131,7 +131,7 @@
 		gr.Stroke ();
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX, y = DrawAreaY + 0.1;
 

Modified: branches/STABLE/src/PuzzleTriangles.cs
==============================================================================
--- branches/STABLE/src/PuzzleTriangles.cs	(original)
+++ branches/STABLE/src/PuzzleTriangles.cs	Thu Mar  6 13:22:24 2008
@@ -30,7 +30,7 @@
 	}
 
 	public override string Question {
-		get {return Catalog.GetString ("How many triangles of any size can you count in the figure below?");} 
+		get {return Catalog.GetString ("How many triangles of any size do you count in the figure below?");} 
 	}
 
 	public override string Tip {
@@ -51,7 +51,10 @@
 
 	public override void Initialize ()
 	{
-		type = random.Next (2);
+		if (CurrentDifficulty==Difficulty.Easy)
+			type = 1;
+		else
+			type = random.Next (2);
 
 		if (type == 0)	
 			right_answer = "16";
@@ -59,7 +62,7 @@
 			right_answer = "8";
 	}
 
-	public override void Draw (Cairo.Context gr, int area_width, int area_height)
+	public override void Draw (CairoContextEx gr, int area_width, int area_height)
 	{
 		double x = DrawAreaX + 0.1, y = DrawAreaY + 0.2;
 		double witdh = 0.6, height = 0.5;

Modified: branches/STABLE/src/gbrainy.cs
==============================================================================
--- branches/STABLE/src/gbrainy.cs	(original)
+++ branches/STABLE/src/gbrainy.cs	Thu Mar  6 13:22:24 2008
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Jordi Mas i HernÃndez <jmas softcatala org>
+ * Copyright (C) 2007-2008 Jordi Mas i HernÃndez <jmas softcatala org>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
@@ -46,6 +46,7 @@
 	ToolButton pause_tbbutton;
 	int memquestion_time = 4;
 	bool memquestion_warn = true;
+	Game.Difficulty difficulty = Game.Difficulty.Medium;
  
 	public gbrainy (string [] args, params object [] props)
 	: base ("gbrainy", Defines.VERSION, Modules.UI,  args, props)
@@ -100,7 +101,7 @@
 		toolbar.Insert (pause_tbbutton, -1);
 
 		button = new ToolButton ("endgame");
-		button.SetTooltip (tooltips, Catalog.GetString ("Ends the game and shows the score"), null);
+		button.SetTooltip (tooltips, Catalog.GetString ("End the game and show score"), null);
 		button.Label = Catalog.GetString ("Finish");
 		button.Clicked += OnEndGame;
 		toolbar.Insert (button, -1);
@@ -118,14 +119,18 @@
 		//OnMemoryOnly (this, EventArgs.Empty); // temp
 	}
 	
-	public virtual int MemQuestionTime {
+	public int MemQuestionTime {
 		get { return memquestion_time;}
 	}
 
-	public virtual bool MemQuestionWarn {
+	public bool MemQuestionWarn {
 		get { return memquestion_warn;}
 	}
 	
+	public Game.Difficulty Difficulty {
+		get { return difficulty;}
+	}
+
 	public void UpdateStatusBar ()
 	{
 		statusbar.Push (0, session.StatusText);
@@ -226,7 +231,7 @@
 		about.Logo = LoadFromAssembly ("gbrainy.svg");
 
 		about.Copyright = "(c) 2007-2008 Jordi Mas i Hernandez\n";
-		about.Copyright += "Based on ideas by Terry Stickels, MENSA books and myself.\n";
+		about.Copyright += Catalog.GetString ("Based on ideas by Terry Stickels, MENSA books and myself.");
 
 		about.Comments = Catalog.GetString ("A brain teaser and trainer game to have fun and to keep your brain trained.");
 		about.Website = "http://live.gnome.org/gbrainy";;
@@ -310,7 +315,7 @@
 
 	void OnMathOnly (object sender, EventArgs args)
 	{
-		session.Type = GameSession.Types.MathTrainers;
+		session.Type = GameSession.Types.CalculationTrainers;
 		OnNewGame ();
 	}
 
@@ -338,9 +343,12 @@
 		dialog = new PreferencesDialog ();
 		dialog.MemQuestionTime = MemQuestionTime;
 		dialog.MemQuestionWarn = MemQuestionWarn;
+		dialog.Difficulty = Difficulty;
 		if (dialog.Run () == ok_buttonid) {
 			memquestion_warn = dialog.MemQuestionWarn;
 			memquestion_time = dialog.MemQuestionTime;
+			difficulty = dialog.Difficulty;
+			session.GameManager.Difficulty = difficulty;
 		}
 		dialog.Dialog.Destroy ();
 	}

Modified: branches/STABLE/src/gbrainy.glade
==============================================================================
--- branches/STABLE/src/gbrainy.glade	(original)
+++ branches/STABLE/src/gbrainy.glade	Thu Mar  6 13:22:24 2008
@@ -229,7 +229,7 @@
 
       <child>
 	<widget class="GtkVBox" id="vbox2">
-	  <property name="height_request">45</property>
+	  <property name="height_request">55</property>
 	  <property name="visible">True</property>
 	  <property name="homogeneous">False</property>
 	  <property name="spacing">1</property>
@@ -237,7 +237,7 @@
 	  <child>
 	    <widget class="GtkLabel" id="question_label">
 	      <property name="width_request">500</property>
-	      <property name="height_request">60</property>
+	      <property name="height_request">55</property>
 	      <property name="visible">True</property>
 	      <property name="label" translatable="yes"></property>
 	      <property name="use_underline">False</property>
@@ -288,7 +288,7 @@
 
       <child>
 	<widget class="GtkVBox" id="vbox4">
-	  <property name="height_request">45</property>
+	  <property name="height_request">55</property>
 	  <property name="visible">True</property>
 	  <property name="homogeneous">False</property>
 	  <property name="spacing">1</property>
@@ -296,7 +296,7 @@
 	  <child>
 	    <widget class="GtkLabel" id="solution_label">
 	      <property name="width_request">500</property>
-	      <property name="height_request">60</property>
+	      <property name="height_request">55</property>
 	      <property name="visible">True</property>
 	      <property name="label" translatable="yes"></property>
 	      <property name="use_underline">False</property>
@@ -893,6 +893,104 @@
       </child>
 
       <child>
+	<widget class="GtkVBox" id="vbox11">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label27">
+	      <property name="height_request">25</property>
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">&lt;b&gt;Difficulty Level&lt;/b&gt;</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">True</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkRadioButton" id="rb_easy">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Easy</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkRadioButton" id="rb_medium">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Medium</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <property name="group">rb_easy</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkRadioButton" id="rb_master">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Master</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	      <property name="group">rb_easy</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+
+      <child>
 	<widget class="GtkVBox" id="vbox9">
 	  <property name="visible">True</property>
 	  <property name="homogeneous">False</property>
@@ -997,7 +1095,7 @@
 	    <widget class="GtkCheckButton" id="prefcheckbutton">
 	      <property name="visible">True</property>
 	      <property name="can_focus">True</property>
-	      <property name="label" translatable="yes">Show the countdown message</property>
+	      <property name="label" translatable="yes">Show countdown message</property>
 	      <property name="use_underline">True</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
 	      <property name="focus_on_click">True</property>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]