gui/model: Add support for gtk_tree_model_get_column_type()

Signed-off-by: Anna Schumaker <Anna@OcarinaProject.net>
This commit is contained in:
Anna Schumaker 2016-01-16 11:38:59 -05:00
parent 6acee801ab
commit ff81af24fc
4 changed files with 68 additions and 3 deletions

View File

@ -7,6 +7,19 @@ static const GTypeInfo queue_type_info;
static const GInterfaceInfo queue_tree_model;
static GObjectClass *parent_class = NULL;
static GType queue_columns[Q_MODEL_N_COLUMNS] = {
[Q_MODEL_TRACK_NR] = G_TYPE_UINT,
[Q_MODEL_TITLE] = G_TYPE_STRING,
[Q_MODEL_LENGTH] = G_TYPE_STRING,
[Q_MODEL_ARTIST] = G_TYPE_STRING,
[Q_MODEL_ALBUM] = G_TYPE_STRING,
[Q_MODEL_YEAR] = G_TYPE_UINT,
[Q_MODEL_GENRE] = G_TYPE_STRING,
[Q_MODEL_COUNT] = G_TYPE_UINT,
[Q_MODEL_LAST_PLAY] = G_TYPE_STRING,
[Q_MODEL_FILE_PATH] = G_TYPE_STRING,
};
static GtkTreeModelFlags _queue_model_get_flags(GtkTreeModel *model)
{
@ -15,7 +28,14 @@ static GtkTreeModelFlags _queue_model_get_flags(GtkTreeModel *model)
static gint _queue_model_get_n_columns(GtkTreeModel *model)
{
return 10;
return Q_MODEL_N_COLUMNS;
}
static GType _queue_model_get_column_type(GtkTreeModel *model, gint index)
{
g_return_val_if_fail(index >= 0 && index < Q_MODEL_N_COLUMNS,
G_TYPE_INVALID);
return queue_columns[index];
}
static void _queue_model_init(GuiQueueModel *model)
@ -40,8 +60,9 @@ static void _queue_model_class_init(GuiQueueModelClass *class)
static void _queue_tree_model_init(GtkTreeModelIface *iface)
{
iface->get_flags = _queue_model_get_flags;
iface->get_n_columns = _queue_model_get_n_columns;
iface->get_flags = _queue_model_get_flags;
iface->get_n_columns = _queue_model_get_n_columns;
iface->get_column_type = _queue_model_get_column_type;
}

View File

@ -7,6 +7,21 @@
#define GUI_QUEUE_MODEL_TYPE (gui_queue_model_get_type())
enum queue_model_columns {
Q_MODEL_TRACK_NR,
Q_MODEL_TITLE,
Q_MODEL_LENGTH,
Q_MODEL_ARTIST,
Q_MODEL_ALBUM,
Q_MODEL_YEAR,
Q_MODEL_GENRE,
Q_MODEL_COUNT,
Q_MODEL_LAST_PLAY,
Q_MODEL_FILE_PATH,
Q_MODEL_N_COLUMNS,
};
typedef struct _gui_queue_model GuiQueueModel;
typedef struct _gui_queue_model_class GuiQueueModelClass;

View File

@ -13,6 +13,8 @@
#ifndef __cplusplus
static inline gchar *lutos(long unsigned int u)
{ return g_strdup_printf("%lu", u); }
static inline gchar *stos(const char *s) { return g_strdup(s); }
static inline gchar *utos(unsigned int u) { return g_strdup_printf("%u", u); }
static inline gchar *ltos(long int l) { return g_strdup_printf("%lu", l); }
@ -26,6 +28,7 @@ static inline gchar *ptos(void *p) { return g_strdup_printf("%p", p); }
char *: stos, \
const char *: stos, \
bool: btos, \
long unsigned int: lutos, \
unsigned int: utos, \
long int: ltos, \
int: itos, \

View File

@ -8,6 +8,7 @@ static void test_model()
{
GuiQueueModel *model = gui_queue_model_new();
GtkTreeModel *treemodel;
GType type;
test_not_equal((void *)model, NULL);
test_equal(GTK_IS_TREE_MODEL(model), true);
@ -16,6 +17,31 @@ static void test_model()
test_equal(gtk_tree_model_get_flags(treemodel), GTK_TREE_MODEL_LIST_ONLY);
test_equal(gtk_tree_model_get_n_columns(treemodel), 10);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_TRACK_NR);
test_equal(type, G_TYPE_UINT);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_TITLE);
test_equal(type, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_LENGTH);
test_equal(type, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_ARTIST);
test_equal(type, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_ALBUM);
test_equal(type, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_YEAR);
test_equal(type, G_TYPE_UINT);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_GENRE);
test_equal(type, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_COUNT);
test_equal(type, G_TYPE_UINT);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_LAST_PLAY);
test_equal(type, G_TYPE_STRING);
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_FILE_PATH);
test_equal(type, G_TYPE_STRING);
/* This should trigger an assertion failure */
type = gtk_tree_model_get_column_type(treemodel, Q_MODEL_N_COLUMNS);
test_equal(type, G_TYPE_INVALID);
g_object_unref(model);
test_equal(G_IS_OBJECT(model), false);
}