aboutsummaryrefslogtreecommitdiff
path: root/src/colloquium.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2014-09-28 13:43:34 +0200
committerThomas White <taw@bitwiz.org.uk>2014-09-28 13:43:34 +0200
commitbee5e2fd263d81b7dc8180e831cbc96500cece1f (patch)
tree2d8ec810a21707fb4013b26b7e49ea4f1bfc6294 /src/colloquium.c
parentab6af6b34c9e5fdfa8cff44fa0f78f9c34ed28ef (diff)
SCEditor, part II
Diffstat (limited to 'src/colloquium.c')
-rw-r--r--src/colloquium.c134
1 files changed, 125 insertions, 9 deletions
diff --git a/src/colloquium.c b/src/colloquium.c
index ce23be5..51b60c9 100644
--- a/src/colloquium.c
+++ b/src/colloquium.c
@@ -32,12 +32,79 @@
#include "narrative_window.h"
+typedef struct
+{
+ GtkApplication parent_instance;
+} Colloquium;
+
+
+typedef GtkApplicationClass ColloquiumClass;
+
+
+G_DEFINE_TYPE(Colloquium, colloquium, GTK_TYPE_APPLICATION)
+
+
static void colloquium_activate(GApplication *app)
{
printf("activate!\n");
}
+static void new_sig(GSimpleAction *action, GVariant *parameter, gpointer vp)
+{
+ GApplication *app = vp;
+ g_application_activate(app);
+}
+
+
+static void about_sig(GSimpleAction *action, GVariant *parameter, gpointer vp)
+{
+ GtkWidget *window;
+
+ const gchar *authors[] = {
+ "Thomas White <taw@bitwiz.org.uk>",
+ NULL
+ };
+
+ window = gtk_about_dialog_new();
+
+ gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(window),
+ "Colloquium");
+ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),
+ PACKAGE_VERSION);
+ gtk_about_dialog_set_copyright(GTK_ABOUT_DIALOG(window),
+ "© 2013 Thomas White <taw@bitwiz.org.uk>");
+ gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),
+ "A tiny presentation program");
+ gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window),
+ "© 2013 Thomas White <taw@bitwiz.org.uk>\n");
+ gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(window),
+ "http://www.bitwiz.org.uk/");
+ gtk_about_dialog_set_authors(GTK_ABOUT_DIALOG(window), authors);
+
+ g_signal_connect(window, "response", G_CALLBACK(gtk_widget_destroy),
+ NULL);
+
+ gtk_widget_show_all(window);
+}
+
+
+static void quit_sig(GSimpleAction *action, GVariant *parameter, gpointer vp)
+{
+ GApplication *app = vp;
+ g_application_quit(app);
+}
+
+
+GActionEntry app_entries[] = {
+
+ { "new", new_sig, NULL, NULL, NULL },
+ { "about", about_sig, NULL, NULL, NULL },
+ { "quit", quit_sig, NULL, NULL, NULL },
+
+};
+
+
static void colloquium_open(GApplication *app, GFile **files, gint n_files,
const gchar *hint)
{
@@ -46,7 +113,6 @@ static void colloquium_open(GApplication *app, GFile **files, gint n_files,
for ( i = 0; i<n_files; i++ ) {
struct presentation *p;
char *uri = g_file_get_path(files[i]);
- printf("open %s\n", uri);
p = new_presentation();
load_presentation(p, uri);
narrative_window_new(p, app);
@@ -54,14 +120,6 @@ static void colloquium_open(GApplication *app, GFile **files, gint n_files,
}
}
-typedef struct
-{
- GtkApplication parent_instance;
-} Colloquium;
-
-typedef GtkApplicationClass ColloquiumClass;
-
-G_DEFINE_TYPE(Colloquium, colloquium, GTK_TYPE_APPLICATION)
static void colloquium_finalize(GObject *object)
{
@@ -71,7 +129,65 @@ static void colloquium_finalize(GObject *object)
static void colloquium_startup(GApplication *app)
{
+ GtkBuilder *builder;
+
G_APPLICATION_CLASS(colloquium_parent_class)->startup(app);
+
+ g_action_map_add_action_entries(G_ACTION_MAP(app), app_entries,
+ G_N_ELEMENTS(app_entries), app);
+
+ builder = gtk_builder_new();
+ gtk_builder_add_from_string(builder,
+ "<interface>"
+
+ " <menu id='app-menu'>"
+ " <section>"
+ " <item>"
+ " <attribute name='label'>_New</attribute>"
+ " <attribute name='action'>app.new</attribute>"
+ " <attribute name='accel'>&lt;Primary&gt;n</attribute>"
+ " </item>"
+ " </section>"
+ " <section>"
+ " <item>"
+ " <attribute name='label'>_About</attribute>"
+ " <attribute name='action'>app.about</attribute>"
+ " </item>"
+ " </section>"
+ " <section>"
+ " <item>"
+ " <attribute name='label'>_Quit</attribute>"
+ " <attribute name='action'>app.quit</attribute>"
+ " <attribute name='accel'>&lt;Primary&gt;q</attribute>"
+ " </item>"
+ " </section>"
+ " </menu>"
+
+ " <menu id='menubar'>"
+ " <submenu>"
+ " <attribute name='label' translatable='yes'>File</attribute>"
+ " <section>"
+ " <item>"
+ " <attribute name='label'>_Save</attribute>"
+ " <attribute name='action'>file.save</attribute>"
+ " <attribute name='accel'>&lt;Primary&gt;s</attribute>"
+ " </item>"
+ " <item>"
+ " <attribute name='label'>Export PDF</attribute>"
+ " <attribute name='action'>file.exportpdf</attribute>"
+ " </item>"
+ " </section>"
+ " </submenu>"
+ " </menu>"
+
+ "</interface>", -1, NULL);
+
+ gtk_application_set_app_menu(GTK_APPLICATION(app),
+ G_MENU_MODEL(gtk_builder_get_object(builder, "app-menu")));
+ gtk_application_set_menubar(GTK_APPLICATION(app),
+ G_MENU_MODEL(gtk_builder_get_object(builder, "menubar")));
+
+ g_object_unref(builder);
}