Commit 6006f94e authored by Albert Gräf's avatar Albert Gräf
Browse files

Add user-defined GUI presets.

This discovers user-defined GUI presets (css files) in the css
subdirectory of the gui folder, and adds them at the end of the
corresponding dropdown menu in the GUI prefs. It is a convenience
intended for users and developers who want to experiment with their own
GUI styles.

The predefined presets are still hardcoded in the dialog_prefs.html
file, and are always available (and displayed first in the dropdown
menu). If the preset saved in the prefs doesn't exist anymore (e.g.,
because the user removed its css file), it will be ignored at startup
and the default style will be used instead.

Note that this isn't entirely foolproof since the fallback may not exist
if the user also removed the default.css file. But this could also
happen previously when the css directory gets messed up, and in such a
case the user simply gets what he or she deserves.
parent 86fca6bd
......@@ -1036,9 +1036,29 @@ function autopatch_yoffset_toggle(checked) {
function gui_prefs_callback(name, show_grid, save_zoom, browser_doc, browser_path,
browser_init, autopatch_yoffset) {
var s = document.getElementById("gui_preset"),
for (i = 0; i < s.options.length; i++) {
var s = document.getElementById("gui_preset");
// ag: scan the css subdir for user-defined styles
var predefined = // built-in styles
[ "c64.css", "default.css", "dejavu.css", "extended.css",
"footgun.css", "inverted.css", "solarized.css",
"solarized_inverted.css", "strongbad.css", "subdued.css",
"vanilla.css", "vanilla_inverted.css"];
var fs = require('fs');
var base = process.platform === "darwin" ? pdgui.get_lib_dir() : ".";
var files = fs.readdirSync(base + "/css/");
files.forEach(file => {
var pos = file.lastIndexOf('.');
var ext = file.substr(pos);
if (ext === ".css" && predefined.indexOf(file) === -1) {
var base = file.substr(0, pos);
var option = document.createElement("option");
option.text = base;
for (var i = 0; i < s.options.length; i++) {
if (s.options[i].value.toLowerCase() === name.toLowerCase()) {
s.selectedIndex = i;
......@@ -5973,7 +5973,12 @@ var skin = = (function () {
return dir + preset + ".css";
set: function (name) {
preset = name;
// ag: if the preset doesn't exist (e.g., user preset that
// has disappeared), just stick to the default
var base = process.platform === "darwin" ? (lib_dir + "/") : "";
if (fs.existsSync(base + dir + name + ".css")) {
preset = name;
for (id in patchwin) {
if (patchwin.hasOwnProperty(id) && patchwin[id]) {
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment