diff options
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/main.c b/main.c new file mode 100644 index 0000000..3d08fff --- /dev/null +++ b/main.c @@ -0,0 +1,126 @@ +#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); +} + +static void +file_opened (GObject *source, + GAsyncResult *result, + void *data) +{ + GFile *file; + GError *error = NULL; + + file = gtk_file_dialog_open_finish (GTK_FILE_DIALOG (source), result, &error); + + if (!file) + { + g_print ("%s\n", error->message); + g_error_free (error); + } + + set_file (file, data); +} + +static gboolean +abort_mission (gpointer data) +{ + GCancellable *cancellable = data; + + g_cancellable_cancel (cancellable); + + return G_SOURCE_REMOVE; +} + +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 (); + + cancellable = g_cancellable_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 + GtkFileFilter *filter; + 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); + 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); + + + gtk_file_dialog_open (dialog, parent, cancellable, file_opened, label); + + g_object_unref (cancellable); + g_object_unref (dialog); +} + +static void activate (GtkApplication* app, gpointer user_data) { + GtkWidget *window; + GtkWidget *header; + GtkWidget *image; + GtkWidget *button; + + // Window + window = gtk_application_window_new (app); + gtk_window_set_title (GTK_WINDOW (window), "SheMuVi"); + gtk_window_set_default_size (GTK_WINDOW (window), 400, 600); + gtk_widget_set_visible (window, TRUE); + // Header + header = gtk_header_bar_new(); + button = gtk_button_new_from_icon_name ("document-open-symbolic"); + gtk_widget_set_tooltip_text (button, "Load file"); + g_signal_connect (button, "clicked", G_CALLBACK (open_file), NULL); + gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button); + gtk_window_set_titlebar (GTK_WINDOW (window), header); + // Image + image = gtk_image_new_from_file ("./when-i-survey-the-wondrous-cross-watts.svg"); + gtk_window_set_child (GTK_WINDOW (window), image); +} + +int main (int argc, char **argv) { + GtkApplication *app; + int status; + + app = gtk_application_new ("com.zachdecook.shemuvi", G_APPLICATION_DEFAULT_FLAGS); + g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); + status = g_application_run (G_APPLICATION (app), argc, argv); + g_object_unref (app); + + return status; +} |
