[beast/wip/soundfont: 18/832] BEAST-GTK: implemented browsing and selection of available sound fonts
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast/wip/soundfont: 18/832] BEAST-GTK: implemented browsing and selection of available sound fonts
- Date: Sun, 6 Nov 2016 11:50:27 +0000 (UTC)
commit f8e6b98ef84260b94c12da217131e4b20a9a5923
Author: Stefan Westerfeld <stefan space twc de>
Date: Mon Nov 8 23:14:48 2010 +0100
BEAST-GTK: implemented browsing and selection of available sound fonts
Selecting sound font presets in now supported as an alternative to synth
and wave selection.
beast-gtk/bsttracksynthdialog.c | 34 +++++++++++++++++++++++++++-------
beast-gtk/bsttracksynthdialog.h | 8 +++++++-
beast-gtk/bsttrackview.c | 37 ++++++++++++++++++++++++++++++-------
3 files changed, 64 insertions(+), 15 deletions(-)
---
diff --git a/beast-gtk/bsttracksynthdialog.c b/beast-gtk/bsttracksynthdialog.c
index d1ea14b..b2ddf2b 100644
--- a/beast-gtk/bsttracksynthdialog.c
+++ b/beast-gtk/bsttracksynthdialog.c
@@ -57,7 +57,7 @@ bst_track_synth_dialog_init (BstTrackSynthDialog *self)
GXK_DIALOG_POPUP_POS |
GXK_DIALOG_MODAL),
NULL);
- gxk_dialog_set_sizes (GXK_DIALOG (self), 550, 300, 600, 320);
+ gxk_dialog_set_sizes (GXK_DIALOG (self), 550, 300, 600, 450);
/* notebook */
self->notebook = g_object_new (GXK_TYPE_NOTEBOOK,
@@ -120,6 +120,10 @@ bst_track_synth_dialog_init (BstTrackSynthDialog *self)
self->wpage = g_object_new (BST_TYPE_WAVE_VIEW, "visible", TRUE, NULL);
gxk_notebook_append (self->notebook, self->wpage, "wave", TRUE);
bst_wave_view_set_editable (BST_WAVE_VIEW (self->wpage), FALSE);
+
+ /* sound font view */
+ self->sfont_page = g_object_new (BST_TYPE_SOUND_FONT_VIEW, "visible", TRUE, NULL);
+ gxk_notebook_append (self->notebook, self->sfont_page, "sound_font", TRUE);
/* provide buttons */
self->ok = gxk_dialog_default_action_swapped (GXK_DIALOG (self), BST_STOCK_OK,
bst_track_synth_dialog_activate, self);
@@ -236,6 +240,9 @@ bst_track_synth_dialog_popup (gpointer parent_widget,
const gchar *wrepo_label,
const gchar *wrepo_tooltip,
SfiProxy wrepo,
+ const gchar *sfrepo_label,
+ const gchar *sfrepo_tooltip,
+ SfiProxy sfrepo,
BstTrackSynthDialogSelected selected_callback,
gpointer selected_data,
GxkFreeFunc selected_cleanup)
@@ -246,6 +253,8 @@ bst_track_synth_dialog_popup (gpointer parent_widget,
candidate_label = "";
if (!wrepo_label)
wrepo_label = "";
+ if (!sfrepo_label)
+ sfrepo_label = "";
bst_track_synth_dialog_setup (self, NULL, NULL, 0);
@@ -253,8 +262,10 @@ bst_track_synth_dialog_popup (gpointer parent_widget,
gxk_widget_set_tooltip (self->tview, candidate_tooltip);
g_object_set (gtk_notebook_get_tab_label (self->notebook, self->wpage), "label", wrepo_label, NULL);
gxk_widget_set_tooltip (BST_ITEM_VIEW (self->wpage)->tree, wrepo_tooltip);
+ g_object_set (gtk_notebook_get_tab_label (self->notebook, self->sfont_page), "label", sfrepo_label, NULL);
+ gxk_widget_set_tooltip (BST_ITEM_VIEW (self->sfont_page)->tree, sfrepo_tooltip);
- bst_track_synth_dialog_set (self, candidates, wrepo);
+ bst_track_synth_dialog_set (self, candidates, wrepo, sfrepo);
bst_track_synth_dialog_setup (self, parent_widget,
/* TRANSLATORS: this is a dialog title and %s is replaced by an object name
*/
_("Synthesizer Selection: %s"),
@@ -271,14 +282,17 @@ bst_track_synth_dialog_popup (gpointer parent_widget,
void
bst_track_synth_dialog_set (BstTrackSynthDialog *self,
BseItemSeq *iseq,
- SfiProxy wrepo)
+ SfiProxy wrepo,
+ SfiProxy sfrepo)
{
g_return_if_fail (BST_IS_TRACK_SYNTH_DIALOG (self));
bst_item_view_set_container (BST_ITEM_VIEW (self->wpage), wrepo);
+ bst_item_view_set_container (BST_ITEM_VIEW (self->sfont_page), sfrepo);
bst_item_seq_store_set (self->pstore, iseq);
- g_object_set (self->wpage, "visible", wrepo != 0, NULL);
g_object_set (self->spage, "visible", iseq != NULL, NULL);
+ g_object_set (self->wpage, "visible", wrepo != 0, NULL);
+ g_object_set (self->sfont_page, "visible", sfrepo != 0, NULL);
}
static void
@@ -303,9 +317,15 @@ bst_track_synth_dialog_activate (BstTrackSynthDialog *self)
proxy = bst_item_seq_store_get_from_iter (self->pstore, &piter);
}
}
- else if (self->wpage)
- proxy = bst_item_view_get_current (BST_ITEM_VIEW (self->wpage));
-
+ else if (self->wpage && gxk_widget_viewable (GTK_WIDGET (self->wpage)))
+ {
+ proxy = bst_item_view_get_current (BST_ITEM_VIEW (self->wpage));
+ }
+ else if (self->sfont_page && gxk_widget_viewable (GTK_WIDGET (self->sfont_page)))
+ {
+ proxy = bst_sound_font_view_get_preset (BST_SOUND_FONT_VIEW (self->sfont_page));
+ }
+
/* ignore_activate guards against multiple clicks */
self->ignore_activate = TRUE;
/* notify and done */
diff --git a/beast-gtk/bsttracksynthdialog.h b/beast-gtk/bsttracksynthdialog.h
index 96159cd..4687c37 100644
--- a/beast-gtk/bsttracksynthdialog.h
+++ b/beast-gtk/bsttracksynthdialog.h
@@ -19,6 +19,7 @@
#include "bstutils.h"
#include "bstwaveview.h"
+#include "bstsoundfontview.h"
G_BEGIN_DECLS
@@ -44,6 +45,7 @@ struct _BstTrackSynthDialog
GtkNotebook *notebook;
GtkWidget *wpage; /* wave repo item view */
GtkWidget *spage; /* synth list */
+ GtkWidget *sfont_page; /* sound font patch selection */
GtkWidget *ok; /* ok button */
GtkWindow *parent_window;
guint ignore_activate : 1;
@@ -69,12 +71,16 @@ GtkWidget* bst_track_synth_dialog_popup (gpointer parent_
const gchar *wrepo_label,
const gchar *wrepo_tooltip,
SfiProxy wrepo,
+ const gchar *sfrepo_label,
+ const gchar *sfrepo_tooltip,
+ SfiProxy sfrepo,
BstTrackSynthDialogSelected selected_callback,
gpointer selected_data,
GxkFreeFunc selected_cleanup);
void bst_track_synth_dialog_set (BstTrackSynthDialog *self,
BseItemSeq *iseq,
- SfiProxy wrepo);
+ SfiProxy wrepo,
+ SfiProxy sfrepo);
diff --git a/beast-gtk/bsttrackview.c b/beast-gtk/bsttrackview.c
index bca8e74..e6c44e9 100644
--- a/beast-gtk/bsttrackview.c
+++ b/beast-gtk/bsttrackview.c
@@ -135,7 +135,7 @@ track_view_fill_value (BstItemView *iview,
const gchar *string;
gboolean vbool;
SfiInt vint;
- SfiProxy snet, wave;
+ SfiProxy snet, wave, sound_font_preset;
BseItemSeq *iseq;
SfiSeq *seq;
case COL_SEQID:
@@ -154,8 +154,18 @@ track_view_fill_value (BstItemView *iview,
break;
case COL_SYNTH:
snet = 0;
- bse_proxy_get (item, "snet", &snet, "wave", &wave, NULL);
- g_value_set_string (value, snet || wave ? bse_item_get_name (snet ? snet : wave) : "");
+ wave = 0;
+ sound_font_preset = 0;
+ bse_proxy_get (item, "snet", &snet, "wave", &wave, "sound_font_preset", &sound_font_preset, NULL);
+ if (snet)
+ string = bse_item_get_name (snet);
+ else if (wave)
+ string = bse_item_get_name (wave);
+ else if (sound_font_preset)
+ string = bse_item_get_name (sound_font_preset);
+ else
+ string = "";
+ g_value_set_string (value, string);
break;
case COL_MIDI_CHANNEL:
bse_proxy_get (item, "midi-channel", &vint, NULL);
@@ -190,7 +200,7 @@ track_view_synth_edited (BstTrackView *self,
const gchar *text)
{
g_return_if_fail (BST_IS_TRACK_VIEW (self));
-
+
if (strpath)
{
gint row = gxk_tree_spath_index0 (strpath);
@@ -199,11 +209,18 @@ track_view_synth_edited (BstTrackView *self,
{
SfiProxy proxy = 0;
GSList *slist = NULL;
- /* list possible snet/wave candidates */
+ /* list possible snet/wave/sound_font_preset candidates */
BsePropertyCandidates *pc = bse_item_get_property_candidates (item, "snet");
+ printf ("[0] slist=%p\n", slist);
slist = g_slist_append (slist, pc->items);
pc = bse_item_get_property_candidates (item, "wave");
+ printf ("[1] slist=%p\n", slist);
slist = g_slist_append (slist, pc->items);
+ pc = bse_item_get_property_candidates (item, "sound_font_preset");
+ printf ("[2] slist=%p\n", slist);
+ printf ("pc=%p\n", pc);
+ printf ("pc->items=%p\n", pc->items);
+ slist = g_slist_append (slist, pc->items);
/* find best match */
proxy = bst_item_seq_list_match (slist, text);
g_slist_free (slist);
@@ -211,11 +228,13 @@ track_view_synth_edited (BstTrackView *self,
bse_proxy_set (item, "snet", proxy, NULL);
else if (proxy && BSE_IS_WAVE (proxy))
bse_proxy_set (item, "wave", proxy, NULL);
+ else if (proxy && BSE_IS_SOUND_FONT_PRESET (proxy))
+ bse_proxy_set (item, "sound_font_preset", proxy, NULL);
else
- bse_proxy_set (item, "snet", 0, "wave", 0, NULL);
+ bse_proxy_set (item, "snet", 0, "wave", 0, "sound_font_preset", 0, NULL);
}
else
- bse_proxy_set (item, "snet", 0, "wave", 0, NULL);
+ bse_proxy_set (item, "snet", 0, "wave", 0, "sound_font_preset", 0, NULL);
}
}
@@ -296,6 +315,9 @@ track_view_synth_popup (BstTrackView *self,
_("Available Waves"),
_("List of available waves to choose a track
instrument from"),
bse_project_get_wave_repo (bse_item_get_project
(item)),
+ _("Available Sound Fonts"),
+ _("List of available sound fonts to choose track
instrument from"),
+ bse_project_get_sound_font_repo
(bse_item_get_project (item)),
track_view_synth_popup_cb, g_memdup (&sdata,
sizeof (sdata)), track_view_synth_popup_cleanup);
gxk_cell_renderer_popup_dialog (pcell, dialog);
}
@@ -323,6 +345,7 @@ track_view_post_synth_popup (BstTrackView *self,
GtkWidget *dialog = bst_track_synth_dialog_popup (self, item,
pc->label, pc->tooltip, pc->items,
NULL, NULL, 0,
+ NULL, NULL, 0,
track_view_synth_popup_cb, g_memdup (&sdata,
sizeof (sdata)), track_view_synth_popup_cleanup);
gxk_cell_renderer_popup_dialog (pcell, dialog);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]