コード例 #1
0
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);
}
コード例 #2
0
static VALUE
rbclt_model_get_column_name (VALUE self, VALUE column)
{
    ClutterModel *model = CLUTTER_MODEL (RVAL2GOBJ (self));
    const gchar *name;

    name = clutter_model_get_column_name (model, NUM2UINT (column));

    return name ? rb_str_new2 (name) : Qnil;
}
コード例 #3
0
ファイル: test-model.c プロジェクト: rib/clutter
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);
}
コード例 #4
0
static void
gmc_video_model_iter_set_value (ClutterModelIter *iter, 
                                guint             column, 
                                const GValue     *value)
{
  ClutterModel *model;
  GmcVideoModelPrivate *priv_model;
  const gchar *name;
  gchar *query, *str_value;
  sqlite3_stmt *statement;
  gint error_code;
  GType type;
  GValue title_value = {0, };

  model = clutter_model_iter_get_model (iter);
  priv_model = GMC_VIDEO_MODEL_GET_PRIVATE (model);

  name = clutter_model_get_column_name (model, column);
  type = clutter_model_get_column_type (model, column);

  switch (type) {
    case G_TYPE_STRING:
      str_value = g_strdup (g_value_get_string (value));
      break;
 
    case G_TYPE_UINT:
      str_value = g_strdup_printf ("%u", g_value_get_uint (value));
      break;

    default:
      g_warning ("%s : Invalid type", G_STRFUNC);
      break;
  }

  clutter_model_iter_get_value (iter, 0, &title_value);
  query = g_strdup_printf ("UPDATE %s SET %s = '%s' WHERE Title = '%s'", TABLE, name, str_value, g_value_get_string (&title_value));

  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_DONE) {
    g_critical ("%s [step] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv_model->sql));
    return;
  }

  sqlite3_finalize (statement);
}
コード例 #5
0
static ClutterModelIter *
gmc_video_model_get_iter_at_row (ClutterModel *model,
                                 guint         row)
{
  GmcVideoModelPrivate *priv;
  GmcVideoModelIter *iter;
  gchar *query, *tmp;
  gint column;
  sqlite3_stmt *statement;
  gint error_code;

  priv = GMC_VIDEO_MODEL_GET_PRIVATE (model);

  query = g_strdup_printf ("SELECT Title FROM %s", TABLE);

  column = clutter_model_get_sorting_column (model);
  if (column != -1) {
    tmp = g_strdup_printf ("%s ORDER BY %s", query, clutter_model_get_column_name (model, 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->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->sql));
    return 0;
  }

  error_code = sqlite3_step (statement);
  if (error_code != SQLITE_ROW) {
    g_critical ("%s [step] : %d - %s", G_STRFUNC, error_code, sqlite3_errmsg (priv->sql));
    return 0;
  }

  sqlite3_finalize (statement);

  iter = g_object_new (GMC_TYPE_VIDEO_MODEL_ITER,
                       "model", model,
                       "row", row,
                       NULL);

  return CLUTTER_MODEL_ITER (iter);
}