123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- /* LIBGIMP - The GIMP Library
- * Copyright (C) 1995-1997 Peter Mattis and Spencer Kimball
- *
- * gimpunitcache.c
- * Copyright (C) 1999-2000 Michael Natterer <mitch@gimp.org>
- *
- * This library is free software: you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see
- * <http://www.gnu.org/licenses/>.
- */
- #include "config.h"
- #include <glib-object.h>
- #include "libgimpbase/gimpbase.h"
- #include "gimpunitcache.h"
- #include "gimpunit_pdb.h"
- #include "libgimp-intl.h"
- /* internal structures */
- typedef struct
- {
- gdouble factor;
- gint digits;
- const gchar *identifier;
- const gchar *symbol;
- const gchar *abbreviation;
- const gchar *singular;
- const gchar *plural;
- } GimpUnitDef;
- static GimpUnitDef * gimp_unit_defs = NULL;
- static GimpUnit gimp_units_initialized = 0;
- /* not a unit at all but kept here to have the strings in one place
- */
- static const GimpUnitDef gimp_unit_percent =
- {
- 0.0, 0, "percent", "%", "%", N_("percent"), N_("percent")
- };
- static void gimp_unit_def_init (GimpUnitDef *unit_def,
- GimpUnit unit);
- static gboolean
- gimp_unit_init (GimpUnit unit)
- {
- gint i, n;
- if (unit < gimp_units_initialized)
- return TRUE;
- n = _gimp_unit_get_number_of_units ();
- if (unit >= n)
- return FALSE;
- gimp_unit_defs = g_renew (GimpUnitDef, gimp_unit_defs, n);
- for (i = gimp_units_initialized; i < n; i++)
- {
- gimp_unit_def_init (&gimp_unit_defs[i], i);
- }
- gimp_units_initialized = n;
- return TRUE;
- }
- static void
- gimp_unit_def_init (GimpUnitDef *unit_def,
- GimpUnit unit)
- {
- unit_def->factor = _gimp_unit_get_factor (unit);
- unit_def->digits = _gimp_unit_get_digits (unit);
- unit_def->identifier = _gimp_unit_get_identifier (unit);
- unit_def->symbol = _gimp_unit_get_symbol (unit);
- unit_def->abbreviation = _gimp_unit_get_abbreviation (unit);
- unit_def->singular = _gimp_unit_get_singular (unit);
- unit_def->plural = _gimp_unit_get_plural (unit);
- }
- gint
- _gimp_unit_cache_get_number_of_units (void)
- {
- return _gimp_unit_get_number_of_units ();
- }
- gint
- _gimp_unit_cache_get_number_of_built_in_units (void)
- {
- return GIMP_UNIT_END;
- }
- GimpUnit
- _gimp_unit_cache_new (gchar *identifier,
- gdouble factor,
- gint digits,
- gchar *symbol,
- gchar *abbreviation,
- gchar *singular,
- gchar *plural)
- {
- return _gimp_unit_new (identifier,
- factor,
- digits,
- symbol,
- abbreviation,
- singular,
- plural);
- }
- gboolean
- _gimp_unit_cache_get_deletion_flag (GimpUnit unit)
- {
- if (unit < GIMP_UNIT_END)
- return FALSE;
- return _gimp_unit_get_deletion_flag (unit);
- }
- void
- _gimp_unit_cache_set_deletion_flag (GimpUnit unit,
- gboolean deletion_flag)
- {
- if (unit < GIMP_UNIT_END)
- return;
- _gimp_unit_set_deletion_flag (unit,
- deletion_flag);
- }
- gdouble
- _gimp_unit_cache_get_factor (GimpUnit unit)
- {
- g_return_val_if_fail (unit >= GIMP_UNIT_INCH, 1.0);
- if (unit == GIMP_UNIT_PERCENT)
- return gimp_unit_percent.factor;
- if (!gimp_unit_init (unit))
- return 1.0;
- return gimp_unit_defs[unit].factor;
- }
- gint
- _gimp_unit_cache_get_digits (GimpUnit unit)
- {
- g_return_val_if_fail (unit >= GIMP_UNIT_INCH, 0);
- if (unit == GIMP_UNIT_PERCENT)
- return gimp_unit_percent.digits;
- if (!gimp_unit_init (unit))
- return 0;
- return gimp_unit_defs[unit].digits;
- }
- const gchar *
- _gimp_unit_cache_get_identifier (GimpUnit unit)
- {
- if (unit == GIMP_UNIT_PERCENT)
- return gimp_unit_percent.identifier;
- if (!gimp_unit_init (unit))
- return NULL;
- return gimp_unit_defs[unit].identifier;
- }
- const gchar *
- _gimp_unit_cache_get_symbol (GimpUnit unit)
- {
- if (unit == GIMP_UNIT_PERCENT)
- return gimp_unit_percent.symbol;
- if (!gimp_unit_init (unit))
- return NULL;
- return gimp_unit_defs[unit].symbol;
- }
- const gchar *
- _gimp_unit_cache_get_abbreviation (GimpUnit unit)
- {
- if (unit == GIMP_UNIT_PERCENT)
- return gimp_unit_percent.abbreviation;
- if (!gimp_unit_init (unit))
- return NULL;
- return gimp_unit_defs[unit].abbreviation;
- }
- const gchar *
- _gimp_unit_cache_get_singular (GimpUnit unit)
- {
- if (unit == GIMP_UNIT_PERCENT)
- return gettext (gimp_unit_percent.singular);
- if (!gimp_unit_init (unit))
- return NULL;
- return gettext (gimp_unit_defs[unit].singular);
- }
- const gchar *
- _gimp_unit_cache_get_plural (GimpUnit unit)
- {
- if (unit == GIMP_UNIT_PERCENT)
- return gettext (gimp_unit_percent.plural);
- if (!gimp_unit_init (unit))
- return NULL;
- return gettext (gimp_unit_defs[unit].plural);
- }
|