2 * Subtitles control panel applet.
3 * Copyright (C) 2010 Roman Moravcik
5 * encodings structure imported from totem-subtitle-encoding.c
6 * Copyright (C) 2001-2006 Bastien Nocera <hadess@hadess.net>
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <glib/gi18n-lib.h>
31 #include <hildon/hildon.h>
32 #include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
34 #include <gconf/gconf-client.h>
36 #define GCONF_MAFW_GST_SUBTITLE_RENDERER "/system/mafw/mafw-gst-renderer"
37 #define _HL(str) dgettext("hildon-libs",str)
41 SUBTITLE_ENCODING_CURRENT_LOCALE,
43 SUBTITLE_ENCODING_ISO_8859_6,
44 SUBTITLE_ENCODING_IBM_864,
45 SUBTITLE_ENCODING_MAC_ARABIC,
46 SUBTITLE_ENCODING_WINDOWS_1256,
48 SUBTITLE_ENCODING_ARMSCII_8,
50 SUBTITLE_ENCODING_ISO_8859_4,
51 SUBTITLE_ENCODING_ISO_8859_13,
52 SUBTITLE_ENCODING_WINDOWS_1257,
54 SUBTITLE_ENCODING_ISO_8859_14,
56 SUBTITLE_ENCODING_ISO_8859_2,
57 SUBTITLE_ENCODING_IBM_852,
58 SUBTITLE_ENCODING_MAC_CE,
59 SUBTITLE_ENCODING_WINDOWS_1250,
61 SUBTITLE_ENCODING_GB18030,
62 SUBTITLE_ENCODING_GB2312,
63 SUBTITLE_ENCODING_GBK,
66 SUBTITLE_ENCODING_BIG5,
67 SUBTITLE_ENCODING_BIG5_HKSCS,
68 SUBTITLE_ENCODING_EUC_TW,
70 SUBTITLE_ENCODING_MAC_CROATIAN,
72 SUBTITLE_ENCODING_ISO_8859_5,
73 SUBTITLE_ENCODING_IBM_855,
74 SUBTITLE_ENCODING_ISO_IR_111,
75 SUBTITLE_ENCODING_KOI8_R,
76 SUBTITLE_ENCODING_MAC_CYRILLIC,
77 SUBTITLE_ENCODING_WINDOWS_1251,
79 SUBTITLE_ENCODING_CP_866,
81 SUBTITLE_ENCODING_MAC_UKRAINIAN,
82 SUBTITLE_ENCODING_KOI8_U,
84 SUBTITLE_ENCODING_GEOSTD8,
86 SUBTITLE_ENCODING_ISO_8859_7,
87 SUBTITLE_ENCODING_MAC_GREEK,
88 SUBTITLE_ENCODING_WINDOWS_1253,
90 SUBTITLE_ENCODING_MAC_GUJARATI,
92 SUBTITLE_ENCODING_MAC_GURMUKHI,
94 SUBTITLE_ENCODING_ISO_8859_8_I,
95 SUBTITLE_ENCODING_IBM_862,
96 SUBTITLE_ENCODING_MAC_HEBREW,
97 SUBTITLE_ENCODING_WINDOWS_1255,
99 SUBTITLE_ENCODING_ISO_8859_8,
101 SUBTITLE_ENCODING_MAC_DEVANAGARI,
103 SUBTITLE_ENCODING_MAC_ICELANDIC,
105 SUBTITLE_ENCODING_EUC_JP,
106 SUBTITLE_ENCODING_ISO_2022_JP,
107 SUBTITLE_ENCODING_SHIFT_JIS,
109 SUBTITLE_ENCODING_EUC_KR,
110 SUBTITLE_ENCODING_ISO_2022_KR,
111 SUBTITLE_ENCODING_JOHAB,
112 SUBTITLE_ENCODING_UHC,
114 SUBTITLE_ENCODING_ISO_8859_10,
116 SUBTITLE_ENCODING_MAC_FARSI,
118 SUBTITLE_ENCODING_ISO_8859_16,
119 SUBTITLE_ENCODING_MAC_ROMANIAN,
121 SUBTITLE_ENCODING_ISO_8859_3,
123 SUBTITLE_ENCODING_TIS_620,
125 SUBTITLE_ENCODING_ISO_8859_9,
126 SUBTITLE_ENCODING_IBM_857,
127 SUBTITLE_ENCODING_MAC_TURKISH,
128 SUBTITLE_ENCODING_WINDOWS_1254,
130 SUBTITLE_ENCODING_UTF_7,
131 SUBTITLE_ENCODING_UTF_8,
132 SUBTITLE_ENCODING_UTF_16,
133 SUBTITLE_ENCODING_UCS_2,
134 SUBTITLE_ENCODING_UCS_4,
136 SUBTITLE_ENCODING_ISO_8859_1,
137 SUBTITLE_ENCODING_ISO_8859_15,
138 SUBTITLE_ENCODING_IBM_850,
139 SUBTITLE_ENCODING_MAC_ROMAN,
140 SUBTITLE_ENCODING_WINDOWS_1252,
142 SUBTITLE_ENCODING_TCVN,
143 SUBTITLE_ENCODING_VISCII,
144 SUBTITLE_ENCODING_WINDOWS_1258,
146 SUBTITLE_ENCODING_LAST
147 } SubtitleEncodingIndex;
157 static SubtitleEncoding encodings[] = {
158 {SUBTITLE_ENCODING_CURRENT_LOCALE, NULL, N_("Current Locale")},
160 {SUBTITLE_ENCODING_ISO_8859_6, "ISO-8859-6", N_("Arabic")},
161 {SUBTITLE_ENCODING_IBM_864, "IBM864", N_("Arabic")},
162 {SUBTITLE_ENCODING_MAC_ARABIC, "MAC_ARABIC", N_("Arabic")},
163 {SUBTITLE_ENCODING_WINDOWS_1256, "WINDOWS-1256", N_("Arabic")},
165 {SUBTITLE_ENCODING_ARMSCII_8, "ARMSCII-8", N_("Armenian")},
167 {SUBTITLE_ENCODING_ISO_8859_4, "ISO-8859-4", N_("Baltic")},
168 {SUBTITLE_ENCODING_ISO_8859_13, "ISO-8859-13", N_("Baltic")},
169 {SUBTITLE_ENCODING_WINDOWS_1257, "WINDOWS-1257", N_("Baltic")},
171 {SUBTITLE_ENCODING_ISO_8859_14, "ISO-8859-14", N_("Celtic")},
173 {SUBTITLE_ENCODING_ISO_8859_2, "ISO-8859-2", N_("Central European")},
174 {SUBTITLE_ENCODING_IBM_852, "IBM852", N_("Central European")},
175 {SUBTITLE_ENCODING_MAC_CE, "MAC_CE", N_("Central European")},
176 {SUBTITLE_ENCODING_WINDOWS_1250, "WINDOWS-1250", N_("Central European")},
178 {SUBTITLE_ENCODING_GB18030, "GB18030", N_("Chinese Simplified")},
179 {SUBTITLE_ENCODING_GB2312, "GB2312", N_("Chinese Simplified")},
180 {SUBTITLE_ENCODING_GBK, "GBK", N_("Chinese Simplified")},
181 {SUBTITLE_ENCODING_HZ, "HZ", N_("Chinese Simplified")},
183 {SUBTITLE_ENCODING_BIG5, "BIG5", N_("Chinese Traditional")},
184 {SUBTITLE_ENCODING_BIG5_HKSCS, "BIG5-HKSCS", N_("Chinese Traditional")},
185 {SUBTITLE_ENCODING_EUC_TW, "EUC-TW", N_("Chinese Traditional")},
187 {SUBTITLE_ENCODING_MAC_CROATIAN, "MAC_CROATIAN", N_("Croatian")},
189 {SUBTITLE_ENCODING_ISO_8859_5, "ISO-8859-5", N_("Cyrillic")},
190 {SUBTITLE_ENCODING_IBM_855, "IBM855", N_("Cyrillic")},
191 {SUBTITLE_ENCODING_ISO_IR_111, "ISO-IR-111", N_("Cyrillic")},
192 {SUBTITLE_ENCODING_KOI8_R, "KOI8-R", N_("Cyrillic")},
193 {SUBTITLE_ENCODING_MAC_CYRILLIC, "MAC-CYRILLIC", N_("Cyrillic")},
194 {SUBTITLE_ENCODING_WINDOWS_1251, "WINDOWS-1251", N_("Cyrillic")},
196 {SUBTITLE_ENCODING_CP_866, "CP866", N_("Cyrillic/Russian")},
198 {SUBTITLE_ENCODING_MAC_UKRAINIAN, "MAC_UKRAINIAN", N_("Cyrillic/Ukrainian")},
199 {SUBTITLE_ENCODING_KOI8_U, "KOI8-U", N_("Cyrillic/Ukrainian")},
201 {SUBTITLE_ENCODING_GEOSTD8, "GEORGIAN-PS", N_("Georgian")},
203 {SUBTITLE_ENCODING_ISO_8859_7, "ISO-8859-7", N_("Greek")},
204 {SUBTITLE_ENCODING_MAC_GREEK, "MAC_GREEK", N_("Greek")},
205 {SUBTITLE_ENCODING_WINDOWS_1253, "WINDOWS-1253", N_("Greek")},
207 {SUBTITLE_ENCODING_MAC_GUJARATI, "MAC_GUJARATI", N_("Gujarati")},
209 {SUBTITLE_ENCODING_MAC_GURMUKHI, "MAC_GURMUKHI", N_("Gurmukhi")},
211 {SUBTITLE_ENCODING_ISO_8859_8_I, "ISO-8859-8-I", N_("Hebrew")},
212 {SUBTITLE_ENCODING_IBM_862, "IBM862", N_("Hebrew")},
213 {SUBTITLE_ENCODING_MAC_HEBREW, "MAC_HEBREW", N_("Hebrew")},
214 {SUBTITLE_ENCODING_WINDOWS_1255, "WINDOWS-1255", N_("Hebrew")},
216 {SUBTITLE_ENCODING_ISO_8859_8, "ISO-8859-8", N_("Hebrew Visual")},
218 {SUBTITLE_ENCODING_MAC_DEVANAGARI, "MAC_DEVANAGARI", N_("Hindi")},
220 {SUBTITLE_ENCODING_MAC_ICELANDIC, "MAC_ICELANDIC", N_("Icelandic")},
222 {SUBTITLE_ENCODING_EUC_JP, "EUC-JP", N_("Japanese")},
223 {SUBTITLE_ENCODING_ISO_2022_JP, "ISO2022JP", N_("Japanese")},
224 {SUBTITLE_ENCODING_SHIFT_JIS, "SHIFT-JIS", N_("Japanese")},
226 {SUBTITLE_ENCODING_EUC_KR, "EUC-KR", N_("Korean")},
227 {SUBTITLE_ENCODING_ISO_2022_KR, "ISO2022KR", N_("Korean")},
228 {SUBTITLE_ENCODING_JOHAB, "JOHAB", N_("Korean")},
229 {SUBTITLE_ENCODING_UHC, "UHC", N_("Korean")},
231 {SUBTITLE_ENCODING_ISO_8859_10, "ISO-8859-10", N_("Nordic")},
233 {SUBTITLE_ENCODING_MAC_FARSI, "MAC_FARSI", N_("Persian")},
235 {SUBTITLE_ENCODING_ISO_8859_16, "ISO-8859-16", N_("Romanian")},
236 {SUBTITLE_ENCODING_MAC_ROMANIAN, "MAC_ROMANIAN", N_("Romanian")},
238 {SUBTITLE_ENCODING_ISO_8859_3, "ISO-8859-3", N_("South European")},
240 {SUBTITLE_ENCODING_TIS_620, "TIS-620", N_("Thai")},
242 {SUBTITLE_ENCODING_ISO_8859_9, "ISO-8859-9", N_("Turkish")},
243 {SUBTITLE_ENCODING_IBM_857, "IBM857", N_("Turkish")},
244 {SUBTITLE_ENCODING_MAC_TURKISH, "MAC_TURKISH", N_("Turkish")},
245 {SUBTITLE_ENCODING_WINDOWS_1254, "WINDOWS-1254", N_("Turkish")},
247 {SUBTITLE_ENCODING_UTF_7, "UTF-7", N_("Unicode")},
248 {SUBTITLE_ENCODING_UTF_8, "UTF-8", N_("Unicode")},
249 {SUBTITLE_ENCODING_UTF_16, "UTF-16", N_("Unicode")},
250 {SUBTITLE_ENCODING_UCS_2, "UCS-2", N_("Unicode")},
251 {SUBTITLE_ENCODING_UCS_4, "UCS-4", N_("Unicode")},
253 {SUBTITLE_ENCODING_ISO_8859_1, "ISO-8859-1", N_("Western")},
254 {SUBTITLE_ENCODING_ISO_8859_15, "ISO-8859-15", N_("Western")},
255 {SUBTITLE_ENCODING_IBM_850, "IBM850", N_("Western")},
256 {SUBTITLE_ENCODING_MAC_ROMAN, "MAC_ROMAN", N_("Western")},
257 {SUBTITLE_ENCODING_WINDOWS_1252, "WINDOWS-1252", N_("Western")},
259 {SUBTITLE_ENCODING_TCVN, "TCVN", N_("Vietnamese")},
260 {SUBTITLE_ENCODING_VISCII, "VISCII", N_("Vietnamese")},
261 {SUBTITLE_ENCODING_WINDOWS_1258, "WINDOWS-1258", N_("Vietnamese")}
265 gconf_get_bool (GConfClient *client,
268 gboolean value = FALSE;
271 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
273 value = gconf_client_get_bool (client, tmp, NULL);
282 gconf_set_bool (GConfClient *client,
288 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
290 gconf_client_set_bool (client, tmp, value, NULL);
297 gconf_get_string (GConfClient *client,
300 gchar *value = FALSE;
303 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
305 value = gconf_client_get_string (client, tmp, NULL);
314 gconf_set_string (GConfClient *client,
320 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
323 gconf_client_set_string (client, tmp, value, NULL);
325 gconf_client_unset (client, tmp, NULL);
332 font_selector_dialog (HildonButton *button,
335 GtkWidget *dialog, *hbox;
337 dialog = gtk_dialog_new ();
338 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
339 gtk_window_set_title (GTK_WINDOW (dialog), _("Font"));
340 gtk_dialog_add_button(GTK_DIALOG (dialog), "OK", GTK_RESPONSE_ACCEPT);
342 hbox = gtk_hbox_new (FALSE, 0);
343 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
345 // pango_font_description_from_string
348 gtk_widget_show_all (GTK_WIDGET (dialog));
349 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
350 // pango_font_description_to_string
353 gtk_widget_destroy(GTK_WIDGET(dialog));
358 create_encoding_selector (void)
363 selector = hildon_touch_selector_new_text ();
365 while (index < SUBTITLE_ENCODING_LAST) {
366 gchar *encoding = NULL;
368 if (encodings[index].charset) {
369 encoding = g_strdup_printf ("%s (%s)", _(encodings[index].name),
370 encodings[index].charset);
372 encoding = g_strdup_printf ("%s", _(encodings[index].name));
375 hildon_touch_selector_insert_text (HILDON_TOUCH_SELECTOR (selector),
376 encodings[index].index,
387 create_autoload_subtitles_button (GConfClient *gconf_client)
390 gboolean autoload_subtitles = FALSE;
392 button = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
393 gtk_button_set_label (GTK_BUTTON (button), _("Automatically load subtitle files"));
395 autoload_subtitles = gconf_get_bool (gconf_client, "autoload_subtitles");
396 if (autoload_subtitles)
397 hildon_check_button_set_active (HILDON_CHECK_BUTTON (button), TRUE);
399 hildon_check_button_set_active (HILDON_CHECK_BUTTON (button), FALSE);
405 save_autoload_subtitles (GConfClient *gconf_client,
408 if (hildon_check_button_get_active (HILDON_CHECK_BUTTON (widget)))
409 gconf_set_bool (gconf_client, "autoload_subtitles", TRUE);
411 gconf_set_bool (gconf_client, "autoload_subtitles", FALSE);
415 create_subtitles_font_button (GConfClient *gconf_client)
418 const gchar *font = NULL;
420 button = hildon_button_new (HILDON_SIZE_FINGER_HEIGHT,
421 HILDON_BUTTON_ARRANGEMENT_VERTICAL);
422 hildon_button_set_title (HILDON_BUTTON (button), _("Font"));
423 hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
424 hildon_button_set_title_alignment (HILDON_BUTTON(button), 0.0, 0.5);
425 hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
427 g_signal_connect (button, "clicked", G_CALLBACK (font_selector_dialog), NULL);
429 font = gconf_get_string (gconf_client, "subtitle_font");
431 hildon_button_set_value (HILDON_BUTTON (button), font);
433 hildon_button_set_value (HILDON_BUTTON (button), "Sans Bold 18");
439 save_subtitles_font (GConfClient *gconf_client,
442 const gchar *font = NULL;
444 font = hildon_button_get_value (HILDON_BUTTON (widget));
445 gconf_set_string (gconf_client, "subtitle_font", font);
449 create_subtitles_encoding_button (GConfClient *gconf_client)
451 GtkWidget *button, *selector;
452 const gchar *encoding = NULL;
454 button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT,
455 HILDON_BUTTON_ARRANGEMENT_VERTICAL);
456 hildon_button_set_title (HILDON_BUTTON (button), _("Encoding"));
457 hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
458 hildon_button_set_title_alignment (HILDON_BUTTON(button), 0.0, 0.5);
459 hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
461 selector = create_encoding_selector ();
462 hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
463 HILDON_TOUCH_SELECTOR (selector));
465 encoding = gconf_get_string (gconf_client, "subtitle_encoding");
467 /* skip current locale */
470 while (index < SUBTITLE_ENCODING_LAST) {
471 if (strcmp (encodings[index].charset, encoding) == 0) {
472 hildon_picker_button_set_active (HILDON_PICKER_BUTTON (button),
479 hildon_picker_button_set_active (HILDON_PICKER_BUTTON (button),
480 SUBTITLE_ENCODING_CURRENT_LOCALE);
487 save_subtitles_encoding (GConfClient *gconf_client,
490 gint encoding = 0, index = 0;
492 encoding = hildon_picker_button_get_active (HILDON_PICKER_BUTTON (widget));
494 while (index < SUBTITLE_ENCODING_LAST) {
495 if (encoding == index) {
496 gconf_set_string (gconf_client, "subtitle_encoding",
497 encodings[index].charset);
505 execute (osso_context_t *osso,
507 gboolean user_activated)
509 GConfClient *gconf_client = NULL;
510 GtkWidget *dialog, *vbox, *autoload_subtitles_button;
511 GtkWidget *subtitles_font_button, *subtitles_encoding_button;
513 gconf_client = gconf_client_get_default ();
514 if (gconf_client == NULL) {
518 dialog = gtk_dialog_new ();
519 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
520 gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (data));
521 gtk_window_set_title (GTK_WINDOW (dialog), _("Subtitles"));
522 gtk_dialog_add_button(GTK_DIALOG (dialog), _HL("wdgt_bd_save"), GTK_RESPONSE_ACCEPT);
524 vbox = gtk_vbox_new (FALSE, 0);
525 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
527 /* autoload subtitles button */
528 autoload_subtitles_button = create_autoload_subtitles_button (gconf_client);
529 gtk_box_pack_start (GTK_BOX (vbox), autoload_subtitles_button, TRUE, TRUE, 0);
532 subtitles_font_button = create_subtitles_font_button (gconf_client);
533 gtk_box_pack_start (GTK_BOX (vbox), subtitles_font_button, TRUE, TRUE, 0);
536 subtitles_encoding_button = create_subtitles_encoding_button (gconf_client);
537 gtk_box_pack_start (GTK_BOX (vbox), subtitles_encoding_button, TRUE, TRUE, 0);
540 gtk_widget_show_all (GTK_WIDGET (dialog));
541 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
542 /* save autoload subtitles option */
543 save_autoload_subtitles (gconf_client, autoload_subtitles_button);
545 /* save subtitle font option */
546 save_subtitles_font (gconf_client, subtitles_font_button);
548 /* save subtitle encoding option */
549 save_subtitles_encoding (gconf_client, subtitles_encoding_button);
552 gtk_widget_destroy(GTK_WIDGET(dialog));
557 save_state (osso_context_t *osso,