diff options
Diffstat (limited to 'callbacks.c')
-rw-r--r-- | callbacks.c | 143 |
1 files changed, 141 insertions, 2 deletions
diff --git a/callbacks.c b/callbacks.c index 3cbb345..a2f94f8 100644 --- a/callbacks.c +++ b/callbacks.c @@ -17,15 +17,154 @@ */ #include <gtk/gtk.h> +#include <stdlib.h> +#include <string.h> #include "callbacks.h" +#include "subtitle.h" +#include "interface.h" +#include "srt.h" +#include "word.h" -gint main_window_close(GtkWidget *widget, GdkEvent *event, gpointer data) +#define QUIT_MSG_CAPTION "Confirmation" +#define QUIT_MSG_TEXT "Are you sure to exit?" +#define ERR_READING_FILE "Error reading file" +#define ERR_MSG_CAPTION "Error" + +extern Word *words; + +gint main_window_close(GtkWidget *widget, GdkEvent *event, gpointer main_window) { + GtkWidget *dialog; + gint response = TRUE; -return FALSE; + dialog = gtk_message_dialog_new(main_window, GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, QUIT_MSG_TEXT); + gtk_window_set_title(GTK_WINDOW(dialog), QUIT_MSG_CAPTION); + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) + response = FALSE; + gtk_widget_destroy(dialog); + + return response; } void main_window_destroy(GtkWidget *widget, gpointer data) { gtk_main_quit(); } + +void open_btn_click(GtkWidget *widget, gpointer parent) +{ + GtkWidget *filedialog; + GtkWidget *errmsg; + GtkFileFilter *filter; + char *filename; + char *errstr; + FILE *subtitle; + + filter = gtk_file_filter_new(); + gtk_file_filter_add_mime_type(filter, "application/x-subrip"); + gtk_file_filter_set_name(filter, "SubRip subtitles (*srt)"); + filedialog = gtk_file_chooser_dialog_new("Open File", parent, GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, + GTK_RESPONSE_ACCEPT, NULL); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filedialog), filter); + if (gtk_dialog_run(GTK_DIALOG(filedialog)) == GTK_RESPONSE_ACCEPT) { + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filedialog)); + if (!(subtitle = fopen(filename, "r"))) { + gtk_widget_destroy(filedialog); + errstr = malloc(strlen(filename) + strlen(ERR_READING_FILE)); + strcpy(errstr, ERR_READING_FILE); + strcat(errstr, filename); + errmsg = gtk_message_dialog_new(GTK_WINDOW(main_window), + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, errstr); + gtk_window_set_title(GTK_WINDOW(errmsg), ERR_MSG_CAPTION); + gtk_dialog_run(GTK_DIALOG(errmsg)); + gtk_widget_destroy(errmsg); + free(errstr); + return ; + } + if (words != NULL) { + /*we won't free() 'words' variable, it's statical*/ + free_words(words->lsibl); + free_words(words->rsibl); + free(words->word); + words = NULL; + clear_word_list(); + clear_sentences(); + } + else + enable_search(); + process_srt(subtitle); + print_words(words); + fclose(subtitle); + } + gtk_widget_destroy(filedialog); +} + +void show_about(GtkWidget *widget, gpointer data) +{ + const gchar *authors[] = {"Borisov Alexandr aka b0ric", NULL}; + const gchar comment[] = {"WordExtract is a subtitle parser\n which shows all unique words\n from files."}; + const gchar copyright[] = {"Copyright \xc2\xa9 2009 by Borisov Alexandr"}; + + gtk_show_about_dialog(GTK_WINDOW(main_window), "name", "WordExtract", + "version", "v0.2", + "website", "http://null.net", + "comments", comment, + "copyright", copyright, + "authors", authors, + "documenters", NULL, + "translator-credits", NULL, + "logo", NULL, NULL); +} + +void quit_btn_click(GtkWidget *widget, gpointer data) +{ + GtkWidget *dialog; + + dialog = gtk_message_dialog_new(GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, QUIT_MSG_TEXT); + gtk_window_set_title(GTK_WINDOW(dialog), QUIT_MSG_CAPTION); + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_YES) { + gtk_widget_destroy(dialog); + gtk_main_quit(); + } + else + gtk_widget_destroy(dialog); +} + +void on_find_text_change(GtkWidget *find_entry, gpointer data) +{ + const gchar *find_text; + + find_text = gtk_entry_get_text(GTK_ENTRY(find_entry)); + change_search_navigation_state(strcmp(find_text, "")); + if (strcmp(find_text, "")) + search_sentences(find_text); +} + +void find_next_btn_click(GtkWidget *widget, gpointer entry) +{ + const gchar *find_text = NULL; + + find_text = gtk_entry_get_text(GTK_ENTRY(entry)); + find_next(find_text); +} + +void find_prev_btn_click(GtkWidget *widget, gpointer entry) +{ + const gchar *find_text = NULL; + + find_text = gtk_entry_get_text(GTK_ENTRY(entry)); + find_prev(find_text); +} + +void clear_btn_click(GtkWidget *widget, gpointer find_entry) +{ + clear_search_tags(); + gtk_entry_set_text(GTK_ENTRY(find_entry), ""); + change_search_navigation_state(FALSE); +} + + |