static VALUE rbclt_model_get_first_iter (VALUE self) { ClutterModel *model = CLUTTER_MODEL (RVAL2GOBJ (self)); return GOBJ2RVALU (clutter_model_get_first_iter (model)); }
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); }
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 void _update_placeholder_state (MnbPeoplePanel *self) { MnbPeoplePanelPrivate *priv = GET_PRIVATE (self); gint accounts_available, accounts_online; g_object_get (priv->tp_feed, "accounts-available", &accounts_available, "accounts-online", &accounts_online, NULL); clutter_actor_set_name (priv->content_table, "people-panel-content-box"); /* There is something in the model, hide all placeholders */ if (clutter_model_get_first_iter (CLUTTER_MODEL (priv->model))) { clutter_actor_hide (priv->no_people_tile); clutter_actor_hide (priv->everybody_offline_tile); /* Ensure content stuff is visible */ clutter_actor_show (priv->main_scroll_view); clutter_actor_show (priv->me_table); if (accounts_available > 0 && accounts_online == 0) { clutter_actor_show (priv->offline_banner); } else { clutter_actor_hide (priv->offline_banner); } } else { /* Hide real content stuff */ clutter_actor_hide (priv->main_scroll_view); if (accounts_online == 0) { if (accounts_available == 0) { clutter_actor_set_name (priv->content_table, "no-people-panel-content-box"); clutter_actor_show (priv->no_people_tile); clutter_actor_hide (priv->me_table); clutter_actor_hide (priv->everybody_offline_tile); clutter_actor_hide (priv->offline_banner); } else { clutter_actor_show (priv->me_table); clutter_actor_show (priv->offline_banner); clutter_actor_hide (priv->no_people_tile); clutter_actor_hide (priv->everybody_offline_tile); } } else { clutter_actor_show (priv->me_table); clutter_actor_show (priv->everybody_offline_tile); clutter_actor_hide (priv->no_people_tile); clutter_actor_hide (priv->offline_banner); } } }
static void _active_model_bulk_change_end_cb (AnerleyFeedModel *model, gpointer userdata) { MnbPeoplePanelPrivate *priv = GET_PRIVATE (userdata); gint number_active_people; gchar *tooltip; if (clutter_model_get_first_iter ((ClutterModel *)model)) { // mx_table_set_row_spacing (MX_TABLE (priv->content_table), 6); if (priv->panel_client) { mpl_panel_client_request_button_style (priv->panel_client, "people-button-active"); number_active_people = clutter_model_get_n_rows (CLUTTER_MODEL (priv->active_model)); if (number_active_people > 1) { tooltip = g_strdup_printf (_("people - you are chatting with %d people"), number_active_people); mpl_panel_client_request_tooltip (priv->panel_client, tooltip); g_free (tooltip); } else { mpl_panel_client_request_tooltip (priv->panel_client, _("people - you are chatting with someone")); } } } else { // mx_table_set_row_spacing (MX_TABLE (priv->content_table), 0); if (priv->panel_client) { mpl_panel_client_request_button_style (priv->panel_client, "people-button"); mpl_panel_client_request_tooltip (priv->panel_client, _("people")); } } /* Workaround for MB#6690 */ clutter_actor_queue_relayout (CLUTTER_ACTOR (priv->content_table)); }
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); } }
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 (); }
/* 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); }
static void _update_placeholder_state (MnbPeoplePanel *self) { MnbPeoplePanelPrivate *priv = GET_PRIVATE (self); gint accounts_available = 0; gint accounts_online = 0; GList *accounts; for (accounts = tp_account_manager_get_valid_accounts (priv->am); accounts != NULL; accounts = g_list_delete_link (accounts, accounts)) { TpAccount *account = accounts->data; if (!tp_account_is_enabled (account)) continue; accounts_available++; if (tp_account_get_connection_status (account, NULL) == TP_CONNECTION_STATUS_CONNECTED) accounts_online++; } /* There is something in the model, hide all placeholders */ if (clutter_model_get_first_iter (CLUTTER_MODEL (priv->model))) { clutter_actor_hide (priv->no_people_tile); clutter_actor_hide (priv->everybody_offline_tile); /* Ensure content stuff is visible */ clutter_actor_show (priv->main_scroll_view); if (accounts_available > 0 && accounts_online == 0) { clutter_actor_show (priv->offline_banner); } else { clutter_actor_hide (priv->offline_banner); } } else { /* Hide real content stuff */ clutter_actor_hide (priv->main_scroll_view); if (accounts_online == 0) { if (accounts_available == 0) { clutter_actor_show (priv->no_people_tile); clutter_actor_hide (priv->everybody_offline_tile); clutter_actor_hide (priv->offline_banner); } else { clutter_actor_show (priv->offline_banner); clutter_actor_hide (priv->no_people_tile); clutter_actor_hide (priv->everybody_offline_tile); } } else { clutter_actor_show (priv->everybody_offline_tile); clutter_actor_hide (priv->no_people_tile); clutter_actor_hide (priv->offline_banner); } } }