Edit screen

This commit is contained in:
Tom Willemsen 2010-10-21 19:29:14 +02:00
parent 10901f7dcb
commit e963880636
5 changed files with 226 additions and 56 deletions

View file

@ -1,30 +1,90 @@
#include "c-edit-window.h"
#include <hildon/hildon.h>
#include <limits.h>
#include "data.h"
enum {
C_EDIT_PROP_0,
C_EDIT_PROP_CID
};
static void c_edit_window_set_collection_id(CEditWindow *self,
gint collection_id);
G_DEFINE_TYPE(CEditWindow, c_edit_window, HILDON_TYPE_STACKABLE_WINDOW)
GtkWidget *c_edit_window_new(void)
GtkWidget *c_edit_window_new(gint collection_id)
{
return g_object_new(C_TYPE_EDIT_WINDOW, NULL);
g_print("1: %d\n", collection_id);
return g_object_new(C_TYPE_EDIT_WINDOW, "collection-id", collection_id, NULL);
}
static void c_edit_window_class_init(CEditWindowClass *class)
{}
static void c_edit_window_set_property(GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
CEditWindow *self = C_EDIT_WINDOW(object);
switch (property_id) {
case C_EDIT_PROP_CID:
g_print("2: %d\n", g_value_get_int(value));
self->collection_id = g_value_get_int(value);
break;
default:
/* We don't have any other properties */
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
}
}
static void c_edit_window_get_property(GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
CEditWindow *self = C_EDIT_WINDOW(object);
switch (property_id) {
case C_EDIT_PROP_CID:
g_value_set_int(value, self->collection_id);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
break;
}
}
static void c_edit_window_class_init(CEditWindowClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
GParamSpec *pspec;
gobject_class->set_property = c_edit_window_set_property;
gobject_class->get_property = c_edit_window_get_property;
pspec = g_param_spec_int("collection-id",
"ID for the collection",
"Set the collection-id",
0,
INT_MAX,
0,
G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE);
g_object_class_install_property(gobject_class,
C_EDIT_PROP_CID,
pspec);
}
static void c_edit_window_init(CEditWindow *self)
{
GtkWidget *pannablearea;
GtkWidget *table;
GtkWidget *nameclabel;
GtkWidget *namelabel;
GtkWidget *haveclabel;
GtkWidget *havelabel;
GtkWidget *totalclabel;
GtkWidget *totallabel;
GtkWidget *layout;
int i;
struct collection test = { 0, 3, 10, "Biomega" };
GtkWidget *vbox;
g_print("3: %d\n", self->collection_id);
pannablearea = hildon_pannable_area_new();
g_object_set(G_OBJECT(pannablearea),
@ -41,9 +101,9 @@ static void c_edit_window_init(CEditWindow *self)
gtk_table_attach(GTK_TABLE(table), nameclabel, 0, 1, 0, 1,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
namelabel = gtk_label_new(test.name);
gtk_misc_set_alignment(GTK_MISC(namelabel), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), namelabel, 1, 2, 0, 1,
self->name_label = gtk_label_new("");
gtk_misc_set_alignment(GTK_MISC(self->name_label), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), self->name_label, 1, 2, 0, 1,
GTK_EXPAND | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
haveclabel = gtk_label_new("You have:");
@ -51,9 +111,9 @@ static void c_edit_window_init(CEditWindow *self)
gtk_table_attach(GTK_TABLE(table), haveclabel, 0, 1, 1, 2,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
havelabel = gtk_label_new(g_strdup_printf("%d", test.current_qty));
gtk_misc_set_alignment(GTK_MISC(havelabel), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), havelabel, 1, 2, 1, 2,
self->have_label = gtk_label_new("");
gtk_misc_set_alignment(GTK_MISC(self->have_label), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), self->have_label, 1, 2, 1, 2,
GTK_EXPAND | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
totalclabel = gtk_label_new("There are:");
@ -61,23 +121,30 @@ static void c_edit_window_init(CEditWindow *self)
gtk_table_attach(GTK_TABLE(table), totalclabel, 0, 1, 2, 3,
GTK_SHRINK | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
totallabel = gtk_label_new((test.total_qty == 0)
? "?"
: g_strdup_printf("%d", test.total_qty));
gtk_misc_set_alignment(GTK_MISC(totallabel), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), totallabel, 1, 2, 2, 3,
self->total_label = gtk_label_new("");
gtk_misc_set_alignment(GTK_MISC(self->total_label), 1.0, 0.5);
gtk_table_attach(GTK_TABLE(table), self->total_label, 1, 2, 2, 3,
GTK_EXPAND | GTK_FILL, GTK_SHRINK | GTK_FILL, 0, 0);
/*layout = gtk_layout_new(NULL, NULL);
gtk_table_attach(GTK_TABLE(table), layout, 0, 2, 3, 4,
vbox = gtk_vbox_new(TRUE, 0);
gtk_table_attach(GTK_TABLE(table), vbox, 0, 2, 3, 4,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
for (i = 0; i < test.total_qty; i++) {
GtkWidget *button;
button = hildon_check_button_new(HILDON_SIZE_FINGER_HEIGHT |
HILDON_SIZE_AUTO_WIDTH);
gtk_button_set_label(GTK_BUTTON(button), g_strdup_printf("%d", i));
}*/
}
static void c_edit_window_set_collection_id(CEditWindow *self,
gint collection_id)
{
struct collection *col;
gint *items;
col = data_get_series_by_id(collection_id);
items = data_get_items_by_collection_id(collection_id);
gtk_label_set_text(GTK_LABEL(self->name_label), col->name);
gtk_label_set_text(GTK_LABEL(self->have_label),
g_strdup_printf("%d", col->current_qty));
gtk_label_set_text(GTK_LABEL(self->total_label),
g_strdup_printf("%d", col->total_qty));
g_free(col);
}

View file

@ -42,11 +42,17 @@ struct _CEditWindowClass
struct _CEditWindow
{
HildonStackableWindow parent;
GtkWidget *name_label;
GtkWidget *have_label;
GtkWidget *total_label;
gint collection_id;
};
GType c_edit_window_get_type(void);
GType c_edit_window_get_type(void);
GtkWidget *c_edit_window_new(void);
GtkWidget *c_edit_window_new(gint collection_id);
G_END_DECLS

View file

@ -8,8 +8,9 @@
#include <errno.h>
#include "collections.h"
static gboolean data_check_and_create_database(gchar *data_file);
static gint data_create_new_database(const gchar *filename);
static gboolean data_check_and_create_database(gchar *data_file);
static gint data_create_new_database(const gchar *filename);
static struct collection *data_get_collection_from_stmt(sqlite3_stmt *stmt);
GList *data_get_series(void)
{
@ -38,14 +39,7 @@ GList *data_get_series(void)
&statement, NULL);
if (res == SQLITE_OK) {
while (sqlite3_step(statement) == SQLITE_ROW) {
struct collection *col =
(struct collection *)malloc(sizeof(struct collection));
col->id = sqlite3_column_int(statement, 0);
col->name = g_strdup(sqlite3_column_text(statement, 1));
col->current_qty = sqlite3_column_int(statement, 2);
col->total_qty = sqlite3_column_int(statement, 3);
struct collection *col = data_get_collection_from_stmt(statement);
list = g_list_append(list, (gpointer)col);
}
}
@ -53,19 +47,103 @@ GList *data_get_series(void)
g_print("error %d: %s\n", res, sqlite3_errmsg(database));
/* Release the compiled statement from memory */
sqlite3_finalize(statement);
}
sqlite3_close(database);
}
sqlite3_close(database);
}
return list;
}
struct collection *data_get_series_by_id(gint collection_id)
{
sqlite3 *database;
sqlite3_stmt *statement;
gchar *data_file;
struct collection *col = NULL;
data_file = collections_get_data_file();
if (data_check_and_create_database(data_file)) {
if (sqlite3_open(data_file, &database) == SQLITE_OK) {
int res;
const char *sql = g_strdup_printf(
" SELECT id, "
" name, "
" current_qty, "
" total_qty "
" FROM collection "
" WHERE id = %d ", collection_id);
res = sqlite3_prepare_v2(database, sql, strlen(sql), &statement, NULL);
if (res == SQLITE_OK) {
if (sqlite3_step(statement) == SQLITE_ROW) {
col = data_get_collection_from_stmt(statement);
}
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
}
return col;
}
gint *data_get_items_by_collection_id(gint collection_id)
{
gint count;
gint *volumes;
sqlite3 *database;
sqlite3_stmt *statement;
gchar *data_file;
data_file = collections_get_data_file();
count = 0;
if (data_check_and_create_database(data_file)) {
if (sqlite3_open(data_file, &database) == SQLITE_OK) {
int res;
const char *sql = g_strdup_printf(
" SELECT COUNT(id) "
" FROM items "
" WHERE collection_id = %d ", collection_id);
res = sqlite3_prepare_v2(database, sql, strlen(sql), &statement, NULL);
if (res == SQLITE_OK) {
if (sqlite3_step(statement) == SQLITE_ROW) {
count = sqlite3_column_int(statement, 0);
}
}
sqlite3_finalize(statement);
if (count > 0) {
sql = g_strdup_printf(
" SELECT id "
" FROM items "
" WHERE collection_id = %d ", collection_id);
res = sqlite3_prepare_v2(database, sql, strlen(sql), &statement, NULL);
if (res == SQLITE_OK) {
gint i = 0;
while (sqlite3_step(statement) == SQLITE_ROW) {
volumes[i++] = sqlite3_column_int(statement, 0);
}
}
}
}
sqlite3_close(database);
}
return volumes;
}
gboolean data_add_series(gchar *name, gint total_qty)
{
sqlite3 *database;
sqlite3_stmt *statement;
gchar *data_file;
gboolean result;
result = FALSE;
data_file = collections_get_data_file();
if (data_check_and_create_database(data_file)) {
@ -81,12 +159,14 @@ gboolean data_add_series(gchar *name, gint total_qty)
&statement, NULL);
if (res == SQLITE_OK) {
if (sqlite3_step(statement) == SQLITE_DONE)
return TRUE;
result = TRUE;
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
}
return FALSE;
return result;
}
gboolean data_add_to_series(gint collection_id, gint count)
@ -94,10 +174,10 @@ gboolean data_add_to_series(gint collection_id, gint count)
sqlite3 *database;
sqlite3_stmt *statement;
gchar *data_file;
g_print("collection_id: %d, count: %d\n", collection_id, count);
gboolean result;
data_file = collections_get_data_file();
result = FALSE;
if (data_check_and_create_database(data_file)) {
if (sqlite3_open(data_file, &database) == SQLITE_OK) {
@ -113,12 +193,14 @@ gboolean data_add_to_series(gint collection_id, gint count)
&statement, NULL);
if (res == SQLITE_OK) {
if (sqlite3_step(statement) == SQLITE_DONE)
return TRUE;
result = TRUE;
}
sqlite3_finalize(statement);
}
sqlite3_close(database);
}
return FALSE;
return result;
}
static gboolean data_check_and_create_database(gchar *data_file)
@ -185,3 +267,16 @@ static gint data_create_new_database(const gchar *filename)
sqlite3_close(db);
return 0;
}
static struct collection *data_get_collection_from_stmt(sqlite3_stmt *stmt)
{
struct collection *collection =
(struct collection *)malloc(sizeof(struct collection));
collection->id = sqlite3_column_int(stmt, 0);
collection->name = g_strdup(sqlite3_column_text(stmt, 1));
collection->current_qty = sqlite3_column_int(stmt, 2);
collection->total_qty = sqlite3_column_int(stmt, 3);
return collection;
}

View file

@ -8,6 +8,8 @@ struct collection
char *name;
};
GList *data_get_series(void);
gboolean data_add_series(gchar *name, gint total_qty);
gboolean data_add_to_series(gint id, gint count);
GList *data_get_series(void);
struct collection *data_get_series_by_id(gint collection_id);
gint *data_get_items_by_collection_id(gint collection_id);
gboolean data_add_series(gchar *name, gint total_qty);
gboolean data_add_to_series(gint id, gint count);

View file

@ -22,7 +22,7 @@ void interface_show_edit_window(void)
stack = hildon_window_stack_get_default();
window = c_edit_window_new();
window = c_edit_window_new(1);
hildon_window_stack_push(stack, HILDON_STACKABLE_WINDOW(window), NULL);
gtk_widget_show_all(window);
}