aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemsen2010-10-17 13:48:02 +0200
committerGravatar Tom Willemsen2010-10-17 13:48:02 +0200
commit767ca99d338cddf3dff25d31e54739dbff400ad8 (patch)
treeca1aafc8d2a3c203041e08dbdecfea176e5179f9
downloadeye-on-manga-767ca99d338cddf3dff25d31e54739dbff400ad8.tar.gz
eye-on-manga-767ca99d338cddf3dff25d31e54739dbff400ad8.zip
Initial commit
-rw-r--r--.gitignore1
-rw-r--r--src/Makefile16
-rw-r--r--src/c-main-window.c146
-rw-r--r--src/c-main-window.h61
-rw-r--r--src/c-new-item-dialog.c49
-rw-r--r--src/c-new-item-dialog.h60
-rw-r--r--src/collections.c15
-rw-r--r--src/interface.c28
-rw-r--r--src/interface.h4
9 files changed, 380 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..42d711b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+collections
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..24b89b6
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,16 @@
+CFLAGS=`pkg-config hildon-1 --cflags --libs`
+
+all:
+ $(CC) -Wall -Wextra -pedantic \
+ collections.c \
+ interface.c \
+ c-main-window.c \
+ c-new-item-dialog.c \
+ $(CFLAGS) \
+ -o collections
+
+.PHONY: check-syntax
+check-syntax:
+ /scratchbox/login $(CC) -pedantic -Wall -Wextra -fsyntax-only \
+ `readlink -f $(CHK_SOURCES)` \
+ `/scratchbox/login pkg-config hildon-1 --cflags --libs`
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 <hildon/hildon.h>
+#include <gtk/gtk.h>
+#include <string.h>
+#include <stdlib.h>
+#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);
+ }
+}
diff --git a/src/c-main-window.h b/src/c-main-window.h
new file mode 100644
index 0000000..185f532
--- /dev/null
+++ b/src/c-main-window.h
@@ -0,0 +1,61 @@
+#ifndef __C_MAIN_WINDOW_H__
+#define __C_MAIN_WINDOW_H__
+
+#include <hildon/hildon-stackable-window.h>
+
+G_BEGIN_DECLS
+
+#define C_TYPE_MAIN_WINDOW \
+ (c_main_window_get_type())
+
+#define C_MAIN_WINDOW(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ C_TYPE_MAIN_WINDOW, \
+ CMainWindow))
+
+#define C_MAIN_WINDOW_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ C_TYPE_MAIN_WINDOW, \
+ CMainWindowClass))
+
+#define C_IS_MAIN_WINDOW(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ C_TYPE_MAIN_WINDOW))
+
+#define C_IS_MAIN_WINDOW_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ C_TYPE_MAIN_WINDOW))
+
+#define C_MAIN_WINDOW_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ C_TYPE_MAIN_WINDOW, \
+ CMainWindowClass))
+
+typedef struct _CMainWindow CMainWindow;
+typedef struct _CMainWindowClass CMainWindowClass;
+
+struct _CMainWindowClass
+{
+ HildonStackableWindowClass parent_class;
+};
+
+struct _CMainWindow
+{
+ HildonStackableWindow parent;
+
+ GtkTreeIter iter;
+ GtkListStore *store;
+};
+
+GType c_main_window_get_type(void);
+
+GtkWidget *c_main_window_new(void);
+
+void c_main_window_add_line(CMainWindow *window,
+ const gchar *name,
+ gint current_qty,
+ gint total_qty);
+
+G_END_DECLS
+
+#endif /* __C_MAIN_WINDOW_H__ */
diff --git a/src/c-new-item-dialog.c b/src/c-new-item-dialog.c
new file mode 100644
index 0000000..75142e9
--- /dev/null
+++ b/src/c-new-item-dialog.c
@@ -0,0 +1,49 @@
+#include "c-new-item-dialog.h"
+#include <hildon/hildon-entry.h>
+#include <gtk/gtk.h>
+#include <stdlib.h>
+
+G_DEFINE_TYPE(CNewItemDialog, c_new_item_dialog, GTK_TYPE_DIALOG)
+
+GtkWidget *c_new_item_dialog_new(void)
+{
+ return g_object_new(C_TYPE_NEW_ITEM_DIALOG, NULL);
+}
+
+const gchar *c_new_item_dialog_get_name(CNewItemDialog *dialog)
+{
+ return hildon_entry_get_text(HILDON_ENTRY(dialog->name_entry));
+}
+
+gint c_new_item_dialog_get_total_qty(CNewItemDialog *dialog)
+{
+ return atoi(hildon_entry_get_text(HILDON_ENTRY(dialog->qty_entry)));
+}
+
+static void c_new_item_dialog_class_init(CNewItemDialogClass *class)
+{}
+
+static void c_new_item_dialog_init(CNewItemDialog *dialog)
+{
+ GtkWidget *content_area;
+ GtkWidget *hbox;
+
+ content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
+
+ hbox = gtk_vbox_new(FALSE, 0);
+ gtk_container_add(GTK_CONTAINER(content_area), hbox);
+
+ dialog->name_entry = hildon_entry_new(HILDON_SIZE_AUTO);
+ hildon_entry_set_placeholder(HILDON_ENTRY(dialog->name_entry), "Name...");
+ gtk_box_pack_start(GTK_BOX(hbox), dialog->name_entry, TRUE, TRUE, 0);
+
+ dialog->qty_entry = hildon_entry_new(HILDON_SIZE_AUTO);
+ hildon_entry_set_text(HILDON_ENTRY(dialog->qty_entry), "0");
+ gtk_box_pack_start(GTK_BOX(hbox), dialog->qty_entry, TRUE, TRUE, 0);
+
+ gtk_window_set_title(GTK_WINDOW(dialog), "New item");
+ gtk_dialog_add_buttons(GTK_DIALOG(dialog),
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK,
+ NULL);
+}
diff --git a/src/c-new-item-dialog.h b/src/c-new-item-dialog.h
new file mode 100644
index 0000000..2d83f71
--- /dev/null
+++ b/src/c-new-item-dialog.h
@@ -0,0 +1,60 @@
+#ifndef __C_NEW_ITEM_DIALOG_H__
+#define __C_NEW_ITEM_DIALOG_H__
+
+#include <gtk/gtkdialog.h>
+
+G_BEGIN_DECLS
+
+#define C_TYPE_NEW_ITEM_DIALOG \
+ (c_new_item_dialog_get_type())
+
+#define C_NEW_ITEM_DIALOG(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+ C_TYPE_NEW_ITEM_DIALOG, \
+ CNewItemDialog))
+
+#define C_NEW_ITEM_DIALOG_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST ((klass), \
+ C_TYPE_NEW_ITEM_DIALOG, \
+ CNewItemDialogClass))
+
+#define C_IS_NEW_ITEM_DIALOG(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+ C_TYPE_NEW_ITEM_DIALOG))
+
+#define C_IS_NEW_ITEM_DIALOG_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ C_TYPE_NEW_ITEM_DIALOG))
+
+#define C_NEW_ITEM_DIALOG_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+ C_TYPE_NEW_ITEM_DIALOG, \
+ CNewItemDialogClass))
+
+typedef struct _CNewItemDialog CNewItemDialog;
+typedef struct _CNewItemDialogClass CNewItemDialogClass;
+
+struct _CNewItemDialogClass
+{
+ GtkDialogClass parent_class;
+};
+
+struct _CNewItemDialog
+{
+ GtkDialog parent;
+
+ GtkWidget *name_entry;
+ GtkWidget *qty_entry;
+};
+
+GType c_new_item_dialog_get_type(void);
+
+GtkWidget *c_new_item_dialog_new(void);
+
+const gchar *c_new_item_dialog_get_name(CNewItemDialog *dialog);
+
+gint c_new_item_dialog_get_total_qty(CNewItemDialog *dialog);
+
+G_END_DECLS
+
+#endif /* __C_NEW_ITEM_DIALOG_H__ */
diff --git a/src/collections.c b/src/collections.c
new file mode 100644
index 0000000..38d9f76
--- /dev/null
+++ b/src/collections.c
@@ -0,0 +1,15 @@
+#include <hildon/hildon.h>
+#include "interface.h"
+
+int main(int argc, char *argv[])
+{
+ hildon_gtk_init(&argc, &argv);
+
+ g_set_application_name("Collections");
+
+ interface_show_main_window();
+
+ gtk_main();
+
+ return 0;
+}
diff --git a/src/interface.c b/src/interface.c
new file mode 100644
index 0000000..5e68160
--- /dev/null
+++ b/src/interface.c
@@ -0,0 +1,28 @@
+#include <hildon/hildon.h>
+#include "interface.h"
+#include "c-main-window.h"
+#include "c-new-item-dialog.h"
+
+void interface_show_main_window(void)
+{
+ GtkWidget *window;
+
+ window = c_main_window_new();
+ gtk_widget_show_all(window);
+
+ c_main_window_add_line(C_MAIN_WINDOW(window), "Biomega", 2, 0);
+ c_main_window_add_line(C_MAIN_WINDOW(window), "Blame!", 7, 10);
+ c_main_window_add_line(C_MAIN_WINDOW(window), "Hellsing", 2, 14);
+}
+
+GtkWidget *interface_show_new_item_dialog(GtkWindow *window)
+{
+ GtkWidget *dialog;
+
+ dialog = c_new_item_dialog_new();
+ gtk_widget_show_all(dialog);
+
+ gtk_window_set_transient_for(GTK_WINDOW(dialog), window);
+
+ return dialog;
+}
diff --git a/src/interface.h b/src/interface.h
new file mode 100644
index 0000000..0bd37ad
--- /dev/null
+++ b/src/interface.h
@@ -0,0 +1,4 @@
+#include <gtk/gtkwindow.h>
+
+void interface_show_main_window(void);
+GtkWidget *interface_show_new_item_dialog(GtkWindow *window);