diff --git a/client/glade/mainWindow.glade b/client/glade/mainWindow.glade
index 052d49c..c4402c6 100644
--- a/client/glade/mainWindow.glade
+++ b/client/glade/mainWindow.glade
@@ -124,91 +124,105 @@
-
+
+
+
True
diff --git a/client/src/main_window.c b/client/src/main_window.c
index 66e9a33..e8ea06d 100644
--- a/client/src/main_window.c
+++ b/client/src/main_window.c
@@ -8,6 +8,9 @@ struct mainWindow *mainWindow_new(GtkApplication *app)
builder = gtk_builder_new_from_resource("/net/notsyncing/yacos/glade/mainWindow.glade");
mainWindow = malloc(sizeof(struct mainWindow));
+
+ mainWindow->state = STATE_COLLECT;
+
mainWindow->main_window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
mainWindow->stack_main = GTK_STACK(gtk_builder_get_object(builder, "stack_main"));
@@ -17,6 +20,9 @@ struct mainWindow *mainWindow_new(GtkApplication *app)
mainWindow->page_cart.box = GTK_WIDGET(gtk_builder_get_object(builder, "box_cart"));
mainWindow->page_cart.list = GTK_LIST_BOX(gtk_builder_get_object(builder, "list_main"));
+ mainWindow->page_processing.box = GTK_WIDGET(gtk_builder_get_object(builder, "box_processing"));
+ mainWindow->page_processing.stack_loading_confirmation = GTK_STACK(gtk_builder_get_object(builder, "stack_loading_confirmation"));
+
gtk_builder_connect_signals(builder, NULL);
g_object_unref(G_OBJECT(builder));
@@ -27,34 +33,53 @@ struct mainWindow *mainWindow_new(GtkApplication *app)
void mainWindow_scan_tags(YacosScanner *scanner, struct mainWindow *mainWindow)
{
// TODO: Currently slow AF! And dirty. Pls rewrite (yea yea I know you won't...)
- gtk_stack_set_visible_child(mainWindow->stack_main, mainWindow->page_cart.box);
GtkWidget *le;
GList *l;
- yacos_tag_id tag_id;
+ struct yacos_scanner_tag *tag = NULL;
+ struct yacos_scanner_tag *id = NULL;
GList *stack_children;
GList *ll;
gboolean found = 0;
- for (l = yacos_scanner_get_present_tags(scanner); l != NULL; l = l->next) {
- tag_id = ((struct yacos_scanner_tag*) l->data)->tag_id;
- stack_children = gtk_container_get_children(GTK_CONTAINER(mainWindow->page_cart.list));
- for (ll = stack_children; ll != NULL; ll = ll->next) {
- if (yacos_cart_item_get_id(((YacosCartItem *) ll->data)) == tag_id) {
- found = 1;
- break;
+ /* Only process if we are currently interested in reading tags */
+ if (mainWindow->state == STATE_COLLECT) {
+ for (l = yacos_scanner_get_present_tags(scanner); l != NULL; l = l->next) {
+ tag = ((struct yacos_scanner_tag*) l->data);
+ if (tag->tag_type == TAG_TYPE_ID)
+ id = tag;
+ if (tag->tag_type != TAG_TYPE_ITEM)
+ continue;
+ stack_children = gtk_container_get_children(GTK_CONTAINER(mainWindow->page_cart.list));
+ for (ll = stack_children; ll != NULL; ll = ll->next) {
+ if (yacos_cart_item_get_id(((YacosCartItem *) ll->data)) == tag->tag_id) {
+ found = 1;
+ break;
+ }
}
+ if (found)
+ continue;
+ le = yacos_cart_item_new();
+ yacos_cart_item_set_yacos_api(YACOS_CART_ITEM(le),
+ mainWindow->api);
+ yacos_cart_item_set_id(YACOS_CART_ITEM(le), tag->tag_id);
+ yacos_cart_item_fetch_meta(YACOS_CART_ITEM(le));
+ yacos_cart_item_fetch_image(YACOS_CART_ITEM(le));
+ gtk_list_box_insert(mainWindow->page_cart.list, le, -1);
+ gtk_widget_show(le);
+ }
+
+ if (id) { /* A valid ID was presented */
+ stack_children = gtk_container_get_children(GTK_CONTAINER(mainWindow->page_cart.list));
+ if (stack_children) { /* Items in cart -> Go to check-out */
+ mainWindow->state = STATE_PROCESS;
+ gtk_stack_set_visible_child(mainWindow->stack_main, mainWindow->page_processing.box);
+ } else { /* No items in cart -> Go to check-in */
+ /* TODO */
+ }
+ } else { /* (Only) items were added, make sure we show the cart */
+ gtk_stack_set_visible_child(mainWindow->stack_main, mainWindow->page_cart.box);
}
- if (found)
- continue;
- le = yacos_cart_item_new();
- yacos_cart_item_set_yacos_api(YACOS_CART_ITEM(le),
- mainWindow->api);
- yacos_cart_item_set_id(YACOS_CART_ITEM(le), tag_id);
- yacos_cart_item_fetch_meta(YACOS_CART_ITEM(le));
- yacos_cart_item_fetch_image(YACOS_CART_ITEM(le));
- gtk_list_box_insert(mainWindow->page_cart.list, le, -1);
- gtk_widget_show(le);
}
}
diff --git a/client/src/main_window.h b/client/src/main_window.h
index 63080d7..13fb209 100644
--- a/client/src/main_window.h
+++ b/client/src/main_window.h
@@ -6,21 +6,29 @@
#include "cart_item.h"
#include "yacos_api.h"
+enum yacos_state {STATE_COLLECT, STATE_PROCESS, STATE_REVIEW};
+
struct mainWindow {
- GtkWidget *main_window;
+ enum yacos_state state;
- YacosApi *api;
- GtkStack *stack_main;
+ GtkWidget *main_window;
- struct page_intro {
- GtkWidget *box;
- } page_intro;
+ YacosApi *api;
+ GtkStack *stack_main;
- struct page_cart {
- GtkWidget *box;
- GtkListBox *list;
- } page_cart;
+ struct page_intro {
+ GtkWidget *box;
+ } page_intro;
+ struct page_cart {
+ GtkWidget *box;
+ GtkListBox *list;
+ } page_cart;
+
+ struct page_processing {
+ GtkWidget *box;
+ GtkStack *stack_loading_confirmation;
+ } page_processing;
};
struct mainWindow *mainWindow_new();