Finished the uiTable test and fixed errors.

This commit is contained in:
Pietro Gagliardi 2015-10-19 10:52:36 -04:00
parent fa2252e9c6
commit 5d26b9b059
5 changed files with 87 additions and 16 deletions

View File

@ -11,6 +11,7 @@ CFILES += \
test/page5.c \
test/page6.c \
test/page7.c \
test/page8.c \
test/spaced.c
HFILES += \

View File

@ -1,11 +1,80 @@
// 18 october 2015
#include "test.h"
// TODO manage the memory of the uiTableModel
static intmax_t nColumns = 4;
static uiTableColumnType coltypes[] = {
uiTableColumnText,
uiTableColumnText,
uiTableColumnCheckbox,
uiTableColumnCheckbox,
};
static intmax_t nRows = 6;
static intmax_t modelNumRows(uiTableModel *m, void *mData)
{
return nRows;
}
void *modelCellValue(uiTableModel *m, void *mData, intmax_t row, intmax_t column)
{
char line[20];
line[0] = 'R';
line[1] = 'o';
line[2] = 'w';
line[3] = ' ';
line[4] = row + '0';
line[5] = '\0';
switch (column) {
case 0:
case 1:
return uiTableModelFromString(line);
case 2:
return uiTableModelFromBool(row % 2 == 0);
case 3:
return uiTableModelFromBool(row % 3 == 0);
}
// TODO
return NULL;
}
// TODO make this not need to be static
uiTableModelSpec spec;
void modelSetCellValue(uiTableModel *m, void *mData, intmax_t row, intmax_t column, void *value)
{
// TODO
}
uiBox *makePage8(void)
{
uiBox *page8;
uiTable *table;
uiTableModel *model;
uiTableColumnParams p;
intmax_t i;
page8 = newVerticalBox();
table = uiNewTable();
uiBoxAppend(page8, uiControl(table), 1);
spec.NumRows = modelNumRows;
spec.CellValue = modelCellValue;
spec.SetCellValue = modelSetCellValue;
model = uiNewTableModel(nColumns, coltypes, &spec, NULL);
uiTableSetModel(table, model);
for (i = 0; i < nColumns; i++) {
p.Name = "Column";
p.Type = coltypes[i];
p.Mutable = i % 2 == 1;
p.ValueColumn = i;
uiTableAppendColumn(table, &p);
}
return page8;
}

6
ui.h
View File

@ -522,8 +522,8 @@ typedef struct uiTableColumnParams uiTableColumnParams;
typedef enum uiTableColumnType uiTableColumnType;
typedef enum uiTableNotification uiTableNotification;
_UI_EXTERN uintmax_t uiMenuItemType(void);
#define uiArea(this) ((uiArea *) uiIsA((this), uiAreaType(), 1))
_UI_EXTERN uintmax_t uiTableType(void);
#define uiTable(this) ((uiTable *) uiIsA((this), uiTableType(), 1))
_UI_EXTERN void uiTableSetModel(uiTable *t, uiTableModel *m);
_UI_EXTERN void uiTableAppendColumn(uiTable *t, uiTableColumnParams *p);
_UI_EXTERN uiTable *uiNewTable(void);
@ -550,7 +550,7 @@ _UI_EXTERN uiTableModel *uiNewTableModel(uintmax_t nCols, uiTableColumnType *typ
_UI_EXTERN void uiFreeTableModel(uiTableModel *m);
_UI_EXTERN void uiTableModelNotify(uiTableModel *m, uiTableNotification notification, intmax_t row, intmax_t column);
#define uiTableModelFromBool(b) ((void *) (b))
#define uiTableModelFromBool(b) ((void *) ((intptr_t) (b)))
_UI_EXTERN void *uiTableModelFromString(const char *str);
struct uiTableColumnParams {

View File

@ -20,7 +20,7 @@ uiUnixDefineControl(
void uiTableSetModel(uiTable *t, uiTableModel *m)
{
t->model = m;
gtk_tree_view_set_model(t->treeview, GTK_TREE_MODEL(t->moel));
gtk_tree_view_set_model(t->treeview, GTK_TREE_MODEL(t->model));
}
void uiTableAppendColumn(uiTable *t, uiTableColumnParams *p)
@ -58,7 +58,7 @@ void uiTableAppendColumn(uiTable *t, uiTableColumnParams *p)
NULL);
// allow columns to be resized
gtk_tree_view_column_set_resizable(col, TRUE);
gtk_tree_view_append_column(t->treeviw, col);
gtk_tree_view_append_column(t->treeview, col);
}
uiTable *uiNewTable(void)

View File

@ -25,7 +25,7 @@ struct uiTableModelClass {
GObjectClass parent_class;
};
static void uiTableModel_treeModel_init(GtkTreeModel *);
static void uiTableModel_treeModel_init(GtkTreeModelIface *);
G_DEFINE_TYPE_WITH_CODE(uiTableModel, uiTableModel, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE(GTK_TYPE_TREE_MODEL, uiTableModel_treeModel_init))
@ -115,8 +115,8 @@ void *uiTableModelFromString(const char *str)
return g_strdup(str);
}
#define toBool(v) ((int) (v))
#define toStr(v) ((const char *) (v))
#define toBool(v) ((int) ((intptr_t) (v)))
#define toStr(v) ((char *) (v))
static void uiTableModel_get_value(GtkTreeModel *mb, GtkTreeIter *iter, gint column, GValue *value)
{
@ -178,11 +178,11 @@ static gboolean uiTableModel_iter_children(GtkTreeModel *mb, GtkTreeIter *iter,
uiTableModel *m = uiTableModel(mb);
if (parent == NULL && numRows(m) > 0) {
child->stamp = GOOD_STAMP;
child->user_data = 0;
iter->stamp = GOOD_STAMP;
iter->user_data = 0;
return TRUE;
}
child->stamp = BAD_STAMP;
iter->stamp = BAD_STAMP;
return FALSE;
}
@ -205,17 +205,17 @@ static gboolean uiTableModel_iter_nth_child(GtkTreeModel *mb, GtkTreeIter *iter,
uiTableModel *m = uiTableModel(mb);
if (parent == NULL && n >= 0 && n < numRows(m)) {
child->stamp = GOOD_STAMP;
child->user_data = TO(n);
iter->stamp = GOOD_STAMP;
iter->user_data = TO(n);
return TRUE;
}
child->stamp = BAD_STAMP;
iter->stamp = BAD_STAMP;
return FALSE;
}
static gboolean uiTableModel_iter_parent(GtkTreeModel *mb, GtkTreeIter *iter, GtkTreeIter *child)
{
parent->stamp = BAD_STAMP;
iter->stamp = BAD_STAMP;
return FALSE;
}
@ -225,7 +225,7 @@ static void uiTableModel_class_init(uiTableModelClass *class)
G_OBJECT_CLASS(class)->finalize = uiTableModel_finalize;
}
static void uiTableModel_treeModel_init(GtkTreeModel *iface)
static void uiTableModel_treeModel_init(GtkTreeModelIface *iface)
{
iface->get_flags = uiTableModel_get_flags;
iface->get_n_columns = uiTableModel_get_n_columns;
@ -246,6 +246,7 @@ static void uiTableModel_treeModel_init(GtkTreeModel *iface)
uiTableModel *uiNewTableModel(uintmax_t nCols, uiTableColumnType *types, uiTableModelSpec *spec, void *mData)
{
uiTableModel *m;
intmax_t i;
m = uiTableModel(g_object_new(uiTableModelType, NULL));
m->spec = spec;