Initial commit

This commit is contained in:
Tom Willemsen 2010-10-17 13:48:02 +02:00
commit 767ca99d33
9 changed files with 380 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
collections

16
src/Makefile Normal file
View file

@ -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`

146
src/c-main-window.c Normal file
View file

@ -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);
}
}

61
src/c-main-window.h Normal file
View file

@ -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__ */

49
src/c-new-item-dialog.c Normal file
View file

@ -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);
}

60
src/c-new-item-dialog.h Normal file
View file

@ -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__ */

15
src/collections.c Normal file
View file

@ -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;
}

28
src/interface.c Normal file
View file

@ -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;
}

4
src/interface.h Normal file
View file

@ -0,0 +1,4 @@
#include <gtk/gtkwindow.h>
void interface_show_main_window(void);
GtkWidget *interface_show_new_item_dialog(GtkWindow *window);