diff options
Diffstat (limited to 'e-util/e-emoticon-chooser.c')
-rw-r--r-- | e-util/e-emoticon-chooser.c | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/e-util/e-emoticon-chooser.c b/e-util/e-emoticon-chooser.c new file mode 100644 index 0000000000..44ce06ba55 --- /dev/null +++ b/e-util/e-emoticon-chooser.c @@ -0,0 +1,178 @@ +/* + * e-emoticon-chooser.c + * + * Copyright (C) 2008 Novell, Inc. + * Copyright (C) 2012 Dan Vrátil <dvratil@redhat.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU Lesser General Public + * License as published by the Free Software Foundation. + * + * This program 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 + * General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "e-emoticon-chooser.h" + +#include <glib/gi18n-lib.h> + +/* Constant version of EEMoticon. */ +typedef struct { + const gchar *label; + const gchar *icon_name; + const gchar *text_face; +} ConstantEmoticon; + +static ConstantEmoticon available_emoticons[] = { + /* Translators: :-) */ + { N_("_Smile"), "face-smile", ":-)" }, + /* Translators: :-( */ + { N_("S_ad"), "face-sad", ":-(" }, + /* Translators: ;-) */ + { N_("_Wink"), "face-wink", ";-)" }, + /* Translators: :-P */ + { N_("Ton_gue"), "face-raspberry", ":-P" }, + /* Translators: :-)) */ + { N_("Laug_h"), "face-laugh", ":-))" }, + /* Translators: :-| */ + { N_("_Plain"), "face-plain", ":-|" }, + /* Translators: :-! */ + { N_("Smi_rk"), "face-smirk", ":-!" }, + /* Translators: :"-) */ + { N_("_Embarrassed"), "face-embarrassed", ":\"-)" }, + /* Translators: :-D */ + { N_("_Big Smile"), "face-smile-big", ":-D" }, + /* Translators: :-/ */ + { N_("Uncer_tain"), "face-uncertain", ":-/" }, + /* Translators: :-O */ + { N_("S_urprise"), "face-surprise", ":-O" }, + /* Translators: :-S */ + { N_("W_orried"), "face-worried", ":-S" }, + /* Translators: :-* */ + { N_("_Kiss"), "face-kiss", ":-*" }, + /* Translators: X-( */ + { N_("A_ngry"), "face-angry", "X-(" }, + /* Translators: B-) */ + { N_("_Cool"), "face-cool", "B-)" }, + /* Translators: O:-) */ + { N_("Ange_l"), "face-angel", "O:-)" }, + /* Translators: :'( */ + { N_("Cr_ying"), "face-crying", ":'(" }, + /* Translators: :-Q */ + { N_("S_ick"), "face-sick", ":-Q" }, + /* Translators: |-) */ + { N_("Tire_d"), "face-tired", "|-)" }, + /* Translators: >:-) */ + { N_("De_vilish"), "face-devilish", ">:-)" }, + /* Translators: :-(|) */ + { N_("_Monkey"), "face-monkey", ":-(|)" } +}; + +enum { + ITEM_ACTIVATED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL]; + +G_DEFINE_INTERFACE ( + EEmoticonChooser, + e_emoticon_chooser, + G_TYPE_OBJECT) + +static void +e_emoticon_chooser_default_init (EEmoticonChooserInterface *interface) +{ + g_object_interface_install_property ( + interface, + g_param_spec_boxed ( + "current-emoticon", + "Current Emoticon", + "Currently selected emoticon", + E_TYPE_EMOTICON, + G_PARAM_READWRITE)); + + signals[ITEM_ACTIVATED] = g_signal_new ( + "item-activated", + G_TYPE_FROM_INTERFACE (interface), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (EEmoticonChooserInterface, item_activated), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); +} + +EEmoticon * +e_emoticon_chooser_get_current_emoticon (EEmoticonChooser *chooser) +{ + EEmoticonChooserInterface *interface; + + g_return_val_if_fail (E_IS_EMOTICON_CHOOSER (chooser), NULL); + + interface = E_EMOTICON_CHOOSER_GET_INTERFACE (chooser); + g_return_val_if_fail (interface->get_current_emoticon != NULL, NULL); + + return interface->get_current_emoticon (chooser); +} + +void +e_emoticon_chooser_set_current_emoticon (EEmoticonChooser *chooser, + EEmoticon *emoticon) +{ + EEmoticonChooserInterface *interface; + + g_return_if_fail (E_IS_EMOTICON_CHOOSER (chooser)); + + interface = E_EMOTICON_CHOOSER_GET_INTERFACE (chooser); + g_return_if_fail (interface->set_current_emoticon != NULL); + + interface->set_current_emoticon (chooser, emoticon); +} + +void +e_emoticon_chooser_item_activated (EEmoticonChooser *chooser) +{ + g_return_if_fail (E_IS_EMOTICON_CHOOSER (chooser)); + + g_signal_emit (chooser, signals[ITEM_ACTIVATED], 0); +} + +GList * +e_emoticon_chooser_get_items (void) +{ + GList *list = NULL; + gint ii; + + for (ii = 0; ii < G_N_ELEMENTS (available_emoticons); ii++) + list = g_list_prepend (list, &available_emoticons[ii]); + + return g_list_reverse (list); +} + +const EEmoticon * +e_emoticon_chooser_lookup_emoticon (const gchar *icon_name) +{ + gint ii; + + g_return_val_if_fail (icon_name && *icon_name, NULL); + + for (ii = 0; ii < G_N_ELEMENTS (available_emoticons); ii++) { + if (strcmp (available_emoticons[ii].icon_name, icon_name) == 0) { + return (const EEmoticon *) &available_emoticons[ii]; + } + } + + return NULL; +} + |