From 8a45361b4f6fd8613a78011f5421091a18781773 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Thu, 21 Oct 2010 21:00:26 +0200 Subject: Changed name from Collections to Eye on Manga --- src/eom-main-window.c | 333 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 src/eom-main-window.c (limited to 'src/eom-main-window.c') diff --git a/src/eom-main-window.c b/src/eom-main-window.c new file mode 100644 index 0000000..8bd96e4 --- /dev/null +++ b/src/eom-main-window.c @@ -0,0 +1,333 @@ +#include "eom-main-window.h" +#include +#include +#include +#include +#include "eom-new-item-dialog.h" +#include "data.h" +#include "interface.h" + +G_DEFINE_TYPE(EomMainWindow, eom_main_window, HILDON_TYPE_STACKABLE_WINDOW) + +enum { + COL_ID = 0, + COL_NAME, + COL_CURRENT, + COL_TOTAL, + NUM_COLS +}; + +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_selection_changed(GtkTreeSelection *selection, + gpointer user_data); +static void eom_main_window_on_add_clicked(GtkWidget *widget, + gpointer user_data); +static void eom_main_window_on_remove_clicked(GtkWidget *widget, + gpointer user_data); +static void eom_main_window_on_edit_clicked(GtkWidget *widget, + gpointer user_data); + +GtkWidget *eom_main_window_new(void) +{ + return g_object_new(EOM_TYPE_MAIN_WINDOW, NULL); +} + +void eom_main_window_load(EomMainWindow *self) +{ + GList *list; + + gtk_list_store_clear(self->store); + + list = data_get_manga(); + + while (list) { + Manga *manga = list->data; + eom_main_window_add_line(self, manga->id, manga->name, + manga->current_qty, manga->total_qty); + list = g_list_next(list); + } + + g_list_free_1(list); +} + +void eom_main_window_add_line(EomMainWindow *window, + gint id, + const gchar *name, + gint current_qty, + gint total_qty) +{ + gtk_list_store_append(window->store, &window->iter); + gtk_list_store_set(window ->store, &window->iter, + COL_ID, id, + COL_NAME, name, + COL_CURRENT, current_qty, + COL_TOTAL, total_qty, + -1); +} + +void eom_main_window_set_no_select(EomMainWindow *self) +{ + if (GTK_IS_WIDGET(self->add_button)) + gtk_widget_set_sensitive(GTK_WIDGET(self->add_button), FALSE); + if (GTK_IS_WIDGET(self->remove_button)) + gtk_widget_set_sensitive(GTK_WIDGET(self->remove_button), FALSE); +} + +void eom_main_window_set_has_select(EomMainWindow *self) +{ + if (GTK_IS_WIDGET(self->add_button)) + gtk_widget_set_sensitive(GTK_WIDGET(self->add_button), TRUE); + if (GTK_IS_WIDGET(self->remove_button)) + gtk_widget_set_sensitive(GTK_WIDGET(self->remove_button), TRUE); +} + +static void eom_main_window_class_init(EomMainWindowClass *class) +{} + +static void eom_main_window_init(EomMainWindow *window) +{ + GtkCellRenderer *renderer; + GtkWidget *view; + GtkWidget *vbox; + GtkWidget *hbuttonbox; + GtkWidget *pannablearea; + GtkTreeViewColumn *current_column; + int index; + + index = -1; + + eom_main_window_add_menu(window); + + g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), NULL); + + window->store = gtk_list_store_new(NUM_COLS, + G_TYPE_INT, + G_TYPE_STRING, + G_TYPE_INT, + G_TYPE_INT); + + vbox = gtk_vbox_new(FALSE, 0); + + pannablearea = hildon_pannable_area_new(); + g_object_set(G_OBJECT(pannablearea), + "mov-mode", HILDON_MOVEMENT_MODE_VERT, + NULL); + gtk_box_pack_start(GTK_BOX(vbox), pannablearea, TRUE, TRUE, 0); + + view = gtk_tree_view_new(); + hildon_pannable_area_add_with_viewport(HILDON_PANNABLE_AREA(pannablearea), + view); + + window->selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); + g_signal_connect(window->selection, "changed", + G_CALLBACK(eom_main_window_on_selection_changed), + (gpointer)window); + + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), + ++index, + "Naam", + renderer, + "text", COL_NAME, + NULL); + current_column = gtk_tree_view_get_column(GTK_TREE_VIEW(view), index); + gtk_tree_view_column_set_expand(current_column, TRUE); + + renderer = gtk_cell_renderer_text_new(); + gtk_object_set(GTK_OBJECT(renderer), + "xalign", 1.0, + "width", 100, + NULL); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), + ++index, + "", + renderer, + "text", COL_CURRENT, + NULL); + + renderer = gtk_cell_renderer_text_new(); + gtk_object_set(GTK_OBJECT(renderer), + "xalign", 1.0, + "width", 100, + NULL); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), + ++index, + "", + renderer, + "text", COL_TOTAL, + NULL); + + gtk_tree_view_set_model(GTK_TREE_VIEW(view), + GTK_TREE_MODEL(window->store)); + g_object_unref(window->store); + + hbuttonbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); + gtk_box_pack_start(GTK_BOX(vbox), hbuttonbox, FALSE, TRUE, 0); + + window->add_button = + hildon_button_new_with_text(HILDON_SIZE_AUTO_WIDTH | + HILDON_SIZE_FINGER_HEIGHT, + HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, + "Add", + NULL); + g_signal_connect(window->add_button, "clicked", + G_CALLBACK(eom_main_window_on_add_clicked), + (gpointer)window); + gtk_box_pack_start(GTK_BOX(hbuttonbox), window->add_button, FALSE, FALSE, 0); + + window->edit_button = + hildon_button_new_with_text(HILDON_SIZE_AUTO_WIDTH | + HILDON_SIZE_FINGER_HEIGHT, + HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, + "Edit", + NULL); + g_signal_connect(window->edit_button, "clicked", + G_CALLBACK(eom_main_window_on_edit_clicked), + (gpointer)window); + gtk_box_pack_start(GTK_BOX(hbuttonbox), window->edit_button, FALSE, FALSE, 0); + + window->remove_button = + hildon_button_new_with_text(HILDON_SIZE_AUTO_WIDTH | + HILDON_SIZE_FINGER_HEIGHT, + HILDON_BUTTON_ARRANGEMENT_HORIZONTAL, + "Remove", + NULL); + g_signal_connect(window->remove_button, "clicked", + G_CALLBACK(eom_main_window_on_remove_clicked), + (gpointer)window); + gtk_box_pack_start(GTK_BOX(hbuttonbox), + window->remove_button, FALSE, FALSE, 0); + + gtk_container_add(GTK_CONTAINER(window), vbox); + + eom_main_window_set_no_select(window); +} + +static void eom_main_window_add_menu(EomMainWindow *window) +{ + GtkWidget *appmenu; + GtkWidget *new_button; + + appmenu = hildon_app_menu_new(); + + new_button = hildon_gtk_button_new(HILDON_SIZE_AUTO); + gtk_button_set_label(GTK_BUTTON(new_button), "New Manga"); + g_signal_connect_after(new_button, + "clicked", + 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_stackable_window_set_main_menu(HILDON_STACKABLE_WINDOW(window), + HILDON_APP_MENU(appmenu)); +} + +static void eom_main_window_on_new(GtkWidget *widget, GtkWindow *window) +{ + GtkWidget *dialog; + gint result; + gchar *name = NULL; + gint total_qty; + + dialog = interface_show_new_item_dialog(window); + + result = gtk_dialog_run(GTK_DIALOG(dialog)); + + if (result == GTK_RESPONSE_OK) { + const gchar *tmp; + tmp = eom_new_item_dialog_get_name(EOM_NEW_ITEM_DIALOG(dialog)); + name = (gchar *)malloc(strlen(tmp) + 1); + + strcpy(name, tmp); + strcat(name, "\0"); + + total_qty = eom_new_item_dialog_get_total_qty(EOM_NEW_ITEM_DIALOG(dialog)); + + gtk_widget_destroy(dialog); + } + + if (name != NULL) { + if (data_add_manga(name, total_qty)) + eom_main_window_load(EOM_MAIN_WINDOW(window)); + } +} + +static void eom_main_window_on_selection_changed(GtkTreeSelection *selection, + gpointer user_data) +{ + gint count; + EomMainWindow *self = (EomMainWindow *)user_data; + + count = gtk_tree_selection_count_selected_rows(selection); + if (count == 0) + eom_main_window_set_no_select(self); + else + eom_main_window_set_has_select(self); +} + +static void eom_main_window_on_add_clicked(GtkWidget *widget, gpointer user_data) +{ + EomMainWindow *self; + gint count; + + self = (EomMainWindow *)user_data; + count = gtk_tree_selection_count_selected_rows(self->selection); + + if (count > 0) { + GtkTreeModel *model; + + if (gtk_tree_selection_get_selected(self->selection, &model, &self->iter)) { + gint id; + gint current_count; + + gtk_tree_model_get(model, &self->iter, COL_ID, &id, -1); + gtk_tree_model_get(model, &self->iter, COL_CURRENT, ¤t_count, -1); + if (data_add_to_manga(id, 1)) + gtk_list_store_set(GTK_LIST_STORE(self->store), &self->iter, + COL_CURRENT, current_count + 1, -1); + + } + } +} + +static void eom_main_window_on_remove_clicked(GtkWidget *widget, + gpointer user_data) +{ + EomMainWindow *self; + gint count; + + self = (EomMainWindow *)user_data; + count = gtk_tree_selection_count_selected_rows(self->selection); + + if (count > 0) { + GtkTreeModel *model; + + if (gtk_tree_selection_get_selected(self->selection, &model, &self->iter)) { + gint id; + gint current_count; + + gtk_tree_model_get(model, &self->iter, COL_ID, &id, -1); + gtk_tree_model_get(model, &self->iter, COL_CURRENT, ¤t_count, -1); + + if (current_count > 0 && data_add_to_manga(id, -1)) + gtk_list_store_set(GTK_LIST_STORE(self->store), &self->iter, + COL_CURRENT, current_count - 1, -1); + } + } +} + +static void eom_main_window_on_edit_clicked(GtkWidget *widget, + gpointer user_data) +{ + EomMainWindow *self; + + self = (EomMainWindow *)user_data; + + /* TODO: Place more code here */ + interface_show_edit_window(); +} -- cgit v1.2.3-54-g00ecf