static void append_service_tree (GUPnPServiceInfo *info, GtkTreeStore *store, GtkTreeIter *device_iter) { char *id; id = gupnp_service_info_get_id (info); if (id) { GtkTreeIter *service_iter; service_iter = g_slice_new (GtkTreeIter); gtk_tree_store_insert_with_values (store, service_iter, device_iter, -1, 0, get_icon_by_id (ICON_SERVICE), 1, id, 2, info, 5, ICON_SERVICE, -1); gupnp_service_info_get_introspection_async (info, got_introspection, service_iter); g_free (id); } }
static void append_actions (GUPnPServiceProxy *proxy, GUPnPServiceIntrospection *introspection, const GList *actions, GtkTreeStore *store, GtkTreeIter *service_iter) { const GList *iter; for (iter = actions; iter; iter = iter->next) { GUPnPServiceActionInfo *info; GtkTreeIter action_iter; info = iter->data; gtk_tree_store_insert_with_values (store, &action_iter, service_iter, -1, 0, get_icon_by_id (ICON_ACTION), 1, info->name, 2, proxy, 3, introspection, 4, info, 5, ICON_ACTION, -1); append_action_arguments (info->arguments, store, &action_iter); } }
static void append_action_arguments (GList *arguments, GtkTreeStore *store, GtkTreeIter *action_iter) { const GList *iter; for (iter = arguments; iter; iter = iter->next) { GUPnPServiceActionArgInfo *info; IconID icon_id; info = iter->data; if (info->direction == GUPNP_SERVICE_ACTION_ARG_DIRECTION_IN) { icon_id = ICON_ACTION_ARG_IN; } else { icon_id = ICON_ACTION_ARG_OUT; } gtk_tree_store_insert_with_values (store, NULL, action_iter, -1, 0, get_icon_by_id (icon_id), 1, info->name, 4, info, 5, icon_id, -1); } }
static void append_state_variables (GUPnPServiceProxy *proxy, GUPnPServiceIntrospection *introspection, const GList *variables, GtkTreeStore *store, GtkTreeIter *service_iter) { const GList *iter; GtkTreeIter variables_iter; gtk_tree_store_insert_with_values (store, &variables_iter, service_iter, -1, 0, get_icon_by_id (ICON_VARIABLES), 1, _("State variables"), 5, ICON_VARIABLES, -1); for (iter = variables; iter; iter = iter->next) { GUPnPServiceStateVariableInfo *info; info = iter->data; gtk_tree_store_insert_with_values (store, NULL, &variables_iter, -1, 0, get_icon_by_id (ICON_VARIABLE), 1, info->name, 2, proxy, 3, introspection, 4, info, 5, ICON_VARIABLE, -1); /* Set-up event notitications for variable */ gupnp_service_proxy_add_notify (proxy, info->name, info->type, on_state_variable_changed, NULL); } }
static void append_device_tree (GUPnPDeviceInfo *info, GtkTreeModel *model, GtkTreeIter *parent_iter) { char *friendly_name; friendly_name = gupnp_device_info_get_friendly_name (info); if (friendly_name) { GtkTreeIter device_iter; GList *child; gtk_tree_store_insert_with_values (GTK_TREE_STORE (model), &device_iter, parent_iter, -1, 0, get_icon_by_id (ICON_DEVICE), 1, friendly_name, 2, info, 5, ICON_DEVICE, -1); g_free (friendly_name); schedule_icon_update (info, on_device_icon_available); /* Append the embedded devices */ child = gupnp_device_info_list_devices (info); while (child) { append_device_tree (GUPNP_DEVICE_INFO (child->data), model, &device_iter); g_object_unref (child->data); child = g_list_delete_link (child, child); } /* Append the services */ child = gupnp_device_info_list_services (info); while (child) { append_service_tree (GUPNP_SERVICE_INFO (child->data), GTK_TREE_STORE (model), &device_iter); g_object_unref (child->data); child = g_list_delete_link (child, child); } } }
static GtkTreeModel * create_device_treemodel (void) { GtkTreeStore *store; store = gtk_tree_store_new (6, GDK_TYPE_PIXBUF, /* Icon */ G_TYPE_STRING, /* Name */ G_TYPE_OBJECT, /* Device/Service Info */ G_TYPE_OBJECT, /* Introspection */ G_TYPE_POINTER, /* non-object */ G_TYPE_UINT); /* icon type */ gtk_tree_store_insert_with_values (store, NULL, NULL, 0, 0, get_icon_by_id (ICON_NETWORK), 1, _("UPnP Network"), 5, ICON_NETWORK, -1); return GTK_TREE_MODEL (store); }
static void append_introspection (GUPnPServiceProxy *proxy, GUPnPServiceIntrospection *introspection, GtkTreeStore *store, GtkTreeIter *service_iter) { const GList *list; if (introspection == NULL) { gtk_tree_store_insert_with_values (store, NULL, service_iter, -1, 0, get_icon_by_id (ICON_MISSING), 1, _("Information not available"), 5, ICON_MISSING, -1); return; } list = gupnp_service_introspection_list_state_variables ( introspection); if (list) append_state_variables (proxy, introspection, list, store, service_iter); list = gupnp_service_introspection_list_actions (introspection); if (list) append_actions (proxy, introspection, list, store, service_iter); }
void init_action_dialog (GtkBuilder *builder) { GtkWidget *image; label_container_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); /* Dialog box and grids */ dialog = GTK_WIDGET (gtk_builder_get_object ( builder, "action-invocation-dialog")); g_assert (dialog != NULL); in_args_grid = GTK_WIDGET (gtk_builder_get_object ( builder, "in-action-arguments-grid")); g_assert (in_args_grid != NULL); out_args_grid = GTK_WIDGET (gtk_builder_get_object ( builder, "out-action-arguments-grid")); g_assert (out_args_grid != NULL); /* All the labels */ in_args_expander = GTK_WIDGET (gtk_builder_get_object ( builder, "in-action-arguments-expander")); g_assert (in_args_expander != NULL); out_args_expander = GTK_WIDGET (gtk_builder_get_object ( builder, "out-action-arguments-expander")); g_assert (out_args_expander != NULL); device_label = GTK_WIDGET (gtk_builder_get_object (builder, "device-label")); g_assert (device_label != NULL); service_label = GTK_WIDGET (gtk_builder_get_object (builder, "service-label")); g_assert (service_label != NULL); action_label = GTK_WIDGET (gtk_builder_get_object (builder, "action-label")); g_assert (action_label != NULL); /* the images */ image = GTK_WIDGET (gtk_builder_get_object (builder, "device-image")); g_assert (image != NULL); gtk_image_set_from_pixbuf (GTK_IMAGE (image), get_icon_by_id (ICON_DEVICE)); image = GTK_WIDGET (gtk_builder_get_object (builder, "service-image")); g_assert (image != NULL); gtk_image_set_from_pixbuf (GTK_IMAGE (image), get_icon_by_id (ICON_SERVICE)); image = GTK_WIDGET (gtk_builder_get_object (builder, "action-image")); g_assert (image != NULL); gtk_image_set_from_pixbuf (GTK_IMAGE (image), get_icon_by_id (ICON_ACTION)); g_signal_connect (in_args_expander, "notify::expanded", G_CALLBACK (on_expander_clicked), dialog); g_signal_connect (out_args_expander, "notify::expanded", G_CALLBACK (on_expander_clicked), dialog); }