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
26 #include <hildon/hildon.h>
27 #include <hildon-cp-plugin/hildon-cp-plugin-interface.h>
29 #include <gconf/gconf-client.h>
32 #define GETTEXT_PACKAGE "osso-applet-subtitles"
33 #include <glib/gi18n-lib.h>
35 #define GCONF_MAFW_GST_SUBTITLE_RENDERER "/system/mafw/mafw-gst-renderer"
36 #define _HL(str) dgettext("hildon-libs",str)
40 SUBTITLE_ENCODING_CURRENT_LOCALE,
42 SUBTITLE_ENCODING_ISO_8859_6,
43 SUBTITLE_ENCODING_IBM_864,
44 SUBTITLE_ENCODING_MAC_ARABIC,
45 SUBTITLE_ENCODING_WINDOWS_1256,
47 SUBTITLE_ENCODING_ARMSCII_8,
49 SUBTITLE_ENCODING_ISO_8859_4,
50 SUBTITLE_ENCODING_ISO_8859_13,
51 SUBTITLE_ENCODING_WINDOWS_1257,
53 SUBTITLE_ENCODING_ISO_8859_14,
55 SUBTITLE_ENCODING_ISO_8859_2,
56 SUBTITLE_ENCODING_IBM_852,
57 SUBTITLE_ENCODING_MAC_CE,
58 SUBTITLE_ENCODING_WINDOWS_1250,
60 SUBTITLE_ENCODING_GB18030,
61 SUBTITLE_ENCODING_GB2312,
62 SUBTITLE_ENCODING_GBK,
65 SUBTITLE_ENCODING_BIG5,
66 SUBTITLE_ENCODING_BIG5_HKSCS,
67 SUBTITLE_ENCODING_EUC_TW,
69 SUBTITLE_ENCODING_MAC_CROATIAN,
71 SUBTITLE_ENCODING_ISO_8859_5,
72 SUBTITLE_ENCODING_IBM_855,
73 SUBTITLE_ENCODING_ISO_IR_111,
74 SUBTITLE_ENCODING_KOI8_R,
75 SUBTITLE_ENCODING_MAC_CYRILLIC,
76 SUBTITLE_ENCODING_WINDOWS_1251,
78 SUBTITLE_ENCODING_CP_866,
80 SUBTITLE_ENCODING_MAC_UKRAINIAN,
81 SUBTITLE_ENCODING_KOI8_U,
83 SUBTITLE_ENCODING_GEOSTD8,
85 SUBTITLE_ENCODING_ISO_8859_7,
86 SUBTITLE_ENCODING_MAC_GREEK,
87 SUBTITLE_ENCODING_WINDOWS_1253,
89 SUBTITLE_ENCODING_MAC_GUJARATI,
91 SUBTITLE_ENCODING_MAC_GURMUKHI,
93 SUBTITLE_ENCODING_ISO_8859_8_I,
94 SUBTITLE_ENCODING_IBM_862,
95 SUBTITLE_ENCODING_MAC_HEBREW,
96 SUBTITLE_ENCODING_WINDOWS_1255,
98 SUBTITLE_ENCODING_ISO_8859_8,
100 SUBTITLE_ENCODING_MAC_DEVANAGARI,
102 SUBTITLE_ENCODING_MAC_ICELANDIC,
104 SUBTITLE_ENCODING_EUC_JP,
105 SUBTITLE_ENCODING_ISO_2022_JP,
106 SUBTITLE_ENCODING_SHIFT_JIS,
108 SUBTITLE_ENCODING_EUC_KR,
109 SUBTITLE_ENCODING_ISO_2022_KR,
110 SUBTITLE_ENCODING_JOHAB,
111 SUBTITLE_ENCODING_UHC,
113 SUBTITLE_ENCODING_ISO_8859_10,
115 SUBTITLE_ENCODING_MAC_FARSI,
117 SUBTITLE_ENCODING_ISO_8859_16,
118 SUBTITLE_ENCODING_MAC_ROMANIAN,
120 SUBTITLE_ENCODING_ISO_8859_3,
122 SUBTITLE_ENCODING_TIS_620,
124 SUBTITLE_ENCODING_ISO_8859_9,
125 SUBTITLE_ENCODING_IBM_857,
126 SUBTITLE_ENCODING_MAC_TURKISH,
127 SUBTITLE_ENCODING_WINDOWS_1254,
129 SUBTITLE_ENCODING_UTF_7,
130 SUBTITLE_ENCODING_UTF_8,
131 SUBTITLE_ENCODING_UTF_16,
132 SUBTITLE_ENCODING_UCS_2,
133 SUBTITLE_ENCODING_UCS_4,
135 SUBTITLE_ENCODING_ISO_8859_1,
136 SUBTITLE_ENCODING_ISO_8859_15,
137 SUBTITLE_ENCODING_IBM_850,
138 SUBTITLE_ENCODING_MAC_ROMAN,
139 SUBTITLE_ENCODING_WINDOWS_1252,
141 SUBTITLE_ENCODING_TCVN,
142 SUBTITLE_ENCODING_VISCII,
143 SUBTITLE_ENCODING_WINDOWS_1258,
145 SUBTITLE_ENCODING_LAST
146 } SubtitleEncodingIndex;
156 static SubtitleEncoding encodings[] = {
157 {SUBTITLE_ENCODING_CURRENT_LOCALE, NULL, "Current Locale"},
159 {SUBTITLE_ENCODING_ISO_8859_6, "ISO-8859-6", "Arabic"},
160 {SUBTITLE_ENCODING_IBM_864, "IBM864", "Arabic"},
161 {SUBTITLE_ENCODING_MAC_ARABIC, "MAC_ARABIC", "Arabic"},
162 {SUBTITLE_ENCODING_WINDOWS_1256, "WINDOWS-1256", "Arabic"},
164 {SUBTITLE_ENCODING_ARMSCII_8, "ARMSCII-8", "Armenian"},
166 {SUBTITLE_ENCODING_ISO_8859_4, "ISO-8859-4", "Baltic"},
167 {SUBTITLE_ENCODING_ISO_8859_13, "ISO-8859-13", "Baltic"},
168 {SUBTITLE_ENCODING_WINDOWS_1257, "WINDOWS-1257", "Baltic"},
170 {SUBTITLE_ENCODING_ISO_8859_14, "ISO-8859-14", "Celtic"},
172 {SUBTITLE_ENCODING_ISO_8859_2, "ISO-8859-2", "Central European"},
173 {SUBTITLE_ENCODING_IBM_852, "IBM852", "Central European"},
174 {SUBTITLE_ENCODING_MAC_CE, "MAC_CE", "Central European"},
175 {SUBTITLE_ENCODING_WINDOWS_1250, "WINDOWS-1250", "Central European"},
177 {SUBTITLE_ENCODING_GB18030, "GB18030", "Chinese Simplified"},
178 {SUBTITLE_ENCODING_GB2312, "GB2312", "Chinese Simplified"},
179 {SUBTITLE_ENCODING_GBK, "GBK", "Chinese Simplified"},
180 {SUBTITLE_ENCODING_HZ, "HZ", "Chinese Simplified"},
182 {SUBTITLE_ENCODING_BIG5, "BIG5", "Chinese Traditional"},
183 {SUBTITLE_ENCODING_BIG5_HKSCS, "BIG5-HKSCS", "Chinese Traditional"},
184 {SUBTITLE_ENCODING_EUC_TW, "EUC-TW", "Chinese Traditional"},
186 {SUBTITLE_ENCODING_MAC_CROATIAN, "MAC_CROATIAN", "Croatian"},
188 {SUBTITLE_ENCODING_ISO_8859_5, "ISO-8859-5", "Cyrillic"},
189 {SUBTITLE_ENCODING_IBM_855, "IBM855", "Cyrillic"},
190 {SUBTITLE_ENCODING_ISO_IR_111, "ISO-IR-111", "Cyrillic"},
191 {SUBTITLE_ENCODING_KOI8_R, "KOI8-R", "Cyrillic"},
192 {SUBTITLE_ENCODING_MAC_CYRILLIC, "MAC-CYRILLIC", "Cyrillic"},
193 {SUBTITLE_ENCODING_WINDOWS_1251, "WINDOWS-1251", "Cyrillic"},
195 {SUBTITLE_ENCODING_CP_866, "CP866", "Cyrillic/Russian"},
197 {SUBTITLE_ENCODING_MAC_UKRAINIAN, "MAC_UKRAINIAN", "Cyrillic/Ukrainian"},
198 {SUBTITLE_ENCODING_KOI8_U, "KOI8-U", "Cyrillic/Ukrainian"},
200 {SUBTITLE_ENCODING_GEOSTD8, "GEORGIAN-PS", "Georgian"},
202 {SUBTITLE_ENCODING_ISO_8859_7, "ISO-8859-7", "Greek"},
203 {SUBTITLE_ENCODING_MAC_GREEK, "MAC_GREEK", "Greek"},
204 {SUBTITLE_ENCODING_WINDOWS_1253, "WINDOWS-1253", "Greek"},
206 {SUBTITLE_ENCODING_MAC_GUJARATI, "MAC_GUJARATI", "Gujarati"},
208 {SUBTITLE_ENCODING_MAC_GURMUKHI, "MAC_GURMUKHI", "Gurmukhi"},
210 {SUBTITLE_ENCODING_ISO_8859_8_I, "ISO-8859-8-I", "Hebrew"},
211 {SUBTITLE_ENCODING_IBM_862, "IBM862", "Hebrew"},
212 {SUBTITLE_ENCODING_MAC_HEBREW, "MAC_HEBREW", "Hebrew"},
213 {SUBTITLE_ENCODING_WINDOWS_1255, "WINDOWS-1255", "Hebrew"},
215 {SUBTITLE_ENCODING_ISO_8859_8, "ISO-8859-8", "Hebrew Visual"},
217 {SUBTITLE_ENCODING_MAC_DEVANAGARI, "MAC_DEVANAGARI", "Hindi"},
219 {SUBTITLE_ENCODING_MAC_ICELANDIC, "MAC_ICELANDIC", "Icelandic"},
221 {SUBTITLE_ENCODING_EUC_JP, "EUC-JP", "Japanese"},
222 {SUBTITLE_ENCODING_ISO_2022_JP, "ISO2022JP", "Japanese"},
223 {SUBTITLE_ENCODING_SHIFT_JIS, "SHIFT-JIS", "Japanese"},
225 {SUBTITLE_ENCODING_EUC_KR, "EUC-KR", "Korean"},
226 {SUBTITLE_ENCODING_ISO_2022_KR, "ISO2022KR", "Korean"},
227 {SUBTITLE_ENCODING_JOHAB, "JOHAB", "Korean"},
228 {SUBTITLE_ENCODING_UHC, "UHC", "Korean"},
230 {SUBTITLE_ENCODING_ISO_8859_10, "ISO-8859-10", "Nordic"},
232 {SUBTITLE_ENCODING_MAC_FARSI, "MAC_FARSI", "Persian"},
234 {SUBTITLE_ENCODING_ISO_8859_16, "ISO-8859-16", "Romanian"},
235 {SUBTITLE_ENCODING_MAC_ROMANIAN, "MAC_ROMANIAN", "Romanian"},
237 {SUBTITLE_ENCODING_ISO_8859_3, "ISO-8859-3", "South European"},
239 {SUBTITLE_ENCODING_TIS_620, "TIS-620", "Thai"},
241 {SUBTITLE_ENCODING_ISO_8859_9, "ISO-8859-9", "Turkish"},
242 {SUBTITLE_ENCODING_IBM_857, "IBM857", "Turkish"},
243 {SUBTITLE_ENCODING_MAC_TURKISH, "MAC_TURKISH", "Turkish"},
244 {SUBTITLE_ENCODING_WINDOWS_1254, "WINDOWS-1254", "Turkish"},
246 {SUBTITLE_ENCODING_UTF_7, "UTF-7", "Unicode"},
247 {SUBTITLE_ENCODING_UTF_8, "UTF-8", "Unicode"},
248 {SUBTITLE_ENCODING_UTF_16, "UTF-16", "Unicode"},
249 {SUBTITLE_ENCODING_UCS_2, "UCS-2", "Unicode"},
250 {SUBTITLE_ENCODING_UCS_4, "UCS-4", "Unicode"},
252 {SUBTITLE_ENCODING_ISO_8859_1, "ISO-8859-1", "Western"},
253 {SUBTITLE_ENCODING_ISO_8859_15, "ISO-8859-15", "Western"},
254 {SUBTITLE_ENCODING_IBM_850, "IBM850", "Western"},
255 {SUBTITLE_ENCODING_MAC_ROMAN, "MAC_ROMAN", "Western"},
256 {SUBTITLE_ENCODING_WINDOWS_1252, "WINDOWS-1252", "Western"},
258 {SUBTITLE_ENCODING_TCVN, "TCVN", "Vietnamese"},
259 {SUBTITLE_ENCODING_VISCII, "VISCII", "Vietnamese"},
260 {SUBTITLE_ENCODING_WINDOWS_1258, "WINDOWS-1258", "Vietnamese"}
264 gconf_get_bool (GConfClient *client,
267 gboolean value = FALSE;
270 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
272 value = gconf_client_get_bool (client, tmp, NULL);
281 gconf_set_bool (GConfClient *client,
287 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
289 gconf_client_set_bool (client, tmp, value, NULL);
296 gconf_get_string (GConfClient *client,
299 gchar *value = FALSE;
302 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
304 value = gconf_client_get_string (client, tmp, NULL);
313 gconf_set_string (GConfClient *client,
319 tmp = g_strdup_printf ("%s/%s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
322 gconf_client_set_string (client, tmp, value, NULL);
324 gconf_client_unset (client, tmp, NULL);
331 font_selector_dialog (HildonButton *button,
334 GtkWidget *dialog, *hbox;
336 dialog = gtk_dialog_new ();
337 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
338 gtk_window_set_title (GTK_WINDOW (dialog), _("Subtitle font"));
339 gtk_dialog_add_button(GTK_DIALOG (dialog), "OK", GTK_RESPONSE_ACCEPT);
341 hbox = gtk_hbox_new (FALSE, 0);
342 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), hbox);
344 // pango_font_description_from_string
347 gtk_widget_show_all (GTK_WIDGET (dialog));
348 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
349 // pango_font_description_to_string
352 gtk_widget_destroy(GTK_WIDGET(dialog));
357 create_encoding_selector (void)
362 selector = hildon_touch_selector_new_text ();
364 while (index < SUBTITLE_ENCODING_LAST) {
365 gchar *encoding = NULL;
367 if (encodings[index].charset) {
368 encoding = g_strdup_printf ("%s (%s)", encodings[index].name,
369 encodings[index].charset);
371 encoding = g_strdup_printf ("%s", encodings[index].name);
374 hildon_touch_selector_insert_text (HILDON_TOUCH_SELECTOR (selector),
375 encodings[index].index,
386 create_autoload_subtitles_button (GConfClient *gconf_client)
389 gboolean autoload_subtitles = FALSE;
391 button = hildon_check_button_new (HILDON_SIZE_FINGER_HEIGHT);
392 gtk_button_set_label (GTK_BUTTON (button), _("Automatically load subtitle files"));
394 autoload_subtitles = gconf_get_bool (gconf_client, "autoload_subtitles");
395 if (autoload_subtitles)
396 hildon_check_button_set_active (HILDON_CHECK_BUTTON (button), TRUE);
398 hildon_check_button_set_active (HILDON_CHECK_BUTTON (button), FALSE);
404 save_autoload_subtitles (GConfClient *gconf_client,
407 if (hildon_check_button_get_active (HILDON_CHECK_BUTTON (widget)))
408 gconf_set_bool (gconf_client, "autoload_subtitles", TRUE);
410 gconf_set_bool (gconf_client, "autoload_subtitles", FALSE);
414 create_subtitles_font_button (GConfClient *gconf_client)
417 const gchar *font = NULL;
419 button = hildon_button_new (HILDON_SIZE_FINGER_HEIGHT,
420 HILDON_BUTTON_ARRANGEMENT_VERTICAL);
421 hildon_button_set_title (HILDON_BUTTON (button), _("Font"));
422 hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
423 hildon_button_set_title_alignment (HILDON_BUTTON(button), 0.0, 0.5);
424 hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
426 g_signal_connect (button, "clicked", G_CALLBACK (font_selector_dialog), NULL);
428 font = gconf_get_string (gconf_client, "subtitle_font");
430 hildon_button_set_value (HILDON_BUTTON (button), font);
432 hildon_button_set_value (HILDON_BUTTON (button), "Sans Bold 18");
438 save_subtitles_font (GConfClient *gconf_client,
441 const gchar *font = NULL;
443 font = hildon_button_get_value (HILDON_BUTTON (widget));
444 gconf_set_string (gconf_client, "subtitle_font", font);
448 create_subtitles_encoding_button (GConfClient *gconf_client)
450 GtkWidget *button, *selector;
451 const gchar *encoding = NULL;
453 button = hildon_picker_button_new (HILDON_SIZE_FINGER_HEIGHT,
454 HILDON_BUTTON_ARRANGEMENT_VERTICAL);
455 hildon_button_set_title (HILDON_BUTTON (button), _("Encoding"));
456 hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 0.0);
457 hildon_button_set_title_alignment (HILDON_BUTTON(button), 0.0, 0.5);
458 hildon_button_set_value_alignment (HILDON_BUTTON (button), 0.0, 0.5);
460 selector = create_encoding_selector ();
461 hildon_picker_button_set_selector (HILDON_PICKER_BUTTON (button),
462 HILDON_TOUCH_SELECTOR (selector));
464 encoding = gconf_get_string (gconf_client, "subtitle_encoding");
466 /* skip current locale */
469 while (index < SUBTITLE_ENCODING_LAST) {
470 if (strcmp (encodings[index].charset, encoding) == 0) {
471 hildon_picker_button_set_active (HILDON_PICKER_BUTTON (button),
478 hildon_picker_button_set_active (HILDON_PICKER_BUTTON (button),
479 SUBTITLE_ENCODING_CURRENT_LOCALE);
486 save_subtitles_encoding (GConfClient *gconf_client,
489 gint encoding = 0, index = 0;
491 encoding = hildon_picker_button_get_active (HILDON_PICKER_BUTTON (widget));
493 while (index < SUBTITLE_ENCODING_LAST) {
494 if (encoding == index) {
495 gconf_set_string (gconf_client, "subtitle_encoding",
496 encodings[index].charset);
504 execute (osso_context_t *osso,
506 gboolean user_activated)
508 GConfClient *gconf_client = NULL;
509 GtkWidget *dialog, *vbox, *autoload_subtitles_button;
510 GtkWidget *subtitles_font_button, *subtitles_encoding_button;
512 gconf_client = gconf_client_get_default ();
513 if (gconf_client == NULL) {
517 dialog = gtk_dialog_new ();
518 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
519 gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (data));
520 gtk_window_set_title (GTK_WINDOW (dialog), _("Subtitles"));
521 gtk_dialog_add_button(GTK_DIALOG (dialog), _HL("wdgt_bd_save"), GTK_RESPONSE_ACCEPT);
523 vbox = gtk_vbox_new (FALSE, 0);
524 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), vbox);
526 /* autoload subtitles button */
527 autoload_subtitles_button = create_autoload_subtitles_button (gconf_client);
528 gtk_box_pack_start (GTK_BOX (vbox), autoload_subtitles_button, TRUE, TRUE, 0);
531 subtitles_font_button = create_subtitles_font_button (gconf_client);
532 gtk_box_pack_start (GTK_BOX (vbox), subtitles_font_button, TRUE, TRUE, 0);
535 subtitles_encoding_button = create_subtitles_encoding_button (gconf_client);
536 gtk_box_pack_start (GTK_BOX (vbox), subtitles_encoding_button, TRUE, TRUE, 0);
539 gtk_widget_show_all (GTK_WIDGET (dialog));
540 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
541 /* save autoload subtitles option */
542 save_autoload_subtitles (gconf_client, autoload_subtitles_button);
544 /* save subtitle font option */
545 save_subtitles_font (gconf_client, subtitles_font_button);
547 /* save subtitle encoding option */
548 save_subtitles_encoding (gconf_client, subtitles_encoding_button);
551 gtk_widget_destroy(GTK_WIDGET(dialog));
556 save_state (osso_context_t *osso,