private void OpenDatabase()
        {
            // Preguntamos si se quiere salvar lo actual.
            SaveDatabase();

            // Abrimos la base de datos.
            string file;

            if (DatabaseOpenDialog.Show(mainWindow, out file)
                == ResponseType.Ok)
            {
                // El usuario acepta la apertura del archivo.
                MathTextDatabase database = MathTextDatabase.Load(file);
                if (database == null)
                {
                    // No se abrio un archivo de base de datos, informamos.
                    OkDialog.Show(this.mainWindow,
                                  MessageType.Warning,
                                  "El archivo «{0}» no contiene una base de datos " +
                                  "correcta, y no se pudo abrir.",
                                  file);

                    return;
                }

                SetDatabase(database);

                SetTitle(file);
                databaseModified = false;

                LogLine("¡Base de datos «" + file + "» cargada correctamente!");
            }
        }
        /// <summary>
        /// Cargamos la base de datos que vamos a utilizar para intentar
        /// reconocer las imagenes como caracteres.
        /// </summary>
        /// <param name="path">
        /// La ruta del fichero donde esta la base de datos.
        /// </param>
        public void LoadDatabase(string path)
        {
            MathTextDatabase database = MathTextDatabase.Load(path);

            database.StepDone +=
                new ProcessingStepDoneHandler(OnProcessingStepDone);

            databases.Add(database);
        }
        /// <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));
            }
        }