static ClutterActor * factory_func (PengeModelBridge *bridge, ClutterContainer *container, ClutterModel *model, ClutterModelIter *iter) { ClutterActor *actor; SwItem *item; clutter_model_iter_get (iter, 0, &item, -1); actor = g_object_new (PENGE_TYPE_PEOPLE_TILE, "item", item, NULL); clutter_actor_set_size (actor, 140, 95); clutter_container_add_actor (container, actor); if (g_str_equal (item->service, "twitter")) { clutter_layout_manager_child_set (layout, container, actor, "col-span", 2, NULL); } return actor; }
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; }
static gboolean filter_func (ClutterModel *model, ClutterModelIter *iter, gpointer dummy) { gint i = 0; clutter_model_iter_get (iter, COLUMN_FOO, &i, -1); return !(i % 2); }
static gboolean filter_zone (ClutterModel *model, ClutterModelIter *iter, gpointer user_data) { MnpWorldClockPrivate *priv = GET_PRIVATE (user_data); char *name, *name_mem; GWeatherLocation *loc; gboolean is_first_word = TRUE, match; int len; char *key, *skey; if (!priv->search_text || !*priv->search_text) return TRUE; skey = key = g_ascii_strdown(priv->search_text, -1); clutter_model_iter_get (iter, GWEATHER_LOCATION_ENTRY_COL_COMPARE_NAME, &name_mem, GWEATHER_LOCATION_ENTRY_COL_LOCATION, &loc, -1); name = name_mem; if (!loc) { g_free (name_mem); g_free (key); return FALSE; } /* All but the last word in KEY must match a full word from NAME, * in order (but possibly skipping some words from NAME). */ len = strcspn (key, " "); while (key[len]) { name = find_word (name, key, len, TRUE, is_first_word); if (!name) { g_free (name_mem); g_free (skey); return FALSE; } key += len; while (*key && !g_unichar_isalpha (g_utf8_get_char (key))) key = g_utf8_next_char (key); while (*name && !g_unichar_isalpha (g_utf8_get_char (name))) name = g_utf8_next_char (name); len = strcspn (key, " "); is_first_word = FALSE; } /* The last word in KEY must match a prefix of a following word in NAME */ match = find_word (name, key, strlen (key), FALSE, is_first_word) != NULL; g_free (name_mem); g_free (skey); return match; }
static void on_row_added (ClutterModel *model, ClutterModelIter *iter, gpointer dummy) { gint i; gchar *string; clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1); g_print ("[row:%02d]: Added: %d, %s\n", clutter_model_iter_get_row (iter), i, string); g_free (string); }
/* Clear all data in model and also release all allocated resources needed for this model */ static void _xfdashboard_applications_menu_model_clear(XfdashboardApplicationsMenuModel *self) { XfdashboardApplicationsMenuModelPrivate *priv; ClutterModelIter *iterator; GarconMenuElement *menuElement; g_return_if_fail(XFDASHBOARD_IS_APPLICATIONS_MENU_MODEL(self)); priv=self->priv; /* Unset filter (forces all rows being accessible and not being skipped/filtered) */ clutter_model_set_filter(CLUTTER_MODEL(self), NULL, NULL, NULL); /* Clean up and remove all rows */ while(clutter_model_get_n_rows(CLUTTER_MODEL(self))) { /* Get data from model for clean up */ menuElement=NULL; iterator=clutter_model_get_iter_at_row(CLUTTER_MODEL(self), 0); clutter_model_iter_get(iterator, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_MENU_ELEMENT, &menuElement, -1); /* Remove signal handler from menu element */ if(menuElement) { g_signal_handlers_disconnect_by_func(menuElement, G_CALLBACK(_xfdashboard_applications_menu_model_on_reload_required), self); } /* Remove row */ clutter_model_remove(CLUTTER_MODEL(self), 0); /* Release iterator */ if(menuElement) g_object_unref(menuElement); g_object_unref(iterator); } /* Destroy root menu */ if(priv->rootMenu) { g_object_unref(priv->rootMenu); priv->rootMenu=NULL; } }
static gboolean foreach_func (ClutterModel *model, ClutterModelIter *iter, gpointer dummy) { gint i; gchar *string; clutter_model_iter_get (iter, COLUMN_FOO, &i, COLUMN_BAR, &string, -1); g_print ("[row:%02d]: Foreach: %d, %s\n", clutter_model_iter_get_row (iter), i, string); g_free (string); return TRUE; }
static gboolean search_locations_display_in_model (ClutterModel *model, ClutterModelIter *iter, struct _pass_data *pdata) { char *clocation; GWeatherLocation *location; clutter_model_iter_get (iter, GWEATHER_LOCATION_ENTRY_COL_DISPLAY_NAME, &clocation, GWEATHER_LOCATION_ENTRY_COL_LOCATION, &location, -1); if (location == pdata->location) { pdata->key = clocation; return FALSE; } g_free(clocation); return TRUE; }
/* * 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; }
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); } }
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); }
static gboolean _xfdashboard_applications_menu_model_filter_by_section(ClutterModel *inModel, ClutterModelIter *inIter, gpointer inUserData) { XfdashboardApplicationsMenuModel *self; XfdashboardApplicationsMenuModelPrivate *priv; GarconMenu *section; GarconMenu *requestedSection; gboolean doShow; g_return_val_if_fail(XFDASHBOARD_IS_APPLICATIONS_MENU_MODEL(inModel), FALSE); g_return_val_if_fail(CLUTTER_IS_MODEL_ITER(inIter), FALSE); g_return_val_if_fail(GARCON_IS_MENU(inUserData), FALSE); self=XFDASHBOARD_APPLICATIONS_MENU_MODEL(inModel); priv=self->priv; requestedSection=GARCON_MENU(inUserData); doShow=FALSE; /* Check if root section is requested */ if(!requestedSection) requestedSection=priv->rootMenu; /* Get menu element at iterator */ clutter_model_iter_get(inIter, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_SECTION, §ion, -1); /* If menu element is a menu check if root menu is parent menu and root menu is requested */ if((section && section==requestedSection) || (!section && requestedSection==priv->rootMenu)) { doShow=TRUE; } /* Release allocated resources */ if(section) g_object_unref(section); /* If we get here return TRUE to show model data item or FALSE to hide */ return(doShow); }
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); } }
/* Helper function to filter model data */ static gboolean _xfdashboard_applications_menu_model_filter_by_menu(ClutterModel *inModel, ClutterModelIter *inIter, gpointer inUserData) { XfdashboardApplicationsMenuModel *self; XfdashboardApplicationsMenuModelPrivate *priv; GarconMenu *parentMenu; GarconMenu *requestedParentMenu; GarconMenuElement *menuElement; GarconMenuItemPool *itemPool; const gchar *desktopID; gboolean doShow; g_return_val_if_fail(XFDASHBOARD_IS_APPLICATIONS_MENU_MODEL(inModel), FALSE); g_return_val_if_fail(CLUTTER_IS_MODEL_ITER(inIter), FALSE); g_return_val_if_fail(GARCON_IS_MENU(inUserData), FALSE); self=XFDASHBOARD_APPLICATIONS_MENU_MODEL(inModel); priv=self->priv; requestedParentMenu=GARCON_MENU(inUserData); menuElement=NULL; doShow=FALSE; /* Get menu element at iterator */ clutter_model_iter_get(inIter, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_MENU_ELEMENT, &menuElement, XFDASHBOARD_APPLICATIONS_MENU_MODEL_COLUMN_PARENT_MENU, &parentMenu, -1); if(menuElement==NULL) return(FALSE); /* Only menu items and sub-menus can be visible */ if(!GARCON_IS_MENU(menuElement) && !GARCON_IS_MENU_ITEM(menuElement)) { g_object_unref(menuElement); return(FALSE); } /* If menu element is a menu check if it's parent menu is the requested one */ if(GARCON_IS_MENU(menuElement)) { if(requestedParentMenu==parentMenu || (!requestedParentMenu && parentMenu==priv->rootMenu)) { doShow=TRUE; } } /* Otherwise it is a menu item and check if item is in requested menu */ else { /* Get desktop ID of menu item */ desktopID=garcon_menu_item_get_desktop_id(GARCON_MENU_ITEM(menuElement)); /* Get menu items of menu */ itemPool=garcon_menu_get_item_pool(parentMenu); /* Determine if menu item at iterator is in menu's item pool */ if(garcon_menu_item_pool_lookup(itemPool, desktopID)!=FALSE) doShow=TRUE; } /* Release allocated resources */ if(parentMenu) g_object_unref(parentMenu); g_object_unref(menuElement); /* If we get here return TRUE to show model data item or FALSE to hide */ return(doShow); }