X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fmain.c;h=a36e9410a345557f6c7e9a8ece90b0a15b5aec3d;hb=fe76b9c2c49a0dd33aad5dfe3f03a056e6f96c21;hp=002d576ac5c1d5bbd1d55283e56a81a2260280e1;hpb=ee08e284e9722ddc0fb785c5f9af09bcb6fa8a47;p=pspp-builds.git
diff --git a/src/ui/gui/main.c b/src/ui/gui/main.c
index 002d576a..a36e9410 100644
--- a/src/ui/gui/main.c
+++ b/src/ui/gui/main.c
@@ -1,10 +1,9 @@
-/*
- PSPPIRE --- A Graphical User Interface for PSPP
+/* PSPPIRE - a graphical user interface for PSPP.
Copyright (C) 2004, 2005, 2006 Free Software Foundation
- This program is free software; you can redistribute it and/or modify
+ This program 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 2 of the License, or
+ 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,
@@ -13,23 +12,56 @@
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, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
+ along with this program. If not, see . */
+#include
#include
#include "psppire.h"
#include "progname.h"
#include
-#include
+#include
+#include
+#include
+#include
#include
#include
-static gboolean parse_command_line (int *argc, char ***argv, gchar **filename,
- gboolean *show_splash, GError **err);
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+const char *argp_program_version = version;
+const char *argp_program_bug_address = PACKAGE_BUGREPORT;
+
+/* Arguments to be interpreted before the X server gets initialised */
+
+static const struct argp_option startup_options [] =
+ {
+ {"no-splash", 'q', 0, 0, N_("Don't show the splash screen"), 0 },
+ { 0, 0, 0, 0, 0, 0 }
+ };
+
+static error_t
+parse_startup_opts (int key, char *arg, struct argp_state *state)
+{
+ gboolean *showsplash = state->input;
+
+ switch (key)
+ {
+ case 'q':
+ *showsplash = FALSE;
+ break;
+ default:
+ return ARGP_ERR_UNKNOWN;
+ }
+ return 0;
+}
+
+static const struct argp startup_argp = {startup_options, parse_startup_opts, 0, 0, 0, 0, 0};
+
+
static GtkWidget *
create_splash_window (void)
@@ -44,7 +76,10 @@ create_splash_window (void)
gtk_window_set_position (GTK_WINDOW (splash),
GTK_WIN_POS_CENTER_ALWAYS);
- image = gtk_image_new_from_file (PKGDATADIR "/splash.png");
+ gtk_window_set_type_hint (GTK_WINDOW (splash),
+ GDK_WINDOW_TYPE_HINT_SPLASHSCREEN);
+
+ image = gtk_image_new_from_file (relocate (PKGDATADIR "/splash.png"));
gtk_container_add (GTK_CONTAINER (splash), image);
@@ -57,7 +92,7 @@ static gboolean
hide_splash_window (gpointer data)
{
GtkWidget *splash = data;
- gtk_widget_hide (splash);
+ gtk_widget_destroy (splash);
gtk_window_set_auto_startup_notification (TRUE);
return FALSE;
}
@@ -70,13 +105,22 @@ quit_one_loop (gpointer data)
return FALSE;
}
+struct initialisation_parameters
+{
+ int argc;
+ char **argv;
+ GtkWidget *splash_window;
+ struct command_line_processor *clp;
+};
+
static gboolean
run_inner_loop (gpointer data)
{
- initialize ();
+ struct initialisation_parameters *ip = data;
+ initialize (ip->clp, ip->argc, ip->argv);
- g_timeout_add (500, hide_splash_window, data);
+ g_timeout_add (500, hide_splash_window, ip->splash_window);
gtk_main ();
@@ -90,11 +134,11 @@ run_inner_loop (gpointer data)
int
main (int argc, char *argv[])
{
- GtkWidget *splash_window;
- gchar *filename = 0;
+ struct command_line_processor *clp ;
+ struct initialisation_parameters init_p;
gboolean show_splash = TRUE;
- GError *err = 0;
- gchar *vers;
+
+ const gchar *vers;
set_program_name (argv[0]);
@@ -108,78 +152,32 @@ main (int argc, char *argv[])
GTK_MINOR_VERSION,
GTK_MICRO_VERSION)) )
{
- g_critical (vers);
+ g_warning (vers);
}
- /* Deal with options like --version, --help etc */
- if ( ! parse_command_line (&argc, &argv, &filename, &show_splash, &err) )
- {
- g_clear_error (&err);
- return 0;
- }
+ clp = command_line_processor_create (_("PSPPIRE --- A user interface for PSPP"), "[ DATA-FILE ]", 0);
+
+ command_line_processor_add_options (clp, &startup_argp, _("Miscellaneous options:"), &show_splash);
+ command_line_processor_add_options (clp, &post_init_argp,
+ _("Options affecting syntax and behavior:"), NULL);
+ command_line_processor_add_options (clp, &non_option_argp, NULL, NULL);
+
+ command_line_processor_parse (clp, argc, argv);
gdk_init (&argc, &argv);
- splash_window = create_splash_window ();
+ init_p.splash_window = create_splash_window ();
+ init_p.argc = argc;
+ init_p.argv = argv;
+ init_p.clp = clp;
+
if ( show_splash )
- gtk_widget_show (splash_window);
+ gtk_widget_show (init_p.splash_window);
- gtk_idle_add (quit_one_loop, 0);
+ g_idle_add (quit_one_loop, 0);
- gtk_quit_add (0, run_inner_loop, splash_window);
+ gtk_quit_add (0, run_inner_loop, &init_p);
gtk_main ();
-
return 0;
}
-
-
-/* Parses the command line specified by ARGC and ARGV as received by
- main (). Returns true if normal execution should proceed,
- false if the command-line indicates that PSPP should exit. */
-static gboolean
-parse_command_line (int *argc, char ***argv, gchar **filename,
- gboolean *show_splash, GError **err)
-{
-
- static struct option long_options[] =
- {
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'V'},
- {"no-splash", no_argument, NULL, 'q'},
- {0, 0, 0, 0},
- };
-
- int c;
-
- for (;;)
- {
- c = getopt_long (*argc, *argv, "hVq", long_options, NULL);
- if (c == -1)
- break;
-
- switch (c)
- {
- case 'h':
- g_print ("Usage: psppire {|--help|--version|--no-splash}\n");
- return FALSE;
- case 'V':
- g_print (version);
- g_print ("\n");
- g_print (legal);
- return FALSE;
- case 'q':
- *show_splash = FALSE;
- break;
- default:
- return FALSE;
- }
- }
-
- if ( optind < *argc)
- {
- *filename = (*argv)[optind];
- }
-
- return TRUE;
-}