static void
mtn_service_model_add_or_update (MtnServiceModel *model,
                                 const char      *path,
                                 guint            index)
{
    ClutterModelIter *model_iter;

    if (!path)
        return;

    model_iter = mtn_service_model_lookup (model, path);
    if (!model_iter) {
g_debug ("add service %d: %s", index, path);
        clutter_model_insert (CLUTTER_MODEL (model), index,
                              MTN_SERVICE_MODEL_COL_INDEX, index,
                              MTN_SERVICE_MODEL_COL_PRESENT, TRUE,
                              MTN_SERVICE_MODEL_COL_HIDDEN, FALSE,
                              MTN_SERVICE_MODEL_COL_OBJECT_PATH, path,
                              MTN_SERVICE_MODEL_COL_WIDGET, mtn_service_tile_new (path),
                              -1);
    } else {
g_debug ("update service %d: %s", index, path);
        clutter_model_iter_set (model_iter,
                                MTN_SERVICE_MODEL_COL_INDEX, index,
                                MTN_SERVICE_MODEL_COL_PRESENT, TRUE,
                                -1);
        g_object_unref (model_iter);
    }
}
static void
mtn_service_model_update (MtnServiceModel *model, GVariant *services)
{
    ClutterModelIter *model_iter;
    GVariantIter *iter;
    char *path;
    guint index;

    if (services) {
        index = 0;
        g_variant_get (services, "ao", &iter);
        while (g_variant_iter_next (iter, "&o", &path)) {
            mtn_service_model_add_or_update (model, path, index);
            index++;
        }
    }

    /* remove the rows that were not present in the Services list */
    index = 0;
    while ((model_iter = clutter_model_get_iter_at_row (CLUTTER_MODEL (model),
                                                        index))) {
        gboolean present, hidden;

        clutter_model_iter_get (model_iter,
                                MTN_SERVICE_MODEL_COL_PRESENT, &present,
                                MTN_SERVICE_MODEL_COL_HIDDEN, &hidden,
                                -1);
        if (present) {
            /* initialize to present=FALSE for next _services_changed() call */
            if (!hidden) {
                clutter_model_iter_set (model_iter,
                                        MTN_SERVICE_MODEL_COL_PRESENT, FALSE,
                                        -1);              
            }
            index++;
        } else {
            clutter_model_remove (CLUTTER_MODEL (model), index);
        }

        g_object_unref (model_iter);
    }
}
Example #3
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 ();
}