Пример #1
0
static ClutterModelIter*
mtn_service_model_lookup (MtnServiceModel *model,
                          const char      *object_path)
{
    ClutterModelIter *iter;
    char *row_path;
    /* NOTE could have internal hashtable, but that's not totally trivial.
     * TODO if needed... */

    iter = clutter_model_get_first_iter (CLUTTER_MODEL (model));
    if (!iter) {
        return NULL;
    }

    while (!clutter_model_iter_is_last (iter)) {
        clutter_model_iter_get (iter,
                                MTN_SERVICE_MODEL_COL_OBJECT_PATH, &row_path,
                                -1);
        if (g_strcmp0 (row_path, object_path) == 0) {
            break;
        }
        iter = clutter_model_iter_next (iter);
    }

    if (clutter_model_iter_is_last (iter)) {
        g_object_unref (iter);
        iter = NULL;
    }

    return iter;
}
Пример #2
0
static void
iterate (ClutterModel *model)
{
  ClutterModelIter *iter;
  
  iter = clutter_model_get_first_iter (model);

  while (!clutter_model_iter_is_last (iter))
    {
      print_iter (iter, "Forward Iteration");
      iter = clutter_model_iter_next (iter);
    }
  g_object_unref (iter);

  iter = clutter_model_get_last_iter (model);  
  do
    {
      print_iter (iter, "Reverse Iteration");
      iter = clutter_model_iter_prev (iter);
    }
  while (!clutter_model_iter_is_first (iter));
  
  print_iter (iter, "Reverse Iteration");
  g_object_unref (iter);

  filter_model (model);
}
Пример #3
0
static VALUE
rbclt_model_iter_is_last (VALUE self)
{
    ClutterModelIter *iter = CLUTTER_MODEL_ITER (RVAL2GOBJ (self));

    return clutter_model_iter_is_last (iter) ? Qtrue : Qfalse;
}
Пример #4
0
/*
 * Look up item by index.
 * Returned object needs to be g_object_unref'd.
 * May return NULL.
 */
FooTestObject *
store_get_object (ClutterModel *store,
                  unsigned      index)
{
  ClutterModelIter  *iter;
  FooTestObject     *object = NULL;

  iter = clutter_model_get_iter_at_row (store, index);
  if (iter &&
      !clutter_model_iter_is_last (iter))
  {
    /* Column #0 of the model holds the actual object. */
    clutter_model_iter_get (iter,
                            0, &object,
                            -1);
  }

  return object;
}
Пример #5
0
static void
_dump_clicked (MxButton         *button,
               ObjectStoreTest  *app)
{
  ClutterModelIter *iter;

  for (iter = clutter_model_get_first_iter (app->store);
       !clutter_model_iter_is_last (iter);
       iter = clutter_model_iter_next (iter))
  {
    FooTestObject *object = NULL;
    char          *text = NULL;

    clutter_model_iter_get (iter,
                            0, &object,
                            1, &text,
                            -1);
    g_debug ("%p %s\n", object, text);
    g_object_unref (object);
    g_free (text);
  }
}
Пример #6
0
static void
filter_model (ClutterModel *model)
{
  ClutterModelIter *iter;

  g_print ("\n* Filter function: even rows\n");
  clutter_model_set_filter (model, filter_func, NULL, NULL);

  iter = clutter_model_get_first_iter (model);
  while (!clutter_model_iter_is_last (iter))
    {
      print_iter (iter, "Filtered Forward Iteration");

      iter = clutter_model_iter_next (iter);
    }
  g_object_unref (iter);

  g_print ("\n* Sorting function: reverse alpha\n");
  clutter_model_set_sort (model, COLUMN_BAR, sort_func, NULL, NULL);

  g_signal_connect (model, "row-changed", G_CALLBACK (on_row_changed), NULL);
  
  iter = clutter_model_get_iter_at_row (model, 0);
  clutter_model_iter_set (iter, COLUMN_BAR, "Changed string of 0th row, "
                                            "automatically gets sorted",
                                -1);
  g_object_unref (iter);

  clutter_model_foreach (model, foreach_func, NULL);

  g_print ("\n* Unset filter\n");
  clutter_model_set_filter (model, NULL, NULL, NULL);

  while (clutter_model_get_n_rows (model))
    clutter_model_remove (model, 0);
  
  clutter_main_quit ();
}
Пример #7
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);
}