1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
/* Dynamic.c
* Implements lilydirectives which are not notes
*
* A Tee (c) 2000, 2001
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "chordops.h"
#include "calculatepositions.h"
#include "commandfuncs.h"
#include "contexts.h"
#include "datastructures.h"
#include "dialogs.h"
#include "draw.h"
#include "objops.h"
#include "staffops.h"
#include "utils.h"
struct callbackdata
{
struct scoreinfo *si;
GtkWidget *combobox;
};
static gchar *directives[15] =
{ "ppp", "pp", "p", "mp", "mf", "f", "ff", "fff",
"sf", "fp", "sfz", "cr", "rc", "dr", "rd"
};
static void
insert_it (GtkWidget * widget, gpointer data)
{
mudelaobject *mudelaobj;
struct callbackdata *cbdata = data;
struct scoreinfo *si = cbdata->si;
gchar *string =
gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (cbdata->combobox)->entry));
GString *directivestring = g_string_new(string);
mudelaobj = si->currentobject ? si->currentobject->data : NULL;
if (mudelaobj && mudelaobj->type == CHORD) {
mudelaobj->u.chordval.dynamics =
g_list_append(mudelaobj->u.chordval.dynamics,
directivestring);
mudelaobj->u.chordval.has_dynamic = TRUE;
}
/*object_insert (si, dynamic_new (directivestring));*/
gtk_widget_draw (si->scorearea, NULL);
}
void
insert_dynamic (gpointer callback_data, guint callback_action,
GtkWidget * widget)
{
int i;
struct scoreinfo *si = callback_data;
static struct callbackdata cbdata;
GtkWidget *dialog;
GtkWidget *combo;
GtkWidget *okbutton;
GtkWidget *cancelbutton;
GtkWidget *label;
GList *directivelist = NULL;
dialog = gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (dialog), _("Insert Dynamic"));
label = gtk_label_new (_("Insert Dynamic"));
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label,
TRUE, TRUE, 0);
gtk_widget_show (label);
combo = gtk_combo_new ();
if (!directivelist)
for (i = 0; i < 15; i++)
{
directivelist = g_list_append (directivelist, directives[i]);
}
gtk_combo_set_popdown_strings (GTK_COMBO (combo), directivelist);
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo)->entry), directives[0]);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), combo,
TRUE, TRUE, 0);
gtk_widget_show (combo);
okbutton = gtk_button_new_with_label (_("OK"));
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area), okbutton,
TRUE, TRUE, 0);
cbdata.si = si;
cbdata.combobox = combo;
processenter (GTK_COMBO (combo)->entry, insert_it, cbdata, dialog);
gtk_signal_connect (GTK_OBJECT (okbutton), _("clicked"),
GTK_SIGNAL_FUNC (insert_it), &cbdata);
gtk_signal_connect_object (GTK_OBJECT (okbutton), _("clicked"),
gtk_widget_destroy, GTK_OBJECT (dialog));
gtk_widget_show (okbutton);
cancelbutton = gtk_button_new_with_label (_("Cancel"));
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->action_area),
cancelbutton, TRUE, TRUE, 0);
gtk_signal_connect_object (GTK_OBJECT (cancelbutton), _("clicked"),
gtk_widget_destroy, GTK_OBJECT (dialog));
gtk_widget_show (cancelbutton);
gtk_widget_grab_focus (combo);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_MOUSE);
gtk_widget_show (dialog);
}
|