/// <summary>
        /// Implementa el comparador para las instancias de la clase.
        /// </summary>
        /// <param name="o">
        /// A <see cref="System.Object"/>
        /// </param>
        /// <returns>
        /// A <see cref="System.Boolean"/>
        /// </returns>
        public override bool Equals(object o)
        {
            DatabaseFileInfo info = o as DatabaseFileInfo;

            if (info == null)
            {
                return(false);
            }
            else
            {
                return(info.path == this.path);
            }
        }
        /// Maneja el evento producido al pulsar el boton de añadir
        /// una base de datos.
        /// </summary>
        /// <param name="sender">
        /// A <see cref="System.Object"/>
        /// </param>
        /// <param name="args">
        /// A <see cref="EventArgs"/>
        /// </param>
        private void OnRemoveBtnClicked(object sender, EventArgs args)
        {
            TreeIter selectedIter;

            databasesTV.Selection.GetSelected(out selectedIter);

            // Recuperamos la informacion y la eliminamos de la lista y el modelo.
            DatabaseFileInfo databaseInfo =
                (DatabaseFileInfo)(databasesLS.GetValue(selectedIter, 3));

            databaseFilesInfo.Remove(databaseInfo);
            databasesLS.Remove(ref selectedIter);
        }
        /// Maneja el evento producido al pulsar el boton de ver las propiedades
        /// una base de datos.
        /// </summary>
        /// <param name="sender">
        /// A <see cref="System.Object"/>
        /// </param>
        /// <param name="args">
        /// A <see cref="EventArgs"/>
        /// </param>
        private void OnPropertiesBtnClicked(object sender, EventArgs args)
        {
            DatabaseInfoDialog dialog =
                new DatabaseInfoDialog(this.databaseManagerDialog);

            // We get the selected database and show its properties.
            TreeIter selected;

            databasesTV.Selection.GetSelected(out selected);
            DatabaseFileInfo info =
                (DatabaseFileInfo)(databasesLS.GetValue(selected, 3));

            dialog.SetDatabase(info.Database);
            dialog.Show();
            dialog.Destroy();
        }
        /// <summary>
        /// Añade una base de datos a la lista.
        /// </summary>
        /// <param name="databasePath">
        /// La ruta de la base de datos.
        /// </param>
        private void AddDatabase(string databasePath)
        {
            MathTextDatabase database = MathTextDatabase.Load(databasePath);

            if (database == null)
            {
                // No se abrio un archivo de base de datos, informamos.
                OkDialog.Show(this.databaseManagerDialog,
                              MessageType.Warning,
                              "El archivo «{0}» no contiene una base de datos correcta, y no se pudo abrir.",
                              databasePath);
                return;
            }

            DatabaseFileInfo databaseInfo = new DatabaseFileInfo();

            databaseInfo.Database = database;
            databaseInfo.Path     = databasePath;

            if (!databaseFilesInfo.Contains(databaseInfo))
            {
                // Lo añadimos a la coleccion.
                databaseFilesInfo.Add(databaseInfo);

                TreeIter newItem =
                    databasesLS.AppendValues(Path.GetFileName(databasePath),
                                             database.DatabaseTypeShortDescription,
                                             databasePath,
                                             databaseInfo);

                // Seleccionamos la fila añadida.
                databasesTV.Selection.SelectIter(newItem);
                TreePath newPath = databasesLS.GetPath(newItem);
                databasesTV.ScrollToCell(newPath,
                                         databasesTV.Columns[0],
                                         true,
                                         1.0f,
                                         0.0f);
            }
            else
            {
                OkDialog.Show(this.databaseManagerDialog,
                              MessageType.Info,
                              "La base de datos del fichero «{0}» ya se encuentra en la lista y no se añadirá de nuevo.",
                              Path.GetFileName(databasePath));
            }
        }
        /// <summary>
        /// Añade la informacion de una base de datos a la lista.
        /// </summary>
        /// <param name="databaseInfo">
        /// La informacion de base de datos a añadir.
        /// </param>
        private void AddDatabaseInfo(DatabaseFileInfo databaseInfo)
        {
            if (databaseInfo.Database == null)
            {
                // No se abrio un archivo de base de datos, informamos.
                OkDialog.Show(this.databaseManagerDialog,
                              MessageType.Warning,
                              "El archivo «{0}» no existe o no contiene una base de datos correcta, y no se pudo abrir.",
                              databaseInfo.Path);
                return;
            }

            databaseFilesInfo.Add(databaseInfo);
            databasesLS.AppendValues(Path.GetFileName(databaseInfo.Path),
                                     databaseInfo.Database.DatabaseTypeShortDescription,
                                     databaseInfo.Path,
                                     databaseInfo);
        }
		/// <summary>
		/// Handles the choosing of a database.
		/// </summary>
		/// <param name="sender">
		/// A <see cref="System.Object"/>
		/// </param>
		/// <param name="args">
		/// A <see cref="EventArgs"/>
		/// </param>
		private void OnOptionRBClicked(object sender, EventArgs args)
		{
			RadioButton clickedRB = (RadioButton)sender;
			
			if(clickedRB == newRB)
			{
				choosenDatabase = null;
			}
			else
			{
				choosenDatabase = databaseHash[clickedRB.Label];
			}
		}
		/// <summary>
		/// Añade la informacion de una base de datos a la lista.
		/// </summary>
		/// <param name="databaseInfo">
		/// La informacion de base de datos a añadir.
		/// </param>
		private void AddDatabaseInfo(DatabaseFileInfo databaseInfo)
		{
			if (databaseInfo.Database == null)
			{
				// No se abrio un archivo de base de datos, informamos.
				OkDialog.Show(this.databaseManagerDialog,
				              MessageType.Warning,
				              "El archivo «{0}» no existe o no contiene una base de datos correcta, y no se pudo abrir.",
				              databaseInfo.Path);
				return;
			}
			
			databaseFilesInfo.Add(databaseInfo);
			databasesLS.AppendValues(Path.GetFileName(databaseInfo.Path),
			                         databaseInfo.Database.DatabaseTypeShortDescription,
			                         databaseInfo.Path,
			                         databaseInfo);  
			
			
		}
		/// <summary>
		/// Añade una base de datos a la lista.
		/// </summary>
		/// <param name="databasePath">
		/// La ruta de la base de datos.
		/// </param>
		private void AddDatabase(string databasePath)
		{
			
			MathTextDatabase database = MathTextDatabase.Load(databasePath);
			if(database == null)
			{
				// No se abrio un archivo de base de datos, informamos.
				OkDialog.Show(this.databaseManagerDialog,
				              MessageType.Warning,
				              "El archivo «{0}» no contiene una base de datos correcta, y no se pudo abrir.",
				              databasePath);
				return;
			}
			
			DatabaseFileInfo databaseInfo = new DatabaseFileInfo();
			databaseInfo.Database = database;
			databaseInfo.Path = databasePath;
			
			if(!databaseFilesInfo.Contains(databaseInfo))
			{
				
				// Lo añadimos a la coleccion.
				databaseFilesInfo.Add(databaseInfo);
				
				TreeIter newItem =
					databasesLS.AppendValues(Path.GetFileName(databasePath),
					                         database.DatabaseTypeShortDescription,
					                         databasePath,
					                         databaseInfo);
				
				// Seleccionamos la fila añadida.
				databasesTV.Selection.SelectIter(newItem);
				TreePath newPath = databasesLS.GetPath(newItem);
				databasesTV.ScrollToCell(newPath,
				                         databasesTV.Columns[0],
				                         true,
				                         1.0f,
				                         0.0f);
				
				
			}
			else
			{
				OkDialog.Show(this.databaseManagerDialog,
				              MessageType.Info,
				              "La base de datos del fichero «{0}» ya se encuentra en la lista y no se añadirá de nuevo.",
				              Path.GetFileName(databasePath));
			}
		}