// Generated by gmmproc 2.66.3 -- DO NOT MODIFY! #ifndef _GLIBMM_OPTIONCONTEXT_H #define _GLIBMM_OPTIONCONTEXT_H /* Copyright (C) 2004 The glibmm Development Team * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library. If not, see . */ #include #include #include #include #ifndef DOXYGEN_SHOULD_SKIP_THIS extern "C" { typedef struct _GOptionContext GOptionContext; } #endif namespace Glib { /** %Exception class for options. */ class GLIBMM_API OptionError : public Glib::Error { public: /** @var Code UNKNOWN_OPTION * An option was not known to the parser. * This error will only be reported, if the parser hasn't been instructed * to ignore unknown options, see g_option_context_set_ignore_unknown_options(). * * @var Code BAD_VALUE * A value couldn't be parsed. * * @var Code FAILED * A OptionArgFunc callback failed. * * @enum Code * * %Error codes returned by option parsing. */ enum Code { UNKNOWN_OPTION, BAD_VALUE, FAILED }; OptionError(Code error_code, const Glib::ustring& error_message); explicit OptionError(GError* gobject); Code code() const; #ifndef DOXYGEN_SHOULD_SKIP_THIS private: static void throw_func(GError* gobject); friend GLIBMM_API void wrap_init(); // uses throw_func() #endif //DOXYGEN_SHOULD_SKIP_THIS }; /** An OptionContext defines and parses commandline options, using OptionGroup%s and \link OptionEntry option entries \endlink. * * It supports short and long commandline options, as shown in the following example: * * testtreemodel -r 1 --max-size 20 --rand --display=:1.0 -vb -- file1 file2 * * The example demonstrates a number of features of the GOption * commandline parser: * - Options can be single letters, prefixed by a single dash. * - Multiple short options can be grouped behind a single dash. * - Long options are prefixed by two consecutive dashes. * - Options can have an extra argument, which can be a number, a string or * a filename. For long options, the extra argument can be appended with * an equals sign after the option name, which is useful if the extra * argument starts with a dash, which would otherwise cause it to be * interpreted as another option. * - Non-option arguments are returned to the application as rest arguments. * - An argument consisting solely of two dashes turns off further parsing, * any remaining arguments (even those starting with a dash) are returned * to the application as rest arguments. * * The OptionContext groups options in OptionGroups, which makes it easy to * incorporate options from multiple sources. The intended use for this is * to let applications collect option groups from the libraries it uses, * add them to their OptionContext, and parse all options by a single call * to parse(). See Gtk::Main::add_gtk_option_group(), for an example. * * Add options by creating OptionEntry instances and appropriately-typed variables, * and adding them to an OptionGroup with OptionGroup::add_entry() or * OptionGroup::add_entry_filename(). The option group should then be added to * the OptionContext with set_main_group() or add_group(). * * You might find it convenient to derive your own class from OptionGroup to * contain these OptionEntry instances and member variables. * * If an option is of type string (see OptionGroup::add_entry()) or filename * (see OptionGroup::add_entry_filename()), OptionContext takes * care of converting it to the right encoding. strings are returned in * UTF-8 encoding and filenames are returned in the GLib filename encoding. * Note that this only works if setlocale() has been called before * OptionContext::parse(). * * OptionContext can automatically generate nicely formatted help output. Unless it is * explicitly turned off with set_help_enabled(), this will recognize * the --help, -?, --help-all and --help-groupname options * (where groupname is the name of an OptionGroup) and write suitable text to * stdout. * * */ class GLIBMM_API OptionContext { public: #ifndef DOXYGEN_SHOULD_SKIP_THIS using CppObjectType = OptionContext; using BaseObjectType = GOptionContext; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ private: public: /** Creates a new option context. * @param parameter_string A string which is displayed in the first line of --help output, after programname [OPTION...] */ explicit OptionContext(const Glib::ustring& parameter_string = Glib::ustring()); //Note that, unlike Glib::wrap(), this would create a second C++ instance for the same C instance, //so it should be used carefully. For instance you could not access data in a derived class via this second instance. explicit OptionContext(GOptionContext* castitem, bool take_ownership = false); //TODO?: //OptionContext(const OptionContext& other) = delete; //OptionContext& operator=(const OptionContext& other) = delete; OptionContext(OptionContext&& other) noexcept; OptionContext& operator=(OptionContext&& other) noexcept; virtual ~OptionContext(); /** Enables or disables automatic generation of `--help` output. * By default, g_option_context_parse() recognizes `--help`, `-h`, * `-?`, `--help-all` and `--help-groupname` and creates suitable * output to stdout. * * @newin{2,6} * * @param help_enabled true to enable `--help`, false to disable it. */ void set_help_enabled(bool help_enabled = true); /** Returns whether automatic `--help` generation * is turned on for @a context. See g_option_context_set_help_enabled(). * * @newin{2,6} * * @return true if automatic help generation is turned on. */ bool get_help_enabled() const; /** Sets whether to ignore unknown options or not. If an argument is * ignored, it is left in the @a argv array after parsing. By default, * g_option_context_parse() treats unknown options as error. * * This setting does not affect non-option arguments (i.e. arguments * which don't start with a dash). But note that GOption cannot reliably * determine whether a non-option belongs to a preceding unknown option. * * @newin{2,6} * * @param ignore_unknown true to ignore unknown options, false to produce * an error when unknown options are met. */ void set_ignore_unknown_options(bool ignore_unknown = true); /** Returns whether unknown options are ignored or not. See * g_option_context_set_ignore_unknown_options(). * * @newin{2,6} * * @return true if unknown options are ignored. */ bool get_ignore_unknown_options() const; /** Sets strict POSIX mode. * * By default, this mode is disabled. * * In strict POSIX mode, the first non-argument parameter encountered * (eg: filename) terminates argument processing. Remaining arguments * are treated as non-options and are not attempted to be parsed. * * If strict POSIX mode is disabled then parsing is done in the GNU way * where option arguments can be freely mixed with non-options. * * As an example, consider "ls foo -l". With GNU style parsing, this * will list "foo" in long mode. In strict POSIX style, this will list * the files named "foo" and "-l". * * It may be useful to force strict POSIX mode when creating "verb * style" command line tools. For example, the "gsettings" command line * tool supports the global option "--schemadir" as well as many * subcommands ("get", "set", etc.) which each have their own set of * arguments. Using strict POSIX mode will allow parsing the global * options up to the verb name while leaving the remaining options to be * parsed by the relevant subcommand (which can be determined by * examining the verb name, which should be present in argv[1] after * parsing). * * @newin{2,44} * * @param strict_posix The new value. */ void set_strict_posix(bool strict_posix = true); /** Returns whether strict POSIX code is enabled. * * See g_option_context_set_strict_posix() for more information. * * @newin{2,44} * * @return true if strict POSIX is enabled, false otherwise. */ bool get_strict_posix() const; /** Parses the command line arguments, recognizing options * which have been added to @a context. A side-effect of * calling this function is that g_set_prgname() will be * called. * * If the parsing is successful, any parsed arguments are * removed from the array and @a argc and @a argv are updated * accordingly. A '--' option is stripped from @a argv * unless there are unparsed options before and after it, * or some of the options after it start with '-'. In case * of an error, @a argc and @a argv are left unmodified. * * If automatic `--help` support is enabled * (see g_option_context_set_help_enabled()), and the * @a argv array contains one of the recognized help options, * this function will produce help output to stdout and * call `exit (0)`. * * Note that function depends on the [current locale][setlocale] for * automatic character set conversion of string and filename * arguments. * * @newin{2,6} * * @param argc A pointer to the number of command line arguments. * @param argv A pointer to the array of command line arguments. * @return true if the parsing was successful, * false if an error occurred. * * @throws Glib::OptionError * @throws Glib::ConvertError */ bool parse(int& argc, char**& argv); /** Parses the command line arguments. * * This function is similar to parse(int& argc, char**& argv) except that it * respects the normal memory rules when dealing with a strv instead of * assuming that the passed-in array is the argv of the main function. * In particular, strings that are removed from the arguments list will * be freed using g_free(). * * On Windows, the strings are expected to be in UTF-8. This is in * contrast to parse(int& argc, char**& argv) which expects them to be in the * system codepage, which is how they are passed as @a argv to main(). * See g_win32_get_command_line() or Gio::ApplicationCommandLine::get_arguments() * for a solution. * * This function is useful if you are trying to use OptionContext with * Gio::Application. * * @newin{2,50} * * @param[in,out] argv A pointer to the command line arguments * (which must be in UTF-8 on Windows). * @return true if the parsing was successful, * false if an error occurred. * @throw Glib::OptionError * @throw Glib::ConvertError */ bool parse(char**& argv); //g_option_context_add_main_entries(), just creates a group internally, adds them to it, and does a set_main_group() //- a group without callbacks seems to do some simple default parsing. /** Adds an OptionGroup to the context, so that parsing with context will recognize the options in the group. * Note that the group will not be copied, so it should exist for as long as the context exists. * * @param group The group to add. */ void add_group(OptionGroup& group); /** Sets an OptionGroup as the main group of the context. This has the same effect as calling add_group(), the only * difference is that the options in the main group are treated differently when generating --help output. * Note that the group will not be copied, so it should exist for as long as the context exists. * * @param group The group to add. */ void set_main_group(OptionGroup& group); //We don't need this (hopefully), and the memory management would be really awkward. //OptionGroup& get_main_group(); //const OptionGroup& get_main_group() const; /** Returns a formatted, translated help text for the given context. * To obtain the text produced by `--help`, call * `g_option_context_get_help (context, true, nullptr)`. * To obtain the text produced by `--help-all`, call * `g_option_context_get_help (context, false, nullptr)`. * To obtain the help text for an option group, call * `g_option_context_get_help (context, false, group)`. * * @newin{2,14} * * @param main_help If true, only include the main group. * @param group The OptionGroup to create help for, or nullptr. * @return A newly allocated string containing the help text. */ Glib::ustring get_help(bool main_help, const OptionGroup& group) const; /** Returns a formatted, translated help text for the given context. * * - To obtain the text produced by --help, call get_help(true). * - To obtain the text produced by --help-all, call get_help(false). * - To obtain the help text for an option group, call get_help(false, group). * * @param main_help If true, only include the main group. * @result string containing the help text. */ Glib::ustring get_help(bool main_help = true) const; GOptionContext* gobj() { return gobject_; } const GOptionContext* gobj() const { return gobject_; } /** Adds a string to be displayed in `--help` output before the list * of options. This is typically a summary of the program functionality. * * Note that the summary is translated (see * g_option_context_set_translate_func() and * g_option_context_set_translation_domain()). * * @newin{2,12} * * @param summary A string to be shown in --help output before the list of * options. */ void set_summary(const Glib::ustring& summary); /** Returns the summary. See g_option_context_set_summary(). * * @newin{2,12} * * @return The summary. */ Glib::ustring get_summary() const; /** Adds a string to be displayed in `--help` output after the list * of options. This text often includes a bug reporting address. * * Note that the summary is translated (see * g_option_context_set_translate_func()). * * @newin{2,12} * * @param description A string to be shown in --help output * after the list of options. */ void set_description(const Glib::ustring& description); /** Returns the description. See g_option_context_set_description(). * * @newin{2,12} * * @return The description. */ Glib::ustring get_description() const; /** A convenience function to use gettext() for translating * user-visible strings. * * @newin{2,12} * * @param domain The domain to use. */ void set_translation_domain(const Glib::ustring& domain); /** * This function is used to translate user-visible strings, for --help output. * The function takes an untranslated string and returns a translated string */ using SlotTranslate = sigc::slot; /** * Sets the function which is used to translate user-visible * strings, for --help output. Different groups can use different functions. * * If you are using gettext(), you only need to set the translation domain, * see set_translation_domain(). * * @newin{2,14} */ void set_translate_func (const SlotTranslate& slot); protected: GOptionContext* gobject_; bool has_ownership_; }; } // namespace Glib #endif /* _GLIBMM_OPTIONCONTEXT_H */