diff options
| -rw-r--r-- | main.c | 104 |
1 files changed, 58 insertions, 46 deletions
diff --git a/main.c b/main.c index 3d08fff..0b31738 100644 --- a/main.c +++ b/main.c @@ -1,25 +1,17 @@ #include <gtk/gtk.h> -// from the example -static void -set_file (GFile *file, - gpointer data) -{ - char *name; - - if (!file) - { - //gtk_widget_set_sensitive (app_picker, FALSE); - //g_object_set_data (G_OBJECT (app_picker), "file", NULL); - return; - } - - name = g_file_get_basename (file); - gtk_label_set_label (GTK_LABEL (data), name); - g_free (name); - - //gtk_widget_set_sensitive (app_picker, TRUE); - //g_object_set_data_full (G_OBJECT (app_picker), "file", g_object_ref (file), g_object_unref); +/* Called when a file is chosen by the open menu. */ +static void set_file (GFile *file, gpointer data) { + char *name; + + if (!file) { + return; + } + + name = g_file_get_path (file); + puts(name); + /* TODO: load this into verovio */ + g_free (name); } static void @@ -51,43 +43,63 @@ abort_mission (gpointer data) return G_SOURCE_REMOVE; } -static void -open_file (GtkButton *picker, - GtkLabel *label) -{ +static void open_file (GtkButton *picker, GtkLabel *label) { GtkWindow *parent = GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (picker))); - GtkFileDialog *dialog; - GCancellable *cancellable; - - dialog = gtk_file_dialog_new (); + GtkFileDialog *dialog; - cancellable = g_cancellable_new (); + dialog = gtk_file_dialog_new (); - g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, - 20, - abort_mission, g_object_ref (cancellable), g_object_unref); gtk_file_dialog_set_title (dialog, "Select Sheet Music File"); // Filters for the different types that are supported. - //GListStore *filters; - //(abc, darms, humdrum, pae) - // Only allow mei,musicxml,xml + GListStore *filters; + filters = g_list_store_new (GTK_TYPE_FILE_FILTER); + + // Note: Files are usually recognized by extension (not mime type). GtkFileFilter *filter; + + // abc notation https://abcnotation.com/ + filter = gtk_file_filter_new(); + gtk_file_filter_set_name (filter, "ABC"); + gtk_file_filter_add_mime_type(filter, "text/vnd.abc"); + gtk_file_filter_add_suffix(filter, "abc"); + g_list_store_append (filters, filter); + g_object_unref (filter); + // TODO: do DARMS and PAE have common extension or mimetype? + // DARMS https://wiki.ccarh.org/wiki/DARMS + // PAE https://www.iaml.info/plaine-easie-code + + // Humdrum https://www.humdrum.org/ + filter = gtk_file_filter_new(); + gtk_file_filter_set_name (filter, "Humdrum"); + gtk_file_filter_add_suffix(filter, "krn"); + g_list_store_append (filters, filter); + g_object_unref (filter); + + // MEI https://music-encoding.org/ + // MusicXML https://www.musicxml.com/ filter = gtk_file_filter_new(); gtk_file_filter_set_name (filter, "MEI, MusicXML"); - gtk_file_filter_add_mime_type (filter, "application/xml"); - gtk_file_filter_add_mime_type (filter, "text/xml"); - //g_list_store_append (filters, filter); + // Generic XML? + //gtk_file_filter_add_mime_type (filter, "application/xml"); + //gtk_file_filter_add_mime_type (filter, "text/xml"); + gtk_file_filter_add_suffix(filter, "xml"); + // MusicXML + gtk_file_filter_add_mime_type(filter, "application/vnd.recordare.musicxml+xml"); + gtk_file_filter_add_suffix(filter, "musicxml"); + // Compressed MusicXML + gtk_file_filter_add_mime_type(filter, "application/vnd.recordare.musicxml"); + gtk_file_filter_add_suffix(filter, "mxl"); + // MEI + gtk_file_filter_add_suffix(filter, "mei"); + g_list_store_append (filters, filter); gtk_file_dialog_set_default_filter (dialog, filter); - //g_object_unref (filter); - - //gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters)); - //g_object_unref (filters); - + g_object_unref (filter); - gtk_file_dialog_open (dialog, parent, cancellable, file_opened, label); + gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters)); + g_object_unref (filters); - g_object_unref (cancellable); - g_object_unref (dialog); + gtk_file_dialog_open (dialog, parent, NULL, file_opened, label); + g_object_unref (dialog); } static void activate (GtkApplication* app, gpointer user_data) { |
