7 entry_cb (GtkWidget *entry, gpointer data)
9 const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry));
10 MSymbol lang, name, variable, key;
11 MPlist *plist = mplist ();
13 lang = g_object_get_data (G_OBJECT (entry), "mim_lang");
14 name = g_object_get_data (G_OBJECT (entry), "mim_name");
15 variable = g_object_get_data (G_OBJECT (entry), "mim_variable");
16 key = g_object_get_data (G_OBJECT (entry), "mim_key");
20 mplist_add (plist, Msymbol, msymbol (text));
21 minput_config_variable (lang, name, variable, plist);
23 else if (key == Mtext)
27 mt = mtext_from_data (text, strlen (text), MTEXT_FORMAT_UTF_8);
28 mplist_add (plist, Mtext, mt);
29 minput_config_variable (lang, name, variable, plist);
30 m17n_object_unref (mt);
32 else if (key == Minteger)
37 if (sscanf (text, "%d", &i) == 1)
39 mplist_add (plist, Minteger, (void *) i);
40 minput_config_variable (lang, name, variable, plist);
44 printf ("Invalid value\n");
46 sprintf (buf, "%d", (int) mplist_value (plist));
47 gtk_entry_set_text (GTK_ENTRY (entry), buf);
48 gtk_editable_set_position (GTK_EDITABLE (entry), -1);
50 m17n_object_unref (plist);
54 combo_cb (GtkWidget *combo, gpointer data)
56 gchar *text = gtk_combo_box_get_active_text (GTK_COMBO_BOX (combo));
57 MSymbol lang, name, variable, key;
58 MPlist *plist = mplist ();
60 lang = g_object_get_data (G_OBJECT (combo), "mim_lang");
61 name = g_object_get_data (G_OBJECT (combo), "mim_name");
62 variable = g_object_get_data (G_OBJECT (combo), "mim_variable");
63 key = g_object_get_data (G_OBJECT (combo), "mim_key");
67 mplist_add (plist, Msymbol, msymbol (text));
68 minput_config_variable (lang, name, variable, plist);
70 else if (key == Mtext)
74 mt = mtext_from_data (text, strlen (text), MTEXT_FORMAT_UTF_8);
75 mplist_add (plist, Mtext, mt);
76 minput_config_variable (lang, name, variable, plist);
77 m17n_object_unref (mt);
79 else if (key == Minteger)
84 if (sscanf (text, "%d", &i) == 1)
86 mplist_add (plist, Minteger, (void *) i);
87 minput_config_variable (lang, name, variable, plist);
91 printf ("Invalid value\n");
94 m17n_object_unref (plist);
98 spin_cb (GtkWidget *spin, gpointer data)
100 MSymbol lang, name, variable;
101 MPlist *plist = mplist ();
103 lang = g_object_get_data (G_OBJECT (spin), "mim_lang");
104 name = g_object_get_data (G_OBJECT (spin), "mim_name");
105 variable = g_object_get_data (G_OBJECT (spin), "mim_variable");
109 (void *) gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spin)));
110 minput_config_variable (lang, name, variable, plist);
111 m17n_object_unref (plist);
115 create_variable_entries (GtkWidget *frame, GtkTooltips *tip,
116 MSymbol lang, MSymbol name)
122 plist = minput_get_variable (lang, name, Mnil);
127 message = gtk_label_new ("No variables for this method");
128 gtk_container_add (GTK_CONTAINER (frame), message);
133 * plist == ((variable description status value [valid-value ...])
134 * (variable description status value [valid-value ...])
137 table = gtk_table_new (2, mplist_length (plist), FALSE);
138 gtk_container_add (GTK_CONTAINER (frame), table);
140 for (row = 0; plist && mplist_key (plist) == Mplist;
141 row++, plist = mplist_next (plist))
143 GtkWidget *label, *widget;
145 MSymbol variable, key;
149 pl = mplist_value (plist);
150 variable = mplist_value (pl);
151 label = gtk_label_new (msymbol_name (variable));
152 gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, row, row + 1);
154 pl = mplist_next (pl);
155 if (mplist_key (pl) == Mtext)
156 /* Fixme : Assuming the return value is in UTF-8 */
157 desc = mtext_data (mplist_value (pl), NULL, NULL, NULL, NULL);
161 pl = mplist_next (mplist_next (pl)); /* ignore status */
162 key = mplist_key (pl);
163 value = mplist_value (pl);
164 pl = mplist_next (pl);
168 if (mplist_key (pl) == Msymbol)
172 widget = gtk_combo_box_new_text ();
173 for (i = 0; pl && mplist_key (pl) == Msymbol;
174 pl = mplist_next (pl), i++)
176 if (mplist_value (pl) == value)
178 gtk_combo_box_append_text (GTK_COMBO_BOX (widget),
179 msymbol_name (mplist_value (pl)));
182 gtk_combo_box_set_active (GTK_COMBO_BOX (widget), nth);
183 g_signal_connect (G_OBJECT (widget), "changed",
184 G_CALLBACK (combo_cb), NULL);
188 widget = gtk_entry_new ();
189 gtk_entry_set_text (GTK_ENTRY (widget), msymbol_name (value));
190 gtk_editable_set_editable (GTK_EDITABLE (widget), TRUE);
191 g_signal_connect (G_OBJECT (widget), "activate",
192 G_CALLBACK (entry_cb), NULL);
196 else if (key == Mtext)
198 if (mplist_key (pl) == Mtext)
202 widget = gtk_combo_box_new_text ();
203 for (i = 0; pl && mplist_key (pl) == Mtext;
204 pl = mplist_next (pl), i++)
206 if (! mtext_cmp (mplist_value (pl), value))
208 /* Fixme : Assuming the return value is in UTF-8 */
209 gtk_combo_box_append_text
210 (GTK_COMBO_BOX (widget),
211 mtext_data (mplist_value (pl), NULL, NULL, NULL, NULL));
214 gtk_combo_box_set_active (GTK_COMBO_BOX (widget), nth);
215 g_signal_connect (G_OBJECT (widget), "changed",
216 G_CALLBACK (combo_cb), NULL);
220 widget = gtk_entry_new ();
221 /* Fixme : Assuming the return value is in UTF-8 */
222 gtk_entry_set_text (GTK_ENTRY (widget),
223 mtext_data (value, NULL, NULL, NULL, NULL));
224 gtk_editable_set_editable (GTK_EDITABLE (widget), TRUE);
225 g_signal_connect (G_OBJECT (widget), "activate",
226 G_CALLBACK (entry_cb), NULL);
230 else if (key == Minteger)
232 if (mplist_key (pl) == Minteger)
236 widget = gtk_combo_box_new_text ();
237 for (i = 0; pl && mplist_key (pl) == Minteger;
238 pl = mplist_next (pl), i++)
242 if (mplist_value (pl) == value)
244 snprintf (buf, 31, "%d", (int) mplist_value (pl));
245 gtk_combo_box_append_text (GTK_COMBO_BOX (widget), buf);
248 gtk_combo_box_set_active (GTK_COMBO_BOX (widget), nth);
249 g_signal_connect (G_OBJECT (widget), "changed",
250 G_CALLBACK (combo_cb), NULL);
252 else if (mplist_key (pl) == Mplist)
255 gdouble lower, upper;
257 pl = mplist_value (pl);
258 lower = (gdouble) (int) mplist_value (pl);
259 pl = mplist_next (pl);
260 upper = (gdouble) (int) mplist_value (pl);
261 adj = (GtkAdjustment *)
262 gtk_adjustment_new ((gdouble) (int) value, (gdouble) lower,
263 (gdouble) upper, 1.0, 10.0, 0);
264 widget = gtk_spin_button_new (adj, 0, 0);
265 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (widget), TRUE);
266 gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (widget),
267 GTK_UPDATE_IF_VALID);
268 g_signal_connect (G_OBJECT (widget), "value_changed",
269 G_CALLBACK (spin_cb), NULL);
275 widget = gtk_entry_new ();
276 snprintf (buf, 31, "%d", (int) value);
277 gtk_entry_set_text (GTK_ENTRY (widget), buf);
278 gtk_editable_set_editable (GTK_EDITABLE (widget), TRUE);
279 g_signal_connect (G_OBJECT (widget), "activate",
280 G_CALLBACK (entry_cb), NULL);
286 widget = gtk_entry_new ();
287 gtk_entry_set_text (GTK_ENTRY (widget), "???");
288 gtk_editable_set_editable (GTK_EDITABLE (widget), TRUE);
289 g_signal_connect (G_OBJECT (widget), "activate",
290 G_CALLBACK (entry_cb), NULL);
293 gtk_tooltips_set_tip (tip, widget, desc, NULL);
294 g_object_set_data (G_OBJECT (widget), "mim_lang", lang);
295 g_object_set_data (G_OBJECT (widget), "mim_name", name);
296 g_object_set_data (G_OBJECT (widget), "mim_variable", variable);
297 g_object_set_data (G_OBJECT (widget), "mim_key", key);
298 gtk_table_attach_defaults (GTK_TABLE (table), widget,