static ClutterModelIter * clutter_list_model_iter_copy (ClutterModelIter *iter) { ClutterListModelIter *iter_default; ClutterListModelIter *iter_copy; ClutterModel *model; guint row; iter_default = CLUTTER_LIST_MODEL_ITER (iter); model = clutter_model_iter_get_model (iter); row = clutter_model_iter_get_row (iter) - 1; iter_copy = g_object_new (CLUTTER_TYPE_LIST_MODEL_ITER, "model", model, "row", row, NULL); /* this is safe, because the seq_iter pointer on the passed * iterator will be always be overwritten in ::next or ::prev */ iter_copy->seq_iter = iter_default->seq_iter; return CLUTTER_MODEL_ITER (iter_copy); }
static void gmc_video_model_iter_get_value (ClutterModelIter *iter, guint column, GValue *value) { ClutterModel *model; GmcVideoModelPrivate *priv_model; gchar *query, *string_value, *tmp; guint row, uint_value, sort_column; sqlite3_stmt *statement; gint error_code; GType type; model = clutter_model_iter_get_model (iter); row = clutter_model_iter_get_row (iter); priv_model = GMC_VIDEO_MODEL_GET_PRIVATE (model); query = g_strdup_printf ("SELECT %s FROM %s", clutter_model_get_column_name (model, column), TABLE); sort_column = clutter_model_get_sorting_column (model); if (sort_column != -1) { tmp = g_strdup_printf ("%s ORDER BY %s", query, clutter_model_get_column_name (model, sort_column)); g_free (query); query = tmp; } tmp = g_strdup_printf ("%s LIMIT %d, 1", query, row); g_free (query); query = tmp; error_code = sqlite3_prepare_v2 (priv_model->sql, query, strlen (query), &statement, NULL); g_free (query); if (error_code != SQLITE_OK) { g_critical ("%s [prepare] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv_model->sql)); return; } error_code = sqlite3_step (statement); if (error_code != SQLITE_ROW) { g_critical ("%s [step] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv_model->sql)); return; } type = clutter_model_get_column_type (model, column); switch (type) { case G_TYPE_STRING: string_value = (gchar *) sqlite3_column_text (statement, 0); g_value_set_string (value, string_value); break; case G_TYPE_UINT: uint_value = sqlite3_column_int (statement, 0); g_value_set_uint (value, uint_value); break; } sqlite3_finalize (statement); }
static void on_row_added (ClutterModel *model, ClutterModelIter *iter, gpointer dummy) { gint i; gchar *string; clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1); g_print ("[row:%02d]: Added: %d, %s\n", clutter_model_iter_get_row (iter), i, string); g_free (string); }
static gboolean foreach_func (ClutterModel *model, ClutterModelIter *iter, gpointer dummy) { gint i; gchar *string; clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1); g_print ("[row:%02d]: Foreach: %d, %s\n", clutter_model_iter_get_row (iter), i, string); g_free (string); return TRUE; }
static void row_removed_cb (ClutterModel *model, ClutterModelIter *iter, MxListView *list_view) { GList *children; GList *l; ClutterActor *child; if (list_view->priv->is_frozen) return; children = clutter_actor_get_children (CLUTTER_ACTOR (list_view)); l = g_list_nth (children, clutter_model_iter_get_row (iter)); child = (ClutterActor *) l->data; clutter_actor_remove_child (CLUTTER_ACTOR (list_view), child); g_list_free (children); }
static ClutterModelIter * clutter_list_model_iter_prev (ClutterModelIter *iter) { ClutterListModelIter *iter_default; ClutterModelIter *temp_iter; ClutterModel *model; GSequenceIter *filter_prev; guint row; iter_default = CLUTTER_LIST_MODEL_ITER (iter); g_assert (iter_default->seq_iter != NULL); model = clutter_model_iter_get_model (iter); row = clutter_model_iter_get_row (iter); filter_prev = g_sequence_iter_prev (iter_default->seq_iter); g_assert (filter_prev != NULL); temp_iter = CLUTTER_LIST_MODEL (model)->priv->temp_iter; while (!g_sequence_iter_is_begin (filter_prev)) { CLUTTER_LIST_MODEL_ITER (temp_iter)->seq_iter = filter_prev; if (clutter_model_filter_iter (model, temp_iter)) { row -= 1; break; } filter_prev = g_sequence_iter_prev (filter_prev); } if (g_sequence_iter_is_begin (filter_prev)) row -= 1; /* update the iterator and return it */ clutter_model_iter_set_row (CLUTTER_MODEL_ITER (iter_default), row); iter_default->seq_iter = filter_prev; return CLUTTER_MODEL_ITER (iter_default); }
static void print_iter (ClutterModelIter *iter, const gchar *text) { ClutterModel *model; gint i; gchar *string; model = clutter_model_iter_get_model (iter); clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1); g_print ("[row:%02d]: %s: (%s: %d), (%s: %s)\n", clutter_model_iter_get_row (iter), text, clutter_model_get_column_name (model, COLUMN_FOO), i, clutter_model_get_column_name (model, COLUMN_BAR), string); g_free (string); }
static ClutterModelIter * gmc_video_model_iter_next (ClutterModelIter *iter) { ClutterModel *model; guint row, n_rows; model = clutter_model_iter_get_model (iter); row = clutter_model_iter_get_row (iter); n_rows = clutter_model_get_n_rows (model); g_object_unref (iter); if (row == (n_rows - 1)) { return NULL; } iter = g_object_new (GMC_TYPE_VIDEO_MODEL_ITER, "model", model, "row", row + 1, NULL); return iter; }