summaryrefslogtreecommitdiff
path: root/callbacks.c
diff options
context:
space:
mode:
authorb0ric <b0risov.alexandr@rambler.ru>2009-08-07 01:45:54 +0300
committerb0ric <b0risov.alexandr@rambler.ru>2009-08-07 01:45:54 +0300
commit180da16f3c1592d1515de2e647144a37cc23c1b9 (patch)
treef03e590b6fbc2ccbc0f662525f9133e1fe780de1 /callbacks.c
parent4fc82214f27252f5e11e7d9a0c605a7d33c690bd (diff)
Basical GUI functionality and few GIU improvements
Diffstat (limited to 'callbacks.c')
-rw-r--r--callbacks.c143
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);
+}
+
+