Example #1
0
double options_lookup_double(Options *options, const char *key)
{
	char *str_val = options_lookup_string(options, key);
	double result = 0;

	if (str_val)
	{
		char *endptr;

		errno = 0;
		result = strtod(str_val, &endptr);
		if (endptr == str_val)
		{
			dlg_warning(NULL,
			  _("Unable to convert value '%s' for key '%s' in '%s' to number"),
				str_val, key, options->name);
		}
		else if (errno)
		{
			dlg_warning(NULL,
				_("Unable to convert value '%s' for key '%s' in '%s' "
						"to number: %s"),
				str_val, key, options->name, strerror(errno));
		}
	}
	return result;
}
Example #2
0
static void colour_scheme_parse_palette(Options * opts, ColourScheme * scheme)
{
    if (!scheme->palette)
        scheme->palette = g_new0(GdkRGBA, 24);
    scheme->palette_size = options_lookup_int(opts, "palette_size");
    switch (scheme->palette_size)
    {
        case 8:
        case 16:
        case 24:
            /* No problem */
            break;
        case -1:
            /* Not given, probably fine */
            scheme->palette_size = 0;
            break;
        case 0:
            break;
        default:
            dlg_warning(NULL,
                _("Invalid palette size %d in colour scheme %s"),
                scheme->palette_size, options_get_leafname(opts));
            scheme->palette_size = 0;
            break;
    }
    colour_scheme_parse_palette_range(opts, scheme, 0, scheme->palette_size);
}
Example #3
0
gboolean options_file_copy_to_user_dir(GtkWindow *window,
                                       const char *src_path, const char *family, const char *new_leaf)
{
    char *new_path = options_file_filename_for_saving(family, NULL);
    char *buffer = NULL;
    gsize size;
    GError *error = NULL;
    gboolean success = FALSE;

    if (!g_file_test(new_path, G_FILE_TEST_IS_DIR))
    {
        if (g_mkdir_with_parents(new_path, 0755) == -1)
        {
            dlg_warning(window, _("Unable to create directory '%s'"), new_path);
            return FALSE;
        }
    }
    g_free(new_path);
    new_path = options_file_filename_for_saving(family, new_leaf, NULL);
    if (g_file_test(src_path, G_FILE_TEST_IS_REGULAR))
    {
        if (g_file_get_contents(src_path, &buffer, &size, &error))
            success = g_file_set_contents(new_path, buffer, size, &error);
        g_free(buffer);
    }
    else
    {
        const char *content = "";
        if (!strcmp(family, "Profiles"))
            content = "[roxterm profile]";
        else if (!strcmp(family, "Colours"))
            content = "[roxterm colour scheme]";
        else if (!strcmp(family, "Shortcuts"))
            content = "[roxterm shortcuts scheme]";
        success = g_file_set_contents(new_path, content, -1, &error);
    }
    if (!success)
    {
        dlg_warning(window, _("Unable to copy profile/scheme: %s"),
                    error && error->message ? error->message : _("unknown reason"));
    }
    if (error)
        g_error_free(error);
    g_free(new_path);
    return success;
}
Example #4
0
static gboolean colour_scheme_lookup_and_parse(Options * opts,
        ColourScheme * scheme, GdkRGBA * colour, const char *key,
        const char *default_colour, gboolean warn)
{
    char *name = options_lookup_string(opts, key);
    gboolean result = TRUE;

    if (!name || !colour_scheme_parse(scheme, colour, name))
    {
        if (warn && name)
        {
            dlg_warning(NULL,
                    _("Unable to parse colour '%s' for %s in scheme %s"),
                    name, key, options_get_leafname(opts));
        }
        if (default_colour)
            result = colour_scheme_parse(scheme, colour, default_colour);
        else
            result = FALSE;
    }
    if (name)
        g_free(name);
    return result;
}
Example #5
0
ColourGUI *colourgui_open(const char *scheme_name, GdkScreen *scrn)
{
    ColourGUI *cg;
    char *title;
    static char const *build_objs[] = { "Colour_Scheme_Editor", NULL };
    GError *error = NULL;

    if (!colourgui_being_edited)
    {
        colourgui_being_edited = g_hash_table_new_full(g_str_hash, g_str_equal,
                g_free, NULL);
    }

    cg = g_hash_table_lookup(colourgui_being_edited, scheme_name);
    if (cg)
    {
        if (scrn)
            gtk_window_set_screen(GTK_WINDOW(cg->widget), scrn);
        gtk_window_present(GTK_WINDOW(cg->widget));
        return cg;
    }

    cg = g_new0(ColourGUI, 1);
    cg->scheme_name = g_strdup(scheme_name);
    cg->capp.options = colour_scheme_lookup_and_ref(scheme_name);
    cg->orig_scheme = options_copy(cg->capp.options);

    cg->capp.builder = gtk_builder_new();
    if (!gtk_builder_add_objects_from_file(cg->capp.builder,
            capplet_get_ui_filename(),
            (char **) build_objs, &error))
    {
        g_error(_("Unable to load 'Colour_Scheme_Editor' from UI defs: %s"),
                error->message);
    }
    cg->widget = GTK_WIDGET(gtk_builder_get_object(cg->capp.builder,
            "Colour_Scheme_Editor"));
    if (scrn)
        gtk_window_set_screen(GTK_WINDOW(cg->widget), scrn);
    title = g_strdup_printf(_("ROXTerm Colour Scheme \"%s\""), scheme_name);
    gtk_window_set_title(GTK_WINDOW(cg->widget), title);
    g_free(title);

    if (!cg->orig_scheme)
    {
        dlg_warning(GTK_WINDOW(cg->widget),
                _("Unable to back up colour scheme to revert"));
        gtk_widget_set_sensitive(
                GTK_WIDGET(gtk_builder_get_object(cg->capp.builder, "revert")),
                FALSE);
    }

    g_hash_table_insert(colourgui_being_edited, g_strdup(scheme_name), cg);

    colourgui_fill_in_dialog(cg, TRUE);
    gtk_builder_connect_signals(cg->capp.builder, cg);

    gtk_widget_show(cg->widget);

    capplet_inc_windows();

    configlet_lock_colour_schemes();

    return cg;
}