summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorGlynn Foster <gman@src.gnome.org>2003-01-03 13:26:04 +0000
committerGlynn Foster <gman@src.gnome.org>2003-01-03 13:26:04 +0000
commit48c1564ac5ef431e9111606e40488d04a96f3059 (patch)
tree85ae5d577ecfd41f8692fedc15d50bfe9cbd5b15 /src/main.c
Initial revision
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c834
1 files changed, 834 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..cf17d7d
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,834 @@
+/*
+ * main.c
+ *
+ * Copyright (C) 2002 Sun Microsystems, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Glynn Foster <glynn.foster@sun.com>
+ */
+
+#include "config.h"
+#include "zenity.h"
+#include <popt.h>
+
+typedef enum {
+ MODE_CALENDAR,
+ MODE_ENTRY,
+ MODE_ERROR,
+ MODE_FILE,
+ MODE_LIST,
+ MODE_PROGRESS,
+ MODE_QUESTION,
+ MODE_TEXTINFO,
+ MODE_WARNING,
+ MODE_LAST
+} ZenityDialogMode;
+
+typedef struct {
+ ZenityDialogMode mode;
+ ZenityData *data;
+
+ ZenityCalendarData *calendar_data;
+ ZenityMsgData *msg_data;
+ ZenityFileData *file_data;
+ ZenityEntryData *entry_data;
+ ZenityProgressData *progress_data;
+ ZenityTextData *text_data;
+ ZenityTreeData *tree_data;
+} ZenityParsingOptions;
+
+enum {
+ OPTION_CALENDAR = 1,
+ OPTION_ENTRY,
+ OPTION_ERROR,
+ OPTION_FILE,
+ OPTION_LIST,
+ OPTION_PROGRESS,
+ OPTION_QUESTION,
+ OPTION_TEXTINFO,
+ OPTION_WARNING,
+ OPTION_TITLE,
+ OPTION_ICON,
+ OPTION_CALENDARTEXT,
+ OPTION_DAY,
+ OPTION_MONTH,
+ OPTION_YEAR,
+ OPTION_ENTRYTEXT,
+ OPTION_INPUTTEXT,
+ OPTION_HIDETEXT,
+ OPTION_ERRORTEXT,
+ OPTION_FILENAME,
+ OPTION_COLUMN,
+ OPTION_CHECKLIST,
+ OPTION_RADIOLIST,
+ OPTION_PROGRESSTEXT,
+ OPTION_PERCENTAGE,
+ OPTION_QUESTIONTEXT,
+ OPTION_TEXTFILE,
+ OPTION_WARNINGTEXT,
+ OPTION_ABOUT,
+ OPTION_VERSION,
+ OPTION_LAST,
+};
+
+static void zenity_parse_options_callback (poptContext ctx,
+ enum poptCallbackReason reason,
+ const struct poptOption *opt,
+ const char *arg,
+ void *data);
+
+struct poptOption options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "calendar",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_CALENDAR,
+ N_("Display calendar dialog"),
+ NULL
+ },
+ {
+ "entry",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_ENTRY,
+ N_("Display text entry dialog"),
+ NULL
+ },
+ {
+ "error",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_ERROR,
+ N_("Display error dialog"),
+ NULL
+ },
+ {
+ "file-selection",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_FILE,
+ N_("Display file selection dialog"),
+ NULL
+ },
+ {
+ "list",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_LIST,
+ N_("Display list dialog"),
+ NULL
+ },
+ {
+ "progress",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_PROGRESS,
+ N_("Display progress indication dialog"),
+ NULL
+ },
+ {
+ "question",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_QUESTION,
+ N_("Display question dialog"),
+ NULL
+ },
+ {
+ "text-info",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_TEXTINFO,
+ N_("Display text information dialog"),
+ NULL
+ },
+ {
+ "warning",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_WARNING,
+ N_("Display warning dialog"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption general_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "title",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_TITLE,
+ N_("Set the dialog title"),
+ N_("TITLE")
+ },
+ {
+ "window-icon",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_ICON,
+ N_("Set the window icon"),
+ N_("ICONPATH")
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption calendar_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "text",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_CALENDARTEXT,
+ N_("Set the dialog text"),
+ NULL
+ },
+ {
+ "day",
+ '\0',
+ POPT_ARG_INT,
+ NULL,
+ OPTION_DAY,
+ N_("Set the calendar day"),
+ NULL
+ },
+ {
+ "month",
+ '\0',
+ POPT_ARG_INT,
+ NULL,
+ OPTION_MONTH,
+ N_("Set the calendar month"),
+ NULL
+ },
+ {
+ "year",
+ '\0',
+ POPT_ARG_INT,
+ NULL,
+ OPTION_YEAR,
+ N_("Set the calendar year"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption entry_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "text",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_ENTRYTEXT,
+ N_("Set the dialog text"),
+ NULL
+ },
+ {
+ "entry-text",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_INPUTTEXT,
+ N_("Set the entry text"),
+ NULL
+ },
+ {
+ "hide-text",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_HIDETEXT,
+ N_("Hide the entry text"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption error_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "text",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_ERRORTEXT,
+ N_("Set the dialog text"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption file_selection_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "filename",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_FILENAME,
+ N_("Set the filename"),
+ N_("FILENAME")
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption list_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "column",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_COLUMN,
+ N_("Set the column header"),
+ NULL
+ },
+ {
+ "checklist",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_CHECKLIST,
+ N_("Use check boxes for first column"),
+ NULL
+ },
+ {
+ "radiolist",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_RADIOLIST,
+ N_("Use radio buttons for first column"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption progress_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "text",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_PROGRESSTEXT,
+ N_("Set the dialog text"),
+ NULL
+ },
+ {
+ "percentage",
+ '\0',
+ POPT_ARG_INT,
+ NULL,
+ OPTION_PERCENTAGE,
+ N_("Set initial percentage"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption question_options[] = {
+ {
+ "text",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_QUESTIONTEXT,
+ N_("Set the dialog text"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption text_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "filename",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_TEXTFILE,
+ N_("Open file"),
+ N_("FILENAME")
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption warning_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "text",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_WARNINGTEXT,
+ N_("Set the dialog text"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption miscellaneous_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_CALLBACK | POPT_CBFLAG_POST,
+ zenity_parse_options_callback,
+ 0,
+ NULL,
+ NULL
+ },
+ {
+ "about",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_ABOUT,
+ N_("About zenity"),
+ NULL
+ },
+ {
+ "version",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_VERSION,
+ N_("Print version"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+struct poptOption application_options[] = {
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ options,
+ 0,
+ N_("Dialog options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ general_options,
+ 0,
+ N_("General options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ calendar_options,
+ 0,
+ N_("Calendar options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ entry_options,
+ 0,
+ N_("Text entry options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ error_options,
+ 0,
+ N_("Error options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ file_selection_options,
+ 0,
+ N_("File selection options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ list_options,
+ 0,
+ N_("List options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ progress_options,
+ 0,
+ N_("Progress options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ question_options,
+ 0,
+ N_("Question options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ text_options,
+ 0,
+ N_("Text options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ warning_options,
+ 0,
+ N_("Warning options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ miscellaneous_options,
+ 0,
+ N_("Miscellaneous options"),
+ NULL
+ },
+ {
+ NULL,
+ '\0',
+ POPT_ARG_INCLUDE_TABLE,
+ poptHelpOptions,
+ 0,
+ N_("Help options"),
+ NULL
+ },
+ POPT_TABLEEND
+};
+
+ZenityParsingOptions *results;
+
+gint
+main (gint argc, gchar **argv) {
+ poptContext ctx;
+ int nextopt;
+ ZenityData *general;
+ ZenityCalendarData *cal_data;
+
+ bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR);
+ bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+ textdomain(GETTEXT_PACKAGE);
+
+ results = g_new0 (ZenityParsingOptions, 1);
+ results->data = g_new0 (ZenityData, 1);
+ results->calendar_data = g_new0 (ZenityCalendarData, 1);
+ results->msg_data = g_new0 (ZenityMsgData, 1);
+ results->file_data = g_new0 (ZenityFileData, 1);
+ results->entry_data = g_new0 (ZenityEntryData, 1);
+ results->entry_data->visible = TRUE;
+ results->progress_data = g_new0 (ZenityProgressData, 1);
+ results->text_data = g_new0 (ZenityTextData, 1);
+ results->tree_data = g_new0 (ZenityTreeData, 1);
+ results->tree_data->checkbox = FALSE;
+ results->tree_data->radiobox = FALSE;
+
+ /* FIXME: popt doesn't like passing stuff through data
+ * but it doesn't seem to cope with the data that I try
+ * to pass in, not quite sure why though. If someone knows
+ * what I'm doing wrong, we could probably put this back:
+ * options[0].descrip = (void*) results;
+ */
+
+ ctx = poptGetContext ("zenity", argc, (const char **)argv, application_options, 0);
+ poptSetOtherOptionHelp(ctx, "[OPTIONS] ...");
+ poptReadDefaultConfig(ctx, TRUE);
+ while((nextopt = poptGetNextOpt(ctx)) > 0)
+ /*nothing*/;
+
+ gtk_init (&argc, &argv);
+
+ if (argc < 2)
+ exit (1);
+
+ switch (results->mode) {
+ case MODE_CALENDAR:
+ zenity_calendar (results->data, results->calendar_data);
+ break;
+ case MODE_ENTRY:
+ zenity_entry (results->data, results->entry_data);
+ break;
+ case MODE_ERROR:
+ case MODE_QUESTION:
+ case MODE_WARNING:
+ zenity_msg (results->data, results->msg_data);
+ break;
+ case MODE_FILE:
+ zenity_fileselection (results->data, results->file_data);
+ break;
+ case MODE_LIST:
+ zenity_tree (results->data, results->tree_data);
+ break;
+ case MODE_PROGRESS:
+ zenity_progress (results->data, results->progress_data);
+ break;
+ case MODE_TEXTINFO:
+ zenity_text (results->data, results->text_data);
+ break;
+ default:
+ break;
+ }
+
+ poptFreeContext(ctx);
+ exit (0);
+}
+
+static
+void zenity_parse_options_callback (poptContext ctx,
+ enum poptCallbackReason reason,
+ const struct poptOption *opt,
+ const char *arg,
+ void *data)
+{
+ gint i = 0;
+ if (reason == POPT_CALLBACK_REASON_POST) {
+ return;
+ }
+ else if (reason != POPT_CALLBACK_REASON_OPTION)
+ return;
+
+ switch (opt->val & POPT_ARG_MASK) {
+
+ case OPTION_CALENDAR:
+ results->mode = MODE_CALENDAR;
+ break;
+ case OPTION_ENTRY:
+ results->mode = MODE_ENTRY;
+ break;
+ case OPTION_ERROR:
+ results->mode = MODE_ERROR;
+ results->msg_data->mode = ZENITY_MSG_ERROR;
+ break;
+ case OPTION_FILE:
+ results->mode = MODE_FILE;
+ break;
+ case OPTION_LIST:
+ results->mode = MODE_LIST;
+ break;
+ case OPTION_PROGRESS:
+ results->mode = MODE_PROGRESS;
+ break;
+ case OPTION_QUESTION:
+ results->mode = MODE_QUESTION;
+ results->msg_data->mode = ZENITY_MSG_QUESTION;
+ break;
+ case OPTION_TEXTINFO:
+ results->mode = MODE_TEXTINFO;
+ break;
+ case OPTION_WARNING:
+ results->mode = MODE_WARNING;
+ results->msg_data->mode = ZENITY_MSG_WARNING;
+ break;
+ case OPTION_TITLE:
+ results->data->dialog_title = g_strdup (arg);
+ break;
+ case OPTION_ICON:
+ results->data->window_icon = g_strdup (arg);
+ break;
+ case OPTION_CALENDARTEXT:
+ case OPTION_ENTRYTEXT:
+ case OPTION_ERRORTEXT:
+ case OPTION_QUESTIONTEXT:
+ case OPTION_PROGRESSTEXT:
+ case OPTION_WARNINGTEXT:
+ switch (results->mode) {
+ case MODE_CALENDAR:
+ results->calendar_data->dialog_text = g_strdup (arg);
+ break;
+ case MODE_ENTRY:
+ results->entry_data->dialog_text = g_strdup (arg);
+ break;
+ case MODE_ERROR:
+ case MODE_QUESTION:
+ case MODE_WARNING:
+ results->msg_data->dialog_text = g_strdup (arg);
+ break;
+ case MODE_PROGRESS:
+ results->progress_data->dialog_text = g_strdup (arg);
+ break;
+ default:
+ break;
+ }
+ break;
+ case OPTION_DAY:
+ results->calendar_data->day = atoi (arg);
+ break;
+ case OPTION_MONTH:
+ results->calendar_data->month = atoi (arg);
+ break;
+ case OPTION_YEAR:
+ results->calendar_data->year = atoi (arg);
+ break;
+ case OPTION_INPUTTEXT:
+ results->entry_data->entry_text = g_strdup (arg);
+ break;
+ case OPTION_HIDETEXT:
+ results->entry_data->visible = FALSE;
+ break;
+ case OPTION_FILENAME:
+ case OPTION_TEXTFILE:
+ switch (results->mode) {
+ case MODE_FILE:
+ results->file_data->uri = g_strdup (arg);
+ break;
+ case MODE_TEXTINFO:
+ results->text_data->uri = g_strdup (arg);
+ break;
+ default:
+ break;
+ }
+ break;
+ case OPTION_COLUMN:
+ break;
+ case OPTION_CHECKLIST:
+ results->tree_data->checkbox = TRUE;
+ break;
+ case OPTION_RADIOLIST:
+ results->tree_data->radiobox = TRUE;
+ break;
+ case OPTION_PERCENTAGE:
+ results->progress_data->percentage = atoi (arg);
+ break;
+ case OPTION_ABOUT:
+ results->mode = MODE_LAST;
+ break;
+ case OPTION_VERSION:
+ results->mode = MODE_LAST;
+ g_print ("%s\n", VERSION);
+ break;
+ default:
+ break;
+ }
+}