zenity/src/option.c
Gama Anderson ba5ea0386d ADD gchar **extra_label TO struct ZenityData
this is done to keep the name of the extra buttons

ADD general option "extra-button" with string array as argument

	This will upon consecutive calls save the name of buttons in an array of strings

To all MODES, except notification.c and about.c ADD
  if (data->extra_label) {
    gint i=0;
    while(data->extra_label[i]!=NULL){
      gtk_dialog_add_button (GTK_DIALOG (dialog), data->extra_label[i], i);
      i++;
    }
  }

	This add the extra buttons to the dialog. The response is the number of the button

To all MODES response, except notification.c and about.c ADD
    default:
      if (response < g_strv_length(zen_data->extra_label))
        printf("%s\n",zen_data->extra_label[response]);

	This will print the button name to stdout when they are pressed

ADD question option "switch"

	This will suppress the standard "ok" and "cancel" button in question. This just wort in combination with --extra-button, otherwise error is raised.

	https://bugzilla.gnome.org/show_bug.cgi?id=118016
2015-04-21 13:00:44 +02:00

2530 lines
68 KiB
C

/*
* option.h
*
* 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., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*
* Authors: Glynn Foster <glynn.foster@sun.com>
* Lucas Rocha <lucasr@im.ufba.br>
*/
#include "config.h"
#include "option.h"
#include <time.h>
#include <stdlib.h>
#include <string.h>
/* General Options */
static gchar *zenity_general_dialog_title;
static gchar *zenity_general_window_icon;
static int zenity_general_width;
static int zenity_general_height;
static gchar *zenity_general_dialog_text;
static gchar *zenity_general_dialog_icon;
static gchar *zenity_general_separator;
static gboolean zenity_general_multiple;
static gboolean zenity_general_editable;
static gchar *zenity_general_uri;
static gboolean zenity_general_dialog_no_wrap;
static gboolean zenity_general_dialog_no_markup;
static gint zenity_general_timeout_delay;
static gchar *zenity_general_ok_button;
static gchar *zenity_general_cancel_button;
static gchar **zenity_general_extra_buttons;
static gboolean zenity_general_modal;
static gint zenity_general_attach;
static gboolean zenity_general_dialog_ellipsize;
/* Calendar Dialog Options */
static gboolean zenity_calendar_active;
static int zenity_calendar_day;
static int zenity_calendar_month;
static int zenity_calendar_year;
static gchar *zenity_calendar_date_format;
/* Entry Dialog Options */
static gboolean zenity_entry_active;
static gchar *zenity_entry_entry_text;
static gboolean zenity_entry_hide_text;
/* Error Dialog Options */
static gboolean zenity_error_active;
/* Info Dialog Options */
static gboolean zenity_info_active;
/* File Selection Dialog Options */
static gboolean zenity_file_active;
static gboolean zenity_file_directory;
static gboolean zenity_file_save;
static gboolean zenity_file_confirm_overwrite;
static gchar **zenity_file_filter;
/* List Dialog Options */
static gboolean zenity_list_active;
static gchar **zenity_list_columns;
static gboolean zenity_list_checklist;
static gboolean zenity_list_radiolist;
static gchar *zenity_list_print_column;
static gchar *zenity_list_hide_column;
static gboolean zenity_list_hide_header;
static gboolean zenity_list_imagelist;
static gboolean zenity_list_mid_search;
#ifdef HAVE_LIBNOTIFY
/* Notification Dialog Options */
static gboolean zenity_notification_active;
static gboolean zenity_notification_listen;
static gchar **zenity_notification_hints;
#endif
/* Progress Dialog Options */
static gboolean zenity_progress_active;
static int zenity_progress_percentage;
static gboolean zenity_progress_pulsate;
static gboolean zenity_progress_auto_close;
static gboolean zenity_progress_auto_kill;
static gboolean zenity_progress_no_cancel;
static gboolean zenity_progress_time_remaining;
/* Question Dialog Options */
static gboolean zenity_question_active;
static gboolean zenity_question_default_cancel;
static gboolean zenity_question_switch;
/* Text Dialog Options */
static gboolean zenity_text_active;
static gchar *zenity_text_font;
static gchar *zenity_text_checkbox;
static gboolean zenity_text_auto_scroll;
#ifdef HAVE_WEBKITGTK
static gboolean zenity_text_enable_html;
static gboolean zenity_text_no_interaction;
static gchar *zenity_text_url;
#endif
/* Warning Dialog Options */
static gboolean zenity_warning_active;
/* Scale Dialog Options */
static gboolean zenity_scale_active;
static gint zenity_scale_value;
static gint zenity_scale_min_value;
static gint zenity_scale_max_value;
static gint zenity_scale_step;
static gboolean zenity_scale_print_partial;
static gboolean zenity_scale_hide_value;
/* Color Selection Dialog Options */
static gboolean zenity_colorsel_active;
static gchar *zenity_colorsel_color;
static gboolean zenity_colorsel_show_palette;
/* Password Dialog Options */
static gboolean zenity_password_active;
static gboolean zenity_password_show_username;
/* Forms Dialog Options */
static gboolean zenity_forms_active;
static gboolean zenity_forms_show_header;
static gchar *zenity_forms_date_format;
//static gchar *zenity_forms_hide_column;
static gchar **zenity_forms_list_values;
static gchar **zenity_forms_column_values;
static gchar **zenity_forms_combo_values;
/* Miscelaneus Options */
static gboolean zenity_misc_about;
static gboolean zenity_misc_version;
static gboolean
zenity_forms_callback (const gchar *option_name,
const gchar *value,
gpointer data,
GError **error);
static GOptionEntry general_options[] = {
{
"title",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_general_dialog_title,
N_("Set the dialog title"),
N_("TITLE")
},
{
"window-icon",
'\0',
0,
G_OPTION_ARG_FILENAME,
&zenity_general_window_icon,
N_("Set the window icon"),
N_("ICONPATH")
},
{
"width",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_general_width,
N_("Set the width"),
N_("WIDTH")
},
{
"height",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_general_height,
N_("Set the height"),
N_("HEIGHT")
},
{
"timeout",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_general_timeout_delay,
N_("Set dialog timeout in seconds"),
/* Timeout for closing the dialog */
N_("TIMEOUT")
},
{
"ok-label",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_ok_button,
N_("Sets the label of the Ok button"),
N_("TEXT")
},
{
"cancel-label",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_cancel_button,
N_("Sets the label of the Cancel button"),
N_("TEXT")
},
{
"extra-button",
'\0',
0,
G_OPTION_ARG_STRING_ARRAY,
&zenity_general_extra_buttons,
N_("Add extra-button"),
N_("TEXT")
},
{
"modal",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_modal,
N_("Set the modal hint"),
NULL
},
{
"attach",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_INT,
&zenity_general_attach,
N_("Set the parent window to attach to"),
N_("WINDOW")
},
{
NULL
}
};
static GOptionEntry calendar_options[] = {
{
"calendar",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_calendar_active,
N_("Display calendar dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"day",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_calendar_day,
N_("Set the calendar day"),
N_("DAY")
},
{
"month",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_calendar_month,
N_("Set the calendar month"),
N_("MONTH")
},
{
"year",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_calendar_year,
N_("Set the calendar year"),
N_("YEAR")
},
{
"date-format",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_calendar_date_format,
N_("Set the format for the returned date"),
N_("PATTERN")
},
{
NULL
}
};
static GOptionEntry entry_options[] = {
{
"entry",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_entry_active,
N_("Display text entry dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"entry-text",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_entry_entry_text,
N_("Set the entry text"),
N_("TEXT")
},
{
"hide-text",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_entry_hide_text,
N_("Hide the entry text"),
NULL
},
{
NULL
}
};
static GOptionEntry error_options[] = {
{
"error",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_error_active,
N_("Display error dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"icon-name",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_icon,
N_("Set the dialog icon"),
N_("ICON-NAME")
},
{
"no-wrap",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_wrap,
N_("Do not enable text wrapping"),
NULL
},
{
"no-markup",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_markup,
N_("Do not enable pango markup")
},
{
"ellipsize",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_ellipsize,
N_("Enable ellipsizing in the dialog text. This fixes the high window size with long texts")
},
{
NULL
}
};
static GOptionEntry info_options[] = {
{
"info",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_info_active,
N_("Display info dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"icon-name",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_icon,
N_("Set the dialog icon"),
N_("ICON-NAME")
},
{
"no-wrap",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_wrap,
N_("Do not enable text wrapping"),
NULL
},
{
"no-markup",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_markup,
N_("Do not enable pango markup")
},
{
"ellipsize",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_ellipsize,
N_("Enable ellipsizing in the dialog text. This fixes the high window size with long texts")
},
{
NULL
}
};
static GOptionEntry file_selection_options[] = {
{
"file-selection",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_file_active,
N_("Display file selection dialog"),
NULL
},
{
"filename",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_FILENAME,
&zenity_general_uri,
N_("Set the filename"),
N_("FILENAME")
},
{
"multiple",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_multiple,
N_("Allow multiple files to be selected"),
NULL
},
{
"directory",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_file_directory,
N_("Activate directory-only selection"),
NULL
},
{
"save",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_file_save,
N_("Activate save mode"),
NULL
},
{
"separator",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_separator,
N_("Set output separator character"),
N_("SEPARATOR")
},
{
"confirm-overwrite",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_file_confirm_overwrite,
N_("Confirm file selection if filename already exists"),
NULL
},
{
"file-filter",
'\0',
0,
G_OPTION_ARG_STRING_ARRAY,
&zenity_file_filter,
N_("Sets a filename filter"),
/* Help for file-filter argument (name and patterns for file selection) */
N_("NAME | PATTERN1 PATTERN2 ..."),
},
{
NULL
}
};
static GOptionEntry list_options[] = {
{
"list",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_list_active,
N_("Display list dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"column",
'\0',
0,
G_OPTION_ARG_STRING_ARRAY,
&zenity_list_columns,
N_("Set the column header"),
N_("COLUMN")
},
{
"checklist",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_list_checklist,
N_("Use check boxes for first column"),
NULL
},
{
"radiolist",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_list_radiolist,
N_("Use radio buttons for first column"),
NULL
},
{
"imagelist",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_list_imagelist,
N_("Use an image for first column"),
NULL
},
{
"separator",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_separator,
N_("Set output separator character"),
N_("SEPARATOR")
},
{
"multiple",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_multiple,
N_("Allow multiple rows to be selected"),
NULL
},
{
"editable",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_editable,
N_("Allow changes to text"),
NULL
},
{
"print-column",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_list_print_column,
N_("Print a specific column (Default is 1. 'ALL' can be used to print all columns)"),
/* Column index number to print out on a list dialog */
N_("NUMBER")
},
{
"hide-column",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_list_hide_column,
N_("Hide a specific column"),
N_("NUMBER")
},
{
"hide-header",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_list_hide_header,
N_("Hides the column headers"),
NULL
},
{
"mid-search",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_list_mid_search,
N_("Change list default search function searching for text in the middle, not on the beginning"),
NULL
},
{
NULL
}
};
#ifdef HAVE_LIBNOTIFY
static GOptionEntry notification_options[] = {
{
"notification",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_notification_active,
N_("Display notification"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the notification text"),
N_("TEXT")
},
{
"listen",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_notification_listen,
N_("Listen for commands on stdin"),
NULL
},
{
"hint",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING_ARRAY,
&zenity_notification_hints,
N_("Set the notification hints"),
N_("TEXT")
},
{
NULL
}
};
#endif
static GOptionEntry progress_options[] = {
{
"progress",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_progress_active,
N_("Display progress indication dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"percentage",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_progress_percentage,
N_("Set initial percentage"),
N_("PERCENTAGE")
},
{
"pulsate",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_progress_pulsate,
N_("Pulsate progress bar"),
NULL
},
{
"auto-close",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_progress_auto_close,
/* xgettext: no-c-format */
N_("Dismiss the dialog when 100% has been reached"),
NULL
},
{
"auto-kill",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_progress_auto_kill,
/* xgettext: no-c-format */
N_("Kill parent process if Cancel button is pressed"),
NULL
},
{
"no-cancel",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_progress_no_cancel,
/* xgettext: no-c-format */
N_("Hide Cancel button"),
NULL
},
{
"time-remaining",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_progress_time_remaining,
N_("Estimate when progress will reach 100%"),
NULL
},
{
NULL
}
};
static GOptionEntry question_options[] = {
{
"question",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_question_active,
N_("Display question dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"icon-name",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_icon,
N_("Set the dialog icon"),
N_("ICON-NAME")
},
{
"no-wrap",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_wrap,
N_("Do not enable text wrapping"),
NULL
},
{
"no-markup",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_markup,
N_("Do not enable pango markup")
},
{
"default-cancel",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_question_default_cancel,
N_("Give cancel button focus by default"),
NULL
},
{
"ellipsize",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_ellipsize,
N_("Enable ellipsizing in the dialog text. This fixes the high window size with long texts")
},
{
"switch",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_question_switch,
N_("Supress ok and cancel buttons"),
NULL
},
{
NULL
}
};
static GOptionEntry text_options[] = {
{
"text-info",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_text_active,
N_("Display text information dialog"),
NULL
},
{
"filename",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_FILENAME,
&zenity_general_uri,
N_("Open file"),
N_("FILENAME")
},
{
"editable",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_editable,
N_("Allow changes to text"),
NULL
},
{
"font",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_text_font,
N_("Set the text font"),
N_("TEXT")
},
{
"checkbox",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_text_checkbox,
N_("Enable an I read and agree checkbox"),
N_("TEXT")
},
#ifdef HAVE_WEBKITGTK
{
"html",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_text_enable_html,
N_("Enable html support"),
NULL
},
{
"no-interaction",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_text_no_interaction,
N_("Do not enable user interaction with the WebView. Only works if you use --html option"),
NULL
},
{
"url",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_text_url,
N_("Sets an url instead of a file. Only works if you use --html option"),
N_("URL")
},
#endif
{
"auto-scroll",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_text_auto_scroll,
N_("Auto scroll the text to the end. Only when text is captured from stdin"),
NULL
},
{
NULL
}
};
static GOptionEntry warning_options[] = {
{
"warning",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_warning_active,
N_("Display warning dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"icon-name",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_icon,
N_("Set the dialog icon"),
N_("ICON-NAME")
},
{
"no-wrap",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_wrap,
N_("Do not enable text wrapping"),
NULL
},
{
"no-markup",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_no_markup,
N_("Do not enable pango markup")
},
{
"ellipsize",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_NONE,
&zenity_general_dialog_ellipsize,
N_("Enable ellipsizing in the dialog text. This fixes the high window size with long texts")
},
{
NULL
}
};
static GOptionEntry scale_options[] = {
{
"scale",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_scale_active,
N_("Display scale dialog"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"value",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_scale_value,
N_("Set initial value"),
N_("VALUE")
},
{
"min-value",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_scale_min_value,
N_("Set minimum value"),
N_("VALUE")
},
{
"max-value",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_scale_max_value,
N_("Set maximum value"),
N_("VALUE")
},
{
"step",
'\0',
0,
G_OPTION_ARG_INT,
&zenity_scale_step,
N_("Set step size"),
N_("VALUE")
},
{
"print-partial",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_scale_print_partial,
N_("Print partial values"),
NULL
},
{
"hide-value",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_scale_hide_value,
N_("Hide value"),
NULL
},
{
NULL
}
};
static GOptionEntry forms_dialog_options[] = {
{
"forms",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_forms_active,
N_("Display forms dialog"),
NULL
},
{
"add-entry",
'\0',
0,
G_OPTION_ARG_CALLBACK,
zenity_forms_callback,
N_("Add a new Entry in forms dialog"),
N_("Field name")
},
{
"add-password",
'\0',
0,
G_OPTION_ARG_CALLBACK,
zenity_forms_callback,
N_("Add a new Password Entry in forms dialog"),
N_("Field name")
},
{
"add-calendar",
'\0',
0,
G_OPTION_ARG_CALLBACK,
zenity_forms_callback,
N_("Add a new Calendar in forms dialog"),
N_("Calendar field name")
},
{
"add-list",
'\0',
0,
G_OPTION_ARG_CALLBACK,
zenity_forms_callback,
N_("Add a new List in forms dialog"),
N_("List field and header name")
},
{
"list-values",
'\0',
0,
G_OPTION_ARG_STRING_ARRAY,
&zenity_forms_list_values,
N_("List of values for List"),
N_("List of values separated by |")
},
{
"column-values",
'\0',
0,
G_OPTION_ARG_STRING_ARRAY,
&zenity_forms_column_values,
N_("List of values for columns"),
N_("List of values separated by |")
},
{
"add-combo",
'\0',
0,
G_OPTION_ARG_CALLBACK,
zenity_forms_callback,
N_("Add a new combo box in forms dialog"),
N_("Combo box field name")
},
{
"combo-values",
'\0',
0,
G_OPTION_ARG_STRING_ARRAY,
&zenity_forms_combo_values,
N_("List of values for combo box"),
N_("List of values separated by |")
},
/* TODO: Implement how to hide specifc column
{
"hide-column",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_forms_hide_column,
N_("Hide a specific column"),
N_("NUMBER")
},*/
{
"show-header",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_forms_show_header,
N_("Show the columns header"),
NULL
},
{
"text",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_dialog_text,
N_("Set the dialog text"),
N_("TEXT")
},
{
"separator",
'\0',
G_OPTION_FLAG_NOALIAS,
G_OPTION_ARG_STRING,
&zenity_general_separator,
N_("Set output separator character"),
N_("SEPARATOR")
},
{
"date-format",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_forms_date_format,
N_("Set the format for the returned date"),
N_("PATTERN")
},
{
NULL
}
};
static GOptionEntry password_dialog_options[] = {
{
"password",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_password_active,
N_("Display password dialog"),
NULL
},
{
"username",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_password_show_username,
N_("Display the username option"),
NULL
},
{
NULL
}
};
static GOptionEntry color_selection_options[] = {
{
"color-selection",
'\0',
G_OPTION_FLAG_IN_MAIN,
G_OPTION_ARG_NONE,
&zenity_colorsel_active,
N_("Display color selection dialog"),
NULL
},
{
"color",
'\0',
0,
G_OPTION_ARG_STRING,
&zenity_colorsel_color,
N_("Set the color"),
N_("VALUE")
},
{
"show-palette",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_colorsel_show_palette,
N_("Show the palette"),
NULL
},
{
NULL
}
};
static GOptionEntry miscellaneous_options[] = {
{
"about",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_misc_about,
N_("About zenity"),
NULL
},
{
"version",
'\0',
0,
G_OPTION_ARG_NONE,
&zenity_misc_version,
N_("Print version"),
NULL
},
{
NULL
}
};
static ZenityParsingOptions *results;
static GOptionContext *ctx;
static void
zenity_option_init (void) {
results = g_new0 (ZenityParsingOptions, 1);
/* Initialize the various dialog structures */
results->mode = MODE_LAST;
results->data = g_new0 (ZenityData, 1);
results->calendar_data = g_new0 (ZenityCalendarData, 1);
results->msg_data = g_new0 (ZenityMsgData, 1);
results->scale_data = g_new0 (ZenityScaleData, 1);
results->file_data = g_new0 (ZenityFileData, 1);
results->entry_data = g_new0 (ZenityEntryData, 1);
results->progress_data = g_new0 (ZenityProgressData, 1);
results->text_data = g_new0 (ZenityTextData, 1);
results->tree_data = g_new0 (ZenityTreeData, 1);
#ifdef HAVE_LIBNOTIFY
results->notification_data = g_new0 (ZenityNotificationData, 1);
#endif
results->color_data = g_new0 (ZenityColorData, 1);
results->password_data = g_new0 (ZenityPasswordData, 1);
results->forms_data = g_new0 (ZenityFormsData, 1);
}
void
zenity_option_free (void) {
if (zenity_general_dialog_title)
g_free (zenity_general_dialog_title);
if (zenity_general_window_icon)
g_free (zenity_general_window_icon);
if (zenity_general_dialog_text)
g_free (zenity_general_dialog_text);
if (zenity_general_uri)
g_free (zenity_general_uri);
g_free (zenity_general_separator);
if (zenity_general_ok_button)
g_free (zenity_general_ok_button);
if (zenity_general_cancel_button)
g_free (zenity_general_cancel_button);
if (zenity_general_extra_buttons)
g_strfreev (zenity_general_extra_buttons);
if (zenity_calendar_date_format)
g_free (zenity_calendar_date_format);
if (zenity_forms_date_format)
g_free (zenity_forms_date_format);
if (zenity_forms_list_values)
g_strfreev (zenity_forms_list_values);
if (zenity_forms_combo_values)
g_strfreev (zenity_forms_combo_values);
if (zenity_forms_column_values)
g_strfreev (zenity_forms_column_values);
// if (zenity_forms_hide_column)
// g_free (zenity_forms_hide_column);
if (zenity_entry_entry_text)
g_free (zenity_entry_entry_text);
if (zenity_file_filter)
g_strfreev (zenity_file_filter);
if (zenity_list_columns)
g_strfreev (zenity_list_columns);
if (zenity_list_print_column)
g_free (zenity_list_print_column);
if (zenity_list_hide_column)
g_free (zenity_list_hide_column);
#ifdef HAVE_LIBNOTIFY
if (zenity_notification_hints)
g_strfreev (zenity_notification_hints);
#endif
if (zenity_text_font)
g_free (zenity_text_font);
if (zenity_text_checkbox)
g_free (zenity_text_checkbox);
if (zenity_colorsel_color)
g_free (zenity_colorsel_color);
g_option_context_free (ctx);
}
static void
zenity_option_set_dialog_mode (gboolean is_active, ZenityDialogMode mode)
{
if (is_active == TRUE) {
if (results->mode == MODE_LAST)
results->mode = mode;
else
zenity_option_error (NULL, ERROR_DIALOG);
}
}
static gchar *
zenity_option_get_name (GOptionEntry *entries, gpointer arg_data)
{
int i;
for (i = 1; entries[i].long_name != NULL; i++) {
if (entries[i].arg_data == arg_data)
return (gchar *) entries[i].long_name;
}
return NULL;
}
/* Forms callback */
static gboolean
zenity_forms_callback (const gchar *option_name,
const gchar *value,
gpointer data,
GError **error)
{
ZenityFormsValue *forms_value = g_new0 (ZenityFormsValue, 1);
forms_value->option_value = g_strdup (value);
if (g_strcmp0 (option_name, "--add-entry") == 0)
forms_value->type = ZENITY_FORMS_ENTRY;
else if (g_strcmp0 (option_name, "--add-calendar") == 0)
forms_value->type = ZENITY_FORMS_CALENDAR;
else if (g_strcmp0 (option_name, "--add-password") == 0)
forms_value->type = ZENITY_FORMS_PASSWORD;
else if (g_strcmp0 (option_name, "--add-list") == 0)
forms_value->type = ZENITY_FORMS_LIST;
else if (g_strcmp0 (option_name, "--add-combo") == 0)
forms_value->type = ZENITY_FORMS_COMBO;
results->forms_data->list = g_slist_append(results->forms_data->list, forms_value);
return TRUE;
}
/* Error callback */
static void
zenity_option_error_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_error (NULL, ERROR_SYNTAX);
}
/* Pre parse callbacks set the default option values */
static gboolean
zenity_general_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_general_dialog_title = NULL;
zenity_general_window_icon = NULL;
zenity_general_width = -1;
zenity_general_height = -1;
zenity_general_dialog_text = NULL;
zenity_general_separator = g_strdup ("|");
zenity_general_multiple = FALSE;
zenity_general_editable = FALSE;
zenity_general_uri = NULL;
zenity_general_ok_button = NULL;
zenity_general_cancel_button = NULL;
zenity_general_extra_buttons = NULL;
zenity_general_dialog_no_wrap = FALSE;
zenity_general_dialog_no_markup = FALSE;
zenity_general_timeout_delay = -1;
zenity_general_modal = FALSE;
zenity_general_attach = 0;
return TRUE;
}
static gboolean
zenity_calendar_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_calendar_active = FALSE;
zenity_calendar_date_format = NULL;
zenity_calendar_day = -1;
zenity_calendar_month = -1;
zenity_calendar_year = -1;
return TRUE;
}
static gboolean
zenity_entry_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_entry_active = FALSE;
zenity_entry_entry_text = NULL;
zenity_entry_hide_text = FALSE;
return TRUE;
}
static gboolean
zenity_error_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_error_active = FALSE;
return TRUE;
}
static gboolean
zenity_info_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_info_active = FALSE;
return TRUE;
}
static gboolean
zenity_file_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_file_active = FALSE;
zenity_file_directory = FALSE;
zenity_file_save = FALSE;
zenity_file_confirm_overwrite = FALSE;
zenity_file_filter = NULL;
return TRUE;
}
static gboolean
zenity_list_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_list_active = FALSE;
zenity_list_columns = NULL;
zenity_list_checklist = FALSE;
zenity_list_radiolist = FALSE;
zenity_list_imagelist = FALSE;
zenity_list_hide_header = FALSE;
zenity_list_print_column = NULL;
zenity_list_hide_column = NULL;
zenity_list_mid_search = FALSE;
return TRUE;
}
#ifdef HAVE_LIBNOTIFY
static gboolean
zenity_notification_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_notification_active = FALSE;
zenity_notification_listen = FALSE;
return TRUE;
}
#endif
static gboolean
zenity_progress_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_progress_active = FALSE;
zenity_progress_percentage = 0;
zenity_progress_pulsate = FALSE;
zenity_progress_auto_close = FALSE;
zenity_progress_auto_kill = FALSE;
zenity_progress_no_cancel = FALSE;
zenity_progress_time_remaining = FALSE;
return TRUE;
}
static gboolean
zenity_question_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_question_active = FALSE;
zenity_question_default_cancel = FALSE;
zenity_question_switch = FALSE;
return TRUE;
}
static gboolean
zenity_text_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_text_active = FALSE;
zenity_text_font = NULL;
zenity_text_checkbox = NULL;
zenity_text_auto_scroll = FALSE;
#ifdef HAVE_WEBKITGTK
zenity_text_enable_html = FALSE;
zenity_text_no_interaction = FALSE;
zenity_text_url = NULL;
#endif
return TRUE;
}
static gboolean
zenity_warning_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_warning_active = FALSE;
return TRUE;
}
static gboolean
zenity_scale_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_scale_active = FALSE;
zenity_scale_value = 0;
zenity_scale_min_value = 0;
zenity_scale_max_value = 100;
zenity_scale_step = 1;
zenity_scale_print_partial = FALSE;
zenity_scale_hide_value = FALSE;
return TRUE;
}
static gboolean
zenity_color_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_colorsel_active = FALSE;
zenity_colorsel_color = NULL;
zenity_colorsel_show_palette = FALSE;
return TRUE;
}
static gboolean
zenity_password_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_password_active = FALSE;
zenity_password_show_username = FALSE;
return TRUE;
}
static gboolean
zenity_forms_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_forms_active = FALSE;
zenity_forms_show_header = FALSE;
zenity_forms_date_format = NULL;
// zenity_forms_hide_column = NULL;
return TRUE;
}
static gboolean
zenity_misc_pre_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_misc_about = FALSE;
zenity_misc_version = FALSE;
return TRUE;
}
/* Post parse callbacks assign the option values to
parsing result and makes some post condition tests */
static gboolean
zenity_general_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
results->data->dialog_title = zenity_general_dialog_title;
results->data->window_icon = zenity_general_window_icon;
results->data->width = zenity_general_width;
results->data->height = zenity_general_height;
results->data->timeout_delay = zenity_general_timeout_delay;
results->data->ok_label = zenity_general_ok_button;
results->data->cancel_label = zenity_general_cancel_button;
results->data->extra_label = zenity_general_extra_buttons;
results->data->modal = zenity_general_modal;
results->data->attach = zenity_general_attach;
return TRUE;
}
static gboolean
zenity_calendar_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_calendar_active, MODE_CALENDAR);
if (results->mode == MODE_CALENDAR) {
struct tm *t;
time_t current_time;
time (&current_time);
t = localtime (&current_time);
if (zenity_calendar_day < 0)
zenity_calendar_day = t->tm_mday;
if (zenity_calendar_month < 0)
zenity_calendar_month = t->tm_mon + 1;
if (zenity_calendar_year < 0)
zenity_calendar_year = t->tm_year + 1900;
results->calendar_data->dialog_text = zenity_general_dialog_text;
results->calendar_data->day = zenity_calendar_day;
results->calendar_data->month = zenity_calendar_month;
results->calendar_data->year = zenity_calendar_year;
if (zenity_calendar_date_format)
results->calendar_data->date_format = zenity_calendar_date_format;
else
results->calendar_data->date_format = g_locale_to_utf8 (nl_langinfo (D_FMT), -1, NULL, NULL, NULL);
} else {
if (zenity_calendar_day > -1)
zenity_option_error (zenity_option_get_name (calendar_options, &zenity_calendar_day),
ERROR_SUPPORT);
if (zenity_calendar_month > -1)
zenity_option_error (zenity_option_get_name (calendar_options, &zenity_calendar_month),
ERROR_SUPPORT);
if (zenity_calendar_year > -1)
zenity_option_error (zenity_option_get_name (calendar_options, &zenity_calendar_year),
ERROR_SUPPORT);
if (zenity_calendar_date_format)
zenity_option_error (zenity_option_get_name (calendar_options, &zenity_calendar_date_format),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_entry_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_entry_active, MODE_ENTRY);
if (results->mode == MODE_ENTRY) {
results->entry_data->dialog_text = zenity_general_dialog_text;
results->entry_data->entry_text = zenity_entry_entry_text;
results->entry_data->hide_text= zenity_entry_hide_text;
} else {
if (zenity_entry_entry_text)
zenity_option_error (zenity_option_get_name (entry_options, &zenity_entry_entry_text),
ERROR_SUPPORT);
if (zenity_entry_hide_text)
zenity_option_error (zenity_option_get_name (entry_options, &zenity_entry_hide_text),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_error_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_error_active, MODE_ERROR);
if (results->mode == MODE_ERROR) {
results->msg_data->dialog_text = zenity_general_dialog_text;
results->msg_data->dialog_icon = zenity_general_dialog_icon;
results->msg_data->mode = ZENITY_MSG_ERROR;
results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
}
return TRUE;
}
static gboolean
zenity_info_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_info_active, MODE_INFO);
if (results->mode == MODE_INFO) {
results->msg_data->dialog_text = zenity_general_dialog_text;
results->msg_data->dialog_icon = zenity_general_dialog_icon;
results->msg_data->mode = ZENITY_MSG_INFO;
results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
}
return TRUE;
}
static gboolean
zenity_file_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_file_active, MODE_FILE);
if (results->mode == MODE_FILE) {
results->file_data->uri = zenity_general_uri;
results->file_data->multi = zenity_general_multiple;
results->file_data->directory = zenity_file_directory;
results->file_data->save = zenity_file_save;
results->file_data->confirm_overwrite = zenity_file_confirm_overwrite;
results->file_data->separator = zenity_general_separator;
results->file_data->filter = zenity_file_filter;
} else {
if (zenity_file_directory)
zenity_option_error (zenity_option_get_name (file_selection_options, &zenity_file_directory),
ERROR_SUPPORT);
if (zenity_file_save)
zenity_option_error (zenity_option_get_name (file_selection_options, &zenity_file_save),
ERROR_SUPPORT);
if (zenity_file_filter)
zenity_option_error (zenity_option_get_name (file_selection_options, &zenity_file_filter),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_list_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
int i = 0;
gchar *column;
zenity_option_set_dialog_mode (zenity_list_active, MODE_LIST);
if (results->mode == MODE_LIST) {
results->tree_data->dialog_text = zenity_general_dialog_text;
if (zenity_list_columns) {
column = zenity_list_columns[0];
while (column != NULL) {
results->tree_data->columns = g_slist_append (results->tree_data->columns, column);
column = zenity_list_columns[++i];
}
}
results->tree_data->checkbox = zenity_list_checklist;
results->tree_data->radiobox = zenity_list_radiolist;
results->tree_data->imagebox = zenity_list_imagelist;
results->tree_data->multi = zenity_general_multiple;
results->tree_data->editable = zenity_general_editable;
results->tree_data->print_column = zenity_list_print_column;
results->tree_data->hide_column = zenity_list_hide_column;
results->tree_data->hide_header = zenity_list_hide_header;
results->tree_data->separator = zenity_general_separator;
results->tree_data->mid_search = zenity_list_mid_search;
} else {
if (zenity_list_columns)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_columns),
ERROR_SUPPORT);
if (zenity_list_checklist)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_checklist),
ERROR_SUPPORT);
if (zenity_list_radiolist)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_radiolist),
ERROR_SUPPORT);
if (zenity_list_imagelist)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_imagelist),
ERROR_SUPPORT);
if (zenity_list_print_column)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_print_column),
ERROR_SUPPORT);
if (zenity_list_hide_column)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_hide_column),
ERROR_SUPPORT);
if (zenity_list_hide_header)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_hide_header),
ERROR_SUPPORT);
if (zenity_list_mid_search)
zenity_option_error (zenity_option_get_name (list_options, &zenity_list_mid_search),
ERROR_SUPPORT);
}
return TRUE;
}
#ifdef HAVE_LIBNOTIFY
static gboolean
zenity_notification_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_notification_active, MODE_NOTIFICATION);
if (results->mode == MODE_NOTIFICATION) {
results->notification_data->notification_text = zenity_general_dialog_text;
results->notification_data->listen = zenity_notification_listen;
results->notification_data->notification_hints = zenity_notification_hints;
} else {
if (zenity_notification_listen)
zenity_option_error (zenity_option_get_name (notification_options, &zenity_notification_listen),
ERROR_SUPPORT);
}
return TRUE;
}
#endif
static gboolean
zenity_progress_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_progress_active, MODE_PROGRESS);
if (results->mode == MODE_PROGRESS) {
results->progress_data->dialog_text = zenity_general_dialog_text;
results->progress_data->pulsate = zenity_progress_pulsate;
results->progress_data->autoclose = zenity_progress_auto_close;
results->progress_data->autokill = zenity_progress_auto_kill;
results->progress_data->percentage = zenity_progress_percentage;
results->progress_data->no_cancel = zenity_progress_no_cancel;
results->progress_data->time_remaining = zenity_progress_time_remaining;
} else {
if (zenity_progress_pulsate)
zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_pulsate),
ERROR_SUPPORT);
if (zenity_progress_percentage)
zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_percentage),
ERROR_SUPPORT);
if (zenity_progress_auto_close)
zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_auto_close),
ERROR_SUPPORT);
if (zenity_progress_auto_kill)
zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_auto_kill),
ERROR_SUPPORT);
if (zenity_progress_no_cancel)
zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_no_cancel),
ERROR_SUPPORT);
if (zenity_progress_time_remaining)
zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_time_remaining),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_question_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_question_active, MODE_QUESTION);
if (results->mode == MODE_QUESTION) {
results->msg_data->dialog_text = zenity_general_dialog_text;
results->msg_data->dialog_icon = zenity_general_dialog_icon;
if(zenity_question_switch)
results->msg_data->mode = ZENITY_MSG_SWITCH;
else
results->msg_data->mode = ZENITY_MSG_QUESTION;
results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
results->msg_data->default_cancel = zenity_question_default_cancel;
}
if(zenity_question_switch && zenity_general_extra_buttons==NULL)
zenity_option_error (zenity_option_get_name (question_options, &zenity_question_switch), ERROR_SYNTAX);
return TRUE;
}
static gboolean
zenity_text_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_text_active, MODE_TEXTINFO);
if (results->mode == MODE_TEXTINFO) {
results->text_data->uri = zenity_general_uri;
results->text_data->editable = zenity_general_editable;
results->text_data->no_wrap = zenity_general_dialog_no_wrap;
results->text_data->font = zenity_text_font;
results->text_data->checkbox = zenity_text_checkbox;
results->text_data->auto_scroll = zenity_text_auto_scroll;
#ifdef HAVE_WEBKITGTK
results->text_data->html = zenity_text_enable_html;
results->text_data->no_interaction = zenity_text_no_interaction;
results->text_data->url = zenity_text_url;
#endif
} else {
if (zenity_text_font)
zenity_option_error (zenity_option_get_name (text_options, &zenity_text_font),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_warning_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_warning_active, MODE_WARNING);
if (results->mode == MODE_WARNING) {
results->msg_data->dialog_text = zenity_general_dialog_text;
results->msg_data->dialog_icon = zenity_general_dialog_icon;
results->msg_data->mode = ZENITY_MSG_WARNING;
results->msg_data->no_wrap = zenity_general_dialog_no_wrap;
results->msg_data->no_markup = zenity_general_dialog_no_markup;
results->msg_data->ellipsize = zenity_general_dialog_ellipsize;
}
return TRUE;
}
static gboolean
zenity_scale_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_scale_active, MODE_SCALE);
if (results->mode == MODE_SCALE) {
results->scale_data->dialog_text = zenity_general_dialog_text;
results->scale_data->value = zenity_scale_value;
results->scale_data->min_value = zenity_scale_min_value;
results->scale_data->max_value = zenity_scale_max_value;
results->scale_data->step = zenity_scale_step;
results->scale_data->print_partial = zenity_scale_print_partial;
results->scale_data->hide_value = zenity_scale_hide_value;
}
return TRUE;
}
static gboolean
zenity_color_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_colorsel_active, MODE_COLOR);
if (results->mode == MODE_COLOR) {
results->color_data->color = zenity_colorsel_color;
results->color_data->show_palette = zenity_colorsel_show_palette;
} else {
if (zenity_colorsel_color)
zenity_option_error (zenity_option_get_name(color_selection_options, &zenity_colorsel_color),
ERROR_SUPPORT);
if (zenity_colorsel_show_palette)
zenity_option_error (zenity_option_get_name(color_selection_options, &zenity_colorsel_show_palette),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_forms_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
gchar *values;
int i = 0;
zenity_option_set_dialog_mode (zenity_forms_active, MODE_FORMS);
if (results->mode == MODE_FORMS) {
results->forms_data->dialog_text = zenity_general_dialog_text;
results->forms_data->separator = zenity_general_separator;
// results->forms_data->hide_column = zenity_forms_hide_column;
results->forms_data->show_header = zenity_forms_show_header;
if (zenity_forms_list_values) {
values = zenity_forms_list_values[0];
while (values != NULL) {
results->forms_data->list_values = g_slist_append (results->forms_data->list_values, values);
values = zenity_forms_list_values[++i];
}
}
if (zenity_forms_column_values) {
i = 0;
values = zenity_forms_column_values[0];
while (values != NULL) {
results->forms_data->column_values = g_slist_append (results->forms_data->column_values, values);
values = zenity_forms_list_values[++i];
}
} else
results->forms_data->column_values = g_slist_append (NULL, "column");
if (zenity_forms_combo_values) {
i = 0;
values = zenity_forms_combo_values[0];
while (values != NULL) {
results->forms_data->combo_values = g_slist_append (results->forms_data->combo_values, values);
values = zenity_forms_combo_values[++i];
}
}
if (zenity_forms_date_format)
results->forms_data->date_format = zenity_forms_date_format;
else
results->forms_data->date_format = g_locale_to_utf8 (nl_langinfo (D_FMT), -1, NULL, NULL, NULL);
} else {
if (zenity_forms_date_format)
zenity_option_error (zenity_option_get_name (forms_dialog_options, &zenity_forms_date_format),
ERROR_SUPPORT);
if (zenity_forms_list_values)
zenity_option_error (zenity_option_get_name (forms_dialog_options, &zenity_forms_list_values),
ERROR_SUPPORT);
// if (zenity_forms_hide_column)
// zenity_option_error (zenity_option_get_name (forms_dialog_options, &zenity_forms_hide_column),
// ERROR_SUPPORT);
if (zenity_forms_column_values)
zenity_option_error (zenity_option_get_name (forms_dialog_options, &zenity_forms_column_values),
ERROR_SUPPORT);
if (zenity_forms_combo_values)
zenity_option_error (zenity_option_get_name (forms_dialog_options, &zenity_forms_combo_values),
ERROR_SUPPORT);
if (zenity_forms_show_header)
zenity_option_error (zenity_option_get_name (forms_dialog_options, &zenity_forms_show_header),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_password_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_password_active, MODE_PASSWORD);
if (results->mode == MODE_PASSWORD) {
results->password_data->username = zenity_password_show_username;
} else {
if (zenity_password_show_username)
zenity_option_error (zenity_option_get_name(password_dialog_options, &zenity_password_show_username),
ERROR_SUPPORT);
}
return TRUE;
}
static gboolean
zenity_misc_post_callback (GOptionContext *context,
GOptionGroup *group,
gpointer data,
GError **error)
{
zenity_option_set_dialog_mode (zenity_misc_about, MODE_ABOUT);
zenity_option_set_dialog_mode (zenity_misc_version, MODE_VERSION);
return TRUE;
}
static GOptionContext *
zenity_create_context (void)
{
GOptionContext *tmp_ctx;
GOptionGroup *a_group;
tmp_ctx = g_option_context_new(NULL);
/* Adds general option entries */
a_group = g_option_group_new("general",
N_("General options"),
N_("Show general options"), NULL, NULL);
g_option_group_add_entries(a_group, general_options);
g_option_group_set_parse_hooks (a_group,
zenity_general_pre_callback, zenity_general_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds calendar option entries */
a_group = g_option_group_new("calendar",
N_("Calendar options"),
N_("Show calendar options"), NULL, NULL);
g_option_group_add_entries(a_group, calendar_options);
g_option_group_set_parse_hooks (a_group,
zenity_calendar_pre_callback, zenity_calendar_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds entry option entries */
a_group = g_option_group_new("entry",
N_("Text entry options"),
N_("Show text entry options"), NULL, NULL);
g_option_group_add_entries(a_group, entry_options);
g_option_group_set_parse_hooks (a_group,
zenity_entry_pre_callback, zenity_entry_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds error option entries */
a_group = g_option_group_new("error",
N_("Error options"),
N_("Show error options"), NULL, NULL);
g_option_group_add_entries(a_group, error_options);
g_option_group_set_parse_hooks (a_group,
zenity_error_pre_callback, zenity_error_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds info option entries */
a_group = g_option_group_new("info",
N_("Info options"),
N_("Show info options"), NULL, NULL);
g_option_group_add_entries(a_group, info_options);
g_option_group_set_parse_hooks (a_group,
zenity_info_pre_callback, zenity_info_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds file selection option entries */
a_group = g_option_group_new("file-selection",
N_("File selection options"),
N_("Show file selection options"), NULL, NULL);
g_option_group_add_entries(a_group, file_selection_options);
g_option_group_set_parse_hooks (a_group,
zenity_file_pre_callback, zenity_file_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds list option entries */
a_group = g_option_group_new("list",
N_("List options"),
N_("Show list options"), NULL, NULL);
g_option_group_add_entries(a_group, list_options);
g_option_group_set_parse_hooks (a_group,
zenity_list_pre_callback, zenity_list_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
#ifdef HAVE_LIBNOTIFY
/* Adds notification option entries */
a_group = g_option_group_new("notification",
N_("Notification icon options"),
N_("Show notification icon options"), NULL, NULL);
g_option_group_add_entries(a_group, notification_options);
g_option_group_set_parse_hooks (a_group,
zenity_notification_pre_callback, zenity_notification_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
#endif
/* Adds progress option entries */
a_group = g_option_group_new("progress",
N_("Progress options"),
N_("Show progress options"), NULL, NULL);
g_option_group_add_entries(a_group, progress_options);
g_option_group_set_parse_hooks (a_group,
zenity_progress_pre_callback, zenity_progress_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds question option entries */
a_group = g_option_group_new("question",
N_("Question options"),
N_("Show question options"), NULL, NULL);
g_option_group_add_entries(a_group, question_options);
g_option_group_set_parse_hooks (a_group,
zenity_question_pre_callback, zenity_question_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds warning option entries */
a_group = g_option_group_new("warning",
N_("Warning options"),
N_("Show warning options"), NULL, NULL);
g_option_group_add_entries(a_group, warning_options);
g_option_group_set_parse_hooks (a_group,
zenity_warning_pre_callback, zenity_warning_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds scale option entries */
a_group = g_option_group_new("scale",
N_("Scale options"),
N_("Show scale options"), NULL, NULL);
g_option_group_add_entries(a_group, scale_options);
g_option_group_set_parse_hooks (a_group,
zenity_scale_pre_callback, zenity_scale_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds text option entries */
a_group = g_option_group_new("text-info",
N_("Text information options"),
N_("Show text information options"), NULL, NULL);
g_option_group_add_entries(a_group, text_options);
g_option_group_set_parse_hooks (a_group,
zenity_text_pre_callback, zenity_text_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds color selection option entries */
a_group = g_option_group_new("color-selection",
N_("Color selection options"),
N_("Show color selection options"), NULL, NULL);
g_option_group_add_entries(a_group, color_selection_options);
g_option_group_set_parse_hooks (a_group,
zenity_color_pre_callback, zenity_color_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds password dialog option entries */
a_group = g_option_group_new("password",
N_("Password dialog options"),
N_("Show password dialog options"), NULL, NULL);
g_option_group_add_entries (a_group, password_dialog_options);
g_option_group_set_parse_hooks (a_group,
zenity_password_pre_callback, zenity_password_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds forms dialog option entries */
a_group = g_option_group_new("forms",
N_("Forms dialog options"),
N_("Show forms dialog options"), NULL, NULL);
g_option_group_add_entries (a_group, forms_dialog_options);
g_option_group_set_parse_hooks (a_group,
zenity_forms_pre_callback, zenity_forms_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds misc option entries */
a_group = g_option_group_new("misc",
N_("Miscellaneous options"),
N_("Show miscellaneous options"), NULL, NULL);
g_option_group_add_entries(a_group, miscellaneous_options);
g_option_group_set_parse_hooks (a_group,
zenity_misc_pre_callback, zenity_misc_post_callback);
g_option_group_set_error_hook (a_group, zenity_option_error_callback);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Adds gtk option entries */
a_group = gtk_get_option_group(TRUE);
g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
g_option_context_add_group(tmp_ctx, a_group);
/* Enable help options */
g_option_context_set_help_enabled (tmp_ctx, TRUE);
g_option_context_set_ignore_unknown_options (tmp_ctx, FALSE);
return tmp_ctx;
}
void
zenity_option_error (gchar *string, ZenityError error)
{
switch (error) {
case ERROR_SYNTAX:
g_printerr (_("This option is not available. Please see --help for all possible usages.\n"));
zenity_option_free ();
exit (-1);
case ERROR_SUPPORT:
g_printerr (_("--%s is not supported for this dialog\n"), string);
zenity_option_free ();
exit (-1);
case ERROR_DIALOG:
g_printerr (_("Two or more dialog options specified\n"));
zenity_option_free ();
exit (-1);
default:
return;
}
}
ZenityParsingOptions *
zenity_option_parse (gint argc, gchar **argv)
{
GError *error = NULL;
zenity_option_init ();
ctx = zenity_create_context ();
g_option_context_parse (ctx, &argc, &argv, &error);
/* Some option pointer a shared among more than one group and don't
have their post condition tested. This test is done here. */
if (zenity_general_dialog_text)
if (results->mode == MODE_ABOUT || results->mode == MODE_VERSION)
zenity_option_error (zenity_option_get_name (calendar_options, &zenity_general_dialog_text), ERROR_SUPPORT);
if (strcmp (zenity_general_separator, "|") != 0)
if (results->mode != MODE_LIST && results->mode != MODE_FILE && results->mode != MODE_FORMS)
zenity_option_error (zenity_option_get_name (list_options, &zenity_general_separator), ERROR_SUPPORT);
if (zenity_general_multiple)
if (results->mode != MODE_FILE && results->mode != MODE_LIST)
zenity_option_error (zenity_option_get_name (list_options, &zenity_general_multiple), ERROR_SUPPORT);
if (zenity_general_editable)
if (results->mode != MODE_TEXTINFO && results->mode != MODE_LIST)
zenity_option_error (zenity_option_get_name (list_options, &zenity_general_editable), ERROR_SUPPORT);
if (zenity_general_uri)
if (results->mode != MODE_FILE && results->mode != MODE_TEXTINFO)
zenity_option_error (zenity_option_get_name (text_options, &zenity_general_uri), ERROR_SUPPORT);
if (zenity_general_ok_button)
if(results->mode == MODE_FILE)
zenity_option_error (zenity_option_get_name (general_options, &zenity_general_ok_button), ERROR_SUPPORT);
if (zenity_general_cancel_button)
if(results->mode == MODE_FILE || results->mode == MODE_ERROR || results->mode == MODE_WARNING || results->mode == MODE_INFO)
zenity_option_error (zenity_option_get_name (general_options, &zenity_general_cancel_button), ERROR_SUPPORT);
if (zenity_general_dialog_no_wrap)
if (results->mode != MODE_INFO && results->mode != MODE_ERROR && results->mode != MODE_QUESTION && results->mode != MODE_WARNING && results->mode != MODE_TEXTINFO)
zenity_option_error (zenity_option_get_name (text_options, &zenity_general_dialog_no_wrap), ERROR_SUPPORT);
if (zenity_general_dialog_ellipsize)
if (results->mode != MODE_INFO && results->mode != MODE_ERROR && results->mode != MODE_QUESTION && results->mode != MODE_WARNING)
zenity_option_error (zenity_option_get_name (text_options, &zenity_general_dialog_ellipsize), ERROR_SUPPORT);
return results;
}