Initial Import
[profile/ivi/clutter-toys.git] / attic / mallums-magic-browser / popup-factory.c
1 #include <webkit/webkitpopupfactory.h>
2
3 #include <clutter/clutter.h>
4 #include "popup-factory.h"
5
6 static void popup_factory_iface_init (WebKitPopupFactoryInterface *iface);
7
8 enum {
9   NAME_COLUMN,
10   LAST_COLUMN
11 };
12
13 enum {
14   SHOW_MENU,
15   HIDE_MENU,
16   LAST_SIGNAL
17 };
18
19 G_DEFINE_TYPE_WITH_CODE (PopupFactory, popup_factory, TIDY_TYPE_LIST_VIEW,
20                          G_IMPLEMENT_INTERFACE (WEBKIT_TYPE_POPUP_FACTORY,
21                                                 popup_factory_iface_init));
22 #define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), POPUP_TYPE_FACTORY, PopupFactoryPrivate))
23
24 struct _PopupFactoryPrivate
25 {
26   ClutterModel *model;
27 };
28
29 static guint32 signals[LAST_SIGNAL] = {0, };
30
31 static void
32 popup_factory_class_init (PopupFactoryClass *klass)
33 {
34   g_type_class_add_private (klass, sizeof (PopupFactoryPrivate));
35
36   signals[SHOW_MENU] = g_signal_new ("show-menu",
37                                      G_TYPE_FROM_CLASS (klass),
38                                      G_SIGNAL_NO_RECURSE | 
39                                      G_SIGNAL_RUN_LAST,
40                                      G_STRUCT_OFFSET ( PopupFactoryClass,
41                                                       show_menu),
42                                      NULL, NULL,
43                                      g_cclosure_marshal_VOID__VOID,
44                                      G_TYPE_NONE, 0);
45   
46   signals[HIDE_MENU] = g_signal_new ("hide-menu",
47                                      G_TYPE_FROM_CLASS (klass),
48                                      G_SIGNAL_NO_RECURSE | 
49                                      G_SIGNAL_RUN_LAST,
50                                      G_STRUCT_OFFSET ( PopupFactoryClass,
51                                                       hide_menu),
52                                      NULL, NULL,
53                                      g_cclosure_marshal_VOID__VOID,
54                                      G_TYPE_NONE, 0);
55 }
56
57 static void
58 popup_factory_init (PopupFactory *factory)
59 {
60   PopupFactoryPrivate *priv = factory->priv = GET_PRIVATE (factory);
61   
62   priv->model = clutter_list_model_new (LAST_COLUMN, G_TYPE_STRING, "name");
63   g_object_set (G_OBJECT (factory),
64                 "model", priv->model,
65                 NULL);
66 }
67         
68 static void
69 factory_clear (WebKitPopupFactory *factory)
70 {
71   PopupFactoryPrivate *priv = POPUP_FACTORY (factory)->priv;
72
73   if (priv->model) {
74     g_object_unref (priv->model);
75   }
76
77   priv->model = clutter_list_model_new (LAST_COLUMN, G_TYPE_STRING, "name");
78 }
79
80 static void
81 factory_append_separator (WebKitPopupFactory *factory)
82 {
83 }
84
85 static void
86 factory_append_item (WebKitPopupFactory *factory,
87                      const char         *text)
88 {
89   PopupFactoryPrivate *priv = POPUP_FACTORY (factory)->priv;
90
91   clutter_model_append (priv->model, NAME_COLUMN, text, -1);
92 }
93
94 static void
95 factory_show (WebKitPopupFactory *factory, int index)
96 {
97   PopupFactoryPrivate *priv = POPUP_FACTORY (factory)->priv;
98   
99   tidy_list_view_set_model (TIDY_LIST_VIEW (factory), priv->model);
100   g_signal_emit (factory, signals[SHOW_MENU], 0);
101 }
102
103 static void
104 factory_hide (WebKitPopupFactory *factory)
105 {
106   g_signal_emit (factory, signals[HIDE_MENU], 0);
107   tidy_list_view_set_model (TIDY_LIST_VIEW (factory), NULL);
108 }
109
110 static void
111 popup_factory_iface_init (WebKitPopupFactoryInterface *iface)
112 {
113   iface->clear = factory_clear;
114   iface->append_separator = factory_append_separator;
115   iface->append_item = factory_append_item;
116   iface->show = factory_show;
117   iface->hide = factory_hide;
118 }