working on bug with GtkTreeView
[mdictionary] / src / gui / src / ws_gui_layout.c
index 7a1185f..6b99a09 100644 (file)
@@ -43,6 +43,8 @@ void ws_gui_create_window(gpointer user_data)
         GArray *array_tmp = g_array_new (TRUE, TRUE, sizeof(gchar*));
        ws_gui_app->raw_translation = g_string_new(" ");
        ws_gui_app->last_searched = NULL;
+       ws_gui_app->last_searched_in_book = NULL;
+       ws_gui_app->last_word = NULL;
 
         ws_gui_app->ws_gui_banner_flag = FALSE;
         ws_gui_app->ws_gui_full_screen_flag = FALSE;
@@ -51,8 +53,9 @@ void ws_gui_create_window(gpointer user_data)
         ws_gui_app->ws_gui_sel_flag = FALSE;
        ws_gui_app->bookmark_mode = FALSE;
        ws_gui_app->bookmark_avail = TRUE;
-       
-       ws_gui_app->zoom = 1;
+       ws_gui_app->html_flag = TRUE;
+
+       ws_gui_app->zoom = ZOOM_DEFAULT;
 
         ws_gui_app->timer = g_timer_new();
         g_timer_stop(ws_gui_app->timer);
@@ -60,10 +63,10 @@ void ws_gui_create_window(gpointer user_data)
         ws_gui_app->ws_gui_history = g_array_new(TRUE, TRUE, sizeof(gchar*));
        ws_gui_app->ws_gui_history_list = g_array_new(TRUE, TRUE, sizeof(gchar*));
        ws_gui_app->ws_gui_history_iter = g_array_new(TRUE, TRUE, sizeof(gchar*));
+       ws_gui_app->ws_gui_history_bookmarks = g_array_new(TRUE, TRUE, sizeof(gchar*));
        ws_gui_app->history_flag = FALSE;
         ws_gui_app->ws_gui_history_cur_pos = -1;
-       ws_gui_app->history_mode = 0;
-
+       
         ws_gui_app->ws_gui_hildon_program = 
         HILDON_PROGRAM(hildon_program_get_instance());
 
@@ -74,7 +77,7 @@ void ws_gui_create_window(gpointer user_data)
         hildon_program_add_window(ws_gui_app->ws_gui_hildon_program,
                                   ws_gui_app->ws_gui_hildon_window);
 
-        ws_gui_create_main_menu(ws_gui_app);
+       ws_gui_create_main_menu(ws_gui_app);
         ws_gui_create_find_toolbar(ws_gui_app);
 
         ws_gui_app->ws_gui_hpane = gtk_hpaned_new();
@@ -163,21 +166,20 @@ void ws_gui_create_window(gpointer user_data)
 
        gtk_tree_selection_set_mode(
                                    ws_gui_app->ws_gui_w_list->ws_gui_selection,
-                                   GTK_SELECTION_SINGLE);
-
+                                     GTK_SELECTION_BROWSE);
        
        ws_gui_app->directories = g_slist_alloc();
-       //ws_gui_app->directories_last = gconf_client_all_dirs(
-       //                                              ws_gui_app->client, 
-       //                                              GCONF_PATH, NULL);
        ws_gui_set_bookmarks_sensitivity(ws_gui_app);
 
-
        ws_gui_app->ws_gui_banner = hildon_banner_show_animation(
                                    GTK_WIDGET(ws_gui_app->ws_gui_hildon_window),
                                    NULL,
                                    _("ws_ab_searching"));
        
+       gtk_widget_set_sensitive(GTK_WIDGET
+                       (ws_gui_app->ws_gui_menu->ws_gui_popup_bookmark),
+                       FALSE);
+
        gtk_widget_hide(GTK_WIDGET(ws_gui_app->ws_gui_banner));
        g_free(ws_gui_app->welcome_note);
 }
@@ -564,6 +566,8 @@ void ws_gui_create_main_menu (gpointer user_data)
                                (ws_gui_app->ws_gui_menu->ws_gui_menu_find_prev),
                                FALSE);
 
+       
+       
         gtk_widget_show_all(ws_gui_app->ws_gui_menu->ws_gui_main_menu);
 }
 
@@ -582,28 +586,12 @@ void ws_gui_create_popup_menu (gpointer user_data)
        ws_gui_app->ws_gui_menu->ws_gui_separator = 
                                                gtk_separator_menu_item_new();
        
-       struct _GtkHTML *tmp = (struct _GtkHTML *)(ws_gui_app->ws_gui_html);
-       
        ws_gui_app->ws_gui_menu->ws_gui_popup_search = 
                gtk_menu_item_new_with_label(_("ws_mp_search"));
        gtk_menu_append((ws_gui_app->ws_gui_menu->ws_gui_popup_menu),
                        ws_gui_app->ws_gui_menu->ws_gui_popup_search);
        gtk_menu_append ((ws_gui_app->ws_gui_menu->ws_gui_popup_menu),
                        gtk_separator_menu_item_new());
-       
-       if (html_engine_is_selection_active(tmp->engine) == TRUE)
-       {
-               gtk_widget_set_sensitive(GTK_WIDGET
-                               (ws_gui_app->ws_gui_menu->ws_gui_popup_search),
-                               TRUE);
-       }
-       else 
-       {
-               gtk_widget_set_sensitive(GTK_WIDGET
-                               (ws_gui_app->ws_gui_menu->ws_gui_popup_search),
-                               FALSE);
-       }
-       
        ws_gui_app->ws_gui_menu->ws_gui_popup_bookmark = 
                gtk_menu_item_new_with_label(_("ws_mp_add_bookmark"));
        gtk_menu_append ((ws_gui_app->ws_gui_menu->ws_gui_popup_menu),
@@ -626,8 +614,8 @@ void ws_gui_create_popup_menu (gpointer user_data)
        
        gtk_widget_show_all(ws_gui_app->ws_gui_menu->ws_gui_popup_submenu);
        
-               ws_gui_app->ws_gui_menu->ws_gui_popup_edit = 
-               gtk_menu_item_new_with_label (_("ws_mp_edit"));
+       ws_gui_app->ws_gui_menu->ws_gui_popup_edit = 
+                       gtk_menu_item_new_with_label (_("ws_mp_edit"));
        gtk_menu_append ((ws_gui_app->ws_gui_menu->ws_gui_popup_menu),
                        ws_gui_app->ws_gui_menu->ws_gui_popup_edit);
        
@@ -644,10 +632,46 @@ void ws_gui_create_popup_menu (gpointer user_data)
        gtk_menu_append ((ws_gui_app->ws_gui_menu->ws_gui_popup_menu),
                        ws_gui_app->ws_gui_menu->ws_gui_popup_zoom_out);
        
-       gtk_widget_show_all(ws_gui_app->ws_gui_menu->ws_gui_popup_menu);
        gtk_menu_item_set_submenu(GTK_MENU_ITEM
                                (ws_gui_app->ws_gui_menu->ws_gui_popup_edit),
                                ws_gui_app->ws_gui_menu->ws_gui_popup_submenu);
+
+       struct _GtkHTML *tmp = (struct _GtkHTML *)(ws_gui_app->ws_gui_html);
+
+       if (html_engine_is_selection_active(tmp->engine) == TRUE)
+       {
+               gtk_widget_set_sensitive(GTK_WIDGET
+                               (ws_gui_app->ws_gui_menu->ws_gui_popup_search),
+                               TRUE);
+               gtk_widget_set_sensitive(GTK_WIDGET
+                               (ws_gui_app->ws_gui_menu->ws_gui_popup_copy),
+                               TRUE);
+       }
+       else 
+       {
+               gtk_widget_set_sensitive(GTK_WIDGET
+                               (ws_gui_app->ws_gui_menu->ws_gui_popup_search),
+                               FALSE);
+               gtk_widget_set_sensitive(GTK_WIDGET
+                               (ws_gui_app->ws_gui_menu->ws_gui_popup_copy),
+                               FALSE);
+       }
+       
+       if (ws_gui_app->html_flag == FALSE)
+       {
+               gtk_widget_set_sensitive(GTK_WIDGET
+                               (ws_gui_app->ws_gui_menu->ws_gui_popup_select_all),
+                               FALSE);
+       }
+       else
+       {
+               gtk_widget_set_sensitive(GTK_WIDGET
+                               (ws_gui_app->ws_gui_menu->ws_gui_popup_select_all),
+                               TRUE);
+       }       
+       
+       gtk_widget_show_all(ws_gui_app->ws_gui_menu->ws_gui_popup_menu);
+       
        
        g_signal_connect(G_OBJECT
                        (ws_gui_app->ws_gui_menu->ws_gui_popup_search),
@@ -717,17 +741,21 @@ void ws_gui_create_popup_menu (gpointer user_data)
        }
        else
        {
-               if (ws_gui_app->last_word != NULL)
+               g_strstrip(ws_gui_app->last_word);
+               //g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "\n\nlast_word: %s\n\n", ws_gui_app->last_word);
+               
+               if (ws_gui_app->last_word == NULL || 
+                   (ws_gui_app->last_word[0] == '\0'))
                {
                        gtk_widget_set_sensitive(GTK_WIDGET
                        (ws_gui_app->ws_gui_menu->ws_gui_popup_bookmark),
-                       TRUE);
+                       FALSE);
                }
                else
                {
                        gtk_widget_set_sensitive(GTK_WIDGET
                        (ws_gui_app->ws_gui_menu->ws_gui_popup_bookmark),
-                       FALSE);
+                       TRUE);
                }
        }
        }
@@ -904,9 +932,15 @@ void ws_gui_dictionary_chooser(GtkMenuItem *menuitem, gpointer user_data)
        
                ws_dbus_notify(ws_gui_app->dbus_data, 
                                WS_DBUS_INFO_CONFIG_CHANGED);
-               //g_array_free(ws_gui_app->ws_gui_history, TRUE);
-       
-               //ws_gui_app->ws_gui_history = g_array_remove_range (ws_gui_app->ws_gui_history, 0, ws_gui_app->ws_gui_history->len);
+
+               if(ws_gui_app->ws_gui_history->len >= 0)
+               {
+               ws_gui_clear_array(ws_gui_app->ws_gui_history);
+               ws_gui_clear_array(ws_gui_app->ws_gui_history_list);
+               ws_gui_clear_array(ws_gui_app->ws_gui_history_iter);
+               ws_gui_app->ws_gui_history_cur_pos = -1;
+               }
+               ws_gui_check_history(ws_gui_app);
        
                gtk_widget_destroy (dialog1);
        }
@@ -1106,27 +1140,12 @@ void ws_gui_dictionary_loader(GtkMenuItem *menuitem, gpointer user_data)
         WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
 
         GtkWidget *dialog;
-        GtkWidget *dialog2;
-
-        /*dialog = gtk_file_chooser_dialog_new(_("ws_ti_load_dictionary_title"),
-                                   GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
-                                   GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_OK,
-                                   GTK_RESPONSE_OK,
-                                   GTK_STOCK_CANCEL,
-                                   GTK_RESPONSE_CANCEL,
-                                   NULL);*/
-       
+  //      GtkWidget *dialog2;  
 
        dialog = hildon_file_chooser_dialog_new(
                                GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
                                GTK_FILE_CHOOSER_ACTION_OPEN);
  
-
-       /*dialog = hildon_file_chooser_dialog_new(
-               GTK_WINDOW(ws_gui_app->ws_gui_hildon_window), 
-                          GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
-       */
-
        gtk_window_set_default_size(GTK_WINDOW (dialog), 200, 200);
         gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER(dialog), FALSE);
 
@@ -1136,20 +1155,21 @@ void ws_gui_dictionary_loader(GtkMenuItem *menuitem, gpointer user_data)
         { 
                 gchar *filename;
                 gchar *name;
-                gchar *path;
+             //   gchar *path;
                 gint len;
-                gchar *filepath;
+              //  gchar *filepath;
 
                 gchar* tmp;
-
+               
                 filename = gtk_file_chooser_get_filename(
                                                      GTK_FILE_CHOOSER (dialog));
                 name = g_path_get_basename(filename);
                 len = strlen(filename) - strlen(name) -1;
                 tmp = g_strndup (filename, len);
-
+                               
+               
                 tmp = g_path_get_basename(tmp);
-
+               
                 if (g_str_has_suffix(name, ".xdxf") 
                        || g_str_has_suffix(name, ".idx") 
                        || g_str_has_suffix(name, ".ifo")
@@ -1157,94 +1177,26 @@ void ws_gui_dictionary_loader(GtkMenuItem *menuitem, gpointer user_data)
                        || g_str_has_suffix(name, ".dict")
                        || g_str_has_suffix(name, ".dict.dz"))
                 {
-                        len = strlen(filename) - strlen(name) -1;
-                        filepath = g_strndup (filename, len);
-                        path = g_strconcat(GCONF_PATH, "/", tmp, "/path", NULL);
-                        gconf_client_set_string(ws_gui_app->client,
-                                                path,
-                                                filepath,
-                                                NULL);
-                        g_free(path); 
-                       path = NULL;
-                       path = g_strconcat(GCONF_PATH,
-                                           "/",
-                                           tmp,
-                                           "/active",
-                                           NULL);
-                        gtk_widget_destroy (dialog);
-
-                        dialog2 = gtk_message_dialog_new(GTK_WINDOW(
-                                              ws_gui_app->ws_gui_hildon_window),
-                                              GTK_DIALOG_DESTROY_WITH_PARENT,
-                                              GTK_MESSAGE_QUESTION,
-                                              GTK_BUTTONS_YES_NO,
-                       _("ws_ni_dictionaries_activation_question"));
-
-                        gtk_widget_show_all(GTK_WIDGET(dialog2));
-
-                        if (gtk_dialog_run (GTK_DIALOG (dialog2)) ==
-                                 GTK_RESPONSE_YES)
-                        {
-                                gconf_client_set_bool(ws_gui_app->client,
-                                                      path,
-                                                      TRUE,
-                                                      NULL);
-                        }
-                        else 
-                        {
-                                gconf_client_set_bool(ws_gui_app->client,
-                                                      path,
-                                                      FALSE,
-                                                      NULL);
-                        }
-                        gtk_widget_destroy (dialog2);
-                        g_free(path); 
-                       path = NULL;
-
-                        path = g_strconcat(GCONF_PATH,
-                                           "/",
-                                           tmp,
-                                           "/optimized",
-                                            NULL);
-                        dialog2 = gtk_message_dialog_new(
-                               GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
-                               GTK_DIALOG_DESTROY_WITH_PARENT,
-                               GTK_MESSAGE_QUESTION,
-                               GTK_BUTTONS_YES_NO,
-                               _("ws_ni_dictionaries_optimalization_question"));
-
-                       gtk_widget_show_all(GTK_WIDGET(dialog2));
-
-                        if (gtk_dialog_run (GTK_DIALOG (dialog2)) 
-                                                            == GTK_RESPONSE_YES)
-                        {
-                           gconf_client_set_bool(ws_gui_app->client,
-                                                 path,
-                                                 TRUE,
-                                                 NULL);
-                        }
-                        else 
-                        {
-                                gconf_client_set_bool(ws_gui_app->client,
-                                                      path,
-                                                      FALSE,
-                                                      NULL);
-                        }
-                        gtk_widget_destroy (dialog2);
-
-                        ws_dbus_notify(ws_gui_app->dbus_data,
-                                       WS_DBUS_INFO_CONFIG_CHANGED);
-                        gtk_infoprint(GTK_WINDOW(
+                       g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, "\n:::GUUUUIII GUIII::: check");
+                       if (ws_gui_load_dict(filename, ws_gui_app) == TRUE)
+                       {
+                               gtk_widget_destroy(dialog);
+                               gtk_infoprint(GTK_WINDOW(
                                       ws_gui_app->ws_gui_hildon_window),
                                       _("ws_ni_dictionary_added"));
+                       } 
                 }
+               else if (g_str_has_suffix(name, ".bz2"))
+               {
+                       gtk_widget_destroy(dialog);     
+                       ws_dbus_extract_dictionary(ws_gui_app->dbus_data, filename);
+               }
                 else
                 {
-                        gtk_widget_destroy (dialog2);
+                        gtk_widget_destroy (dialog);
                         gtk_infoprint(GTK_WINDOW(
                                       ws_gui_app->ws_gui_hildon_window),
                                       _("ws_ni_dictionary_wrong_file"));
-                       gtk_widget_destroy (dialog);
                 }
 
                }
@@ -1255,6 +1207,110 @@ void ws_gui_dictionary_loader(GtkMenuItem *menuitem, gpointer user_data)
 
 }
 
+/** this function creates dialog popup window which allows to load dictionary
+ *
+ * @param filename - the object which received the signal
+ * @param user_data - set when the signal handler was connected
+ */
+gboolean ws_gui_load_dict(gchar *filename, gpointer user_data)
+{
+       WSGuiApp* ws_gui_app=(WSGuiApp*)user_data;
+
+       GtkWidget *dialog1;
+       GtkWidget *dialog2;
+       gchar *name = g_path_get_basename(filename);
+       gchar *path;
+       gint len;
+       gchar *filepath;
+
+       len = strlen(filename) - strlen(name) -1;
+       gchar *tmp = g_strndup (filename, len);;
+       tmp = g_path_get_basename(tmp);
+       
+       filepath = g_strndup (filename, len);
+        path = g_strconcat(GCONF_PATH, "/", tmp, "/path", NULL);
+        gconf_client_set_string(ws_gui_app->client,
+                               path,
+                                filepath,
+                                NULL);
+       g_free(path); 
+       path = NULL;
+       path = g_strconcat(GCONF_PATH,
+                               "/",
+                                tmp,
+                                "/active",
+                                NULL);
+       
+        dialog1 = gtk_message_dialog_new(GTK_WINDOW(
+                                         ws_gui_app->ws_gui_hildon_window),
+                                         GTK_DIALOG_DESTROY_WITH_PARENT,
+                                         GTK_MESSAGE_QUESTION,
+                                         GTK_BUTTONS_YES_NO,
+                                       _("ws_ni_dictionaries_activation_question"));
+
+        gtk_widget_show_all(GTK_WIDGET(dialog1));
+
+        if (gtk_dialog_run (GTK_DIALOG (dialog1)) == GTK_RESPONSE_YES)
+        {
+               gconf_client_set_bool(ws_gui_app->client,
+                                        path,
+                                        TRUE,
+                                        NULL);
+        }
+        else 
+        {
+               gconf_client_set_bool(ws_gui_app->client,
+                                        path,
+                                        FALSE,
+                                        NULL);
+        }
+       gtk_widget_destroy (dialog1);
+       g_free(path); 
+       path = NULL;
+
+       path = g_strconcat(GCONF_PATH, "/", tmp, "/optimized", NULL);
+
+       dialog2 = gtk_message_dialog_new(
+               GTK_WINDOW(ws_gui_app->ws_gui_hildon_window),
+               GTK_DIALOG_DESTROY_WITH_PARENT,
+               GTK_MESSAGE_QUESTION,
+               GTK_BUTTONS_YES_NO,
+               _("ws_ni_dictionaries_optimalization_question"));
+
+       gtk_widget_show_all(GTK_WIDGET(dialog2));
+
+       if (gtk_dialog_run (GTK_DIALOG (dialog2)) == GTK_RESPONSE_YES)
+       {
+               gconf_client_set_bool(ws_gui_app->client,
+                                       path,
+                                       TRUE,
+                                       NULL);
+       }
+       else 
+       {
+               gconf_client_set_bool(ws_gui_app->client,
+                                       path,
+                                       FALSE,
+                                       NULL);
+       }
+       gtk_widget_destroy (dialog2);
+
+       if(ws_gui_app->ws_gui_history->len > 0)
+       {
+               ws_gui_clear_array(ws_gui_app->ws_gui_history);
+               ws_gui_clear_array(ws_gui_app->ws_gui_history_list);
+               ws_gui_clear_array(ws_gui_app->ws_gui_history_iter);
+               ws_gui_app->ws_gui_history_cur_pos = -1;
+       }
+       ws_gui_check_history(ws_gui_app);
+
+       ws_dbus_notify(ws_gui_app->dbus_data,
+                               WS_DBUS_INFO_CONFIG_CHANGED);
+       
+       return TRUE;
+}
+
 /** this function creates dialog popup window which allows to remove dictionary
  *  which is no longer used
  *
@@ -1374,6 +1430,15 @@ void ws_gui_dictionary_remover(GtkMenuItem *menuitem, gpointer user_data)
                         } 
                  }
 
+               if(ws_gui_app->ws_gui_history->len >= 0)
+               {
+                       ws_gui_clear_array(ws_gui_app->ws_gui_history);
+                       ws_gui_clear_array(ws_gui_app->ws_gui_history_list);
+                       ws_gui_clear_array(ws_gui_app->ws_gui_history_iter);
+                       ws_gui_app->ws_gui_history_cur_pos = -1;
+               }
+               ws_gui_check_history(ws_gui_app);               
+
                 ws_dbus_notify(ws_gui_app->dbus_data, 
                               WS_DBUS_INFO_CONFIG_CHANGED);
                gtk_infoprint(GTK_WINDOW(