[maemo-commits] [maemo-commits] r19205 - projects/haf/trunk/hildon-input-method-plugins-example/src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Wed Aug 26 12:29:40 EEST 2009
- Previous message: [maemo-commits] r19204 - projects/haf/tags/gtk+/2.14.7-1maemo9/debian
- Next message: [maemo-commits] r19206 - in projects/haf/branches/libmatchbox2: . bug.134557/matchbox/core
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: femorandeira
Date: 2009-08-26 12:28:19 +0300 (Wed, 26 Aug 2009)
New Revision: 19205
Added:
projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c
Log:
First initial version of the HIM Example FKB. It still doesn't do much, but it will in the future :-)
Added: projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c
===================================================================
--- projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c 2009-08-25 14:30:27 UTC (rev 19204)
+++ projects/haf/trunk/hildon-input-method-plugins-example/src/hildon-im-example-fkb.c 2009-08-26 09:28:19 UTC (rev 19205)
@@ -0,0 +1,509 @@
+#include "hildon-im-plugin.h"
+#include "hildon-im-ui.h"
+
+#include <string.h>
+#include <glib.h>
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+#include <hildon/hildon.h>
+
+#define HILDON_IM_EXAMPLE_FKB_TYPE hildon_im_example_fkb_get_type()
+#define HILDON_IM_EXAMPLE_FKB(obj) GTK_CHECK_CAST(obj, hildon_im_example_fkb_get_type(), HildonIMExampleFKB)
+#define HILDON_IM_EXAMPLE_FKB_CLASS(klass) \
+ GTK_CHECK_CLASS_CAST(klass, hildon_im_example_fkb_get_type, \
+ HildonIMExampleFKBClass)
+#define HILDON_IS_IM_EXAMPLE_FKB(obj) \
+ GTK_CHECK_TYPE(obj, hildon_im_example_fkb_get_type())
+#define HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(obj) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), HILDON_IM_EXAMPLE_FKB_TYPE,\
+ HildonIMExampleFKBPrivate))
+
+static const gchar* layout_1[] = {"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", NULL};
+static const gchar* layout_2[] = {"a", "s", "d", "f", "g", "h", "j", "k", "l", "?", NULL};
+static const gchar* layout_3[] = {"z", "x", "c", "v", "b", "n", "m", ".", ",", "!", NULL};
+static const gchar* layout_4[] = {"↑", "1*?", " ", "Return", "←", "Close", NULL};
+static const gchar** keyboard_layout[] = {layout_1, layout_2, layout_3, layout_4, NULL};
+
+/*
+static const gchar* keyboard_layout[][] = {{"q", "w", "e", "r", "t", "y", "u", "i", "o", "p", NULL},
+ {"a", "s", "d", "f", "g", "h", "j", "k", "l", NULL},
+ {"z", "x", "c", "v", "b", "n", "m", NULL},
+ NULL};
+*/
+
+
+typedef struct
+{
+ GtkContainerClass parent;
+}
+HildonIMExampleFKBClass;
+
+typedef struct
+{
+ GtkContainer parent;
+
+}
+HildonIMExampleFKB;
+
+typedef struct
+{
+ HildonIMUI *ui;
+ GtkWidget *window;
+ GtkWidget *text_view;
+}
+HildonIMExampleFKBPrivate;
+
+static GType hildon_im_example_fkb_type = 0;
+static GtkWidgetClass *parent_class = NULL;
+
+GType hildon_im_example_fkb_get_type (void);
+GtkWidget *hildon_im_example_fkb_new (HildonIMUI *kbd);
+
+/*
+ * HildonIMPlugin interface
+ */
+
+static void hildon_im_example_fkb_iface_init (HildonIMPluginIface *iface);
+
+static void hildon_im_example_fkb_enable (HildonIMPlugin *plugin, gboolean init);
+static void hildon_im_example_fkb_disable (HildonIMPlugin *plugin);
+/*
+static void hildon_im_example_fkb_settings_changed (HildonIMPlugin *plugin,
+ const gchar *key,
+ const GConfValue *value);
+static void hildon_im_example_fkb_language_settings_changed (HildonIMPlugin *plugin,
+ gint index);
+static void hildon_im_example_fkb_input_mode_changed (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_keyboard_state_changed (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_client_widget_changed (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_character_autocase (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_clear (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_save_data (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_mode_a (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_mode_b (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_language (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_backspace (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_enter (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_tab (HildonIMPlugin *plugin);
+static void hildon_im_example_fkb_fullscreen (HildonIMPlugin *plugin,
+ gboolean fullscreen);
+static void hildon_im_example_fkb_select_region (HildonIMPlugin *plugin,
+ gint start,
+ gint end);
+static void hildon_im_example_fkb_key_event (HildonIMPlugin *plugin,
+ GdkEventType type,
+ guint state,
+ guint keyval,
+ guint hardware_keycode);
+static void hildon_im_example_fkb_transition (HildonIMPlugin *plugin,
+ gboolean from);
+static void hildon_im_example_fkb_surrounding_received (HildonIMPlugin *plugin,
+ const gchar *surrounding,
+ gint offset);
+static void hildon_im_example_fkb_button_activated (HildonIMPlugin *plugin,
+ HildonIMButton button,
+ gboolean long_press);
+static void hildon_im_example_fkb_preedit_committed (HildonIMPlugin *plugin,
+ const gchar *committed_preedit);
+*/
+
+/*
+ * GObject functions
+ */
+static void hildon_im_example_fkb_finalize (GObject *obj);
+static void hildon_im_example_fkb_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void hildon_im_example_fkb_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+static void hildon_im_example_fkb_class_init (HildonIMExampleFKBClass *klass);
+static void hildon_im_example_fkb_init (HildonIMExampleFKB *self);
+
+/*
+ * Internal functions
+ */
+static GtkWidget* create_window (HildonIMExampleFKB *self);
+
+
+/*
+ * Module functions
+ */
+
+HildonIMPlugin*
+module_create (HildonIMUI *keyboard)
+{
+ return HILDON_IM_PLUGIN (hildon_im_example_fkb_new (keyboard));
+}
+
+void
+module_exit(void)
+{
+ /* empty */
+}
+
+void
+module_init(GTypeModule *module)
+{
+ static const GTypeInfo type_info = {
+ sizeof(HildonIMExampleFKBClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) hildon_im_example_fkb_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof(HildonIMExampleFKB),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) hildon_im_example_fkb_init,
+ };
+
+ static const GInterfaceInfo plugin_info = {
+ (GInterfaceInitFunc) hildon_im_example_fkb_iface_init,
+ NULL, /* interface_finalize */
+ NULL, /* interface_data */
+ };
+
+ hildon_im_example_fkb_type =
+ g_type_module_register_type(module,
+ GTK_TYPE_CONTAINER, "HildonIMExampleFKB",
+ &type_info,
+ 0);
+
+ g_type_module_add_interface(module,
+ HILDON_IM_EXAMPLE_FKB_TYPE,
+ HILDON_IM_TYPE_PLUGIN,
+ &plugin_info);
+}
+
+/*
+ * This is used to know the plugin's information when loading the module
+ */
+const HildonIMPluginInfo *
+hildon_im_plugin_get_info(void)
+{
+ static const HildonIMPluginInfo info =
+ {
+ "HIM Example FKB", /* description */
+ "hildon_im_example_fkb", /* name */
+ NULL, /* menu title */
+ NULL, /* gettext domain */
+ TRUE, /* visible in menu */
+ FALSE, /* cached */
+ HILDON_IM_TYPE_FULLSCREEN, /* UI type */
+ HILDON_IM_GROUP_LATIN, /* group */
+ HILDON_IM_DEFAULT_PLUGIN_PRIORITY, /* priority */
+ NULL, /* special character plugin */
+ NULL, /* help page */
+ TRUE, /* disable common UI buttons */
+ 0, /* plugin height */
+ HILDON_IM_TRIGGER_FINGER /* trigger */
+ };
+
+ return &info;
+}
+
+/*
+ * This function returns the list of available languages supported
+ * by the plugin.
+ */
+gchar **
+hildon_im_plugin_get_available_languages (gboolean *free)
+{
+ static gchar *list[] = { "en_GB", NULL };
+ *free = FALSE;
+
+ return list;
+}
+
+GType
+hildon_im_example_fkb_get_type (void)
+{
+ return hildon_im_example_fkb_type;
+}
+
+/*
+ * Implement the interface.
+ */
+static void
+hildon_im_example_fkb_iface_init (HildonIMPluginIface *iface)
+{
+ iface->enable = hildon_im_example_fkb_enable;
+ iface->disable = hildon_im_example_fkb_disable;
+ /*
+ iface->settings_changed = hildon_im_example_fkb_settings_changed;
+ iface->language_settings_changed = hildon_im_example_fkb_language_settings_changed;
+ iface->input_mode_changed = hildon_im_example_fkb_input_mode_changed;
+ iface->keyboard_state_changed = hildon_im_example_fkb_keyboard_state_changed;
+ iface->client_widget_changed = hildon_im_example_fkb_client_widget_changed;
+
+ iface->character_autocase = hildon_im_example_fkb_character_autocase;
+ iface->clear = hildon_im_example_fkb_clear;
+ iface->save_data = hildon_im_example_fkb_save_data;
+ iface->mode_a = hildon_im_example_fkb_mode_a;
+ iface->mode_b = hildon_im_example_fkb_mode_b;
+ iface->language = hildon_im_example_fkb_language;
+ iface->backspace = hildon_im_example_fkb_backspace;
+ iface->enter = hildon_im_example_fkb_enter;
+ iface->tab = hildon_im_example_fkb_tab;
+ iface->fullscreen = hildon_im_example_fkb_fullscreen;
+ iface->select_region = hildon_im_example_fkb_select_region;
+ iface->key_event = hildon_im_example_fkb_key_event;
+ iface->transition = hildon_im_example_fkb_transition;
+ iface->surrounding_received = hildon_im_example_fkb_surrounding_received;
+ iface->button_activated = hildon_im_example_fkb_button_activated;
+ iface->preedit_committed = hildon_im_example_fkb_preedit_committed;
+ */
+}
+
+static void
+hildon_im_example_fkb_class_init (HildonIMExampleFKBClass *klass)
+{
+ GObjectClass *object_class;
+ GtkObjectClass *gtk_object_class;
+ GtkWidgetClass *widget_class;
+ GtkContainerClass *container_class;
+
+ parent_class = g_type_class_peek_parent(klass);
+ g_type_class_add_private(klass, sizeof(HildonIMExampleFKBPrivate));
+
+ object_class = G_OBJECT_CLASS(klass);
+ gtk_object_class = GTK_OBJECT_CLASS(klass);
+ widget_class = GTK_WIDGET_CLASS(klass);
+ container_class = GTK_CONTAINER_CLASS(klass);
+
+ object_class->set_property = hildon_im_example_fkb_set_property;
+ object_class->get_property = hildon_im_example_fkb_get_property;
+ object_class->finalize = hildon_im_example_fkb_finalize;
+
+ /* install properties and signals as needed */
+}
+
+static void
+hildon_im_example_fkb_init (HildonIMExampleFKB *self)
+{
+ HildonIMExampleFKBPrivate *priv;
+
+ g_return_if_fail (HILDON_IS_IM_EXAMPLE_FKB (self));
+ priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
+
+ priv->window = NULL;
+}
+
+static void
+hildon_im_example_fkb_finalize(GObject *obj)
+{
+ if (G_OBJECT_CLASS(parent_class)->finalize)
+ {
+ G_OBJECT_CLASS(parent_class)->finalize(obj);
+ }
+}
+
+GtkWidget *
+hildon_im_example_fkb_new (HildonIMUI *kbd)
+{
+ return g_object_new (HILDON_IM_EXAMPLE_FKB_TYPE,
+ HILDON_IM_PROP_UI_DESCRIPTION, kbd, NULL);
+}
+
+static void
+hildon_im_example_fkb_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ HildonIMExampleFKBPrivate *priv;
+
+ g_return_if_fail (HILDON_IS_IM_EXAMPLE_FKB(object));
+ priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(object);
+
+ switch (prop_id)
+ {
+ case HILDON_IM_PROP_UI:
+ g_value_set_object(value, priv->ui);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+hildon_im_example_fkb_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ HildonIMExampleFKBPrivate *priv;
+
+ g_return_if_fail (HILDON_IS_IM_EXAMPLE_FKB (object));
+ priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(object);
+
+ switch (prop_id)
+ {
+ case HILDON_IM_PROP_UI:
+ priv->ui = g_value_get_object(value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+hildon_im_example_fkb_enable (HildonIMPlugin *plugin, gboolean init)
+{
+ HildonIMExampleFKB *self;
+ HildonIMExampleFKBPrivate *priv;
+
+ g_return_if_fail (HILDON_IS_IM_EXAMPLE_FKB (plugin));
+ self = HILDON_IM_EXAMPLE_FKB(plugin);
+ priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
+
+ if (priv->window == NULL)
+ {
+ priv->window = create_window(self);
+ }
+
+/* gtk_window_fullscreen(priv->window); */
+ gtk_widget_show_all(GTK_WIDGET(priv->window));
+
+ gdk_window_set_transient_for(GTK_WIDGET(priv->window)->window,
+ gtk_widget_get_root_window(GTK_WIDGET(priv->window)));
+}
+
+static void
+hildon_im_example_fkb_disable (HildonIMPlugin *plugin)
+{
+ HildonIMExampleFKB *self;
+ HildonIMExampleFKBPrivate *priv;
+
+ g_return_if_fail (HILDON_IS_IM_EXAMPLE_FKB (plugin));
+ self = HILDON_IM_EXAMPLE_FKB(plugin);
+ priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
+
+ gtk_widget_hide(GTK_WIDGET(priv->window));
+ hildon_im_ui_restore_previous_mode(priv->ui);
+}
+
+static void
+text_button_clicked (GtkButton *button, gpointer user_data)
+{
+ HildonIMExampleFKB *self;
+ HildonIMExampleFKBPrivate *priv;
+
+ g_return_if_fail (HILDON_IS_IM_EXAMPLE_FKB (user_data));
+ self = HILDON_IM_EXAMPLE_FKB(user_data);
+ priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
+
+ gtk_text_buffer_insert_at_cursor(gtk_text_view_get_buffer(GTK_TEXT_VIEW(priv->text_view)),
+ hildon_button_get_title(HILDON_BUTTON(button)),
+ strlen(hildon_button_get_title(HILDON_BUTTON(button))));
+}
+
+static void
+delete_button_clicked (GtkButton *button, gpointer user_data)
+{
+ /*
+ *
+gtk_text_buffer_delete
+ */
+}
+
+static GtkWidget* create_window (HildonIMExampleFKB *self)
+{
+ HildonIMExampleFKBPrivate *priv;
+
+ priv = HILDON_IM_EXAMPLE_FKB_GET_PRIVATE(self);
+
+ GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+ gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+ gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
+ gtk_window_fullscreen(GTK_WINDOW(window));
+ /*
+ It is always rotated! :-(
+ */
+ hildon_gtk_window_set_portrait_flags (GTK_WINDOW(window),
+ HILDON_PORTRAIT_MODE_SUPPORT);
+
+ GtkWidget *vbox, *parea;
+
+ vbox = gtk_vbox_new(FALSE, 5);
+
+ priv->text_view = hildon_text_view_new();
+ gtk_widget_set_name(priv->text_view, "him-textview");
+ gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(priv->text_view), GTK_WRAP_WORD_CHAR);
+ gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(priv->text_view), TRUE);
+
+ parea = hildon_pannable_area_new();
+ g_object_set(G_OBJECT(parea), "mov_mode", HILDON_MOVEMENT_MODE_VERT, NULL);
+ hildon_pannable_area_add_with_viewport (parea, priv->text_view);
+
+ gtk_box_pack_start(GTK_BOX(vbox), parea, TRUE, TRUE, 0);
+
+ gint i, j;
+
+ for (i = 0; keyboard_layout[i] != NULL; i++)
+ {
+ GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
+
+ for (j = 0; keyboard_layout[i][j] != NULL; j++)
+ {
+ GtkWidget *button = hildon_button_new_with_text (HILDON_SIZE_FINGER_HEIGHT,
+ HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+ keyboard_layout[i][j], NULL);
+
+ gint screen_width = gdk_screen_width();
+
+ gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
+ if (g_strcmp0(keyboard_layout[i][j], "↑") == 0)
+ {
+ /* uppercase/lowercase */
+ gtk_widget_set_size_request(button, screen_width*0.15, 70);
+ }
+ else if (g_strcmp0(keyboard_layout[i][j], "1*?") == 0)
+ {
+ /* symbols */
+ gtk_widget_set_size_request(button, screen_width*0.15, 70);
+ }
+ else if (g_strcmp0(keyboard_layout[i][j], " ") == 0)
+ {
+ /* uppercase/lowercase */
+ gtk_widget_set_size_request(button, screen_width*0.4, 70);
+ g_signal_connect(button, "clicked", G_CALLBACK(text_button_clicked), self);
+ }
+ else if (g_strcmp0(keyboard_layout[i][j], "Return") == 0)
+ {
+ /* uppercase/lowercase */
+ gtk_widget_set_size_request(button, screen_width*0.15, 70);
+ }
+ else if (g_strcmp0(keyboard_layout[i][j], "←") == 0)
+ {
+ /* delete */
+ gtk_widget_set_size_request(button, screen_width*0.2, 70);
+ g_signal_connect(button, "clicked", G_CALLBACK(delete_button_clicked), self);
+ }
+ else if (g_strcmp0(keyboard_layout[i][j], "Close") == 0)
+ {
+ /* uppercase/lowercase */
+ gtk_widget_set_size_request(button, screen_width*0.1, 70);
+ }
+ else
+ {
+ /* a regular character button */
+ g_signal_connect(button, "clicked", G_CALLBACK(text_button_clicked), self);
+ }
+ }
+
+ gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
+ }
+
+ gtk_container_add (GTK_CONTAINER(window), vbox);
+
+ return window;
+}
- Previous message: [maemo-commits] r19204 - projects/haf/tags/gtk+/2.14.7-1maemo9/debian
- Next message: [maemo-commits] r19206 - in projects/haf/branches/libmatchbox2: . bug.134557/matchbox/core
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
