static UI_CALLBACK(ui_about_cmdline) { unsigned int i, num_options; char *name, *param, *desc; char *text; num_options = cmdline_get_num_options(); text = lib_malloc(num_options * 0x100); text[0] = 0; for (i = 0; i < num_options; i++) { name = cmdline_options_get_name(i); if (name == NULL) { log_error(LOG_ERR, "ui_about_cmdline: name is NULL."); break; } strcat(text, name); param = cmdline_options_get_param(i); if (param != NULL) { strcat(text, " "); strcat(text, param); } desc = cmdline_options_get_description(i); if (desc != NULL) { strcat(text, "\n\t"); strcat(text, desc); } else { log_error(LOG_ERR, "ui_about_cmdline: description for '%s' is NULL.", name); } strcat(text, "\n"); if (strlen(text) > ((num_options - 1) * 0x100)) { log_error(LOG_ERR, "ui_about_cmdline: string buffer not big enough!"); break; } } ui_show_text(_("Available command-line options:"), text, 600, 400); lib_free(text); }
/** \brief Create textview with scrollbars * * \return GtkScrolledWindow */ static GtkWidget *create_content_widget(void) { GtkWidget *view; GtkWidget *scrolled; GtkTextBuffer *buffer; GtkTextIter iter; GtkTextTag *name_tag; GtkTextTag *inv_tag; GtkTextTag *desc_tag; int num_options = cmdline_get_num_options(); int i; view = gtk_text_view_new(); gtk_text_view_set_editable(GTK_TEXT_VIEW(view), FALSE); gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(view), FALSE); gtk_text_view_set_monospace(GTK_TEXT_VIEW(view), TRUE); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR); gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view),16); gtk_text_view_set_right_margin(GTK_TEXT_VIEW(view),16); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view)); /* name: bold (for -option) */ name_tag = gtk_text_buffer_create_tag(buffer, "name_tag", "weight", PANGO_WEIGHT_BOLD, NULL); /* name: bold and red (for +option) */ inv_tag = gtk_text_buffer_create_tag(buffer, "inv_tag", "weight", PANGO_WEIGHT_BOLD, "foreground", "red", NULL); /* description: indented and sans-serif */ desc_tag = gtk_text_buffer_create_tag(buffer, "desc_tag", "left-margin", 48, "family", "sans-serif", NULL); scrolled = gtk_scrolled_window_new(NULL, NULL); gtk_widget_set_size_request(scrolled, 800, 600); gtk_container_add(GTK_CONTAINER(scrolled), view); gtk_text_buffer_get_iter_at_offset(buffer, &iter, 0); for (i = 0; i < num_options; i++) { char *name; char *param; char *desc; name = cmdline_options_get_name(i); param = cmdline_options_get_param(i); desc = cmdline_options_get_description(i); if (name[0] == '-') { gtk_text_buffer_insert_with_tags(buffer, &iter, name, -1, name_tag, NULL); } else { gtk_text_buffer_insert_with_tags(buffer, &iter, name, -1, inv_tag, NULL); } if (param != NULL) { gtk_text_buffer_insert(buffer, &iter, " ", -1); gtk_text_buffer_insert(buffer, &iter, param, -1); } gtk_text_buffer_insert(buffer, &iter, "\n", -1); if (desc == NULL) { fprintf(stderr, "no desc for '%s'\n", name); desc = "[DESCRIPTION MISSING]"; } gtk_text_buffer_insert_with_tags(buffer, &iter, desc, -1, desc_tag, NULL); gtk_text_buffer_insert(buffer, &iter, "\n\n", -1); } gtk_widget_show_all(scrolled); return scrolled; }