/* * colloquium.c * * Copyright © 2013-2014 Thomas White * * This file is part of Colloquium. * * Colloquium is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "colloquium.h" #include "presentation.h" #include "narrative_window.h" struct _colloquium { GtkApplication parent_instance; }; typedef GtkApplicationClass ColloquiumClass; G_DEFINE_TYPE(Colloquium, colloquium, GTK_TYPE_APPLICATION) static void colloquium_activate(GApplication *app) { struct presentation *p; p = new_presentation(); narrative_window_new(p, app); } 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 ", 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), "© 2016 Thomas White "); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window), "Narrative-based presentation system"); gtk_about_dialog_set_license(GTK_ABOUT_DIALOG(window), "© 2016 Thomas White \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) { int i; for ( i = 0; ifinalize(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, "" " " "
" " " " _New" " app.new" " <Primary>n" " " " " " _Open" " app.open" " <Primary>o" " " " " " Preferences..." " app.prefs" " " "
" "
" " " " _About" " app.about" " " " " " _Quit" " app.quit" " <Primary>q" " " "
" "
" " " " " " File" "
" " " " _Save" " win.save" " <Primary>s" " " " " " Save As..." " win.saveas" " " "
" "
" " " " Print..." " win.print" " " " " " Export slides as PDF..." " win.exportpdf" " " "
" "
" " " " Load stylesheet" " win.loadstyle" " " " " " Save stylesheet" " win.savestyle" " " "
" "
" " " " Edit" "
" " " " Undo" " win.undo" " " " " " Redo" " win.redo" " " "
" "
" " " " Cut" " win.cut" " " " " " Copy" " win.copy" " " " " " Paste" " win.paste" " " "
" "
" " " " Delete frame" " win.deleteframe" " " " " " Delete slide" " win.deleteslide" " " "
" "
" " " " Edit stylesheet..." " win.stylesheet" " " "
" "
" " " " Insert" "
" " " " Slide" " win.slide" " " "
" "
" " " " Tools" "
" " " " Start slideshow" " win.startslideshow" " " " " " Slide notes..." " win.notes" " " " " " Presentation clock..." " win.clock" " " " " " Test card" " win.testcard" " " "
" "
" "
" "
", -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); } static void colloquium_shutdown(GApplication *app) { G_APPLICATION_CLASS(colloquium_parent_class)->shutdown(app); } static void colloquium_class_init(ColloquiumClass *class) { GApplicationClass *app_class = G_APPLICATION_CLASS(class); GObjectClass *object_class = G_OBJECT_CLASS(class); app_class->startup = colloquium_startup; app_class->shutdown = colloquium_shutdown; app_class->activate = colloquium_activate; app_class->open = colloquium_open; object_class->finalize = colloquium_finalize; } static void colloquium_init(Colloquium *app) { } static Colloquium *colloquium_new() { Colloquium *app; g_set_application_name("Colloquium"); app = g_object_new(colloquium_get_type(), "application-id", "uk.org.bitwiz.Colloquium", "flags", G_APPLICATION_HANDLES_OPEN, "register-session", TRUE, NULL); return app; } static void show_help(const char *s) { printf("Syntax: %s [options] []\n\n", s); printf( "A tiny presentation program.\n" "\n" " -h, --help Display this help message.\n" "\n"); } int main(int argc, char *argv[]) { int c; int status; Colloquium *app; /* Long options */ const struct option longopts[] = { {"help", 0, NULL, 'h'}, {0, 0, NULL, 0} }; /* Short options */ while ((c = getopt_long(argc, argv, "h", longopts, NULL)) != -1) { switch (c) { case 'h' : show_help(argv[0]); return 0; case 0 : break; default : return 1; } } g_type_init(); app = colloquium_new(); status = g_application_run(G_APPLICATION(app), argc, argv); g_object_unref(app); return status; }