From 767ca99d338cddf3dff25d31e54739dbff400ad8 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Sun, 17 Oct 2010 13:48:02 +0200 Subject: Initial commit --- src/c-main-window.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/c-main-window.c (limited to 'src/c-main-window.c') diff --git a/src/c-main-window.c b/src/c-main-window.c new file mode 100644 index 0000000..79c47c6 --- /dev/null +++ b/src/c-main-window.c @@ -0,0 +1,146 @@ +#include "c-main-window.h" +#include +#include +#include +#include +#include "c-new-item-dialog.h" +#include "interface.h" + +G_DEFINE_TYPE(CMainWindow, c_main_window, HILDON_TYPE_STACKABLE_WINDOW) + +enum { + COL_NAME = 0, + COL_CURRENT, + COL_TOTAL, + NUM_COLS +}; + +static void c_main_window_add_menu(CMainWindow *window); +static void c_main_window_on_new(GtkWidget *widget, GtkWindow *window); + +GtkWidget *c_main_window_new(void) +{ + return g_object_new(C_TYPE_MAIN_WINDOW, NULL); +} + +void c_main_window_add_line(CMainWindow *window, + 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_NAME, name, + COL_CURRENT, current_qty, + COL_TOTAL, total_qty, + -1); +} + +static void c_main_window_class_init(CMainWindowClass *class) +{} + +static void c_main_window_init(CMainWindow *window) +{ + GtkCellRenderer *renderer; + GtkWidget *view; + GtkTreeViewColumn *current_column; + int index; + + index = -1; + + c_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_STRING, + G_TYPE_INT, + G_TYPE_INT); + + view = gtk_tree_view_new(); + + 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, 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, 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); + + gtk_container_add(GTK_CONTAINER(window), view); +} + +static void c_main_window_add_menu(CMainWindow *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 Item"); + g_signal_connect_after(new_button, + "clicked", + G_CALLBACK(c_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 c_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 = c_new_item_dialog_get_name(C_NEW_ITEM_DIALOG(dialog)); + name = (gchar *)malloc(strlen(tmp) + 1); + + strcpy(name, tmp); + strcat(name, "\0"); + + total_qty = c_new_item_dialog_get_total_qty(C_NEW_ITEM_DIALOG(dialog)); + + gtk_widget_destroy(dialog); + } + + if (name != NULL) { + c_main_window_add_line(C_MAIN_WINDOW(window), name, 0, total_qty); + } +} -- cgit v1.2.3-54-g00ecf