Finished the uiTable test and fixed errors.
This commit is contained in:
parent
fa2252e9c6
commit
5d26b9b059
|
@ -11,6 +11,7 @@ CFILES += \
|
||||||
test/page5.c \
|
test/page5.c \
|
||||||
test/page6.c \
|
test/page6.c \
|
||||||
test/page7.c \
|
test/page7.c \
|
||||||
|
test/page8.c \
|
||||||
test/spaced.c
|
test/spaced.c
|
||||||
|
|
||||||
HFILES += \
|
HFILES += \
|
||||||
|
|
69
test/page8.c
69
test/page8.c
|
@ -1,11 +1,80 @@
|
||||||
// 18 october 2015
|
// 18 october 2015
|
||||||
#include "test.h"
|
#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 *makePage8(void)
|
||||||
{
|
{
|
||||||
uiBox *page8;
|
uiBox *page8;
|
||||||
|
uiTable *table;
|
||||||
|
uiTableModel *model;
|
||||||
|
uiTableColumnParams p;
|
||||||
|
intmax_t i;
|
||||||
|
|
||||||
page8 = newVerticalBox();
|
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;
|
return page8;
|
||||||
}
|
}
|
||||||
|
|
6
ui.h
6
ui.h
|
@ -522,8 +522,8 @@ typedef struct uiTableColumnParams uiTableColumnParams;
|
||||||
typedef enum uiTableColumnType uiTableColumnType;
|
typedef enum uiTableColumnType uiTableColumnType;
|
||||||
typedef enum uiTableNotification uiTableNotification;
|
typedef enum uiTableNotification uiTableNotification;
|
||||||
|
|
||||||
_UI_EXTERN uintmax_t uiMenuItemType(void);
|
_UI_EXTERN uintmax_t uiTableType(void);
|
||||||
#define uiArea(this) ((uiArea *) uiIsA((this), uiAreaType(), 1))
|
#define uiTable(this) ((uiTable *) uiIsA((this), uiTableType(), 1))
|
||||||
_UI_EXTERN void uiTableSetModel(uiTable *t, uiTableModel *m);
|
_UI_EXTERN void uiTableSetModel(uiTable *t, uiTableModel *m);
|
||||||
_UI_EXTERN void uiTableAppendColumn(uiTable *t, uiTableColumnParams *p);
|
_UI_EXTERN void uiTableAppendColumn(uiTable *t, uiTableColumnParams *p);
|
||||||
_UI_EXTERN uiTable *uiNewTable(void);
|
_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 uiFreeTableModel(uiTableModel *m);
|
||||||
_UI_EXTERN void uiTableModelNotify(uiTableModel *m, uiTableNotification notification, intmax_t row, intmax_t column);
|
_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);
|
_UI_EXTERN void *uiTableModelFromString(const char *str);
|
||||||
|
|
||||||
struct uiTableColumnParams {
|
struct uiTableColumnParams {
|
||||||
|
|
|
@ -20,7 +20,7 @@ uiUnixDefineControl(
|
||||||
void uiTableSetModel(uiTable *t, uiTableModel *m)
|
void uiTableSetModel(uiTable *t, uiTableModel *m)
|
||||||
{
|
{
|
||||||
t->model = 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)
|
void uiTableAppendColumn(uiTable *t, uiTableColumnParams *p)
|
||||||
|
@ -58,7 +58,7 @@ void uiTableAppendColumn(uiTable *t, uiTableColumnParams *p)
|
||||||
NULL);
|
NULL);
|
||||||
// allow columns to be resized
|
// allow columns to be resized
|
||||||
gtk_tree_view_column_set_resizable(col, TRUE);
|
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)
|
uiTable *uiNewTable(void)
|
||||||
|
|
|
@ -25,7 +25,7 @@ struct uiTableModelClass {
|
||||||
GObjectClass parent_class;
|
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_DEFINE_TYPE_WITH_CODE(uiTableModel, uiTableModel, G_TYPE_OBJECT,
|
||||||
G_IMPLEMENT_INTERFACE(GTK_TYPE_TREE_MODEL, uiTableModel_treeModel_init))
|
G_IMPLEMENT_INTERFACE(GTK_TYPE_TREE_MODEL, uiTableModel_treeModel_init))
|
||||||
|
@ -115,8 +115,8 @@ void *uiTableModelFromString(const char *str)
|
||||||
return g_strdup(str);
|
return g_strdup(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define toBool(v) ((int) (v))
|
#define toBool(v) ((int) ((intptr_t) (v)))
|
||||||
#define toStr(v) ((const char *) (v))
|
#define toStr(v) ((char *) (v))
|
||||||
|
|
||||||
static void uiTableModel_get_value(GtkTreeModel *mb, GtkTreeIter *iter, gint column, GValue *value)
|
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);
|
uiTableModel *m = uiTableModel(mb);
|
||||||
|
|
||||||
if (parent == NULL && numRows(m) > 0) {
|
if (parent == NULL && numRows(m) > 0) {
|
||||||
child->stamp = GOOD_STAMP;
|
iter->stamp = GOOD_STAMP;
|
||||||
child->user_data = 0;
|
iter->user_data = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
child->stamp = BAD_STAMP;
|
iter->stamp = BAD_STAMP;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,17 +205,17 @@ static gboolean uiTableModel_iter_nth_child(GtkTreeModel *mb, GtkTreeIter *iter,
|
||||||
uiTableModel *m = uiTableModel(mb);
|
uiTableModel *m = uiTableModel(mb);
|
||||||
|
|
||||||
if (parent == NULL && n >= 0 && n < numRows(m)) {
|
if (parent == NULL && n >= 0 && n < numRows(m)) {
|
||||||
child->stamp = GOOD_STAMP;
|
iter->stamp = GOOD_STAMP;
|
||||||
child->user_data = TO(n);
|
iter->user_data = TO(n);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
child->stamp = BAD_STAMP;
|
iter->stamp = BAD_STAMP;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean uiTableModel_iter_parent(GtkTreeModel *mb, GtkTreeIter *iter, GtkTreeIter *child)
|
static gboolean uiTableModel_iter_parent(GtkTreeModel *mb, GtkTreeIter *iter, GtkTreeIter *child)
|
||||||
{
|
{
|
||||||
parent->stamp = BAD_STAMP;
|
iter->stamp = BAD_STAMP;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ static void uiTableModel_class_init(uiTableModelClass *class)
|
||||||
G_OBJECT_CLASS(class)->finalize = uiTableModel_finalize;
|
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_flags = uiTableModel_get_flags;
|
||||||
iface->get_n_columns = uiTableModel_get_n_columns;
|
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 *uiNewTableModel(uintmax_t nCols, uiTableColumnType *types, uiTableModelSpec *spec, void *mData)
|
||||||
{
|
{
|
||||||
uiTableModel *m;
|
uiTableModel *m;
|
||||||
|
intmax_t i;
|
||||||
|
|
||||||
m = uiTableModel(g_object_new(uiTableModelType, NULL));
|
m = uiTableModel(g_object_new(uiTableModelType, NULL));
|
||||||
m->spec = spec;
|
m->spec = spec;
|
||||||
|
|
Loading…
Reference in New Issue