int update_actual_dict() { GtkWidget *dialog; if(dict == NULL) { if(strcmp(dict_location, DEFAULT_LOC) == 0) { printf("Nie znaleziono słownika, ładuję pierwszy z folderu\n"); char* list = NULL; size_t len = 0; if(dictionary_lang_list(&list, &len) < 0) { char* err_msg = "Błąd ładowania listy słowników!\nSprawdź zawartość katalogu CONF_PATH"; dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, err_msg); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return -1; } if(len == 0) { char* err_msg = "Brak słowników!"; dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, err_msg); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return -1; } if((dict = dictionary_load_lang(list)) == NULL) { char* err_msg = "Nie udało się załadować słownika!"; dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, err_msg); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); return -1; } strcpy(dict_location, list); free(list); printf("Uaktualniono słownik - obecnie %s\n", dict_location); return 0; } return -1; } return 0; }
/** Wyświetlenie listy dostępnych słowników i wczytanie jednego z nich. @param[in] item element menu. @param[in] data wskaźnik na wartość. */ void load_dictionary_from_menu(GtkMenuItem *item, gpointer data) { GtkWidget *dialog; GtkWidget *vbox, *label, *combo; dialog = gtk_dialog_new_with_buttons("Wczytaj słownik", NULL, 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); // W treści dialogu dwa elementy vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); // Tekst label = gtk_label_new("Lista dostępnych słowników:"); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 1); // Spuszczane menu combo = gtk_combo_box_text_new(); DIR *dir; struct dirent *ent; if ((dir = opendir(CONF_PATH)) != NULL) { while ((ent = readdir(dir)) != NULL) { if (ent->d_name[0] != '.') gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), ent->d_name); } closedir(dir); } gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 1); gtk_widget_show(combo); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { dictionary_save_lang(dict, dictionary_name); dictionary_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo)); dictionary_done(dict); dict = dictionary_load_lang(dictionary_name); } gtk_widget_destroy(dialog); }
// Procedura ładowania języka static void ChooseLang (GtkMenuItem *item, gpointer data) { GtkWidget *dialog, *vbox, *label, *combo; dialog = gtk_dialog_new_with_buttons("Wybierz...", NULL, 0, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); // W treści dialogu dwa elementy vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); // Tekst label = gtk_label_new("Oto lista języków,\ndla których są dostępne słowniki"); gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 1); char *list = NULL; size_t len = 0; if(dictionary_lang_list(&list, &len) < 0) { GtkWidget* err_dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Błąd pobierania listy języków!"); gtk_dialog_run(GTK_DIALOG(err_dialog)); gtk_widget_destroy(err_dialog); return; } // Spuszczane menu combo = gtk_combo_box_text_new(); char* lastFirst = list; for (size_t i = 0; i < len; i++) { if ((list + i)[0] == '\0') { // Dodajemy kolejny element gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo), lastFirst); lastFirst = list + i + 1; } } gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); gtk_box_pack_start(GTK_BOX(vbox), combo, FALSE, FALSE, 1); gtk_widget_show(combo); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { const char* wybranyJezyk = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo)); //zapisujemy stary słownik - ktoś mógł coś tam dodać i mógł się zmienić if(strcmp(dict_location, DEFAULT_LOC) != 0) dictionary_save_lang(dict, dict_location); // i ładujemy wybrany struct dictionary* tempDict = dictionary_load_lang(wybranyJezyk); // Jeśli wybrany jest ok, to podmienimy go if(tempDict == NULL) { GtkWidget* err_dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Nie udało się wczytać słownika!"); gtk_dialog_run(GTK_DIALOG(err_dialog)); gtk_widget_destroy(err_dialog); } if(dict != NULL) dictionary_done(dict); dict = tempDict; strcpy(dict_location, wybranyJezyk); //free(wybranyJezyk); } gtk_widget_destroy(dialog); free(list); }