diff --git a/gui/model.c b/gui/model.c index 6577dfcf..ec7545d6 100644 --- a/gui/model.c +++ b/gui/model.c @@ -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; } diff --git a/include/gui/model.h b/include/gui/model.h index a3db4f16..35b801b9 100644 --- a/include/gui/model.h +++ b/include/gui/model.h @@ -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; diff --git a/include/tests/test.h b/include/tests/test.h index 6a150a32..bef09981 100644 --- a/include/tests/test.h +++ b/include/tests/test.h @@ -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, \ diff --git a/tests/gui/model.c b/tests/gui/model.c index 6513b0ef..c5e8e42e 100644 --- a/tests/gui/model.c +++ b/tests/gui/model.c @@ -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); }