aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-emoticon-chooser.c
diff options
context:
space:
mode:
Diffstat (limited to 'e-util/e-emoticon-chooser.c')
-rw-r--r--e-util/e-emoticon-chooser.c178
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;
+}
+