Exemplo n.º 1
0
static VALUE
rbclt_model_iter_do_get (VALUE arg)
{
    GetData *data = (GetData *) arg;

    clutter_model_iter_get_value (data->iter, data->column, &data->value);

    data->rvalue = GVAL2RVAL (&data->value);

    return Qnil;
}
Exemplo n.º 2
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);
}
Exemplo n.º 3
0
/* model monitors */
static void
model_changed_cb (ClutterModel *model,
                  MxListView   *list_view)
{
  GSList *p;
  GList *l, *children;
  MxListViewPrivate *priv = list_view->priv;
  ClutterModelIter *iter = NULL;
  gint model_n = 0, child_n = 0;


  /* bail out if we don't yet have an item type or a factory */
  if (!priv->item_type && !priv->factory)
    return;

  if (priv->is_frozen)
    return;

  if (priv->item_type)
    {
      /* check the item-type is an descendant of ClutterActor */
      if (!g_type_is_a (priv->item_type, CLUTTER_TYPE_ACTOR))
        {
          g_warning ("%s is not a subclass of ClutterActor and therefore"
                     " cannot be used as items in an MxListView",
                     g_type_name (priv->item_type));
          return;
        }
    }

  children = clutter_actor_get_children (CLUTTER_ACTOR (list_view));
  child_n = g_list_length (children);

  if (model)
    model_n = clutter_model_get_n_rows (priv->model);
  else
    model_n = 0;

  /* add children as needed */
  while (model_n > child_n)
    {
      ClutterActor *new_child;

      if (priv->item_type)
        {
          new_child = g_object_new (priv->item_type, NULL);
        }
      else
        {
          new_child = mx_item_factory_create (priv->factory);
        }

      clutter_actor_add_child (CLUTTER_ACTOR (list_view), new_child);
      child_n++;
    }

  /* remove children as needed */
  l = g_list_last (children);
  while (child_n > model_n)
    {
      clutter_actor_remove_child (CLUTTER_ACTOR (list_view), l->data);
      l = g_list_previous (l);
      child_n--;
    }

  g_list_free (children);

  if (!priv->model)
    return;

  children = clutter_actor_get_children (CLUTTER_ACTOR (list_view));

  /* set the properties on the children */
  iter = clutter_model_get_first_iter (priv->model);
  l = children;
  while (iter && !clutter_model_iter_is_last (iter))
    {
      GObject *child;

      child = G_OBJECT (l->data);

      g_object_freeze_notify (child);
      for (p = priv->attributes; p; p = p->next)
        {
          GValue value = { 0, };
          AttributeData *attr = p->data;

          clutter_model_iter_get_value (iter, attr->col, &value);

          g_object_set_property (child, attr->name, &value);

          g_value_unset (&value);
        }
      g_object_thaw_notify (child);

      l = g_list_next (l);
      clutter_model_iter_next (iter);
    }

  g_list_free (children);

  if (iter)
    g_object_unref (iter);
}