Blame gspell/gspell-language-chooser.c

Packit aa0600
/*
Packit aa0600
 * This file is part of gspell, a spell-checking library.
Packit aa0600
 *
Packit aa0600
 * Copyright 2015, 2016 - Sébastien Wilmet <swilmet@gnome.org>
Packit aa0600
 *
Packit aa0600
 * This library is free software; you can redistribute it and/or
Packit aa0600
 * modify it under the terms of the GNU Lesser General Public
Packit aa0600
 * License as published by the Free Software Foundation; either
Packit aa0600
 * version 2.1 of the License, or (at your option) any later version.
Packit aa0600
 *
Packit aa0600
 * This library is distributed in the hope that it will be useful,
Packit aa0600
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit aa0600
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit aa0600
 * Lesser General Public License for more details.
Packit aa0600
 *
Packit aa0600
 * You should have received a copy of the GNU Lesser General Public License
Packit aa0600
 * along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit aa0600
 */
Packit aa0600
Packit aa0600
#ifdef HAVE_CONFIG_H
Packit aa0600
#include <config.h>
Packit aa0600
#endif
Packit aa0600
Packit aa0600
#include "gspell-language-chooser.h"
Packit aa0600
Packit aa0600
/**
Packit aa0600
 * SECTION:language-chooser
Packit aa0600
 * @Short_description: Interface to choose a GspellLanguage
Packit aa0600
 * @Title: GspellLanguageChooser
Packit aa0600
 * @See_also: #GspellLanguage, #GspellLanguageChooserButton, #GspellLanguageChooserDialog
Packit aa0600
 *
Packit aa0600
 * #GspellLanguageChooser is an interface that is implemented by widgets for
Packit aa0600
 * choosing a #GspellLanguage.
Packit aa0600
 *
Packit aa0600
 * There are two properties: #GspellLanguageChooser:language and
Packit aa0600
 * #GspellLanguageChooser:language-code. They are kept in sync. The former is
Packit aa0600
 * useful, for example, to bind it to the #GspellChecker's language property
Packit aa0600
 * with g_object_bind_property(). The latter is useful to bind it to a
Packit aa0600
 * #GSettings key with g_settings_bind().
Packit aa0600
 *
Packit aa0600
 * When setting the language, %NULL or the empty string can be passed to pick
Packit aa0600
 * the default language. In that case, the #GspellLanguageChooser:language-code
Packit aa0600
 * property will contain the empty string, whereas the
Packit aa0600
 * #GspellLanguageChooser:language property will contain the actual
Packit aa0600
 * #GspellLanguage as returned by gspell_language_get_default(). If the user
Packit aa0600
 * launches the #GspellLanguageChooser and chooses explicitly a language, then
Packit aa0600
 * the #GspellLanguageChooser:language-code property will no longer be empty,
Packit aa0600
 * even if it is the same language as the default language.
Packit aa0600
 *
Packit aa0600
 * Note that if an explicit language (non-%NULL or not the empty string) is set
Packit aa0600
 * to the #GspellLanguageChooser, then the #GspellLanguageChooser:language-code
Packit aa0600
 * property will not be empty, it will contain the language code of the passed
Packit aa0600
 * language, even if the language is the same as the default language.
Packit aa0600
 *
Packit aa0600
 * Thus, a good default value for a #GSettings key is the empty string. That
Packit aa0600
 * way, the default language is picked, and can change depending on the locale.
Packit aa0600
 * But once the user has chosen a language, that language is kept in the
Packit aa0600
 * #GSettings key.
Packit aa0600
 */
Packit aa0600
Packit aa0600
G_DEFINE_INTERFACE (GspellLanguageChooser, gspell_language_chooser, G_TYPE_OBJECT)
Packit aa0600
Packit aa0600
static void
Packit aa0600
gspell_language_chooser_default_init (GspellLanguageChooserInterface *interface)
Packit aa0600
{
Packit aa0600
	/**
Packit aa0600
	 * GspellLanguageChooser:language:
Packit aa0600
	 *
Packit aa0600
	 * The selected #GspellLanguage.
Packit aa0600
	 */
Packit aa0600
	g_object_interface_install_property (interface,
Packit aa0600
					     g_param_spec_boxed ("language",
Packit aa0600
								 "Language",
Packit aa0600
								 "",
Packit aa0600
								 GSPELL_TYPE_LANGUAGE,
Packit aa0600
								 G_PARAM_READWRITE |
Packit aa0600
								 G_PARAM_STATIC_STRINGS));
Packit aa0600
Packit aa0600
	/**
Packit aa0600
	 * GspellLanguageChooser:language-code:
Packit aa0600
	 *
Packit aa0600
	 * The empty string if the default language was set and the selection
Packit aa0600
	 * hasn't changed. Or the language code if an explicit language was set
Packit aa0600
	 * or if the selection has changed.
Packit aa0600
	 */
Packit aa0600
	g_object_interface_install_property (interface,
Packit aa0600
					     g_param_spec_string ("language-code",
Packit aa0600
								  "Language Code",
Packit aa0600
								  "",
Packit aa0600
								  "",
Packit aa0600
								  G_PARAM_READWRITE |
Packit aa0600
								  G_PARAM_STATIC_STRINGS));
Packit aa0600
}
Packit aa0600
Packit aa0600
/**
Packit aa0600
 * gspell_language_chooser_get_language:
Packit aa0600
 * @chooser: a #GspellLanguageChooser.
Packit aa0600
 *
Packit aa0600
 * Returns: (nullable): the selected #GspellLanguage, or %NULL if no
Packit aa0600
 * dictionaries are available.
Packit aa0600
 */
Packit aa0600
const GspellLanguage *
Packit aa0600
gspell_language_chooser_get_language (GspellLanguageChooser *chooser)
Packit aa0600
{
Packit aa0600
	g_return_val_if_fail (GSPELL_IS_LANGUAGE_CHOOSER (chooser), NULL);
Packit aa0600
Packit aa0600
	return GSPELL_LANGUAGE_CHOOSER_GET_IFACE (chooser)->get_language_full (chooser, NULL);
Packit aa0600
}
Packit aa0600
Packit aa0600
/**
Packit aa0600
 * gspell_language_chooser_set_language:
Packit aa0600
 * @chooser: a #GspellLanguageChooser.
Packit aa0600
 * @language: (nullable): a #GspellLanguage or %NULL to pick the default
Packit aa0600
 *   language.
Packit aa0600
 *
Packit aa0600
 * Sets the selected language.
Packit aa0600
 */
Packit aa0600
void
Packit aa0600
gspell_language_chooser_set_language (GspellLanguageChooser *chooser,
Packit aa0600
				      const GspellLanguage  *language)
Packit aa0600
{
Packit aa0600
	g_return_if_fail (GSPELL_IS_LANGUAGE_CHOOSER (chooser));
Packit aa0600
Packit aa0600
	GSPELL_LANGUAGE_CHOOSER_GET_IFACE (chooser)->set_language (chooser, language);
Packit aa0600
}
Packit aa0600
Packit aa0600
/**
Packit aa0600
 * gspell_language_chooser_get_language_code:
Packit aa0600
 * @chooser: a #GspellLanguageChooser.
Packit aa0600
 *
Packit aa0600
 * Returns: the #GspellLanguageChooser:language-code. It cannot be %NULL.
Packit aa0600
 */
Packit aa0600
const gchar *
Packit aa0600
gspell_language_chooser_get_language_code (GspellLanguageChooser *chooser)
Packit aa0600
{
Packit aa0600
	const GspellLanguage *lang;
Packit aa0600
	gboolean default_lang = TRUE;
Packit aa0600
	const gchar *language_code;
Packit aa0600
Packit aa0600
	g_return_val_if_fail (GSPELL_IS_LANGUAGE_CHOOSER (chooser), "");
Packit aa0600
Packit aa0600
	lang = GSPELL_LANGUAGE_CHOOSER_GET_IFACE (chooser)->get_language_full (chooser, &default_lang);
Packit aa0600
Packit aa0600
	if (default_lang || lang == NULL)
Packit aa0600
	{
Packit aa0600
		return "";
Packit aa0600
	}
Packit aa0600
Packit aa0600
	language_code = gspell_language_get_code (lang);
Packit aa0600
	g_return_val_if_fail (language_code != NULL, "");
Packit aa0600
Packit aa0600
	return language_code;
Packit aa0600
}
Packit aa0600
Packit aa0600
/**
Packit aa0600
 * gspell_language_chooser_set_language_code:
Packit aa0600
 * @chooser: a #GspellLanguageChooser.
Packit aa0600
 * @language_code: (nullable): a language code, or the empty string or %NULL to
Packit aa0600
 *   pick the default language.
Packit aa0600
 */
Packit aa0600
void
Packit aa0600
gspell_language_chooser_set_language_code (GspellLanguageChooser *chooser,
Packit aa0600
					   const gchar           *language_code)
Packit aa0600
{
Packit aa0600
	const GspellLanguage *lang = NULL;
Packit aa0600
Packit aa0600
	g_return_if_fail (GSPELL_IS_LANGUAGE_CHOOSER (chooser));
Packit aa0600
Packit aa0600
	if (language_code != NULL && language_code[0] != '\0')
Packit aa0600
	{
Packit aa0600
		lang = gspell_language_lookup (language_code);
Packit aa0600
	}
Packit aa0600
Packit aa0600
	GSPELL_LANGUAGE_CHOOSER_GET_IFACE (chooser)->set_language (chooser, lang);
Packit aa0600
}
Packit aa0600
Packit aa0600
/* ex:set ts=8 noet: */