mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-10 19:00:08 +00:00
gtk-builder-tool: Expand the preview command
Make the preview command parse options properly, turn the ID into an --id=ID option, and add a --css=FILE option that allows to specify a css file to use for previewing. This is useful for e.g. previewing the reftest .ui files with their corresponding .css.
This commit is contained in:
parent
bc882a679d
commit
073f8bc44b
@ -31,6 +31,7 @@
|
||||
<cmdsynopsis>
|
||||
<command>gtk-builder-tool</command>
|
||||
<arg choice="opt"><replaceable>COMMAND</replaceable></arg>
|
||||
<arg choice="opt" rep="repeat"><replaceable>OPTION</replaceable></arg>
|
||||
<arg choice="plain"><replaceable>FILE</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
@ -63,9 +64,24 @@
|
||||
<listitem><para>Lists all the named objects that are created in the .ui file.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>preview</option> <arg choice="opt"><replaceable>ID</replaceable></arg></term>
|
||||
<listitem><para>Preview the object with the given ID. If ID is not specified,
|
||||
try to find a suitable object to preview.</para></listitem>
|
||||
<term><option>preview</option></term>
|
||||
<listitem><para>Preview the .ui file. This command accepts options
|
||||
to specify the ID of an object and a .css file to use.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>Preview Options</title>
|
||||
<para>The <option>preview</option> command accepts the following options:</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><option>--id=<arg choice="plain">ID</arg></option></term>
|
||||
<listitem><para>The ID of the object to preview. If not specified,
|
||||
gtk-builder-tool will choose a suitable object on its own.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>--css=<arg choice="plain">FILE</arg></option></term>
|
||||
<listitem><para>Load style information from the given .css file.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
@ -799,14 +799,31 @@ set_window_title (GtkWindow *window,
|
||||
}
|
||||
|
||||
static void
|
||||
do_preview (const char *filename,
|
||||
const char *id)
|
||||
preview_file (const char *filename,
|
||||
const char *id,
|
||||
const char *cssfile)
|
||||
{
|
||||
GtkBuilder *builder;
|
||||
GError *error = NULL;
|
||||
GObject *object;
|
||||
GtkWidget *window;
|
||||
|
||||
if (cssfile)
|
||||
{
|
||||
GtkCssProvider *provider;
|
||||
|
||||
provider = gtk_css_provider_new ();
|
||||
if (!gtk_css_provider_load_from_path (provider, cssfile, &error))
|
||||
{
|
||||
g_printerr ("%s\n", error->message);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
|
||||
GTK_STYLE_PROVIDER (provider),
|
||||
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
}
|
||||
|
||||
builder = gtk_builder_new ();
|
||||
if (!gtk_builder_add_from_file (builder, filename, &error))
|
||||
{
|
||||
@ -885,6 +902,53 @@ do_preview (const char *filename,
|
||||
g_object_unref (builder);
|
||||
}
|
||||
|
||||
static void
|
||||
do_preview (int *argc,
|
||||
const char ***argv)
|
||||
{
|
||||
GOptionContext *context;
|
||||
char *id = NULL;
|
||||
char *css = NULL;
|
||||
char **filenames = NULL;
|
||||
const GOptionEntry entries[] = {
|
||||
{ "id", 0, 0, G_OPTION_ARG_STRING, &id, NULL, NULL },
|
||||
{ "css", 0, 0, G_OPTION_ARG_FILENAME, &css, NULL, NULL },
|
||||
{ G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &filenames, NULL, NULL }
|
||||
};
|
||||
GError *error = NULL;
|
||||
|
||||
context = g_option_context_new (NULL);
|
||||
g_option_context_set_help_enabled (context, FALSE);
|
||||
g_option_context_add_main_entries (context, entries, NULL);
|
||||
|
||||
if (!g_option_context_parse (context, argc, (char ***)argv, &error))
|
||||
{
|
||||
g_printerr ("%s\n", error->message);
|
||||
g_error_free (error);
|
||||
exit (1);
|
||||
}
|
||||
|
||||
g_option_context_free (context);
|
||||
|
||||
if (filenames == NULL)
|
||||
{
|
||||
g_printerr ("No .ui file specified\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (g_strv_length (filenames) > 1)
|
||||
{
|
||||
g_printerr ("Can only preview a single .ui file\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
preview_file (filenames[0], id, css);
|
||||
|
||||
g_strfreev (filenames);
|
||||
g_free (id);
|
||||
g_free (css);
|
||||
}
|
||||
|
||||
static void
|
||||
usage (void)
|
||||
{
|
||||
@ -892,17 +956,21 @@ usage (void)
|
||||
" gtk-builder-tool [COMMAND] FILE\n"
|
||||
"\n"
|
||||
"Commands:\n"
|
||||
" validate Validate the file\n"
|
||||
" simplify Simplify the file\n"
|
||||
" enumerate List all named objects\n"
|
||||
" preview [ID] Preview the named object\n"
|
||||
" validate Validate the file\n"
|
||||
" simplify Simplify the file\n"
|
||||
" enumerate List all named objects\n"
|
||||
" preview [OPTIONS] Preview the file\n"
|
||||
"\n"
|
||||
"Preview Options:\n"
|
||||
" --id=ID Preview only the named object\n"
|
||||
" --css=FILE Use style from CSS file\n"
|
||||
"\n"
|
||||
"Perform various tasks on GtkBuilder .ui files.\n"));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
main (int argc, const char *argv[])
|
||||
{
|
||||
g_set_prgname ("gtk-builder-tool");
|
||||
|
||||
@ -916,29 +984,17 @@ main (int argc, char *argv[])
|
||||
if (strcmp (argv[2], "--help") == 0)
|
||||
usage ();
|
||||
|
||||
if (strcmp (argv[1], "validate") == 0)
|
||||
do_validate (argv[2]);
|
||||
else if (strcmp (argv[1], "simplify") == 0)
|
||||
do_simplify (argv[2]);
|
||||
else if (strcmp (argv[1], "enumerate") == 0)
|
||||
do_enumerate (argv[2]);
|
||||
else if (strcmp (argv[1], "preview") == 0)
|
||||
{
|
||||
const char *filename, *id;
|
||||
argv++;
|
||||
argc--;
|
||||
|
||||
if (argc > 3)
|
||||
{
|
||||
id = argv[2];
|
||||
filename = argv[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
id = NULL;
|
||||
filename = argv[2];
|
||||
}
|
||||
|
||||
do_preview (filename, id);
|
||||
}
|
||||
if (strcmp (argv[0], "validate") == 0)
|
||||
do_validate (argv[1]);
|
||||
else if (strcmp (argv[0], "simplify") == 0)
|
||||
do_simplify (argv[1]);
|
||||
else if (strcmp (argv[0], "enumerate") == 0)
|
||||
do_enumerate (argv[1]);
|
||||
else if (strcmp (argv[0], "preview") == 0)
|
||||
do_preview (&argc, &argv);
|
||||
else
|
||||
usage ();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user