/** * ppg_instrument_view_set_instrument: * @view: (in): A #PpgInstrumentView. * @instrument: (in): A #PpgInstrument. * * Set the instrument for the instrument view. This may only be called * once. * * Returns: None. * Side effects: None. */ void ppg_instrument_view_set_instrument (PpgInstrumentView *view, PpgInstrument *instrument) { PpgInstrumentViewPrivate *priv; GList *list; GList *iter; g_return_if_fail(PPG_IS_INSTRUMENT_VIEW(view)); g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); priv = view->priv; /* * Sink instrument into our view and setup canvas items. */ priv->instrument = g_object_ref_sink(instrument); g_object_bind_property(instrument, "title", priv->header_text, "text", G_BINDING_SYNC_CREATE); g_signal_connect_swapped(instrument, "visualizer-added", G_CALLBACK(ppg_instrument_view_visualizer_added), view); list = ppg_instrument_get_visualizers(instrument); for (iter = list; iter; iter = iter->next) { ppg_instrument_view_visualizer_added(view, iter->data, instrument); } }
void ppg_instrument_add_visualizer (PpgInstrument *instrument, const gchar *name) { PpgInstrumentPrivate *priv; PpgVisualizer *visualizer = NULL; PpgVisualizerFactory *factory; PpgVisualizer* (*factory_func) (gpointer user_data); gint i; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); g_return_if_fail(name != NULL); priv = instrument->priv; for (i = 0; i < priv->factories->len; i++) { factory = &g_array_index(priv->factories, PpgVisualizerFactory, i); if (g_str_equal(factory->entry->name, name)) { if ((factory_func = (gpointer)factory->entry->callback)) { visualizer = factory_func(factory->user_data); } } } if (visualizer) { g_signal_emit(instrument, signals[VISUALIZER_ADDED], 0, visualizer); } }
static void ppg_instrument_set_session (PpgInstrument *instrument, PpgSession *session) { PpgInstrumentClass *klass; PpgInstrumentPrivate *priv; GError *error = NULL; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); g_return_if_fail(PPG_IS_SESSION(session)); priv = instrument->priv; klass = PPG_INSTRUMENT_GET_CLASS(instrument); priv->session = session; g_object_add_weak_pointer(G_OBJECT(priv->session), (gpointer *)&priv->session); if (klass->load) { if (!klass->load(instrument, session, &error)) { priv->failed = TRUE; g_critical("Failed to load instrument %s: %s", g_type_name(G_TYPE_FROM_INSTANCE(instrument)), error->message); /* * XXX: Should we store the error? */ g_error_free(error); return; } } }
void ppg_instrument_register_visualizer (PpgInstrument *instrument, PpgVisualizerEntry *entry, gpointer user_data) { PpgInstrumentPrivate *priv; PpgVisualizerFactory factory = { 0 }; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); g_return_if_fail(entry != NULL); priv = instrument->priv; if (!entry->callback) { g_critical("PpgVisualizerEntry \"%s\" missing callback!", entry->name); return; } factory.entry = g_new0(PpgVisualizerEntry, 1); memcpy(factory.entry, entry, sizeof(*entry)); factory.user_data = user_data; g_array_append_val(priv->factories, factory); }
static void ppg_configure_instrument_dialog_set_instrument (PpgConfigureInstrumentDialog *dialog, PpgInstrument *instrument) { PpgConfigureInstrumentDialogPrivate *priv; g_return_if_fail(PPG_IS_CONFIGURE_INSTRUMENT_DIALOG(dialog)); g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); priv = dialog->priv; priv->instrument = instrument; }
static void ppg_instrument_visualizer_added (PpgInstrument *instrument, PpgVisualizer *visualizer) { PpgInstrumentPrivate *priv; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); g_return_if_fail(PPG_IS_VISUALIZER(visualizer)); priv = instrument->priv; priv->visualizers = g_list_prepend(priv->visualizers, visualizer); }
static void ppg_instrument_set_name (PpgInstrument *instrument, const gchar *name) { PpgInstrumentPrivate *priv; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); priv = instrument->priv; g_free(priv->name); priv->name = g_strdup(name); }
GList* ppg_instrument_get_visualizer_entries (PpgInstrument *instrument) { PpgInstrumentPrivate *priv; PpgVisualizerFactory *factory; GList *list = NULL; gint i; g_return_val_if_fail(PPG_IS_INSTRUMENT(instrument), NULL); priv = instrument->priv; for (i = 0; i < priv->factories->len; i++) { factory = &g_array_index(priv->factories, PpgVisualizerFactory, i); list = g_list_prepend(list, factory->entry); } return list; }
void ppg_instrument_remove_visualizer (PpgInstrument *instrument, PpgVisualizer *visualizer) { PpgInstrumentPrivate *priv; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); g_return_if_fail(PPG_IS_VISUALIZER(visualizer)); priv = instrument->priv; if (!g_list_find(priv->visualizers, visualizer)) { g_critical("Instrument does not contain visualizer instance!"); return; } priv->visualizers = g_list_remove(priv->visualizers, visualizer); g_signal_emit(instrument, signals[VISUALIZER_REMOVED], 0, visualizer); }
void ppg_instrument_register_visualizers (PpgInstrument *instrument, PpgVisualizerEntry *entries, guint n_entries, gpointer user_data) { PpgInstrumentPrivate *priv; gint i; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); g_return_if_fail(entries != NULL); priv = instrument->priv; for (i = 0; i < n_entries; i++) { ppg_instrument_register_visualizer(instrument, &entries[i], user_data); } }
void ppg_instrument_remove_visualizer_named (PpgInstrument *instrument, const gchar *name) { PpgInstrumentPrivate *priv; GList *iter; gchar *iter_name; g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); g_return_if_fail(name != NULL); priv = instrument->priv; for (iter = priv->visualizers; iter; iter = iter->next) { g_object_get(iter->data, "name", &iter_name, NULL); if (!g_strcmp0(name, iter_name)) { ppg_instrument_remove_visualizer(instrument, iter->data); g_free(iter_name); return; } g_free(iter_name); } }
/** * ppg_instrument_view_visualizer_added: * @view: (in): A #PpgInstrumentView. * * Handle the "visualizer-added" event for the #PpgInstrument. Add the * visualizer to our table of visualizers. * * Returns: None. * Side effects: None. */ static void ppg_instrument_view_visualizer_added (PpgInstrumentView *view, PpgVisualizer *visualizer, PpgInstrument *instrument) { PpgInstrumentViewPrivate *priv; GooCanvasItem *item = (GooCanvasItem *)visualizer; gdouble width; g_return_if_fail(PPG_IS_INSTRUMENT_VIEW(view)); g_return_if_fail(PPG_IS_VISUALIZER(visualizer)); g_return_if_fail(PPG_IS_INSTRUMENT(instrument)); priv = view->priv; g_object_get(view, "width", &width, NULL); width = MAX(200.0, width - HEADER_WIDTH); g_object_set(item, "parent", priv->table, "width", width, "visibility", GOO_CANVAS_ITEM_VISIBLE, NULL); g_object_bind_property_full(view, "width", item, "width", 0, ppg_instrument_view_transform_width, NULL, NULL, NULL); goo_canvas_item_set_child_properties(priv->table, item, "bottom-padding", ROW_SPACING, "column", 0, "row", priv->visualizers->len, NULL); g_ptr_array_add(priv->visualizers, visualizer); g_signal_connect_swapped(visualizer, "notify::natural-height", G_CALLBACK(ppg_instrument_view_notify_natural_height), view); ppg_instrument_view_relayout(view); }
GList* ppg_instrument_get_visualizers (PpgInstrument *instrument) { g_return_val_if_fail(PPG_IS_INSTRUMENT(instrument), NULL); return instrument->priv->visualizers; }