1 /*******************************************************************************
2 This file is part of WhiteStork.
4 WhiteStork is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 WhiteStork is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with WhiteStork; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 Copyright 2006 ComArch S.A.
19 *******************************************************************************/
20 #include <ws_gui_callbacks.h>
22 #include <ws_gui_layout.h>
25 /** \brief show how much time did take a callback of another function
28 static double timer(gboolean start, gchar* message)
30 static GArray* stack = NULL;
31 static gboolean first_run = TRUE;
32 static struct timeval actual_time;
33 static struct timeval last_time;
34 static struct timeval result;
35 static double seconds = 0.0;
39 stack = g_array_new(TRUE, TRUE, sizeof(struct timeval));
41 // things to do on the beggining of function's work
44 g_debug("XDXF->%s() start counting time for function '%s()'.\n",
45 __FUNCTION__,message);
46 g_array_prepend_val(stack, actual_time);
47 gettimeofday(&g_array_index(stack, struct timeval, 0),NULL);
50 // we just want to end some timer - print some information
53 gettimeofday(&actual_time,NULL);
54 last_time = g_array_index(stack, struct timeval, 0);
55 g_array_remove_index(stack, 0);
57 if (actual_time.tv_usec < last_time.tv_usec) {
58 int nsec = (last_time.tv_usec -
59 actual_time.tv_usec) / 1000000 + 1;
60 last_time.tv_usec -= 1000000 * nsec;
61 last_time.tv_sec += nsec;
63 if (actual_time.tv_usec - last_time.tv_usec > 1000000) {
64 int nsec = (last_time.tv_usec -
65 actual_time.tv_usec) / 1000000;
66 last_time.tv_usec += 1000000 * nsec;
67 last_time.tv_sec -= nsec;
69 result.tv_sec = actual_time.tv_sec - last_time.tv_sec;
70 result.tv_usec = actual_time.tv_usec - last_time.tv_usec;
71 seconds = (((double)(result.tv_usec)) / 1e6) +
72 ((double)(result.tv_sec));
74 g_debug("XDXF->%s() function \'%s()\' was working for: %g [s] "
78 ((long)(result.tv_sec*1e6)+(result.tv_usec)));
79 // stack is empty so we delete everything
82 g_array_free(stack, TRUE);
91 /** this function handles signals from dbus; it is called
92 when there are any messages from other modules
94 * @param error - error message recived from DBUS
95 * @param words - array with recived data structure
96 * @param user_data - pointer to data structure
99 void ws_gui_signal_hander (GError *error, GArray *words, gpointer user_data)
101 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
102 osso_rpc_t osss_data;
103 osss_data = g_array_index (words, osso_rpc_t, 0);
104 switch(osss_data.value.i)
106 case WS_DBUS_ERROR_ENGINE_NOT_FOUND:
108 ws_gui_app->ws_message_dialog =
109 gtk_message_dialog_new(
110 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
111 GTK_DIALOG_DESTROY_WITH_PARENT,
114 _("ws_ni_error_occured"));
115 gtk_widget_show_all(ws_gui_app->ws_message_dialog);
117 g_signal_connect_swapped(
118 GTK_OBJECT (ws_gui_app->ws_message_dialog),
120 G_CALLBACK (gtk_main_quit),
125 case WS_DBUS_ERROR_FILE_NOT_FOUND:
127 ws_gui_app->ws_message_dialog =
128 gtk_message_dialog_new(
129 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
130 GTK_DIALOG_DESTROY_WITH_PARENT,
133 _("ws_ni_no_dictionary_available"));
135 gtk_widget_show_all(ws_gui_app->ws_message_dialog);
138 tmp = g_array_new(TRUE, TRUE, sizeof(gchar*));
139 gtk_list_store_clear(
140 ws_gui_app->ws_gui_w_list->ws_gui_store);
141 ws_gui_app->ws_gui_w_list->ws_gui_model =
142 create_and_fill_model(tmp, ws_gui_app);
143 ws_gui_fill_html(" ", ws_gui_app);
144 ws_gui_app->html_flag = FALSE;
146 gtk_widget_set_sensitive(
147 GTK_WIDGET(ws_gui_app->ws_gui_hildon_find_toolbar),
149 gtk_widget_set_sensitive(
150 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_search),
154 GTK_DIALOG(ws_gui_app->ws_message_dialog))
158 ws_gui_app->ws_message_dialog);
163 case WS_DBUS_INFO_CACHING:
165 ws_gui_app->ws_gui_banner_caching =
166 hildon_banner_show_progress(
167 GTK_WIDGET(ws_gui_app->ws_gui_hildon_window),
170 ws_gui_app->caching_flag = TRUE;
171 hildon_banner_set_fraction(
172 HILDON_BANNER(ws_gui_app->ws_gui_banner_caching),
174 gtk_widget_set_sensitive(
175 GTK_WIDGET(ws_gui_app->ws_gui_hildon_find_toolbar),
177 gtk_widget_set_sensitive(
178 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_search),
184 case WS_DBUS_INFO_CACHING_FINISHED:
187 GTK_WIDGET(ws_gui_app->ws_gui_banner_caching));
188 ws_gui_app->caching_flag = FALSE;
189 gtk_widget_set_sensitive(
190 GTK_WIDGET(ws_gui_app->ws_gui_hildon_find_toolbar),
192 gtk_widget_set_sensitive(
193 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_search),
199 case WS_DBUS_ERROR_DICTIONARY_NOT_LOAD:
201 if (ws_gui_app->ws_gui_history_cur_pos >= 0 &&
202 ws_gui_app->ws_gui_history_cur_pos <=HISTORY_LEN)
204 g_array_remove_index(ws_gui_app->ws_gui_history,
205 ws_gui_app->ws_gui_history_cur_pos);
208 ws_gui_app->ws_message_dialog = gtk_message_dialog_new(
209 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
210 GTK_DIALOG_DESTROY_WITH_PARENT,
213 _("ws_ni_dictionary_unavailable"));
214 gtk_widget_show_all(ws_gui_app->ws_message_dialog);
216 GTK_DIALOG(ws_gui_app->ws_message_dialog))
219 gtk_widget_destroy(ws_gui_app->ws_message_dialog);
224 case WS_DBUS_BOOKMARKS_ADDED_OK:
226 gtk_infoprint(GTK_WINDOW(
227 ws_gui_app->ws_gui_hildon_window),
228 _("ws_ni_bookmark_added"));
232 case WS_DBUS_BOOKMARKS_REMOVED_OK:
234 gtk_infoprint(GTK_WINDOW(
235 ws_gui_app->ws_gui_hildon_window),
236 _("ws_ni_bookmark_removed"));
240 case WS_DBUS_BOOKMARKS_ADDED_FAIL:
242 gtk_infoprint(GTK_WINDOW(
243 ws_gui_app->ws_gui_hildon_window),
244 _("ws_ni_bookmark_not_added"));
248 case WS_DBUS_BOOKMARKS_REMOVED_FAIL:
250 gtk_infoprint(GTK_WINDOW(
251 ws_gui_app->ws_gui_hildon_window),
252 _("ws_ni_bookmark_not_removed"));
256 case WS_DBUS_LOAD_BOOKMARK_FAILED:
258 gtk_widget_set_sensitive(
259 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_bookmarks),
261 ws_gui_app->bookmark_avail = FALSE;
263 ws_gui_app->ws_message_dialog =
264 gtk_message_dialog_new(
265 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
266 GTK_DIALOG_DESTROY_WITH_PARENT,
269 _("ws_ni_bookmarks_unavailable"));
272 GTK_DIALOG(ws_gui_app->ws_message_dialog))
276 ws_gui_app->ws_message_dialog);
284 /** this function handles signals from dbus; it is called when progress bar
285 status has been changed
287 * @param error - error message recived from DBUS
288 * @param words - array with recived data structure
289 * @param user_data - pointer to data structure
292 void ws_dbus_progress_bar(GError *error, GArray *words, gpointer user_data)
294 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
295 osso_rpc_t osss_data;
296 osss_data = g_array_index (words, osso_rpc_t, 0);
297 double progress = osss_data.value.d;
298 if (ws_gui_app->caching_flag == TRUE)
300 hildon_banner_set_fraction(
301 HILDON_BANNER(ws_gui_app->ws_gui_banner_caching),
306 /** this function handles signal from dbus and transfer recived
307 (found in a dictionary) words to the words list
309 * @param error - error message recived from DBUS
310 * @param words - array with recived data structure
311 * @param user_data - pointer to data structure
314 void ws_gui_dbus_return_words (GError *error, GArray *words, gpointer user_data)
316 timer(TIMER_START, (gchar*)__FUNCTION__);
320 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
323 tmp = g_array_new(TRUE, TRUE, sizeof(gchar*));
326 for (i=0;i<words->len;++i)
328 data = g_array_index (words, osso_rpc_t, i);
329 tmp_word = g_strconcat(data.value.s,NULL);
330 g_array_append_val(tmp, tmp_word);
333 g_assert(ws_gui_app->ws_gui_banner);
334 gtk_widget_hide(GTK_WIDGET(ws_gui_app->ws_gui_banner));
335 //g_signal_handler_unblock(G_OBJECT(ws_gui_app->ws_gui_w_list->ws_gui_selection), 263);
337 ws_gui_app->ws_gui_banner_flag = FALSE;
338 gtk_widget_set_sensitive(
339 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_stop),
341 gtk_widget_set_sensitive(
342 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_stop),
344 gtk_list_store_clear(ws_gui_app->ws_gui_w_list->ws_gui_store);
346 ws_gui_app->ws_gui_w_list->ws_gui_model =
347 create_and_fill_model(tmp, ws_gui_app);
349 if (ws_gui_app->history_flag == TRUE)
351 gtk_tree_model_get_iter_from_string
353 ws_gui_app->ws_gui_w_list->ws_gui_model),
354 &ws_gui_app->ws_gui_w_list->ws_gui_iter,
355 g_array_index(ws_gui_app->ws_gui_history_iter,
357 ws_gui_app->ws_gui_history_cur_pos));
359 gtk_tree_selection_select_iter(
360 ws_gui_app->ws_gui_w_list->ws_gui_selection,
361 &ws_gui_app->ws_gui_w_list->ws_gui_iter);
363 ws_gui_app->history_flag = FALSE;
364 ws_gui_fill_html(format_html(data.value.s, ws_gui_app), ws_gui_app);
365 ws_gui_app->html_flag = TRUE;
370 gtk_infoprint(GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
371 _("ws_ni_no_words_found"));
373 ws_gui_app->history_mode = 0;
375 ws_gui_fill_html(" ", ws_gui_app);
376 ws_gui_app->html_flag = FALSE;
377 g_free(ws_gui_app->last_word);
378 ws_gui_app->last_word = NULL;
382 timer(TIMER_STOP, (gchar*)__FUNCTION__);
385 /** this function handles signal from dbus and send recived data to
388 * @param error - error message recived from DBUS
389 * @param words - array with recived data structure
390 * @param user_data - pointer to data structure
393 void ws_gui_dbus_return_translation (GError *error,
397 //timer(TIMER_START, (gchar*)__FUNCTION__);
398 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
402 data = g_array_index (words, osso_rpc_t, 0);
403 //gtk_html_zoom_reset(GTK_HTML(ws_gui_app->ws_gui_html));
404 ws_gui_fill_html(format_html(data.value.s, ws_gui_app), ws_gui_app);
405 ws_gui_app->html_flag = TRUE;
406 //timer(TIMER_STOP, (gchar*)__FUNCTION__);
411 * this function allows to free allocated memory
413 * @param user_data - pointer to data structure
415 void ws_gui_free_memory(gpointer user_data)
417 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
418 g_array_free(ws_gui_app->ws_gui_history, TRUE);
419 pango_font_description_free(ws_gui_app->p);
420 g_free(ws_gui_app->last_word);
421 g_free(ws_gui_app->ws_gui_w_list);
422 g_free(ws_gui_app->ws_gui_menu);
426 /** this function handle press signals (keyboard)
430 * @param user_data - ponter to data structure
431 * @return TRUE to stop other handlers from being invoked for the event.
432 FALSE to propagate the event further.
434 gboolean hildon_key_press_listener (GtkWidget * widget,
435 GdkEventKey * keyevent,
438 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
440 switch ((guint)(keyevent->keyval)) {
441 case HILDON_HARDKEY_UP:
443 gtk_container_set_focus_vadjustment(
444 GTK_CONTAINER(ws_gui_app->ws_gui_scrolledwindow_left),
445 gtk_scrolled_window_get_vadjustment(
447 ws_gui_app->ws_gui_scrolledwindow_left)));
448 ws_gui_app->v_new_value =
449 gtk_adjustment_get_value(
451 ws_gui_app->ws_gui_vadj)) - ws_gui_app->v_delta;
452 if (ws_gui_app->v_new_value >
453 ws_gui_app->ws_gui_vadj->lower)
455 gtk_adjustment_set_value(
456 GTK_ADJUSTMENT(ws_gui_app->ws_gui_vadj),
457 ws_gui_app->v_new_value);
463 case HILDON_HARDKEY_DOWN:
465 gtk_container_set_focus_vadjustment(
466 GTK_CONTAINER(ws_gui_app->ws_gui_scrolledwindow_left),
467 gtk_scrolled_window_get_vadjustment(
469 ws_gui_app->ws_gui_scrolledwindow_left)));
470 ws_gui_app->v_new_value = gtk_adjustment_get_value(
471 GTK_ADJUSTMENT(ws_gui_app->ws_gui_vadj))
472 + ws_gui_app->v_delta;
474 if (ws_gui_app->v_new_value <
475 (ws_gui_app->ws_gui_vadj->upper -
476 ws_gui_app->ws_gui_vadj->page_size))
478 gtk_adjustment_set_value(
479 GTK_ADJUSTMENT(ws_gui_app->ws_gui_vadj),
480 ws_gui_app->v_new_value);
482 /*if (gtk_tree_model_iter_next(
483 ws_gui_app->ws_gui_w_list->ws_gui_model, &ws_gui_app->ws_gui_w_list->ws_gui_iter) == TRUE)
485 gtk_tree_selection_select_iter(
486 ws_gui_app->ws_gui_w_list->ws_gui_selection,
487 &ws_gui_app->ws_gui_w_list->ws_gui_iter);
492 case HILDON_HARDKEY_LEFT:
494 gtk_container_set_focus_hadjustment(
495 GTK_CONTAINER(ws_gui_app->ws_gui_scrolledwindow_left),
496 gtk_scrolled_window_get_hadjustment(
498 ws_gui_app->ws_gui_scrolledwindow_left)));
500 ws_gui_app->h_new_value = gtk_adjustment_get_value(
501 GTK_ADJUSTMENT(ws_gui_app->ws_gui_hadj))
502 - ws_gui_app->h_delta;
504 if (ws_gui_app->h_new_value >
505 ws_gui_app->ws_gui_hadj->lower)
507 gtk_adjustment_set_value(
508 GTK_ADJUSTMENT(ws_gui_app->ws_gui_hadj),
509 ws_gui_app->h_new_value);
514 case HILDON_HARDKEY_RIGHT:
516 gtk_container_set_focus_hadjustment(
517 GTK_CONTAINER(ws_gui_app->ws_gui_scrolledwindow_left),
518 gtk_scrolled_window_get_hadjustment(
520 ws_gui_app->ws_gui_scrolledwindow_left)));
522 ws_gui_app->h_new_value = gtk_adjustment_get_value(
523 GTK_ADJUSTMENT(ws_gui_app->ws_gui_hadj))
524 + ws_gui_app->h_delta;
526 if (ws_gui_app->h_new_value <
527 (ws_gui_app->ws_gui_hadj->upper -
528 ws_gui_app->ws_gui_hadj->page_size))
530 gtk_adjustment_set_value(
531 GTK_ADJUSTMENT(ws_gui_app->ws_gui_hadj),
532 ws_gui_app->h_new_value);
537 case HILDON_HARDKEY_SELECT:
538 ws_gui_search(NULL, ws_gui_app);
541 case HILDON_HARDKEY_FULLSCREEN:
542 ws_gui_full_screen(NULL, ws_gui_app);
545 case HILDON_HARDKEY_INCREASE:
546 ws_gui_html_zoom_in(NULL, ws_gui_app);
549 case HILDON_HARDKEY_DECREASE:
550 ws_gui_html_zoom_out(NULL, ws_gui_app);
553 case HILDON_HARDKEY_ESC:
554 ws_gui_search_stop(NULL, ws_gui_app);
564 /** this function allow to hide words list using menu item from application menu
566 * @param checkmenuitem - the object which received the signal
567 * @param user_data - user data set when the signal handler was connected
570 void ws_gui_words_list_hide_from_menu(GtkCheckMenuItem *checkmenuitem,
573 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
574 if (gtk_check_menu_item_get_active(
575 GTK_CHECK_MENU_ITEM(ws_gui_app->ws_gui_menu->ws_gui_menu_hide_list)))
577 gtk_widget_hide(ws_gui_app->ws_gui_scrolledwindow_left);
578 gtk_toggle_tool_button_set_active(
579 GTK_TOGGLE_TOOL_BUTTON(ws_gui_app->ws_gui_toobar_button_hide),
581 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
582 ws_gui_app->ws_gui_menu->ws_gui_menu_hide_list),
587 gtk_widget_show(ws_gui_app->ws_gui_scrolledwindow_left);
588 gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(
589 ws_gui_app->ws_gui_toobar_button_hide),
591 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
592 ws_gui_app->ws_gui_menu->ws_gui_menu_hide_list),
597 /** this function allow to hide words list using toggle button placed in
600 * @param toolbar - the object which received the signal
601 * @param user_data - user data set when the signal handler was connected
604 void ws_gui_words_list_hide(GtkToggleButton *togglebutton, gpointer user_data)
606 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
608 if (gtk_toggle_tool_button_get_active(
609 GTK_TOGGLE_TOOL_BUTTON(ws_gui_app->ws_gui_toobar_button_hide)))
611 gtk_widget_hide(ws_gui_app->ws_gui_scrolledwindow_left);
612 gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(
613 ws_gui_app->ws_gui_toobar_button_hide),
615 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
616 ws_gui_app->ws_gui_menu->ws_gui_menu_hide_list),
621 gtk_widget_show(ws_gui_app->ws_gui_scrolledwindow_left);
622 gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(
623 ws_gui_app->ws_gui_toobar_button_hide),
625 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
626 ws_gui_app->ws_gui_menu->ws_gui_menu_hide_list),
631 /** add word to the history
633 * @param new_word - word which is going to be append to the history array
634 * @param user_data - user data set when the signal handler was connected
637 void ws_gui_history_add(char *new_word, gpointer user_data)
639 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
641 if (ws_gui_app->history_mode == 0)
646 gchar *tmp_last_searched;
647 gchar *tmp_iter = NULL;
648 gchar *previous_word = " ";
650 if (ws_gui_app->ws_gui_history_cur_pos > -1 &&
651 g_array_index(ws_gui_app->ws_gui_history,
653 ws_gui_app->ws_gui_history_cur_pos) != NULL)
655 previous_word = NULL;
656 previous_word = g_array_index(
657 ws_gui_app->ws_gui_history,
659 ws_gui_app->ws_gui_history_cur_pos);
662 i = ws_gui_app->ws_gui_history_cur_pos + 1;
663 gchar *tmp = g_array_index(ws_gui_app->ws_gui_history,
666 tmp_iter = gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL(ws_gui_app->ws_gui_w_list->ws_gui_model), &ws_gui_app->ws_gui_w_list->ws_gui_iter);
668 if (previous_word != NULL && strcmp(previous_word, new_word) != 0)
672 g_array_remove_index(
673 ws_gui_app->ws_gui_history,
675 g_array_remove_index(
676 ws_gui_app->ws_gui_history_list,
678 g_array_remove_index(
679 ws_gui_app->ws_gui_history_iter,
683 ws_gui_app->ws_gui_history,
689 ws_gui_app->ws_gui_history_cur_pos ++;
691 tmp_word = g_strdup(new_word);
692 tmp_last_searched = g_strdup(ws_gui_app->last_searched);
694 g_array_append_val(ws_gui_app->ws_gui_history, tmp_word);
695 g_array_append_val(ws_gui_app->ws_gui_history_list,
697 g_array_append_val(ws_gui_app->ws_gui_history_iter, tmp_iter);
700 if(ws_gui_app->ws_gui_history->len > HISTORY_LEN)
702 g_array_remove_index(ws_gui_app->ws_gui_history, 0);
703 g_array_remove_index(ws_gui_app->ws_gui_history_list,
705 g_array_remove_index(ws_gui_app->ws_gui_history_iter,
708 ws_gui_app->ws_gui_history_cur_pos--;
712 tmp = g_array_index(ws_gui_app->ws_gui_history, gchar*, i);
715 ws_gui_check_history(ws_gui_app);
718 /** display previously choosen word (previous from the history array)
719 if avaible, sets current position in the history array
721 * @param button - button which recived a signal
722 * @param user_data - user data set when the signal handler was connected
725 void ws_gui_history_back(GtkButton *button, gpointer user_data)
727 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
729 ws_gui_app->history_flag = TRUE;
731 if (ws_gui_app->ws_gui_history_cur_pos > 0)
733 ws_gui_app->ws_gui_history_cur_pos =
734 ws_gui_app->ws_gui_history_cur_pos - 1;
736 g_object_set(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
738 (g_array_index(ws_gui_app->ws_gui_history_list,
740 ws_gui_app->ws_gui_history_cur_pos)),
744 ws_dbus_client_find_word (ws_gui_app->dbus_data,
745 g_array_index(ws_gui_app->ws_gui_history_list,
747 ws_gui_app->ws_gui_history_cur_pos)
753 gtk_widget_set_sensitive (
754 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_back),
756 gtk_widget_set_sensitive(
757 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_find_prev),
761 ws_gui_check_history(ws_gui_app);
765 /** display choosen word, next in the history array (if avaible),
766 sets current position in the history array
768 * @param button - button which recived a signal
769 * @param user_data - user data set when the signal handler was connected
772 void ws_gui_history_next(GtkButton *button, gpointer user_data)
774 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
776 ws_gui_app->history_flag = TRUE;
778 gchar *tmp = g_array_index(ws_gui_app->ws_gui_history,
780 ws_gui_app->ws_gui_history_cur_pos+1);
782 if ((ws_gui_app->ws_gui_history_cur_pos < HISTORY_LEN-1)
785 ws_gui_app->ws_gui_history_cur_pos =
786 ws_gui_app->ws_gui_history_cur_pos + 1;
788 g_object_set(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
790 (g_array_index(ws_gui_app->ws_gui_history_list,
792 ws_gui_app->ws_gui_history_cur_pos)),
795 ws_dbus_client_find_word(ws_gui_app->dbus_data,
796 g_array_index(ws_gui_app->ws_gui_history_list,
798 ws_gui_app->ws_gui_history_cur_pos)
803 gtk_widget_set_sensitive(
804 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_forward),
806 gtk_widget_set_sensitive(
807 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_find_next),
811 ws_gui_check_history(ws_gui_app);
814 /** check current position in the history array and sets sensitivity of buttons
815 / menu items, depends on availablity of words in the history
817 * @param user_data - user data set when the signal handler was connected
820 void ws_gui_check_history(gpointer user_data)
822 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
824 gchar *tmp = g_array_index(ws_gui_app->ws_gui_history,
826 ws_gui_app->ws_gui_history_cur_pos+1);
828 if ((ws_gui_app->ws_gui_history_cur_pos+1 < HISTORY_LEN)
831 gtk_widget_set_sensitive(
832 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_forward),
834 gtk_widget_set_sensitive(
835 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_find_next),
840 gtk_widget_set_sensitive(
841 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_forward),
843 gtk_widget_set_sensitive(
844 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_find_next),
848 tmp = g_array_index(ws_gui_app->ws_gui_history,
850 ws_gui_app->ws_gui_history_cur_pos-1);
851 if ((ws_gui_app->ws_gui_history_cur_pos > 0) && (tmp != NULL))
853 gtk_widget_set_sensitive(
854 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_back),
856 gtk_widget_set_sensitive(
857 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_find_prev),
862 gtk_widget_set_sensitive (
863 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_back),
865 gtk_widget_set_sensitive(
866 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_find_prev),
871 /** create TreeView Model, which allows to display words list
873 * @param words_list - array with words(found in a dictionary), recived from
875 * @param user_data - user data set when the signal handler was connected
878 GtkTreeModel * create_and_fill_model (GArray *words_list, gpointer user_data)
880 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
882 gchar *tmp = g_strdup(g_array_index(words_list, gchar*, i));
885 valid = gtk_tree_model_get_iter_first(
886 GTK_TREE_MODEL(ws_gui_app->ws_gui_w_list->ws_gui_store),
887 &ws_gui_app->ws_gui_w_list->ws_gui_iter);
889 /* Append a row and fill in some data */
892 gtk_list_store_append (ws_gui_app->ws_gui_w_list->ws_gui_store,
893 &ws_gui_app->ws_gui_w_list->ws_gui_iter);
895 gtk_list_store_set (ws_gui_app->ws_gui_w_list->ws_gui_store,
896 &ws_gui_app->ws_gui_w_list->ws_gui_iter,
900 tmp = g_strdup(g_array_index(words_list, gchar*, i));
903 tmp = g_strdup(g_array_index(words_list, gchar*, 0));
905 if (tmp != NULL && ws_gui_app->history_flag == FALSE)
907 ws_dbus_client_find_translation(ws_gui_app->dbus_data, tmp);
908 ws_gui_history_add(tmp, ws_gui_app);
909 g_free(ws_gui_app->last_word);
910 ws_gui_app->last_word = NULL;
911 ws_gui_app->last_word = g_strdup (tmp);
914 return GTK_TREE_MODEL(ws_gui_app->ws_gui_w_list->ws_gui_store);
917 /** create TreeView and TreeModel using create_and_fill_model() function;
918 it is necessary to display found words in a words list;
920 * @param words_list - array with words(found in a dictionary),
922 * @param user_data - user data set when the signal handler was connected
925 GtkWidget * create_view_and_model (GArray *words_list, gpointer user_data)
927 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
929 ws_gui_app->ws_gui_w_list->ws_gui_view = gtk_tree_view_new ();
931 ws_gui_app->ws_gui_w_list->ws_gui_renderer=gtk_cell_renderer_text_new();
932 gtk_tree_view_insert_column_with_attributes(
933 GTK_TREE_VIEW (ws_gui_app->ws_gui_w_list->ws_gui_view),
936 ws_gui_app->ws_gui_w_list->ws_gui_renderer,
940 ws_gui_app->ws_gui_w_list->ws_gui_model =
941 create_and_fill_model(words_list, ws_gui_app);
943 gtk_tree_view_set_model(
944 GTK_TREE_VIEW (ws_gui_app->ws_gui_w_list->ws_gui_view),
945 ws_gui_app->ws_gui_w_list->ws_gui_model);
946 g_object_unref (ws_gui_app->ws_gui_w_list->ws_gui_model);
948 return ws_gui_app->ws_gui_w_list->ws_gui_view;
951 /** handle signal from words list, get selected word and calls
952 'find translation' function
954 * @param selection - the object which received the signal
955 * @param user_data - user data set when the signal handler was connected
958 void ws_gui_tree_selection_changed(GtkTreeSelection *selection,
961 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
963 ws_gui_app->ws_gui_w_list->ws_gui_selection = selection;
965 if (gtk_tree_selection_get_selected(selection,
966 &ws_gui_app->ws_gui_w_list->ws_gui_model,
967 &ws_gui_app->ws_gui_w_list->ws_gui_iter))
969 gtk_tree_model_get(ws_gui_app->ws_gui_w_list->ws_gui_model,
970 &ws_gui_app->ws_gui_w_list->ws_gui_iter,
975 ws_dbus_client_find_translation(ws_gui_app->dbus_data, string);
977 g_free(ws_gui_app->last_word);
978 ws_gui_app->last_word = NULL;
979 ws_gui_app->last_word = g_strdup (string);
982 if (string != NULL && ws_gui_app->history_flag == FALSE)
984 ws_gui_history_add(string, ws_gui_app);
990 /** switch application between fun screen and normal mode
992 * @param menuitem - object which recived the signal
993 * @param user_data - user data set when the signal handler was connected
996 void ws_gui_full_screen(GtkMenuItem *menuitem, gpointer user_data)
999 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1000 if (ws_gui_app->ws_gui_full_screen_flag == FALSE) {
1002 gtk_window_fullscreen(
1003 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window));
1004 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
1005 ws_gui_app->ws_gui_menu->ws_gui_menu_full_screen),
1007 ws_gui_app->ws_gui_full_screen_flag = TRUE;
1008 gtk_infoprint(GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1009 _("ws_ib_fullscreen_on"));
1013 gtk_window_unfullscreen(
1014 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window));
1015 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
1016 ws_gui_app->ws_gui_menu->ws_gui_menu_full_screen),
1018 ws_gui_app->ws_gui_full_screen_flag = FALSE;
1019 gtk_infoprint(GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1020 _("ws_ib_fullscreen_off"));
1024 /** search for selected text in a dictionary
1026 * @param menuitem - object which recived the signal
1027 * @param user_data - user data set when the signal handler was connected
1030 void ws_gui_popup_search(GtkMenuItem *menuitem, gpointer user_data)
1032 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1034 ws_gui_app->ws_gui_clipboard_primary =
1035 gtk_widget_get_clipboard(ws_gui_app->ws_gui_html,
1036 GDK_SELECTION_PRIMARY);
1037 temp = gtk_clipboard_wait_for_text(
1038 ws_gui_app->ws_gui_clipboard_primary);
1041 if (temp != NULL || strcmp(temp, " "))
1043 g_object_set(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1047 ws_dbus_client_find_word (ws_gui_app->dbus_data, temp);
1051 hildon_banner_show_information(
1052 GTK_WIDGET(ws_gui_app->ws_gui_hildon_window),
1054 _("ws_ni_no_text_selected"));
1058 /** select whole text in the translation (html) area
1060 * @param menuitem - object which recived the signal
1061 * @param user_data - user data set when the signal handler was connected
1064 void ws_gui_html_select_all(GtkMenuItem *menuitem, gpointer user_data)
1066 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1067 gtk_html_select_all(GTK_HTML(ws_gui_app->ws_gui_html));
1070 /** copy selected text to the clipoard from context popup menu
1072 * @param menuitem - object which recived the signal
1073 * @param user_data - user data set when the signal handler was connected
1076 void ws_gui_html_copy(GtkMenuItem *menuitem, gpointer user_data)
1078 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1079 gtk_html_copy(GTK_HTML(ws_gui_app->ws_gui_html));
1080 gtk_infoprint(GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1084 /** paste copied text into toolbar entry
1086 * @param menuitem - object which recived the signal
1087 * @param user_data - user data set when the signal handler was connected
1090 void ws_gui_html_paste(GtkMenuItem *menuitem, gpointer user_data)
1092 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1096 temp = gtk_clipboard_wait_for_text(ws_gui_app->ws_gui_clipboard);
1097 g_object_get(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1101 temp = g_strconcat(temp2, temp, NULL);
1102 temp = g_strdelimit(temp, "\n", ' ');
1103 g_object_set(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1107 gtk_infoprint(GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1111 /** zoom in text in translation (html) area
1113 * @param menuitem - object which recived the signal
1114 * @param user_data - user data set when the signal handler was connected
1117 void ws_gui_html_zoom_in(GtkMenuItem *menuitem, gpointer user_data)
1119 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1120 ws_gui_app->zoom = ws_gui_app->zoom + ZOOM_STEP;
1121 if (ws_gui_app->zoom > ZOOM_MAX)
1123 ws_gui_app->zoom = ws_gui_app->zoom - ZOOM_STEP;
1124 gtk_infoprint(GTK_WINDOW(
1125 ws_gui_app->ws_gui_hildon_window),
1126 _("ws_ib_max_zoom"));
1130 gtk_html_set_magnification(GTK_HTML(ws_gui_app->ws_gui_html),
1133 if ((WS_GUI_ABS(ws_gui_app->zoom - ZOOM_DEFAULT)) < 0.000001)
1135 gtk_infoprint(GTK_WINDOW(
1136 ws_gui_app->ws_gui_hildon_window),
1137 _("ws_ib_zoom_default"));
1141 gtk_infoprint(GTK_WINDOW(
1142 ws_gui_app->ws_gui_hildon_window),
1143 _("ws_ib_zoom_in"));
1148 /** zoom out text in translation (html) area
1150 * @param menuitem - object which recived the signal
1151 * @param user_data - user data set when the signal handler was connected
1154 void ws_gui_html_zoom_out(GtkMenuItem *menuitem, gpointer user_data)
1156 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1157 ws_gui_app->zoom = ws_gui_app->zoom - ZOOM_STEP;
1158 if (ws_gui_app->zoom < ZOOM_MIN)
1160 ws_gui_app->zoom = ws_gui_app->zoom + ZOOM_STEP;
1161 gtk_infoprint(GTK_WINDOW(
1162 ws_gui_app->ws_gui_hildon_window),
1163 _("ws_ib_min_zoom"));
1167 gtk_html_set_magnification(GTK_HTML(ws_gui_app->ws_gui_html),
1170 if ((WS_GUI_ABS(ws_gui_app->zoom - ZOOM_DEFAULT)) < 0.000001)
1172 gtk_infoprint(GTK_WINDOW(
1173 ws_gui_app->ws_gui_hildon_window),
1174 _("ws_ib_zoom_default"));
1178 gtk_infoprint(GTK_WINDOW(
1179 ws_gui_app->ws_gui_hildon_window),
1180 _("ws_ib_zoom_out"));
1185 /** start searching, send typed word to DBUS and query for words
1187 * @param widget - object which recived the signal
1188 * @param user_data - user data set when the signal handler was connected
1191 void ws_gui_search(GtkWidget * widget, gpointer user_data)
1193 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1195 if (ws_gui_app->ws_gui_banner_flag == FALSE)
1197 gchar* ws_gui_text = NULL;
1198 g_object_get(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1203 if (ws_gui_app->bookmark_mode == FALSE)
1205 g_free(ws_gui_app->last_searched);
1206 ws_gui_app->last_searched = NULL;
1207 ws_gui_app->last_searched = g_strdup(ws_gui_text);
1210 g_strstrip(ws_gui_text);
1211 if (strlen(ws_gui_text) != 0)
1213 gtk_widget_show(ws_gui_app->ws_gui_banner);
1215 gtk_widget_set_sensitive(
1216 GTK_WIDGET(ws_gui_app->ws_gui_toobar_button_stop),
1218 gtk_widget_set_sensitive(
1219 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_stop),
1222 ws_gui_app->ws_gui_banner_flag = TRUE;
1223 ws_gui_fill_html(" ", ws_gui_app);
1224 ws_gui_app->html_flag = FALSE;
1225 ws_dbus_client_find_word (ws_gui_app->dbus_data, ws_gui_text);
1231 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1232 _("ws_ni_no_word_typed"));
1234 g_free(ws_gui_app->last_word);
1235 ws_gui_app->last_word=NULL;
1239 /** stop search process
1241 * @param button - object which recived the signal
1242 * @param user_data - user data set when the signal handler was connected
1245 void ws_gui_search_stop(GtkButton *button, gpointer user_data)
1247 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
1248 if (ws_gui_app->ws_gui_banner_flag == TRUE)
1250 gtk_widget_hide(GTK_WIDGET(ws_gui_app->ws_gui_banner));
1251 ws_gui_app->ws_gui_banner_flag = FALSE;
1252 ws_dbus_notify(ws_gui_app->dbus_data, WS_DBUS_INFO_STOP_SEARCH);
1254 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1255 _("ws_ni_search_aborted"));
1259 /** this function is called just before closing application;
1260 it sends signal to DBUS and destroys it;
1262 * @param widget - object which recived the signal
1264 * @param user_data - user data set when the signal handler was connected
1267 void ws_gui_on_exit (GtkWidget *widget, GdkEvent *event, gpointer user_data)
1269 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
1270 ws_gui_app->bookmark_mode = FALSE;
1271 ws_gui_set_bookmarks_sensitivity(ws_gui_app);
1272 g_timer_destroy(ws_gui_app->timer);
1273 ws_dbus_notify(ws_gui_app->dbus_data, WS_DBUS_INFO_TERMINATE);
1274 ws_dbus_destroy (ws_gui_app->dbus_data);
1275 ws_gui_free_memory(ws_gui_app);
1280 /** this function is called just before closing application,
1281 from application menu; it sends signal to DBUS and destroys it;
1283 * @param menuitem - object which recived the signal
1284 * @param user_data - user data set when the signal handler was connected
1287 void ws_gui_menu_quit(GtkMenuItem *menuitem, gpointer user_data)
1289 WSGuiApp* ws_gui_app = (WSGuiApp *)user_data;
1290 ws_gui_app->bookmark_mode = FALSE;
1291 ws_gui_set_bookmarks_sensitivity(ws_gui_app);
1292 g_timer_destroy(ws_gui_app->timer);
1293 ws_dbus_notify(ws_gui_app->dbus_data, WS_DBUS_INFO_TERMINATE);
1294 ws_dbus_destroy (ws_gui_app->dbus_data);
1295 ws_gui_free_memory(ws_gui_app);
1300 /** fill translation area with text (html) recived from DBUS
1302 * @param html_context - text which is going to be displayed; it should be html
1303 * @param user_data - user data set when the function was called
1306 void ws_gui_fill_html(char *html_context, gpointer user_data)
1308 WSGuiApp* ws_gui_app = (WSGuiApp*)user_data;
1309 gtk_html_set_editable (GTK_HTML(ws_gui_app->ws_gui_html), FALSE);
1311 gtk_html_load_from_string(GTK_HTML(ws_gui_app->ws_gui_html),
1316 /** read adjustment of left scrollwindow, which is necessary to navigate with
1317 arrow keys inside words list
1319 * @param user_data - user data set when the signal handler was connected
1322 void ws_gui_read_adjustment(gpointer user_data)
1324 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1326 ws_gui_app->ws_gui_hadj =
1327 gtk_scrolled_window_get_hadjustment(
1328 GTK_SCROLLED_WINDOW(
1329 ws_gui_app->ws_gui_scrolledwindow_left));
1331 ws_gui_app->h_delta = (ws_gui_app->ws_gui_hadj->upper -
1332 ws_gui_app->ws_gui_hadj->lower)/SCROLL_STEP_H;
1334 ws_gui_app->ws_gui_vadj = gtk_scrolled_window_get_vadjustment(
1335 GTK_SCROLLED_WINDOW(ws_gui_app->ws_gui_scrolledwindow_left));
1337 ws_gui_app->v_delta = (ws_gui_app->ws_gui_vadj->upper -
1338 ws_gui_app->ws_gui_vadj->lower)/SCROLL_STEP_V;
1339 ws_gui_app->v_new_value =
1340 gtk_adjustment_get_value(GTK_ADJUSTMENT(ws_gui_app->ws_gui_vadj)) +
1341 ws_gui_app->v_delta;
1343 gtk_container_set_focus_vadjustment(
1344 GTK_CONTAINER(ws_gui_app->ws_gui_scrolledwindow_left),
1345 gtk_scrolled_window_get_vadjustment(
1346 GTK_SCROLLED_WINDOW(ws_gui_app->ws_gui_scrolledwindow_left)));
1350 /** allows to display image in html area
1352 * @param html - object which received a signal
1353 * @param url - url to the image
1354 * @param stream - html stream
1357 void ws_gui_url_requested (
1360 GtkHTMLStream *stream)
1364 if (url && !strncmp (url, "file:", 5)) {
1366 fd = open (url, O_RDONLY);
1370 buf = alloca (8192);
1371 while ((size = read (fd, buf, 8192)) > 0) {
1372 gtk_html_stream_write (stream, buf, size);
1374 gtk_html_stream_close(stream, size == -1
1375 ? GTK_HTML_STREAM_ERROR
1376 : GTK_HTML_STREAM_OK);
1383 gtk_html_stream_close (stream, GTK_HTML_STREAM_ERROR);
1386 /** handles button press event and examines what kind of event was it
1389 * @param widget - object which received a signal
1390 * @param event - type of event which has been performed
1391 * @param user_data - user data set when the signal handler was connected
1392 * @return TRUE to stop other handlers from being invoked for the event.
1393 FALSE to propagate the event further
1395 gboolean ws_gui_button_press(GtkWidget *widget,
1396 GdkEventButton *event,
1399 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1400 if (ws_gui_app->ws_gui_sel_flag == FALSE)
1402 if (event->type == GDK_2BUTTON_PRESS)
1404 ws_gui_app->ws_gui_double_click = TRUE;
1405 g_timer_stop(ws_gui_app->timer);
1406 g_timer_reset(ws_gui_app->timer);
1410 g_signal_stop_emission_by_name(G_OBJECT(
1411 ws_gui_app->ws_gui_html),
1412 "button-press-event");
1413 g_timer_start(ws_gui_app->timer);
1414 gtk_timeout_add((guint)(PRESS_TIME*1000),
1415 (GtkFunction)(ws_gui_show_popup),
1421 ws_gui_app->ws_gui_sel_flag = FALSE;
1427 /** handles button release event and examines whether 'click' or 'tap and hold'
1428 event it supposed to be
1430 * @param widget - object which received a signal
1431 * @param event - type of event which has been performed
1432 * @param user_data - user data set when the signal handler was connected
1433 * @return TRUE to stop other handlers from being invoked for the event.
1434 FALSE to propagate the event further
1436 gboolean ws_gui_button_release (GtkWidget *widget,
1437 GdkEventButton *event,
1440 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1441 gdouble tmp = g_timer_elapsed(ws_gui_app->timer, NULL);
1442 g_timer_stop(ws_gui_app->timer);
1443 g_timer_reset(ws_gui_app->timer);
1444 if (ws_gui_app->ws_gui_double_click == TRUE)
1446 ws_gui_app->ws_gui_double_click = FALSE;
1449 else if (tmp < PRESS_TIME)
1451 struct _GtkHTML *tmp = (struct _GtkHTML *)
1452 (ws_gui_app->ws_gui_html);
1453 html_engine_unselect_all(tmp->engine);
1459 /** displays popup menu if user holds a stylus more than PRESS_TIME seconds
1461 * @param user_data - user data set when the signal handler was connected
1464 guint ws_gui_show_popup (gpointer user_data)
1466 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1467 gdouble tmp = g_timer_elapsed(ws_gui_app->timer, NULL);
1468 if (tmp > PRESS_TIME)
1470 ws_gui_create_popup_menu(ws_gui_app);
1472 return (guint)(FALSE);
1476 /** checks clipboard content and sets sensitivity of widgets
1478 * @param widget - object which recived a signal
1479 * @param user_data - user data set when the signal handler was connected
1482 void ws_gui_check_clipboard (GtkWidget *widget, gpointer user_data)
1484 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1485 if (gtk_clipboard_wait_for_text(ws_gui_app->ws_gui_clipboard) != NULL)
1487 gtk_widget_set_sensitive(
1488 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_paste),
1493 gtk_widget_set_sensitive(
1494 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_paste),
1498 struct _GtkHTML *tmp = (struct _GtkHTML *)(ws_gui_app->ws_gui_html);
1500 if (html_engine_is_selection_active(tmp->engine) == TRUE)
1502 gtk_widget_set_sensitive(GTK_WIDGET
1503 (ws_gui_app->ws_gui_menu->ws_gui_menu_copy),
1508 gtk_widget_set_sensitive(GTK_WIDGET
1509 (ws_gui_app->ws_gui_menu->ws_gui_menu_copy),
1513 if (ws_gui_app->html_flag == FALSE)
1515 gtk_widget_set_sensitive(GTK_WIDGET
1516 (ws_gui_app->ws_gui_menu->ws_gui_menu_select_all),
1521 gtk_widget_set_sensitive(GTK_WIDGET
1522 (ws_gui_app->ws_gui_menu->ws_gui_menu_select_all),
1528 /** gets received string (with translation), formats it and sends it to be
1531 * @param received_string - content received from Manager
1532 * @param user_data - user data set when the function has been called
1535 gchar * format_html (gchar * received_string, gpointer user_data)
1537 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1540 str_final = g_string_new(received_string);
1541 str_tmp = g_string_new(received_string);
1545 ws_gui_app->raw_translation=g_string_erase(ws_gui_app->raw_translation,
1549 while (strstr(str_final->str, "<PATTERN_OPEN>") != NULL)
1551 tmp = strstr(str_final->str, "<PATTERN_OPEN>");
1552 str_final = g_string_erase(str_final,
1553 (long)(tmp - str_final->str),
1555 str_final = g_string_insert(str_final,
1556 (long)(tmp - str_final->str),
1557 "<html><head></head><body><center><table width=\"400px\"><tr>"
1558 "<td><table border=1 width=100%><tr>"
1559 "<th background=\"file:/usr/share/pixmaps/ws_top.png\">"
1560 "<img align=left src=\"file:/usr/share/pixmaps/"
1561 "engine_xdxf_icon.png\"><font color=\"#eeeeee\">");
1563 tmp2 = strstr(str_tmp->str, "<PATTERN_OPEN>");
1564 if (ws_gui_app->last_word != NULL)
1566 str_tmp = g_string_erase(str_tmp,
1567 (long)(tmp2 - str_tmp->str),
1568 14 + strlen(ws_gui_app->last_word));
1572 while (strstr(str_final->str, "<PATTERN_CLOSED>") != NULL)
1574 tmp = strstr(str_final->str, "<PATTERN_CLOSED>");
1575 str_final = g_string_erase(str_final,
1576 (long)(tmp - str_final->str),
1578 str_final = g_string_insert(str_final,
1579 (long)(tmp - str_final->str),
1580 "</font></th></tr></table>");
1582 tmp2 = strstr(str_tmp->str, "<PATTERN_CLOSED>");
1583 str_tmp = g_string_erase(str_tmp,
1584 (long)(tmp2 - str_tmp->str),
1588 while (strstr(str_final->str, "<TRANSLATION_OPEN>") != NULL)
1590 tmp = strstr(str_final->str, "<TRANSLATION_OPEN>");
1591 str_final = g_string_erase (str_final,
1592 (long)(tmp - str_final->str),
1594 str_final = g_string_insert (str_final,
1595 (long)(tmp - str_final->str),
1596 "<table border=1 width=100%><tr><td background=\"file:/usr/"
1597 "share/pixmaps/ws_tra.png\">");
1599 tmp2 = strstr(str_tmp->str, "<TRANSLATION_OPEN>");
1600 str_tmp = g_string_erase(str_tmp,
1601 (long)(tmp2 - str_tmp->str),
1605 while (strstr(str_final->str, "<TRANSLATION_CLOSED>") != NULL)
1607 tmp = strstr(str_final->str, "<TRANSLATION_CLOSED>");
1608 str_final = g_string_erase(str_final,
1609 (long)(tmp - str_final->str),
1611 str_final = g_string_insert(str_final,
1612 (long)(tmp - str_final->str),
1613 "</td></tr></table></center>");
1615 tmp2 = strstr(str_tmp->str, "<TRANSLATION_CLOSED>");
1616 str_tmp = g_string_erase(str_tmp,
1617 (long)(tmp2 - str_tmp->str),
1621 str_final = g_string_append(str_final,
1622 "</td></tr></table></body></html>");
1624 ws_gui_app->raw_translation = g_string_insert(
1625 ws_gui_app->raw_translation,
1629 return str_final->str;
1632 /** open bookmarks database
1634 * @param menuitem - object which recived the signal
1635 * @param user_data - user data set when the signal handler was connected
1638 void ws_gui_dictionary_open_bookmark(GtkMenuItem *menuitem, gpointer user_data)
1640 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1642 ws_gui_read_active_dictionaries(ws_gui_app);
1644 g_free(ws_gui_app->last_word);
1645 ws_gui_app->last_word = NULL;
1647 ws_gui_app->bookmark_mode = TRUE;
1648 ws_gui_set_bookmarks_sensitivity(ws_gui_app);
1649 g_object_set(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1653 ws_dbus_notify(ws_gui_app->dbus_data, WS_DBUS_BOOKMARK_MODE_ON);
1655 if(ws_gui_app->ws_gui_history->len >= 0)
1657 ws_gui_app->ws_gui_history = g_array_remove_range(
1658 ws_gui_app->ws_gui_history,
1660 ws_gui_app->ws_gui_history->len);
1661 ws_gui_app->ws_gui_history_list = g_array_remove_range(
1662 ws_gui_app->ws_gui_history_list,
1664 ws_gui_app->ws_gui_history_list->len);
1665 ws_gui_app->ws_gui_history_iter = g_array_remove_range(
1666 ws_gui_app->ws_gui_history_iter,
1668 ws_gui_app->ws_gui_history_iter->len);
1670 ws_gui_app->ws_gui_history_cur_pos = -1;
1673 ws_gui_check_history(ws_gui_app);
1675 ws_gui_fill_html(" ", ws_gui_app);
1676 ws_gui_app->html_flag = FALSE;
1677 //ws_dbus_client_find_word(ws_gui_app->dbus_data, "*");
1678 ws_gui_search(NULL, ws_gui_app);
1682 /** closes bookmarks database
1684 * @param menuitem - object which recived the signal
1685 * @param user_data - user data set when the signal handler was connected
1688 void ws_gui_dictionary_close_bookmark(GtkMenuItem *menuitem, gpointer user_data)
1690 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1692 ws_gui_read_active_dictionaries(ws_gui_app);
1694 g_free(ws_gui_app->last_word);
1695 ws_gui_app->last_word = NULL;
1697 ws_gui_app->bookmark_mode = FALSE;
1698 ws_gui_set_bookmarks_sensitivity(ws_gui_app);
1699 ws_dbus_notify(ws_gui_app->dbus_data, WS_DBUS_BOOKMARK_MODE_OFF);
1701 if(ws_gui_app->ws_gui_history->len >= 0)
1703 ws_gui_app->ws_gui_history = g_array_remove_range(
1704 ws_gui_app->ws_gui_history, 0, ws_gui_app->ws_gui_history->len);
1705 ws_gui_app->ws_gui_history_list = g_array_remove_range(
1706 ws_gui_app->ws_gui_history_list,
1708 ws_gui_app->ws_gui_history_list->len);
1709 ws_gui_app->ws_gui_history_iter = g_array_remove_range(
1710 ws_gui_app->ws_gui_history_iter,
1712 ws_gui_app->ws_gui_history_iter->len);
1714 ws_gui_app->ws_gui_history_cur_pos = -1;
1716 ws_gui_check_history(ws_gui_app);
1718 ws_gui_fill_html(" ", ws_gui_app);
1719 ws_gui_app->html_flag = FALSE;
1720 g_strstrip(ws_gui_app->last_searched);
1721 if (ws_gui_app->last_searched != NULL)
1723 g_object_set(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1725 ws_gui_app->last_searched,
1727 //ws_dbus_client_find_word(ws_gui_app->dbus_data, ws_gui_app->last_searched);
1728 ws_gui_search(NULL, ws_gui_app);
1732 g_object_set(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1737 tmp = g_array_new(TRUE, TRUE, sizeof(gchar*));
1738 gtk_list_store_clear(ws_gui_app->ws_gui_w_list->ws_gui_store);
1739 ws_gui_app->ws_gui_w_list->ws_gui_model =
1740 create_and_fill_model(tmp, ws_gui_app);
1742 //ws_dbus_client_find_word(ws_gui_app->dbus_data, ws_gui_app->last_searched);
1743 ws_gui_search(NULL, ws_gui_app);
1747 /** adds bookmark to bookmarks database
1749 * @param menuitem - object which recived the signal
1750 * @param user_data - user data set when the signal handler was connected
1753 void ws_gui_dictionary_add_bookmark(GtkMenuItem *menuitem, gpointer user_data)
1755 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1757 if (ws_gui_app->last_word != NULL)
1759 ws_gui_add_bookmark_dialog(ws_gui_app);
1764 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1765 _("ws_ni_select_word_to_add"));
1769 /** removes bookmark from bookmarks database
1771 * @param menuitem - object which recived the signal
1772 * @param user_data - user data set when the signal handler was connected
1775 void ws_gui_dictionary_remove_bookmark(GtkMenuItem *menuitem,
1778 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1780 if (ws_gui_app->last_word != NULL)
1782 ws_gui_remove_bookmark_dialog(ws_gui_app);
1785 g_object_get(G_OBJECT(ws_gui_app->ws_gui_hildon_find_toolbar),
1789 ws_dbus_client_find_word (ws_gui_app->dbus_data, temp);
1795 GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
1796 _("ws_ni_select_word_to_remove"));
1802 /** checks wheather dictionaries are available or not; according to the result
1803 * dimmes proper menuitem
1805 * @param menuitem - object which recived the signal
1806 * @param user_data - user data set when the signal handler was connected
1809 void ws_gui_dict_availablity(GtkMenuItem *menuitem, gpointer user_data)
1811 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1812 if (gconf_client_dir_exists(ws_gui_app->client,
1813 GCONF_PATH, NULL) == TRUE)
1815 ws_gui_app->directories = gconf_client_all_dirs(
1822 if(g_slist_length(ws_gui_app->directories) != 0)
1824 gtk_widget_set_sensitive(GTK_WIDGET
1825 (ws_gui_app->ws_gui_menu->ws_gui_menu_remove_dict),
1827 gtk_widget_set_sensitive(GTK_WIDGET
1828 (ws_gui_app->ws_gui_menu->ws_gui_menu_select_dict),
1830 gtk_widget_set_sensitive(GTK_WIDGET
1831 (ws_gui_app->ws_gui_menu->ws_gui_menu_optimize_dict),
1838 gtk_widget_set_sensitive(GTK_WIDGET
1839 (ws_gui_app->ws_gui_menu->ws_gui_menu_remove_dict),
1841 gtk_widget_set_sensitive(GTK_WIDGET
1842 (ws_gui_app->ws_gui_menu->ws_gui_menu_select_dict),
1844 gtk_widget_set_sensitive(GTK_WIDGET
1845 (ws_gui_app->ws_gui_menu->ws_gui_menu_optimize_dict),
1851 /** sets sensitivity of menu items due to bookmark's mode
1853 * @param user_data - user data set when the function was called
1856 void ws_gui_set_bookmarks_sensitivity(gpointer user_data)
1858 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1863 if (ws_gui_app->bookmark_mode == TRUE)
1865 g_slist_free(ws_gui_app->directories_last);
1866 ws_gui_app->directories_last = NULL;
1867 ws_gui_app->directories_last = g_slist_alloc();
1868 g_slist_free(ws_gui_app->directories);
1869 ws_gui_app->directories = g_slist_alloc();
1871 ws_gui_app->directories = gconf_client_all_dirs(
1875 for (i=0; i<g_slist_length(ws_gui_app->directories); i++)
1877 string = (gchar*)g_slist_nth_data(ws_gui_app->directories, i);
1878 name = g_path_get_basename(string);
1879 string = g_strconcat(string, "/active", NULL);
1881 if (gconf_client_get_bool(ws_gui_app->client, string, NULL) == TRUE)
1883 ws_gui_app->directories_last =
1884 g_slist_append(ws_gui_app->directories_last,
1888 if (strcmp(name, "bookmarks") == 0)
1890 gconf_client_set_bool(ws_gui_app->client,
1897 gconf_client_set_bool(ws_gui_app->client,
1904 //setting sensitivity of components
1905 gtk_widget_set_sensitive(
1906 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_open_bookmark),
1908 gtk_widget_set_sensitive(
1909 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_close_bookmark),
1911 gtk_widget_set_sensitive(
1912 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_remove_bookmark),
1914 gtk_widget_set_sensitive(
1915 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_add_bookmark),
1917 gtk_widget_set_sensitive(
1918 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_dictionaries),
1923 gchar *bookmarks_path = g_strconcat(GCONF_PATH, "/bookmarks/active", NULL);
1924 if (g_slist_length(ws_gui_app->directories_last) > 0)
1926 gconf_client_set_bool(ws_gui_app->client, bookmarks_path, FALSE, NULL);
1929 for (i=0; i<g_slist_length(ws_gui_app->directories_last); i++)
1931 string = (gchar*)g_slist_nth_data(ws_gui_app->directories_last,
1934 //string = g_strconcat(string, "/active", NULL);
1937 gconf_client_set_bool(ws_gui_app->client,
1944 //setting sensitivity of components
1945 gtk_widget_set_sensitive(
1946 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_open_bookmark),
1948 gtk_widget_set_sensitive(
1949 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_close_bookmark),
1951 gtk_widget_set_sensitive(
1952 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_remove_bookmark),
1954 gtk_widget_set_sensitive(
1955 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_add_bookmark),
1957 gtk_widget_set_sensitive(
1958 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_dictionaries),
1963 /** sets sensitivity of menu items due to user selection made
1965 * @param user_data - user data set when the function was called
1968 void ws_gui_set_bookmark_menu_items(GtkMenuItem *menuitem, gpointer user_data)
1970 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
1971 if (ws_gui_app->bookmark_mode == TRUE && ws_gui_app->last_word != NULL)
1973 gtk_widget_set_sensitive(
1974 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_remove_bookmark),
1979 gtk_widget_set_sensitive(
1980 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_remove_bookmark),
1984 if (ws_gui_app->last_word == NULL || ws_gui_app->bookmark_mode == TRUE)
1986 gtk_widget_set_sensitive(
1987 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_add_bookmark),
1992 gtk_widget_set_sensitive(
1993 GTK_WIDGET(ws_gui_app->ws_gui_menu->ws_gui_menu_add_bookmark),
1997 /** reads gconf entries and sets variables with a proper data; it is necessary
1998 * for changing the bookmarks mode
2000 * @param user_data - user data set when the function was called
2003 void ws_gui_read_active_dictionaries(gpointer user_data)
2005 WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
2008 ws_gui_app->directories = gconf_client_all_dirs(ws_gui_app->client,