static void gwy_graph_data_update_headers(GwyGraphData *graph_data) { const GwyGraphDataCurve *curve; const gchar *xlabel, *ylabel; GtkTreeView *treeview; GtkTreeViewColumn *column; GtkWidget *table, *label; GwySIUnit *siunit; gchar *sx, *sy; GString *str; guint i; treeview = GTK_TREE_VIEW(graph_data); xlabel = gwy_graph_model_get_axis_label(graph_data->graph_model, GTK_POS_BOTTOM); ylabel = gwy_graph_model_get_axis_label(graph_data->graph_model, GTK_POS_LEFT); g_object_get(graph_data->graph_model, "si-unit-x", &siunit, NULL); sx = gwy_si_unit_get_string(siunit, GWY_SI_UNIT_FORMAT_MARKUP); g_object_unref(siunit); g_object_get(graph_data->graph_model, "si-unit-y", &siunit, NULL); sy = gwy_si_unit_get_string(siunit, GWY_SI_UNIT_FORMAT_MARKUP); g_object_unref(siunit); str = g_string_new(""); for (i = 0; i < graph_data->curves->len; i++) { curve = &g_array_index(graph_data->curves, GwyGraphDataCurve, i); column = gtk_tree_view_get_column(treeview, i); table = gtk_tree_view_column_get_widget(column); label = gwy_table_get_child_widget(table, 0, 0); gtk_label_set_markup(GTK_LABEL(label), curve->gcmodel->description->str); label = gwy_table_get_child_widget(table, 1, 0); g_string_assign(str, xlabel); if (sx && *sx) { g_string_append(str, " ["); g_string_append(str, sx); g_string_append(str, "]"); } gtk_label_set_markup(GTK_LABEL(label), str->str); label = gwy_table_get_child_widget(table, 1, 1); g_string_assign(str, ylabel); if (sy && *sy) { g_string_append(str, " ["); g_string_append(str, sy); g_string_append(str, "]"); } gtk_label_set_markup(GTK_LABEL(label), str->str); } g_string_free(str, TRUE); g_free(sx); g_free(sy); }
/* Set the title of COLUMN to TITLE and also set TOOLTIP. */ void gpa_set_column_title (GtkTreeViewColumn *column, const char *title, const char *tooltip) { GtkWidget *label; label = gtk_label_new (title); /* We need to show the label before setting the widget. */ gtk_widget_show (label); gtk_tree_view_column_set_widget (column, label); if (tooltip) gpa_add_tooltip (gtk_tree_view_column_get_widget (column), tooltip); }
static void extract_column_clicked_cb (GtkTreeViewColumn *column, RBAudioCdSource *source) { RhythmDBQueryModel *model; gboolean extract; GtkWidget *checkbox; /* toggle the state of the checkbox in the header */ checkbox = gtk_tree_view_column_get_widget (column); g_object_get (checkbox, "active", &extract, NULL); extract = !extract; g_object_set (checkbox, "active", extract, NULL); /* set the extraction state for all tracks to match */ g_object_get (source, "query-model", &model, NULL); gtk_tree_model_foreach (GTK_TREE_MODEL (model), set_extract, GINT_TO_POINTER (extract)); g_object_unref (model); }
static void update_column_title(GwyCoordsView *view, ColumnInfo *column_info) { CoordsView *priv = view->priv; const gchar *title = column_info->title; const gchar *units = NULL; if (!column_info->is_index) { if (priv->scale_type == GWY_COORD_SCALE_PIXEL) { units = "px"; } else { guint i = column_info->i; guint d = priv->coords_class->dimension_map[i]; units = priv->dim_info[d].units; } } gboolean has_title = title && *title; gboolean has_units = units && *units; const gchar *separ = priv->split_units ? "\n" : " "; const gchar *nosepar = priv->split_units ? "\n" : ""; gchar *s = NULL; if (has_title && has_units) s = g_strconcat("<b>", title, "</b>", separ, "[", units, "]", NULL); else if (has_title) s = g_strconcat("<b>", title, "</b>", nosepar, NULL); else if (has_units) s = g_strconcat(nosepar, "[", units, "]", NULL); else s = g_strdup(nosepar); GtkWidget *header = gtk_tree_view_column_get_widget(column_info->column); gtk_label_set_markup(GTK_LABEL(header), s); g_free(s); }
static void rb_audiocd_source_constructed (GObject *object) { RBAudioCdSourcePrivate *priv; RBAudioCdSource *source; RBEntryView *entry_view; GtkCellRenderer *renderer; GtkTreeViewColumn *extract; GtkWidget *widget; GtkAction *action; RhythmDB *db; RBPlugin *plugin; RBShell *shell; char *ui_file; int toggle_width; RB_CHAIN_GOBJECT_METHOD (rb_audiocd_source_parent_class, constructed, object); source = RB_AUDIOCD_SOURCE (object); priv = AUDIOCD_SOURCE_GET_PRIVATE (source); g_object_set (G_OBJECT (source), "name", "Unknown Audio", NULL); g_object_get (source, "shell", &shell, NULL); priv->action_group = _rb_source_register_action_group (RB_SOURCE (source), "AudioCdActions", NULL, 0, NULL); _rb_action_group_add_source_actions (priv->action_group, G_OBJECT (shell), rb_audiocd_source_actions, G_N_ELEMENTS (rb_audiocd_source_actions)); g_object_unref (shell); action = gtk_action_group_get_action (priv->action_group, "AudioCdCopyTracks"); /* Translators: this is the toolbar button label for Copy to Library action. */ g_object_set (action, "short-label", _("Extract"), NULL); #if !defined(HAVE_SJ_METADATA_GETTER) action = gtk_action_group_get_action (priv->action_group, "AudioCdSourceReloadMetadata"); g_object_set (action, "visible", FALSE, NULL); #endif /* we want audio cds to sort by track# by default */ entry_view = rb_source_get_entry_view (RB_SOURCE (source)); rb_entry_view_set_sorting_order (entry_view, "Track", GTK_SORT_ASCENDING); /* enable in-place editing for titles, artists, and genres */ rb_entry_view_set_column_editable (entry_view, RB_ENTRY_VIEW_COL_TITLE, TRUE); rb_entry_view_set_column_editable (entry_view, RB_ENTRY_VIEW_COL_ARTIST, TRUE); rb_entry_view_set_column_editable (entry_view, RB_ENTRY_VIEW_COL_GENRE, TRUE); /* create the 'extract' column */ renderer = gtk_cell_renderer_toggle_new (); extract = gtk_tree_view_column_new (); gtk_tree_view_column_pack_start (extract, renderer, FALSE); gtk_tree_view_column_set_cell_data_func (extract, renderer, (GtkTreeCellDataFunc) extract_cell_data_func, source, NULL); gtk_tree_view_column_set_clickable (extract, TRUE); widget = gtk_check_button_new (); g_object_set (widget, "active", TRUE, NULL); gtk_widget_show_all (widget); g_signal_connect_object (extract, "clicked", G_CALLBACK (extract_column_clicked_cb), source, 0); gtk_tree_view_column_set_widget (extract, widget); g_signal_connect_object (renderer, "toggled", G_CALLBACK (extract_toggled_cb), source, 0); /* set column width */ gtk_cell_renderer_get_size (renderer, GTK_WIDGET (entry_view), NULL, NULL, NULL, &toggle_width, NULL); gtk_tree_view_column_set_sizing (extract, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_fixed_width (extract, toggle_width + 5); rb_entry_view_insert_column_custom (entry_view, extract, "", "Extract", NULL, NULL, NULL, 1); gtk_widget_set_tooltip_text (gtk_tree_view_column_get_widget (extract), _("Select tracks to be extracted")); /* hide the 'album' column */ gtk_tree_view_column_set_visible (rb_entry_view_get_column (entry_view, RB_ENTRY_VIEW_COL_ALBUM), FALSE); /* handle extra metadata requests for album artist and album artist sortname */ db = get_db_for_source (source); g_signal_connect_object (G_OBJECT (db), "entry-extra-metadata-request::" RHYTHMDB_PROP_ALBUM_ARTIST, G_CALLBACK (album_artist_metadata_request_cb), source, 0); g_signal_connect_object (G_OBJECT (db), "entry-extra-metadata-request::" RHYTHMDB_PROP_ALBUM_ARTIST_SORTNAME, G_CALLBACK (album_artist_sortname_metadata_request_cb), source, 0); g_signal_connect_object (G_OBJECT (db), "entry-extra-metadata-gather", G_CALLBACK (metadata_gather_cb), source, 0); g_object_unref (db); /* set up the album info widgets */ g_object_get (source, "plugin", &plugin, NULL); ui_file = rb_plugin_find_file (plugin, "album-info.ui"); g_object_unref (plugin); if (ui_file == NULL) { g_warning ("couldn't find album-info.ui"); } else { RBAudioCdSourcePrivate *priv; GtkWidget *table; GtkBuilder *builder; #if defined(HAVE_SJ_METADATA_GETTER) && GTK_CHECK_VERSION(2,17,6) GtkWidget *box; char *message; #endif priv = AUDIOCD_SOURCE_GET_PRIVATE (source); builder = rb_builder_load (ui_file, NULL); g_free (ui_file); table = GTK_WIDGET (gtk_builder_get_object (builder, "album_info")); g_assert (table != NULL); #if defined(HAVE_SJ_METADATA_GETTER) && GTK_CHECK_VERSION(2,17,6) /* Info bar for non-Musicbrainz data */ priv->info_bar = gtk_info_bar_new_with_buttons (_("S_ubmit Album"), GTK_RESPONSE_OK, _("Hide"), GTK_RESPONSE_CANCEL, NULL); message = g_strdup_printf ("<b>%s</b>\n%s", _("Could not find this album on MusicBrainz."), _("You can improve the MusicBrainz database by adding this album.")); priv->info_bar_label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (priv->info_bar_label), message); gtk_label_set_justify (GTK_LABEL (priv->info_bar_label), GTK_JUSTIFY_LEFT); g_free (message); box = gtk_info_bar_get_content_area (GTK_INFO_BAR (priv->info_bar)); gtk_container_add (GTK_CONTAINER (box), priv->info_bar_label); gtk_widget_show_all (box); gtk_widget_set_no_show_all (priv->info_bar, TRUE); g_signal_connect (G_OBJECT (priv->info_bar), "response", G_CALLBACK (info_bar_response_cb), source); gtk_table_attach_defaults (GTK_TABLE (table), priv->info_bar, 0, 2, 0, 1); #endif priv->artist_entry = GTK_WIDGET (gtk_builder_get_object (builder, "artist_entry")); priv->artist_sort_entry = GTK_WIDGET (gtk_builder_get_object (builder, "artist_sort_entry")); priv->album_entry = GTK_WIDGET (gtk_builder_get_object (builder, "album_entry")); priv->year_entry = GTK_WIDGET (gtk_builder_get_object (builder, "year_entry")); priv->genre_entry = GTK_WIDGET (gtk_builder_get_object (builder, "genre_entry")); priv->disc_number_entry = GTK_WIDGET (gtk_builder_get_object (builder, "disc_number_entry")); g_signal_connect_object (priv->album_entry, "focus-out-event", G_CALLBACK (update_album_cb), source, 0); g_signal_connect_object (priv->genre_entry, "focus-out-event", G_CALLBACK (update_genre_cb), source, 0); g_signal_connect_object (priv->year_entry, "focus-out-event", G_CALLBACK (update_year_cb), source, 0); g_signal_connect_object (priv->disc_number_entry, "focus-out-event", G_CALLBACK (update_disc_number_cb), source, 0); gtk_box_pack_start (GTK_BOX (priv->box), table, FALSE, FALSE, 0); gtk_box_reorder_child (GTK_BOX (priv->box), table, 0); g_object_unref (builder); } g_object_ref (G_OBJECT (source)); g_thread_create ((GThreadFunc)rb_audiocd_load_songs, source, FALSE, NULL); }