Edit screen
This commit is contained in:
parent
10901f7dcb
commit
dcf562d835
5 changed files with 226 additions and 56 deletions
|
@ -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_collection_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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
131
src/data.c
131
src/data.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue