示例#1
0
/**
 * 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);
    }
}
示例#2
0
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);
	}
}
示例#3
0
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;
		}
	}
}
示例#4
0
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;
}
示例#6
0
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);
}
示例#7
0
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);
}
示例#8
0
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;
}
示例#9
0
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);
}
示例#10
0
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);
	}
}
示例#11
0
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);
	}
}
示例#12
0
/**
 * 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);
}
示例#13
0
GList*
ppg_instrument_get_visualizers (PpgInstrument *instrument)
{
	g_return_val_if_fail(PPG_IS_INSTRUMENT(instrument), NULL);
	return instrument->priv->visualizers;
}