예제 #1
0
static VALUE
rbclt_model_get_column_type (VALUE self, VALUE colnum)
{
    ClutterModel *model = CLUTTER_MODEL (RVAL2GOBJ (self));

    return GTYPE2CLASS (clutter_model_get_column_type (model, NUM2UINT (colnum)));
}
예제 #2
0
static VALUE
rbclt_model_iter_set (int argc, VALUE *argv, VALUE self)
{
    ClutterModel *model;
    int state = 0;
    GetData data;
    int i;

    if ((argc & 1))
        rb_raise (rb_eArgError, "wrong number of arguments "
                  "(paired arguments required)");

    data.iter = CLUTTER_MODEL_ITER (RVAL2GOBJ (self));
    model = clutter_model_iter_get_model (data.iter);

    for (i = 0; i < argc && state == 0; i += 2)
    {
        data.column = NUM2UINT (argv[i]);
        data.rvalue = argv[i + 1];

        memset (&data.value, 0, sizeof (data.value));

        g_value_init (&data.value, clutter_model_get_column_type (model,
                      data.column));
        rb_protect (rbclt_model_iter_do_set, (VALUE) &data, &state);
        g_value_unset (&data.value);
    }

    if (state)
        rb_jump_tag (state);

    return self;
}
예제 #3
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);
}
예제 #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 *
clutter_list_model_insert_row (ClutterModel *model,
                               gint          index_)
{
  ClutterListModel *model_default = CLUTTER_LIST_MODEL (model);
  GSequence *sequence = model_default->priv->sequence;
  ClutterListModelIter *retval;
  guint n_columns, i, pos;
  GValueArray *array;
  GSequenceIter *seq_iter;

  n_columns = clutter_model_get_n_columns (model);
  array = g_value_array_new (n_columns);

  for (i = 0; i < n_columns; i++)
    {
      GValue *value = NULL;

      g_value_array_append (array, NULL);

      value = g_value_array_get_nth (array, i);
      g_value_init (value, clutter_model_get_column_type (model, i));
    }

  if (index_ < 0)
    {
      seq_iter = g_sequence_append (sequence, array);
      pos = g_sequence_get_length (sequence) - 1;
    }
  else if (index_ == 0)
    {
      seq_iter = g_sequence_prepend (sequence, array);
      pos = 0;
    }
  else
    {
      seq_iter = g_sequence_get_iter_at_pos (sequence, index_);
      seq_iter = g_sequence_insert_before (seq_iter, array);
      pos = index_;
    }

  retval = g_object_new (CLUTTER_TYPE_LIST_MODEL_ITER,
                         "model", model,
                         "row", pos,
                         NULL);
  retval->seq_iter = seq_iter;

  return CLUTTER_MODEL_ITER (retval);
}