diff options
author | Tom Willemsen | 2012-10-20 01:06:39 +0200 |
---|---|---|
committer | Tom Willemsen | 2012-10-20 01:06:39 +0200 |
commit | 395c534fd9aef1f83a72d21f705f6718b8594f5e (patch) | |
tree | 81b3c25732edfc22aaa3eef91ac6ea4b7ccfc5c4 /src/eom-main-window.c | |
parent | 12c5dd9231d4a06a91f7356a0b582d5b6178bfae (diff) | |
download | eye-on-manga-395c534fd9aef1f83a72d21f705f6718b8594f5e.tar.gz eye-on-manga-395c534fd9aef1f83a72d21f705f6718b8594f5e.zip |
Add Collect filter
This filter, in the main window, shows only the manga that still need
to be collected, not the completed ones.
* src/data.c (data_get_manga): Use `data_get_manga_for_query'.
(data_get_incomplete_manga): New function, get all manga that arent'
completely collected yet.
(data_get_manga_for_query): New function, fetches all the manga as
`query' specifies.
* src/data.h: Add `data_get_incomplete_manga'.
* src/eom-main-window.c (filter_args): New struct. Contains arguments
needed by the filter callback.
(eom_main_window_load): Accept a list of manga, this list will be
used to show the manga, if it's NULL, a list of all manga is used.
(eom_main_window_add_menu): Add `All' and `Collect' filter buttons.
(eom_main_window_on_filter): Callback for the filter buttons,
reloads the list with the correct manga.
* src/eom-main-window.h: Add manga parameter to
`eom_main_window_load'.
* src/interface.c (interface_show_main_window): Pass `NULL' to
`eom_main_window_load' to show all manga.
Diffstat (limited to 'src/eom-main-window.c')
-rw-r--r-- | src/eom-main-window.c | 70 |
1 files changed, 60 insertions, 10 deletions
diff --git a/src/eom-main-window.c b/src/eom-main-window.c index c901401..b80e6cb 100644 --- a/src/eom-main-window.c +++ b/src/eom-main-window.c @@ -1,8 +1,11 @@ #include "eom-main-window.h" -#include <hildon/hildon.h> -#include <gtk/gtk.h> + #include <string.h> #include <stdlib.h> + +#include <hildon/hildon.h> +#include <gtk/gtk.h> + #include "eom-new-item-dialog.h" #include "data.h" #include "interface.h" @@ -17,8 +20,14 @@ enum { NUM_COLS }; +struct filter_args { + EomMainWindow *window; + gint state; +}; + static void eom_main_window_add_menu(EomMainWindow *window); static void eom_main_window_on_new(GtkWidget *widget, GtkWindow *window); +static void eom_main_window_on_filter(GtkWidget *widget, struct filter_args *arg); static void eom_main_window_on_add_clicked(GtkWidget *widget, gpointer user_data); static void eom_main_window_on_remove_clicked(GtkWidget *widget, @@ -36,14 +45,17 @@ GtkWidget *eom_main_window_new(void) return g_object_new(EOM_TYPE_MAIN_WINDOW, NULL); } -void eom_main_window_load(EomMainWindow *self) +void eom_main_window_load(EomMainWindow *self, GList *manga) { GList *list; int i; gtk_list_store_clear(self->store); - list = data_get_manga(); + if (manga) + list = manga; + else + list = data_get_manga(); while (list) { Manga *manga = list->data; @@ -157,10 +169,17 @@ static void eom_main_window_init(EomMainWindow *window) static void eom_main_window_add_menu(EomMainWindow *window) { - GtkWidget *appmenu; + HildonAppMenu *appmenu; GtkWidget *new_button; + GtkWidget *all_filter, *collect_filter; + struct filter_args *args0 = malloc(sizeof(struct filter_args)); + struct filter_args *args1 = malloc(sizeof(struct filter_args)); - appmenu = hildon_app_menu_new(); + args0->window = window; + args0->state = 0; + args1->window = window; + args1->state = 1; + appmenu = HILDON_APP_MENU(hildon_app_menu_new()); new_button = hildon_gtk_button_new(HILDON_SIZE_AUTO); gtk_button_set_label(GTK_BUTTON(new_button), "New Manga"); @@ -169,13 +188,44 @@ static void eom_main_window_add_menu(EomMainWindow *window) G_CALLBACK(eom_main_window_on_new), GTK_WINDOW(window)); - hildon_app_menu_append(HILDON_APP_MENU(appmenu), GTK_BUTTON(new_button)); - gtk_widget_show_all(appmenu); + hildon_app_menu_append(appmenu, GTK_BUTTON(new_button)); + + all_filter = hildon_gtk_radio_button_new(HILDON_SIZE_AUTO, NULL); + gtk_button_set_label(GTK_BUTTON(all_filter), "All"); + g_signal_connect_after(all_filter, "clicked", + G_CALLBACK(eom_main_window_on_filter), + args0); + hildon_app_menu_add_filter(appmenu, GTK_BUTTON(all_filter)); + gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(all_filter), FALSE); + + collect_filter = + hildon_gtk_radio_button_new_from_widget(HILDON_SIZE_AUTO, + GTK_RADIO_BUTTON(all_filter)); + gtk_button_set_label(GTK_BUTTON(collect_filter), "Collect"); + g_signal_connect_after(collect_filter, "clicked", + G_CALLBACK(eom_main_window_on_filter), + args1); + hildon_app_menu_add_filter(appmenu, GTK_BUTTON(collect_filter)); + gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(collect_filter), FALSE); + + gtk_widget_show_all(GTK_WIDGET(appmenu)); hildon_stackable_window_set_main_menu(HILDON_STACKABLE_WINDOW(window), HILDON_APP_MENU(appmenu)); } +static void eom_main_window_on_filter(GtkWidget *widget, struct filter_args *arg) +{ + GList *manga; + + if (arg->state) + manga = data_get_incomplete_manga(); + else + manga = data_get_manga(); + + eom_main_window_load(arg->window, manga); +} + static void eom_main_window_on_new(GtkWidget *widget, GtkWindow *window) { GtkWidget *dialog; @@ -202,7 +252,7 @@ static void eom_main_window_on_new(GtkWidget *widget, GtkWindow *window) if (name != NULL) { if (data_add_manga(name, total_qty)) - eom_main_window_load(EOM_MAIN_WINDOW(window)); + eom_main_window_load(EOM_MAIN_WINDOW(window), NULL); } } @@ -212,7 +262,7 @@ static gboolean eom_main_window_on_edit_closed(GtkWidget *widget, { EomMainWindow *self = user_data; - eom_main_window_load(self); + eom_main_window_load(self, NULL); return FALSE; } |