about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--main.c126
2 files changed, 127 insertions, 1 deletions
diff --git a/README.md b/README.md
index 8980944..c2a6786 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
 # SheMuVi - Sheet Music Viewer
 
-SheMuVi is a [GTK4](https://docs.gtk.org/gtk4/)/[libadwaita](https://gnome.pages.gitlab.gnome.org/libadwaita/) application powered by [Verovio](https://www.verovio.org/index.xhtml) and [libvips](https://www.libvips.org/).
+SheMuVi is a [GTK4](https://docs.gtk.org/gtk4/) application.
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;
+}